mirror of
https://github.com/SpaceVim/SpaceVim.git
synced 2025-03-23 17:49:57 +08:00
Improve notify api (#4355)
This commit is contained in:
parent
7a6b6ff659
commit
2d6bfd39a9
@ -5,7 +5,7 @@
|
|||||||
" URL: https://spacevim.org
|
" URL: https://spacevim.org
|
||||||
" License: GPLv3
|
" License: GPLv3
|
||||||
"=============================================================================
|
"=============================================================================
|
||||||
|
scriptencoding utf-8
|
||||||
|
|
||||||
let s:self = {}
|
let s:self = {}
|
||||||
let s:self.__dict = SpaceVim#api#import('data#dict')
|
let s:self.__dict = SpaceVim#api#import('data#dict')
|
||||||
@ -88,6 +88,10 @@ function! s:self.win_config(winid, opt) abort
|
|||||||
return id
|
return id
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
|
function! s:self.get_width(winid) abort
|
||||||
|
return nvim_win_get_width(a:winid)
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
|
||||||
function! s:self.win_close(id, focuce) abort
|
function! s:self.win_close(id, focuce) abort
|
||||||
return nvim_win_close(a:id, a:focuce)
|
return nvim_win_close(a:id, a:focuce)
|
||||||
|
@ -1,13 +1,13 @@
|
|||||||
"=============================================================================
|
"=============================================================================
|
||||||
" notification.vim --- notification api
|
" notify.vim --- notify api
|
||||||
" Copyright (c) 2016-2020 Wang Shidong & Contributors
|
" Copyright (c) 2016-2020 Wang Shidong & Contributors
|
||||||
" Author: Wang Shidong < wsdjeg@outlook.com >
|
" Author: Wang Shidong < wsdjeg@outlook.com >
|
||||||
" URL: https://spacevim.org
|
" URL: https://spacevim.org
|
||||||
" License: GPLv3
|
" License: GPLv3
|
||||||
"=============================================================================
|
"=============================================================================
|
||||||
|
scriptencoding utf-8
|
||||||
|
|
||||||
|
" Global values, this can be used between different notify
|
||||||
" Global values, this can be used between different notification
|
|
||||||
|
|
||||||
let s:notifications = {}
|
let s:notifications = {}
|
||||||
|
|
||||||
@ -15,6 +15,7 @@ let s:notifications = {}
|
|||||||
|
|
||||||
let s:self = {}
|
let s:self = {}
|
||||||
let s:self.message = []
|
let s:self.message = []
|
||||||
|
let s:self.notification_width = 1
|
||||||
let s:self.winid = -1
|
let s:self.winid = -1
|
||||||
let s:self.bufnr = -1
|
let s:self.bufnr = -1
|
||||||
let s:self.border = {}
|
let s:self.border = {}
|
||||||
@ -25,6 +26,15 @@ let s:self.title = ''
|
|||||||
let s:self.win_is_open = 0
|
let s:self.win_is_open = 0
|
||||||
let s:self.timeout = 3000
|
let s:self.timeout = 3000
|
||||||
let s:self.hashkey = ''
|
let s:self.hashkey = ''
|
||||||
|
let s:self.config = {}
|
||||||
|
let s:self.config.icons = {
|
||||||
|
\ 'ERROR' : '',
|
||||||
|
\ 'WARN' : '',
|
||||||
|
\ 'INFO' : '',
|
||||||
|
\ 'DEBUG' : '',
|
||||||
|
\ 'TRACE' : '✎',
|
||||||
|
\ }
|
||||||
|
let s:self.config.title = 'SpaceVim'
|
||||||
|
|
||||||
if has('nvim')
|
if has('nvim')
|
||||||
let s:self.__floating = SpaceVim#api#import('neovim#floating')
|
let s:self.__floating = SpaceVim#api#import('neovim#floating')
|
||||||
@ -49,7 +59,18 @@ function! s:self.draw_border(title, width, height) abort
|
|||||||
return lines
|
return lines
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! s:self.string_compose(target, pos, source)
|
function! s:self.increase_window(...) abort
|
||||||
|
" let self.notification_width = self.__floating.get_width(self.winid)
|
||||||
|
if self.notification_width <= &columns * 0.3
|
||||||
|
let self.notification_width += min([float2nr((&columns * 0.3 - self.notification_width) * 1 / 10), float2nr(&columns * 0.3)])
|
||||||
|
call self.__buffer.buf_set_lines(self.border.bufnr, 0 , -1, 0,
|
||||||
|
\ self.draw_border(self.title, self.notification_width, len(self.message)))
|
||||||
|
call self.redraw_windows()
|
||||||
|
call timer_start(30, self.increase_window, {'repeat' : 1})
|
||||||
|
endif
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! s:self.string_compose(target, pos, source) abort
|
||||||
if a:source == ''
|
if a:source == ''
|
||||||
return a:target
|
return a:target
|
||||||
endif
|
endif
|
||||||
@ -72,25 +93,25 @@ function! s:self.string_compose(target, pos, source)
|
|||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
|
|
||||||
function! s:self.close(...) dict
|
function! s:self.close(...) abort
|
||||||
if !empty(self.message)
|
if !empty(self.message)
|
||||||
call remove(self.message, 0)
|
call remove(self.message, 0)
|
||||||
let self.notification_width = max(map(deepcopy(self.message), 'strwidth(v:val)'))
|
|
||||||
endif
|
endif
|
||||||
if len(self.message) == 0
|
if len(self.message) == 0
|
||||||
noautocmd call self.__floating.win_close(self.border.winid, v:true)
|
noautocmd call self.__floating.win_close(self.border.winid, v:true)
|
||||||
noautocmd call self.__floating.win_close(self.winid, v:true)
|
noautocmd call self.__floating.win_close(self.winid, v:true)
|
||||||
call remove(s:notifications, self.hashkey)
|
call remove(s:notifications, self.hashkey)
|
||||||
let self.win_is_open = v:false
|
let self.win_is_open = v:false
|
||||||
|
let self.notification_width = 1
|
||||||
endif
|
endif
|
||||||
for hashkey in keys(s:notifications)
|
for hashkey in keys(s:notifications)
|
||||||
call s:notifications[hashkey].redraw_windows()
|
call s:notifications[hashkey].redraw_windows()
|
||||||
endfor
|
endfor
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! s:self.notification(msg, color) abort
|
function! s:self.notify(msg, ...) abort
|
||||||
call add(self.message, a:msg)
|
call add(self.message, a:msg)
|
||||||
let self.notification_color = a:color
|
let self.notification_color = get(a:000, 0, 'Normal')
|
||||||
if !bufexists(self.border.bufnr)
|
if !bufexists(self.border.bufnr)
|
||||||
let self.border.bufnr = self.__buffer.create_buf(0, 0)
|
let self.border.bufnr = self.__buffer.create_buf(0, 0)
|
||||||
endif
|
endif
|
||||||
@ -102,12 +123,15 @@ function! s:self.notification(msg, color) abort
|
|||||||
endif
|
endif
|
||||||
call self.redraw_windows()
|
call self.redraw_windows()
|
||||||
call setbufvar(self.bufnr, '&number', 0)
|
call setbufvar(self.bufnr, '&number', 0)
|
||||||
|
call setbufvar(self.bufnr, '&cursorline', 0)
|
||||||
call setbufvar(self.bufnr, '&relativenumber', 0)
|
call setbufvar(self.bufnr, '&relativenumber', 0)
|
||||||
call setbufvar(self.bufnr, '&buftype', 'nofile')
|
call setbufvar(self.bufnr, '&buftype', 'nofile')
|
||||||
call setbufvar(self.border.bufnr, '&number', 0)
|
call setbufvar(self.border.bufnr, '&number', 0)
|
||||||
call setbufvar(self.border.bufnr, '&relativenumber', 0)
|
call setbufvar(self.border.bufnr, '&relativenumber', 0)
|
||||||
call setbufvar(self.border.bufnr, '&buftype', 'nofile')
|
call setbufvar(self.border.bufnr, '&buftype', 'nofile')
|
||||||
|
call setbufvar(self.border.bufnr, '&cursorline', 0)
|
||||||
call extend(s:notifications, {self.hashkey : self})
|
call extend(s:notifications, {self.hashkey : self})
|
||||||
|
call self.increase_window()
|
||||||
call timer_start(self.timeout, self.close, {'repeat' : 1})
|
call timer_start(self.timeout, self.close, {'repeat' : 1})
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
@ -115,7 +139,6 @@ function! s:self.redraw_windows() abort
|
|||||||
if empty(self.message)
|
if empty(self.message)
|
||||||
return
|
return
|
||||||
endif
|
endif
|
||||||
let self.notification_width = max(map(deepcopy(self.message), 'strwidth(v:val)'))
|
|
||||||
let self.begin_row = 2
|
let self.begin_row = 2
|
||||||
for hashkey in keys(s:notifications)
|
for hashkey in keys(s:notifications)
|
||||||
if hashkey !=# self.hashkey
|
if hashkey !=# self.hashkey
|
||||||
@ -127,55 +150,57 @@ function! s:self.redraw_windows() abort
|
|||||||
if self.win_is_open
|
if self.win_is_open
|
||||||
call self.__floating.win_config(self.winid,
|
call self.__floating.win_config(self.winid,
|
||||||
\ {
|
\ {
|
||||||
\ 'relative': 'editor',
|
\ 'relative': 'editor',
|
||||||
\ 'width' : self.notification_width,
|
\ 'width' : self.notification_width,
|
||||||
\ 'height' : len(self.message),
|
\ 'height' : len(self.message),
|
||||||
\ 'row': self.begin_row + 1,
|
\ 'row': self.begin_row + 1,
|
||||||
\ 'highlight' : self.notification_color,
|
\ 'highlight' : self.notification_color,
|
||||||
\ 'focusable' : v:false,
|
\ 'focusable' : v:false,
|
||||||
\ 'col': &columns - self.notification_width - 1,
|
\ 'col': &columns - self.notification_width - 1,
|
||||||
\ })
|
\ })
|
||||||
call self.__floating.win_config(self.border.winid,
|
call self.__floating.win_config(self.border.winid,
|
||||||
\ {
|
\ {
|
||||||
\ 'relative': 'editor',
|
\ 'relative': 'editor',
|
||||||
\ 'width' : self.notification_width + 2,
|
\ 'width' : self.notification_width + 2,
|
||||||
\ 'height' : len(self.message) + 2,
|
\ 'height' : len(self.message) + 2,
|
||||||
\ 'row': self.begin_row,
|
\ 'row': self.begin_row,
|
||||||
\ 'col': &columns - self.notification_width - 2,
|
\ 'col': &columns - self.notification_width - 2,
|
||||||
\ 'highlight' : 'VertSplit',
|
\ 'highlight' : 'VertSplit',
|
||||||
\ 'focusable' : v:false,
|
\ 'focusable' : v:false,
|
||||||
\ })
|
\ })
|
||||||
else
|
else
|
||||||
let self.winid = self.__floating.open_win(self.bufnr, v:false,
|
let self.winid = self.__floating.open_win(self.bufnr, v:false,
|
||||||
\ {
|
\ {
|
||||||
\ 'relative': 'editor',
|
\ 'relative': 'editor',
|
||||||
\ 'width' : self.notification_width,
|
\ 'width' : self.notification_width,
|
||||||
\ 'height' : len(self.message),
|
\ 'height' : len(self.message),
|
||||||
\ 'row': self.begin_row + 1,
|
\ 'row': self.begin_row + 1,
|
||||||
\ 'highlight' : self.notification_color,
|
\ 'highlight' : self.notification_color,
|
||||||
\ 'col': &columns - self.notification_width - 1,
|
\ 'col': &columns - self.notification_width - 1,
|
||||||
\ 'focusable' : v:false,
|
\ 'focusable' : v:false,
|
||||||
\ })
|
\ })
|
||||||
let self.border.winid = self.__floating.open_win(self.border.bufnr, v:false,
|
let self.border.winid = self.__floating.open_win(self.border.bufnr, v:false,
|
||||||
\ {
|
\ {
|
||||||
\ 'relative': 'editor',
|
\ 'relative': 'editor',
|
||||||
\ 'width' : self.notification_width + 2,
|
\ 'width' : self.notification_width + 2,
|
||||||
\ 'height' : len(self.message) + 2,
|
\ 'height' : len(self.message) + 2,
|
||||||
\ 'row': self.begin_row,
|
\ 'row': self.begin_row,
|
||||||
\ 'col': &columns - self.notification_width - 2,
|
\ 'col': &columns - self.notification_width - 2,
|
||||||
\ 'highlight' : 'VertSplit',
|
\ 'highlight' : 'VertSplit',
|
||||||
\ 'focusable' : v:false,
|
\ 'focusable' : v:false,
|
||||||
\ })
|
\ })
|
||||||
let self.win_is_open = v:true
|
let self.win_is_open = v:true
|
||||||
endif
|
endif
|
||||||
call self.__buffer.buf_set_lines(self.border.bufnr, 0 , -1, 0, self.draw_border(self.title, self.notification_width, len(self.message)))
|
call self.__buffer.buf_set_lines(self.border.bufnr, 0 , -1, 0,
|
||||||
|
\ self.draw_border(self.title, self.notification_width, len(self.message)))
|
||||||
call self.__buffer.buf_set_lines(self.bufnr, 0 , -1, 0, self.message)
|
call self.__buffer.buf_set_lines(self.bufnr, 0 , -1, 0, self.message)
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
|
|
||||||
function! SpaceVim#api#notification#get()
|
function! SpaceVim#api#notify#get() abort
|
||||||
|
|
||||||
return deepcopy(s:self)
|
return deepcopy(s:self)
|
||||||
|
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
|
|
@ -54,7 +54,7 @@ let s:flutter_job_id = 0
|
|||||||
let s:dart_sdk_path = ''
|
let s:dart_sdk_path = ''
|
||||||
|
|
||||||
let s:JOB = SpaceVim#api#import('job')
|
let s:JOB = SpaceVim#api#import('job')
|
||||||
let s:NOTI =SpaceVim#api#import('notification')
|
let s:NOTI = SpaceVim#api#import('notify')
|
||||||
|
|
||||||
function! SpaceVim#layers#lang#dart#plugins() abort
|
function! SpaceVim#layers#lang#dart#plugins() abort
|
||||||
let plugins = []
|
let plugins = []
|
||||||
@ -129,7 +129,7 @@ endfunction
|
|||||||
|
|
||||||
function! s:flutter_run() abort
|
function! s:flutter_run() abort
|
||||||
if s:flutter_job_id ==# 0
|
if s:flutter_job_id ==# 0
|
||||||
" call s:NOTI.notification(line, 'Normal')
|
" call s:NOTI.notify(line, 'Normal')
|
||||||
let s:flutter_job_id = s:JOB.start('flutter run',
|
let s:flutter_job_id = s:JOB.start('flutter run',
|
||||||
\ {
|
\ {
|
||||||
\ 'on_stdout' : function('s:on_stdout'),
|
\ 'on_stdout' : function('s:on_stdout'),
|
||||||
@ -142,7 +142,7 @@ endfunction
|
|||||||
|
|
||||||
function! s:flutter_send(msg) abort
|
function! s:flutter_send(msg) abort
|
||||||
if s:flutter_job_id ==# 0
|
if s:flutter_job_id ==# 0
|
||||||
call s:NOTI.notification('Flutter is not running.', 'WarningMsg')
|
call s:NOTI.notify('Flutter is not running.', 'WarningMsg')
|
||||||
else
|
else
|
||||||
call s:JOB.send(s:flutter_job_id, a:msg)
|
call s:JOB.send(s:flutter_job_id, a:msg)
|
||||||
endif
|
endif
|
||||||
@ -150,13 +150,13 @@ endfunction
|
|||||||
|
|
||||||
function! s:on_stdout(id, data, event) abort
|
function! s:on_stdout(id, data, event) abort
|
||||||
for line in filter(a:data, '!empty(v:val)')
|
for line in filter(a:data, '!empty(v:val)')
|
||||||
call s:NOTI.notification(line, 'Normal')
|
call s:NOTI.notify(line, 'Normal')
|
||||||
endfor
|
endfor
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! s:on_stderr(id, data, event) abort
|
function! s:on_stderr(id, data, event) abort
|
||||||
for line in filter(a:data, '!empty(v:val)')
|
for line in filter(a:data, '!empty(v:val)')
|
||||||
call s:NOTI.notification(line, 'WarningMsg')
|
call s:NOTI.notify(line, 'WarningMsg')
|
||||||
endfor
|
endfor
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
|
@ -6,9 +6,9 @@
|
|||||||
"=============================================================================
|
"=============================================================================
|
||||||
|
|
||||||
let s:JOB = SpaceVim#api#import('job')
|
let s:JOB = SpaceVim#api#import('job')
|
||||||
let s:NOTI =SpaceVim#api#import('notification')
|
let s:NOTI = SpaceVim#api#import('notify')
|
||||||
|
|
||||||
function! git#push#run(...)
|
function! git#push#run(...) abort
|
||||||
|
|
||||||
let cmd = ['git', 'push']
|
let cmd = ['git', 'push']
|
||||||
if len(a:1) > 0
|
if len(a:1) > 0
|
||||||
@ -36,13 +36,13 @@ endfunction
|
|||||||
|
|
||||||
function! s:on_stdout(id, data, event) abort
|
function! s:on_stdout(id, data, event) abort
|
||||||
for line in filter(a:data, '!empty(v:val)')
|
for line in filter(a:data, '!empty(v:val)')
|
||||||
call s:NOTI.notification(line, 'Normal')
|
call s:NOTI.notify(line, 'Normal')
|
||||||
endfor
|
endfor
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! s:on_stderr(id, data, event) abort
|
function! s:on_stderr(id, data, event) abort
|
||||||
for line in filter(a:data, '!empty(v:val)')
|
for line in filter(a:data, '!empty(v:val)')
|
||||||
call s:NOTI.notification(line, 'WarningMsg')
|
call s:NOTI.notify(line, 'WarningMsg')
|
||||||
endfor
|
endfor
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
@ -52,7 +52,7 @@ function! s:options() abort
|
|||||||
\ ]
|
\ ]
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! git#push#complete(ArgLead, CmdLine, CursorPos)
|
function! git#push#complete(ArgLead, CmdLine, CursorPos) abort
|
||||||
let str = a:CmdLine[:a:CursorPos-1]
|
let str = a:CmdLine[:a:CursorPos-1]
|
||||||
if str =~# '^Git\s\+push\s\+-$'
|
if str =~# '^Git\s\+push\s\+-$'
|
||||||
return join(s:options(), "\n")
|
return join(s:options(), "\n")
|
||||||
|
@ -7,13 +7,13 @@
|
|||||||
" <
|
" <
|
||||||
|
|
||||||
let s:JOB = SpaceVim#api#import('job')
|
let s:JOB = SpaceVim#api#import('job')
|
||||||
let s:NOTI =SpaceVim#api#import('notification')
|
let s:NOTI = SpaceVim#api#import('notify')
|
||||||
let s:BUFFER = SpaceVim#api#import('vim#buffer')
|
let s:BUFFER = SpaceVim#api#import('vim#buffer')
|
||||||
|
|
||||||
|
|
||||||
let s:stash_show_bufnr = -1
|
let s:stash_show_bufnr = -1
|
||||||
|
|
||||||
function! git#stash#run(args)
|
function! git#stash#run(args) abort
|
||||||
|
|
||||||
let cmd = ['git', 'stash'] + a:args
|
let cmd = ['git', 'stash'] + a:args
|
||||||
let subcmd = get(a:args, 0, '')
|
let subcmd = get(a:args, 0, '')
|
||||||
@ -37,7 +37,7 @@ endfunction
|
|||||||
function! s:on_stdout(id, data, event) abort
|
function! s:on_stdout(id, data, event) abort
|
||||||
for line in filter(a:data, '!empty(v:val)')
|
for line in filter(a:data, '!empty(v:val)')
|
||||||
call git#logger#info('git-stash stdout:' . line)
|
call git#logger#info('git-stash stdout:' . line)
|
||||||
call s:NOTI.notification(line, 'Normal')
|
call s:NOTI.notify(line, 'Normal')
|
||||||
endfor
|
endfor
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
@ -59,14 +59,14 @@ endfunction
|
|||||||
function! s:on_drop_stdout(id, data, event) abort
|
function! s:on_drop_stdout(id, data, event) abort
|
||||||
for line in filter(a:data, '!empty(v:val)')
|
for line in filter(a:data, '!empty(v:val)')
|
||||||
call git#logger#info('git-stash stdout:' . line)
|
call git#logger#info('git-stash stdout:' . line)
|
||||||
call s:NOTI.notification(line, 'Normal')
|
call s:NOTI.notify(line, 'Normal')
|
||||||
endfor
|
endfor
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! s:on_drop_stderr(id, data, event) abort
|
function! s:on_drop_stderr(id, data, event) abort
|
||||||
for line in filter(a:data, '!empty(v:val)')
|
for line in filter(a:data, '!empty(v:val)')
|
||||||
call git#logger#info('git-stash stdout:' . line)
|
call git#logger#info('git-stash stdout:' . line)
|
||||||
call s:NOTI.notification(line, 'WarningMsg')
|
call s:NOTI.notify(line, 'WarningMsg')
|
||||||
endfor
|
endfor
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
@ -89,7 +89,7 @@ endfunction
|
|||||||
function! s:on_show_stderr(id, data, event) abort
|
function! s:on_show_stderr(id, data, event) abort
|
||||||
for line in filter(a:data, '!empty(v:val)')
|
for line in filter(a:data, '!empty(v:val)')
|
||||||
call git#logger#info('git-stash stdout:' . line)
|
call git#logger#info('git-stash stdout:' . line)
|
||||||
call s:NOTI.notification(line, 'WarningMsg')
|
call s:NOTI.notify(line, 'WarningMsg')
|
||||||
endfor
|
endfor
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
@ -130,7 +130,7 @@ function! s:sub_commands() abort
|
|||||||
\ "\n")
|
\ "\n")
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! git#stash#complete(ArgLead, CmdLine, CursorPos)
|
function! git#stash#complete(ArgLead, CmdLine, CursorPos) abort
|
||||||
|
|
||||||
let str = a:CmdLine[:a:CursorPos-1]
|
let str = a:CmdLine[:a:CursorPos-1]
|
||||||
if str =~# '^Git\s\+stash\s\+[a-z]\=$'
|
if str =~# '^Git\s\+stash\s\+[a-z]\=$'
|
||||||
|
29
docs/api/notify.md
Normal file
29
docs/api/notify.md
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
---
|
||||||
|
title: "notify API"
|
||||||
|
description: "notify API provides some basic functions for generating notifications"
|
||||||
|
---
|
||||||
|
|
||||||
|
# [Available APIs](../) >> notify
|
||||||
|
|
||||||
|
<!-- vim-markdown-toc GFM -->
|
||||||
|
|
||||||
|
- [Intro](#intro)
|
||||||
|
- [Functions](#functions)
|
||||||
|
|
||||||
|
<!-- vim-markdown-toc -->
|
||||||
|
|
||||||
|
## Intro
|
||||||
|
|
||||||
|
This api provides some basic Functions for generating notifications.
|
||||||
|
|
||||||
|
```vim
|
||||||
|
let s:NOTIFY = SpaceVim#api#import('notify')
|
||||||
|
call s:NOTIFY.notify('This is a simple notification!')
|
||||||
|
```
|
||||||
|
|
||||||
|
## Functions
|
||||||
|
|
||||||
|
| function name | description |
|
||||||
|
| --------------------------- | ------------------------------------------------- |
|
||||||
|
| `notify(string)` | generate notification with default color |
|
||||||
|
| `notify(string, highlight)` | generate notification with custom highlight group |
|
Loading…
x
Reference in New Issue
Block a user