mirror of
https://github.com/SpaceVim/SpaceVim.git
synced 2025-02-09 12:10:05 +08:00
Fix menu
This commit is contained in:
parent
27e8957136
commit
c070505edf
@ -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
|
||||||
|
Loading…
Reference in New Issue
Block a user