X-Git-Url: http://www.git.stargrave.org/?p=dotfiles.git;a=blobdiff_plain;f=vim%2F.vim%2Fautoload%2Ffmt.vim;h=0ba912b5efbd56580ba58d92d4b861aefe087b98;hp=0aafcbc0cbf265b4cf3cee5c6c205e9541cb9443;hb=f0f5d759e21858dc6a50f88ce80cdec24493a52c;hpb=1e761ea8af276caa2ff605cb4d7d0a63fac51a36 diff --git a/vim/.vim/autoload/fmt.vim b/vim/.vim/autoload/fmt.vim index 0aafcbc..0ba912b 100644 --- a/vim/.vim/autoload/fmt.vim +++ b/vim/.vim/autoload/fmt.vim @@ -1,23 +1,21 @@ vim9script export def Do() - var view = winsaveview() - silent execute ":%!" .. &equalprg - if v:shell_error != 0 - var errs = [] - for line in getline(1, line("$")) - var cols = matchlist(line, '^.*:\(\d\+\):\(\d\+\):\s*\(.*\)$') - if empty(cols) | continue | endif - errs = add(errs, { - filename: @%, - lnum: str2nr(cols[1]), - col: str2nr(cols[2]), - text: cols[3], - }) - endfor - silent undo - if !empty(errs) | setqflist(errs, "r") | endif - echohl Error | echomsg "fmt error" | echohl None - endif - winrestview(view) + var lines = [] + job_start(&equalprg, { + in_io: "buffer", in_buf: bufnr("%"), + callback: (chan, msg) => { + lines = add(lines, msg) + }, + exit_cb: (job, status) => { + if status != 0 + cgetexpr lines + copen + return + endif + var view = winsaveview() + silent execute ":%!" .. &equalprg + winrestview(view) + } + }) enddef