X-Git-Url: http://www.git.stargrave.org/?a=blobdiff_plain;f=plugin%2Fcodecomm.vim;h=1b6d1e1ed0eb849ddb057c2f65bf67f14167964a;hb=957dafb50459a8aa00d8bb4fb28d69b87e900e76;hp=8a38d898978f0fce56cd57ad0f1f1dcd93cc128b;hpb=b70e6e7c631f3faf6f25d4c747f589049f969f62;p=codecomm.git diff --git a/plugin/codecomm.vim b/plugin/codecomm.vim index 8a38d89..1b6d1e1 100644 --- a/plugin/codecomm.vim +++ b/plugin/codecomm.vim @@ -1,87 +1,23 @@ -" Code comments preparation helper -" Maintainer: Sergey Matveev -" License: GNU General Public License version 3 of the License or later +vim9script -if exists("g:loaded_codecomm") | finish | endif -let g:loaded_codecomm = 1 +# Code comments preparation helper +# Maintainer: Sergey Matveev +# License: GNU General Public License version 3 of the License or later + +if exists("*codecomm#Do") | finish | endif if !exists("g:codecomm_file") - let tmpdir = getenv("TMPDIR") - if tmpdir == v:null | let tmpdir = "/tmp" | endif - let g:codecomm_file = tmpdir . "/" . "codecomm.txt" + g:codecomm_file = ((getenv("TMPDIR") == null) ? "/tmp" : getenv("TMPDIR")) .. + "/" .. "codecomm.txt" endif -if !exists("g:codecomm_count") | let g:codecomm_count = 0 | endif - -function! s:CodeComm() range - let SHA1_LENGTH = 40 - if bufwinnr("CodeCommCommenting") != -1 - echohl ErrorMsg | echomsg "Close already existing code commenting window first" | echohl None - return - endif - if bufexists("CodeCommCommenting") != 0 - bdelete! CodeCommCommenting - endif - let g:codecomm_count += 1 - " Determine file's path inside repository - let path = expand("%:p") - let path = substitute(path, FugitiveExtractGitDir(getcwd())[:-5], "", "") - let path = substitute(path, "^.*\.git//", "", "") - " Header generation - let header = [] - if match(path, "/") ==# SHA1_LENGTH - let header = add(header, path[:8]) - let header = add(header, "|") - let header = add(header, path[SHA1_LENGTH+1:]) - else - let header = add(header, path) - endif - let ready = [printf("-----#%2d [ %54S ]-----", g:codecomm_count, join(header, " "))] - " Collect enumerated selected code block's lines - for bufline_n in range(a:firstline, a:lastline) - let fmted = printf("%4d", bufline_n) - let line = getline(bufline_n) - if len(line) > 0 | let fmted = fmted . " " . line | endif - let ready = add(ready, fmted) - endfor - let ready = add(ready, "---------------------------------- >8 ----------------------------------") - " Place commented signs - sign define commented text=C texthl=Search - for linen in range(a:firstline, a:lastline) - let cmd = ":sign place " . linen . " line=" . linen - let cmd .= " name=commented buffer=" . bufnr("%") - execute cmd - endfor - " Spawn a new small code commenting window nonbinded to file - new CodeCommCommenting - setlocal noreadonly noswapfile buftype=acwrite filetype=codecomm - call append("^", ready) - " Separate codecomm_file consolidating function, called when buffer is saved - autocmd! BufWriteCmd CodeCommCommenting - function! s:AppendCC() - " Collect already written comments from file if it exists - let ccprev = [" vim: filetype=codecomm", ""] - if filereadable(g:codecomm_file) - let ccprev = readfile(g:codecomm_file) - endif - " Save all those consolidated data to file - let ready = ccprev + getline(0, "$") + [""] - call writefile(ready, g:codecomm_file) - setlocal nomodified - echohl MoreMsg | echomsg "Commented:" len(ready) "lines" | echohl None - endfunction - autocmd BufWriteCmd CodeCommCommenting call s:AppendCC() - normal zR - startinsert -endfunction +if !exists("g:codecomm_count") | g:codecomm_count = 0 | endif -function! s:CodeCommClear() - call writefile([], g:codecomm_file) - let g:codecomm_count = 0 - echohl WarningMsg | echomsg "Comments are wiped" | echohl None +function CCRangeWrapper() range + call codecomm#Do(a:firstline, a:lastline, FugitiveExtractGitDir(getcwd())) endfunction -command! CodeCommClear call CodeCommClear() -command! CodeCommEdit :execute "edit " . g:codecomm_file -command! -range CodeComm , call CodeComm() -vnoremap cc :call CodeComm() +command! CodeCommClear codecomm#Clear() +command! CodeCommEdit :execute "edit " .. g:codecomm_file +command! -range CodeComm , call CCRangeWrapper() +vnoremap cc :call CCRangeWrapper()