From 3ac2d53bc146799c73b48fce0a7dd8ee4af71c67 Mon Sep 17 00:00:00 2001 From: Junegunn Choi Date: Thu, 8 Oct 2015 03:12:18 +0900 Subject: [PATCH] Update display format of Maps and (fzf-maps-*) --- autoload/fzf/vim.vim | 28 ++++++++++++++++++++++------ 1 file changed, 22 insertions(+), 6 deletions(-) diff --git a/autoload/fzf/vim.vim b/autoload/fzf/vim.vim index e697738..e351366 100644 --- a/autoload/fzf/vim.vim +++ b/autoload/fzf/vim.vim @@ -43,7 +43,7 @@ function! s:ansi(str, col, bold) return printf("\x1b[%s%sm%s\x1b[m", a:col, a:bold ? ';1' : '', a:str) endfunction -for [s:c, s:a] in items({'red': 31, 'green': 32, 'yellow': 33, 'blue': 34, 'magenta': 35, 'cyan': 36}) +for [s:c, s:a] in items({'black': 30, 'red': 31, 'green': 32, 'yellow': 33, 'blue': 34, 'magenta': 35, 'cyan': 36}) execute "function! s:".s:c."(str, ...)\n" \ " return s:ansi(a:str, ".s:a.", get(a:, 1, 0))\n" \ "endfunction" @@ -721,8 +721,9 @@ function! s:align_pairs(list) let match = matchlist(elem, '^\(\S*\)\s*\(.*\)$') let [_, k, v] = match[0:2] let maxlen = max([maxlen, len(k)]) - call add(pairs, [k, v]) + call add(pairs, [k, substitute(v, '^[@* ]*', '', '')]) endfor + let maxlen = min([maxlen, 35]) return map(pairs, "printf('%-'.maxlen.'s', v:val[0]).' '.v:val[1]") endfunction @@ -747,17 +748,32 @@ function! fzf#vim#maps(mode, ...) let s:map_cnt = v:count == 0 ? '' : v:count let s:map_reg = empty(v:register) ? '' : ("\(-fzf-vim-dq)".v:register) let s:map_op = a:mode == 'o' ? v:operator : '' + redir => cout - silent execute a:mode.'map' + silent execute 'verbose' a:mode.'map' redir END - let list = map(split(cout, "\n"), 'v:val[3:]') - let aligned = s:align_pairs(map(split(cout, "\n"), 'v:val[3:]')) + let list = [] + let curr = '' + for line in split(cout, "\n") + let src = matchstr(line, 'Last set from \zs.*') + if empty(src) + let curr = line[3:] + else + let src = ' '.join(reverse(reverse(split(src, '/'))[0:2]), '/') + call add(list, printf('%s %s', curr, s:black(src))) + let curr = '' + endif + endfor + if !empty(curr) + call add(list, curr) + endif + let aligned = s:align_pairs(list) let sorted = sort(aligned) let colored = map(sorted, 's:highlight_keys(v:val)') call s:fzf({ \ 'source': colored, \ 'sink': function('s:key_sink'), - \ 'options': '--ansi --no-hscroll --nth 1,..'}, a:000) + \ 'options': '--prompt "Maps> " --ansi --no-hscroll --nth 1,..'}, a:000) endfunction " ----------------------------------------------------------------------------