X-Git-Url: http://www.git.stargrave.org/?a=blobdiff_plain;f=plugin%2Fcodecomm.vim;h=4f9d4eca9f0c8e3fe57c87b8870f170c4d248331;hb=ca495ac6c5d03265caaa8e2b2357cd704ed80d5c;hp=27bd890d4be5020c83b604e16a35ccec9d81bcc3;hpb=ed4e098bc2052fd305cb8517ab5c094c66f00657;p=codecomm.git diff --git a/plugin/codecomm.vim b/plugin/codecomm.vim index 27bd890..4f9d4ec 100644 --- a/plugin/codecomm.vim +++ b/plugin/codecomm.vim @@ -1,87 +1,22 @@ -" 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("g:codecomm_file") - let tmpdir = getenv("TMPDIR") - if tmpdir == v:null | let tmpdir = "/tmp" | endif - let g:codecomm_file = tmpdir . "/" . "codecomm.txt" -endif - -if !exists("g:codecomm_count") | let g:codecomm_count = 0 | endif +if exists("*codecomm#Do") | finish | 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, fugitive#extract_git_dir(".")[:-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_txt") + var tmp = (getenv("TMPDIR") == null) ? "/tmp" : getenv("TMPDIR") + g:codecomm_txt = tmp .. "/" .. "codecomm.txt" + g:codecomm_ctr = tmp .. "/" .. "codecomm.ctr" +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_txt +command! -range CodeComm , call CCRangeWrapper() +vnoremap cc :call CCRangeWrapper()