spacevim/bundle/vim-grammarous/autoload/grammarous/info_win.vim
JIe 2bb7059579
Some checks failed
Detach Plugins / check (FlyGrep.vim) (push) Has been cancelled
Detach Plugins / check (GitHub.vim) (push) Has been cancelled
Detach Plugins / check (JavaUnit.vim) (push) Has been cancelled
Detach Plugins / check (SourceCounter.vim) (push) Has been cancelled
Detach Plugins / check (cpicker.nvim) (push) Has been cancelled
Detach Plugins / check (dein-ui.vim) (push) Has been cancelled
Detach Plugins / check (git.vim) (push) Has been cancelled
Detach Plugins / check (iedit.vim) (push) Has been cancelled
Detach Plugins / check (scrollbar.vim) (push) Has been cancelled
Detach Plugins / check (vim-chat) (push) Has been cancelled
Detach Plugins / check (vim-cheat) (push) Has been cancelled
Detach Plugins / check (vim-todo) (push) Has been cancelled
Detach Plugins / check (xmake.vim) (push) Has been cancelled
test / Linux (nvim, nightly) (push) Has been cancelled
test / Linux (nvim, v0.3.8) (push) Has been cancelled
test / Linux (nvim, v0.4.0) (push) Has been cancelled
test / Linux (nvim, v0.4.2) (push) Has been cancelled
test / Linux (nvim, v0.4.3) (push) Has been cancelled
test / Linux (nvim, v0.4.4) (push) Has been cancelled
test / Linux (nvim, v0.5.0) (push) Has been cancelled
test / Linux (nvim, v0.5.1) (push) Has been cancelled
test / Linux (nvim, v0.6.0) (push) Has been cancelled
test / Linux (nvim, v0.6.1) (push) Has been cancelled
test / Linux (nvim, v0.7.0) (push) Has been cancelled
test / Linux (nvim, v0.7.2) (push) Has been cancelled
test / Linux (nvim, v0.8.0) (push) Has been cancelled
test / Linux (nvim, v0.8.1) (push) Has been cancelled
test / Linux (nvim, v0.8.2) (push) Has been cancelled
test / Linux (nvim, v0.8.3) (push) Has been cancelled
test / Linux (nvim, v0.9.0) (push) Has been cancelled
test / Linux (nvim, v0.9.1) (push) Has been cancelled
test / Linux (true, vim, v7.4.052) (push) Has been cancelled
test / Linux (true, vim, v7.4.1689) (push) Has been cancelled
test / Linux (true, vim, v7.4.629) (push) Has been cancelled
test / Linux (true, vim, v8.0.0027) (push) Has been cancelled
test / Linux (true, vim, v8.0.0183) (push) Has been cancelled
test / Linux (vim, nightly) (push) Has been cancelled
test / Linux (vim, v8.0.0184) (push) Has been cancelled
test / Linux (vim, v8.0.1453) (push) Has been cancelled
test / Linux (vim, v8.1.2269) (push) Has been cancelled
test / Linux (vim, v8.2.2434) (push) Has been cancelled
test / Linux (vim, v8.2.3995) (push) Has been cancelled
test / Windows (nvim, nightly) (push) Has been cancelled
test / Windows (nvim, v0.3.8) (push) Has been cancelled
test / Windows (nvim, v0.4.2) (push) Has been cancelled
test / Windows (nvim, v0.4.3) (push) Has been cancelled
test / Windows (nvim, v0.4.4) (push) Has been cancelled
test / Windows (nvim, v0.5.0) (push) Has been cancelled
test / Windows (nvim, v0.5.1) (push) Has been cancelled
test / Windows (nvim, v0.6.0) (push) Has been cancelled
test / Windows (nvim, v0.6.1) (push) Has been cancelled
test / Windows (nvim, v0.7.0) (push) Has been cancelled
test / Windows (nvim, v0.7.2) (push) Has been cancelled
test / Windows (nvim, v0.8.0) (push) Has been cancelled
test / Windows (nvim, v0.8.1) (push) Has been cancelled
test / Windows (nvim, v0.8.2) (push) Has been cancelled
test / Windows (nvim, v0.8.3) (push) Has been cancelled
test / Windows (nvim, v0.9.0) (push) Has been cancelled
test / Windows (nvim, v0.9.1) (push) Has been cancelled
test / Windows (vim, nightly) (push) Has been cancelled
test / Windows (vim, v7.4.1185) (push) Has been cancelled
test / Windows (vim, v7.4.1689) (push) Has been cancelled
test / Windows (vim, v8.0.0027) (push) Has been cancelled
test / Windows (vim, v8.0.1453) (push) Has been cancelled
test / Windows (vim, v8.1.2269) (push) Has been cancelled
test / Windows (vim, v8.2.2434) (push) Has been cancelled
test / Windows (vim, v8.2.3995) (push) Has been cancelled
docker / docker (push) Has been cancelled
mirror / check (coding) (push) Has been cancelled
mirror / check (gitee) (push) Has been cancelled
mirror / check (gitlab) (push) Has been cancelled
init
2024-08-21 14:17:26 +08:00

238 lines
7.0 KiB
VimL

let s:save_cpo = &cpo
set cpo&vim
function! grammarous#info_win#action_return()
call grammarous#move_to_checked_buf(b:grammarous_preview_error.fromy+1, b:grammarous_preview_error.fromx+1)
endfunction
function! grammarous#info_win#action_fixit()
call grammarous#fixit(b:grammarous_preview_error)
endfunction
function! grammarous#info_win#action_remove_error()
let e = b:grammarous_preview_error
if !grammarous#move_to_checked_buf(
\ b:grammarous_preview_error.fromy+1,
\ b:grammarous_preview_error.fromx+1 )
return
endif
call grammarous#remove_error(e, b:grammarous_result)
endfunction
function! grammarous#info_win#action_disable_rule()
let e = b:grammarous_preview_error
if !grammarous#move_to_checked_buf(
\ b:grammarous_preview_error.fromy+1,
\ b:grammarous_preview_error.fromx+1 )
return
endif
call grammarous#disable_rule(e.ruleId, b:grammarous_result)
endfunction
function! grammarous#info_win#action_next_error()
if !grammarous#move_to_checked_buf(
\ b:grammarous_preview_error.fromy+1,
\ b:grammarous_preview_error.fromx+1 )
return
endif
if !grammarous#move_to_next_error(getpos('.')[1 : 2], b:grammarous_result)
wincmd p
endif
endfunction
function! grammarous#info_win#action_previous_error()
if !grammarous#move_to_checked_buf(
\ b:grammarous_preview_error.fromy+1,
\ b:grammarous_preview_error.fromx+1 )
return
endif
if !grammarous#move_to_previous_error(getpos('.')[1 : 2], b:grammarous_result)
wincmd p
endif
endfunction
function! grammarous#info_win#action_help()
echo join([
\ '| Mappings | Description |',
\ '| -------- |:---------------------------------------------- |',
\ '| q | Quit the info window |',
\ '| <CR> | Move to the location of the error |',
\ '| f | Fix the error automatically |',
\ '| r | Remove the error without fix |',
\ '| R | Disable the grammar rule in the checked buffer |',
\ '| n | Move to the next error |',
\ '| p | Move to the previous error |',
\ ], "\n")
endfunction
function! s:get_info_buffer(e)
let lines =
\ [
\ 'Error: ' . a:e.category,
\ ' ' . a:e.msg,
\ '',
\ ]
if a:e.replacements !=# ''
let lines +=
\ [
\ 'Corrections:',
\ ' ' . join(split(a:e.replacements, '#', 1), '; '),
\ '',
\ ]
endif
let lines +=
\ [
\ 'Context:',
\ ' ' . a:e.context,
\ '',
\ "Press '?' in this window to show help",
\ ]
return lines
endfunction
function! grammarous#info_win#action_quit()
let s:do_not_preview = 1
let preview_bufnr = bufnr('%')
quit!
" Consider the case where :quit! does not navigate to the buffer
" where :GrammarousCheck checked.
for bufnr in tabpagebuflist()
let b = getbufvar(bufnr, 'grammarous_preview_bufnr', -1)
if b != preview_bufnr
continue
endif
let winnr = bufwinnr(bufnr)
if winnr == -1
continue
endif
execute winnr . 'wincmd w'
unlet b:grammarous_preview_bufnr
return
endfor
" Reach here when the original buffer was already closed
endfunction
function! grammarous#info_win#update(e)
let b:grammarous_preview_error = a:e
silent normal! gg"_dG
silent %delete _
call setline(1, s:get_info_buffer(a:e))
execute 1
setlocal modified
return bufnr('%')
endfunction
function! grammarous#info_win#open(e, bufnr)
execute g:grammarous#info_win_direction g:grammarous#info_window_height . 'new' '[Grammarous]'
" why need this, the statusline is not update when open info win first
" time
doautocmd WinEnter
let b:grammarous_preview_original_bufnr = a:bufnr
let b:grammarous_preview_error = a:e
call setline(1, s:get_info_buffer(a:e))
execute 1
syntax match GrammarousInfoSection "\%(Context\|Correction\):"
syntax match GrammarousInfoError "Error:.*$"
syntax match GrammarousInfoHelp "^Press '?' in this window to show help$"
execute 'syntax match GrammarousError "' . escape(grammarous#generate_highlight_pattern(a:e), '"') . '"'
setlocal nonumber
setlocal bufhidden=hide
setlocal buftype=nofile
setlocal readonly
setl winfixwidth
setl winfixheight
setlocal nolist
setlocal nobuflisted
setlocal noswapfile
setlocal nospell
setlocal nomodeline
setlocal nofoldenable
setlocal noreadonly
setlocal foldcolumn=0
setlocal nomodified
nnoremap <silent><buffer>q :<C-u>call grammarous#info_win#action_quit()<CR>
nnoremap <silent><buffer><CR> :<C-u>call grammarous#info_win#action_return()<CR>
nnoremap <buffer>f :<C-u>call grammarous#info_win#action_fixit()<CR>
nnoremap <silent><buffer>r :<C-u>call grammarous#info_win#action_remove_error()<CR>
nnoremap <silent><buffer>R :<C-u>call grammarous#info_win#action_disable_rule()<CR>
nnoremap <silent><buffer>n :<C-u>call grammarous#info_win#action_next_error()<CR>
nnoremap <silent><buffer>p :<C-u>call grammarous#info_win#action_previous_error()<CR>
nnoremap <silent><buffer>? :<C-u>call grammarous#info_win#action_help()<CR>
return bufnr('%')
endfunction
function! s:lookup_preview_bufnr()
for b in tabpagebuflist()
let the_buf = getbufvar(b, 'grammarous_preview_bufnr', -1)
if the_buf != -1
return the_buf
endif
endfor
return -1
endfunction
function! grammarous#info_win#close()
let cur_win = winnr()
if exists('b:grammarous_preview_bufnr')
let prev_win = bufwinnr(b:grammarous_preview_bufnr)
else
let the_buf = s:lookup_preview_bufnr()
if the_buf == -1
return 0
endif
let prev_win = bufwinnr(the_buf)
endif
if prev_win == -1
return 0
end
execute prev_win . 'wincmd w'
wincmd c
execute cur_win . 'wincmd w'
return 1
endfunction
function! s:do_auto_preview()
let mode = mode()
if mode ==? 'v' || mode ==# "\<C-v>"
return
endif
if exists('s:do_not_preview')
unlet s:do_not_preview
return
endif
if !exists('b:grammarous_result') || empty(b:grammarous_result)
autocmd! plugin-grammarous-auto-preview
return
endif
call grammarous#create_update_info_window_of(b:grammarous_result)
endfunction
function! grammarous#info_win#start_auto_preview()
augroup plugin-grammarous-auto-preview
autocmd!
autocmd CursorMoved <buffer> call <SID>do_auto_preview()
augroup END
endfunction
function! grammarous#info_win#stop_auto_preview()
silent! autocmd! plugin-grammarous-auto-preview
endfunction
let &cpo = s:save_cpo
unlet s:save_cpo