mirror of
https://github.com/junegunn/fzf.vim.git
synced 2026-09-01 04:16:56 +08:00
Canonicalize the two fzf key aliases before comparing
fzf reads 'return' as 'enter' and 'alt-return' as 'alt-enter', so show_key='alt-return' passed the check against the default paste key and --expect closed fzf while the footer advertised Show. ctrl-m is not an alias, it goes through the generic ctrl- branch to its own event.
This commit is contained in:
@@ -361,7 +361,7 @@ function! s:build_hint(entries, defaults, ...)
|
|||||||
let keys = []
|
let keys = []
|
||||||
let actions = get(g:, 'fzf_action', s:default_action)
|
let actions = get(g:, 'fzf_action', s:default_action)
|
||||||
if a:defaults
|
if a:defaults
|
||||||
if index(taken, 'enter') < 0 && index(taken, 'return') < 0
|
if index(taken, 'enter') < 0
|
||||||
call add(entries, ['Enter', 'Open'])
|
call add(entries, ['Enter', 'Open'])
|
||||||
endif
|
endif
|
||||||
for [key, name, label] in [['ctrl-x', 'C-X', 'HSplit'], ['ctrl-v', 'C-V', 'VSplit'], ['ctrl-t', 'C-T', 'Tab']]
|
for [key, name, label] in [['ctrl-x', 'C-X', 'HSplit'], ['ctrl-v', 'C-V', 'VSplit'], ['ctrl-t', 'C-T', 'Tab']]
|
||||||
@@ -442,6 +442,9 @@ function! s:show_key()
|
|||||||
return s:conf('show_key', 'ctrl-o')
|
return s:conf('show_key', 'ctrl-o')
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
|
" fzf spells these two events more than one way
|
||||||
|
let s:key_aliases = {'return': 'enter', 'alt-return': 'alt-enter'}
|
||||||
|
|
||||||
" A key can be a comma-separated list, which fzf binds to every key in it.
|
" A key can be a comma-separated list, which fzf binds to every key in it.
|
||||||
" fzf escapes 'alt-,' before splitting on the comma, so do the same. It also
|
" fzf escapes 'alt-,' before splitting on the comma, so do the same. It also
|
||||||
" lowercases a key name before matching it, except for 'alt-X' and a bare
|
" lowercases a key name before matching it, except for 'alt-X' and a bare
|
||||||
@@ -452,8 +455,9 @@ function! s:split_keys(keys)
|
|||||||
let keys = map(split(substitute(a:keys, '\c\(alt-\),', '\1'.sep, 'g'), ','),
|
let keys = map(split(substitute(a:keys, '\c\(alt-\),', '\1'.sep, 'g'), ','),
|
||||||
\ 'substitute(v:val, sep, ",", "g")')
|
\ 'substitute(v:val, sep, ",", "g")')
|
||||||
" 'alt-X' keeps X as typed but not its prefix, so fold only the prefix there
|
" 'alt-X' keeps X as typed but not its prefix, so fold only the prefix there
|
||||||
return map(keys, 'strchars(v:val) == 1 ? v:val
|
call map(keys, 'strchars(v:val) == 1 ? v:val
|
||||||
\ : v:val =~? "^alt-.$" ? "alt-".v:val[4:] : tolower(v:val)')
|
\ : v:val =~? "^alt-.$" ? "alt-".v:val[4:] : tolower(v:val)')
|
||||||
|
return map(keys, 'get(s:key_aliases, v:val, v:val)')
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
" 'ctrl-alt-x' -> 'C-A-X' and 'double-click' -> 'Dbl-Click', to match the
|
" 'ctrl-alt-x' -> 'C-A-X' and 'double-click' -> 'Dbl-Click', to match the
|
||||||
|
|||||||
Reference in New Issue
Block a user