mq-patch & Vim
Update: I forgot about the "len > 0" test. Thx @padenot for the quick fix.
Update2: Thanks to @hoaproject, now it works even if Vim is not open in the Root directory.
If you use the Mercurial Queues (and you should!)
and Vim, you may want to know which patch you are working on.
Here is how I managed to put the name of the current patch in my status bar:
let g:mqStatusPath = substitute(system("hg root --cwd " .
getcwd()), "\n", "", "g") . "/.hg/patches/status"
function! GetCurrentMqPatch()
if filereadable(g:mqStatusPath)
let patchesList = readfile(g:mqStatusPath)
if len(patchesList) > 0
return split(patchesList[-1], ':')[1]
endif
endif
endfunction
set statusline=%{GetCurrentMqPatch()}\ %F%m%r%h%w
Screenshot:
Here is the full code for my status bar (part of this code is from this guy):
let g:mqStatusPath = substitute(system("hg root --cwd " .
getcwd()), "\n", "", "g") . "/.hg/patches/status"
function! GetCurrentMqPatch()
if filereadable(g:mqStatusPath)
let patchesList = readfile(g:mqStatusPath)
if len(patchesList) > 0
return split(patchesList[-1], ':')[1]
endif
endif
return ""
endfunction
"set statusline=%{GetCurrentMqPatch()}\ %F%m%r%h%w
function! MyStatusLine(mode)
let statusline=""
if filereadable(g:mqStatusPath)
let statusline .= "%#PatchColor#" . GetCurrentMqPatch() . "%*"
endif
if a:mode == 'Enter'
let statusline.="%#StatColor#"
endif
let statusline.="\(%n\)\ %f\ "
if a:mode == 'Enter'
let statusline.="%*"
endif
let statusline.="%#Modified#%m"
if a:mode == 'Leave'
let statusline.="%*%r"
elseif a:mode == 'Enter'
let statusline.="%r%*"
endif
let statusline .= "\ (%l/%L,\ %c)\ %P%=%h%w\ %y\ [%{&encoding}:%{&fileformat}]\ \ "
return statusline
endfunction
au WinEnter * setlocal statusline=%!MyStatusLine('Enter')
au WinLeave * setlocal statusline=%!MyStatusLine('Leave')
set statusline=%!MyStatusLine('Enter')
function! InsertStatuslineColor(mode)
if a:mode == 'i'
hi StatColor guibg=orange ctermbg=lightred
elseif a:mode == 'r'
hi StatColor guibg=#e454ba ctermbg=magenta
elseif a:mode == 'v'
hi StatColor guibg=#e454ba ctermbg=magenta
else
hi StatColor guibg=red ctermbg=red
endif
endfunction
au InsertEnter * call InsertStatuslineColor(v:insertmode)
au InsertLeave * hi StatColor guibg=#95e454 guifg=black ctermbg=lightgreen ctermfg=black
Comments