1
0
mirror of https://github.com/SpaceVim/SpaceVim.git synced 2025-02-09 12:10:05 +08:00
This commit is contained in:
wsdjeg 2017-03-11 00:47:57 +08:00
parent 27e8957136
commit c070505edf

View File

@ -10,13 +10,30 @@ function! s:parseInput(char) abort
endif endif
endfunction endfunction
function! s:nextItem(list, item) abort
let id = index(a:list, a:item)
if id == len(a:list) - 1
return a:list[0]
else
return a:list[id + 1]
endif
endfunction
function! s:previousItem(list, item) abort
let id = index(a:list, a:item)
if id == 0
return a:list[len(a:list) - 1]
else
return a:list[id - 1]
endif
endfunction
function! s:parseItems(items) abort function! s:parseItems(items) abort
let shortcuts = []
let items = {} let items = {}
let g:items = items
for item in a:items for item in a:items
if index(shortcuts, item[0:0]) == -1 let id = index(a:items, item) + 1
let items[item[0:0]] = '(' . item[0:0] . ')' . item[1:] let items[id] = '(' . id . ')' . item
endif
endfor endfor
return items return items
endfunction endfunction
@ -25,16 +42,16 @@ function! s:menu(items) abort
let saved_more = &more let saved_more = &more
set nomore set nomore
let items = s:parseItems(a:items) let items = s:parseItems(a:items)
let selected = values(items)[0][1:1] let selected = 1
let exit = 0 let exit = 0
let indent = repeat(' ', 7) let indent = repeat(' ', 7)
while !exit while !exit
let menu = "Cmdline menu: Use j/k/enter and the shortcuts indicated\n" let menu = "Cmdline menu: Use j/k/enter and the shortcuts indicated\n"
for line in values(items) for id in keys(items)
if line[1:1] == selected if id == selected
let menu .= indent . '>' . line . "\n" let menu .= indent . '>' . items[id] . "\n"
else else
let menu .= indent . ' ' . line . "\n" let menu .= indent . ' ' . items[id] . "\n"
endif endif
endfor endfor
echo menu[:-2] echo menu[:-2]
@ -44,9 +61,9 @@ function! s:menu(items) abort
elseif index(keys(items), nr2char(nr)) != -1 elseif index(keys(items), nr2char(nr)) != -1
let selected = nr2char(nr) let selected = nr2char(nr)
elseif nr2char(nr) ==# 'j' elseif nr2char(nr) ==# 'j'
let selected = keys(items)[index(keys(items), selected) + 1] let selected = s:nextItem(keys(items), selected)
elseif nr2char(nr) ==# 'k' elseif nr2char(nr) ==# 'k'
let selected = keys(items)[index(keys(items), selected) - 1] let selected = s:previousItem(keys(items), selected)
endif endif
redraw redraw
endwhile endwhile