From e2e3ae789d1a07fd36d04713690c20a901bb8e1e Mon Sep 17 00:00:00 2001 From: wsdjeg Date: Sat, 22 Apr 2017 01:37:23 +0800 Subject: [PATCH 1/8] Add undo mode --- autoload/SpaceVim.vim | 2 +- autoload/SpaceVim/mapping/guide.vim | 20 +++++++++++++++++--- 2 files changed, 18 insertions(+), 4 deletions(-) diff --git a/autoload/SpaceVim.vim b/autoload/SpaceVim.vim index 1e1b8cbdf..06a8f7ab4 100644 --- a/autoload/SpaceVim.vim +++ b/autoload/SpaceVim.vim @@ -469,7 +469,7 @@ function! SpaceVim#end() abort endif let g:leaderGuide_max_size = 15 let g:leaderGuide_submode_mappings = - \ { '': 'win_close', '': 'page_down', '': 'page_up'} + \ { '': 'win_close', '': 'page_down', '': 'page_up', 'u' : 'undo'} call SpaceVim#plugins#load() endfunction diff --git a/autoload/SpaceVim/mapping/guide.vim b/autoload/SpaceVim/mapping/guide.vim index c73b57cb0..af59ac76a 100644 --- a/autoload/SpaceVim/mapping/guide.vim +++ b/autoload/SpaceVim/mapping/guide.vim @@ -292,7 +292,7 @@ function! s:create_string(layout) " {{{ call insert(r, '') let output = join(r, "\n ") cnoremap - cnoremap submode + cnoremap paging_help return output endfunction " }}} @@ -328,7 +328,6 @@ function! s:handle_input(input) " {{{ if type(a:input) ==? type({}) let s:lmap = a:input let s:guide_group = a:input - let g:guide_group = a:input call s:start_buffer() else let s:prefix_key_inp = '' @@ -347,7 +346,7 @@ function! s:wait_for_input() " {{{ if inp ==? '' let s:prefix_key_inp = '' call s:winclose() - elseif match(inp, "^submode") == 0 + elseif match(inp, "^paging_help") == 0 call s:submode_mappings() else if inp == ' ' @@ -407,6 +406,12 @@ function! s:updateStatusline() abort \ SpaceVim#mapping#leader#getName(s:prefix_key) \ . get(s:, 'prefix_key_inp', '') . gname \ . '%#LeaderGuiderSep2#%#LeaderGuiderFill#' + \ . s:guide_help_msg() +endfunction + +function! s:guide_help_msg() abort + let msg = '[C-h\ paging/help]' + return msg endfunction function! s:winclose() " {{{ @@ -426,6 +431,12 @@ function! s:page_down() " {{{ redraw! call s:wait_for_input() endfunction " }}} +function! s:page_undo() " {{{ + call feedkeys("\", "n") + redraw! + let s:lmap = s:lmap_undo + call s:start_buffer() +endfunction " }}} function! s:page_up() " {{{ call feedkeys("\", "n") call feedkeys("\", "x") @@ -438,6 +449,8 @@ function! s:handle_submode_mapping(cmd) " {{{ call s:page_down() elseif a:cmd ==? 'page_up' call s:page_up() + elseif a:cmd ==? 'undo' + call s:page_undo() elseif a:cmd ==? 'win_close' call s:winclose() endif @@ -504,6 +517,7 @@ function! SpaceVim#mapping#guide#start_by_prefix(vis, key) " {{{ let rundict = s:cached_dicts[a:key] endif let s:lmap = rundict + let s:lmap_undo = rundict call s:start_buffer() endfunction " }}} From 358ab08da653b4f3fc2c759598324ba53597a3df Mon Sep 17 00:00:00 2001 From: wsdjeg Date: Sat, 22 Apr 2017 01:46:31 +0800 Subject: [PATCH 2/8] Fix statusline --- autoload/SpaceVim/mapping/guide.vim | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/autoload/SpaceVim/mapping/guide.vim b/autoload/SpaceVim/mapping/guide.vim index af59ac76a..562761fc2 100644 --- a/autoload/SpaceVim/mapping/guide.vim +++ b/autoload/SpaceVim/mapping/guide.vim @@ -347,6 +347,7 @@ function! s:wait_for_input() " {{{ let s:prefix_key_inp = '' call s:winclose() elseif match(inp, "^paging_help") == 0 + let s:guide_help_mode = 1 call s:submode_mappings() else if inp == ' ' @@ -410,8 +411,12 @@ function! s:updateStatusline() abort endfunction function! s:guide_help_msg() abort - let msg = '[C-h\ paging/help]' - return msg + if s:guide_help_mode == 1 + let msg = 'n -> next-page, p -> previous-page, u -> undo-key, h -> help, a -> abort' + else + let msg = '[C-h paging/help]' + endif + return substitute(msg,' ', '\\ ', 'g') endfunction function! s:winclose() " {{{ @@ -456,6 +461,7 @@ function! s:handle_submode_mapping(cmd) " {{{ endif endfunction " }}} function! s:submode_mappings() " {{{ + call s:updateStatusline() let submodestring = "" let maplist = [] for key in items(g:leaderGuide_submode_mappings) @@ -466,7 +472,7 @@ function! s:submode_mappings() " {{{ execute 'cnoremap '.key[0].' '.key[1].'' let submodestring = submodestring.' '.key[0].': '.key[1].',' endfor - let inp = input(strpart(submodestring, 0, strlen(submodestring)-1)) + let inp = input('') for map in maplist call s:mapmaparg(map) endfor @@ -493,6 +499,7 @@ function! s:get_register() "{{{ return clip endfunction "}}} function! SpaceVim#mapping#guide#start_by_prefix(vis, key) " {{{ + let s:guide_help_mode = 0 let s:vis = a:vis ? 'gv' : '' let s:count = v:count != 0 ? v:count : '' let s:toplevel = a:key ==? ' ' From 6b2cf66ceba39af4c78b0cda916d6b8b3690bab9 Mon Sep 17 00:00:00 2001 From: wsdjeg Date: Sat, 22 Apr 2017 07:16:22 +0800 Subject: [PATCH 3/8] Fix undo key --- autoload/SpaceVim/mapping/guide.vim | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/autoload/SpaceVim/mapping/guide.vim b/autoload/SpaceVim/mapping/guide.vim index 562761fc2..e240c58d6 100644 --- a/autoload/SpaceVim/mapping/guide.vim +++ b/autoload/SpaceVim/mapping/guide.vim @@ -292,7 +292,7 @@ function! s:create_string(layout) " {{{ call insert(r, '') let output = join(r, "\n ") cnoremap - cnoremap paging_help + cnoremap paging_help return output endfunction " }}} @@ -348,6 +348,8 @@ function! s:wait_for_input() " {{{ call s:winclose() elseif match(inp, "^paging_help") == 0 let s:guide_help_mode = 1 + call s:updateStatusline() + redraw! call s:submode_mappings() else if inp == ' ' @@ -412,9 +414,9 @@ endfunction function! s:guide_help_msg() abort if s:guide_help_mode == 1 - let msg = 'n -> next-page, p -> previous-page, u -> undo-key, h -> help, a -> abort' + let msg = ' n -> next-page, p -> previous-page, u -> undo-key, h -> help, a -> abort' else - let msg = '[C-h paging/help]' + let msg = ' [C-h paging/help]' endif return substitute(msg,' ', '\\ ', 'g') endfunction @@ -437,8 +439,7 @@ function! s:page_down() " {{{ call s:wait_for_input() endfunction " }}} function! s:page_undo() " {{{ - call feedkeys("\", "n") - redraw! + call s:winclose() let s:lmap = s:lmap_undo call s:start_buffer() endfunction " }}} @@ -450,6 +451,7 @@ function! s:page_up() " {{{ endfunction " }}} function! s:handle_submode_mapping(cmd) " {{{ + let s:guide_help_mode = 0 if a:cmd ==? 'page_down' call s:page_down() elseif a:cmd ==? 'page_up' @@ -461,8 +463,6 @@ function! s:handle_submode_mapping(cmd) " {{{ endif endfunction " }}} function! s:submode_mappings() " {{{ - call s:updateStatusline() - let submodestring = "" let maplist = [] for key in items(g:leaderGuide_submode_mappings) let map = maparg(key[0], "c", 0, 1) @@ -470,7 +470,6 @@ function! s:submode_mappings() " {{{ call add(maplist, map) endif execute 'cnoremap '.key[0].' '.key[1].'' - let submodestring = submodestring.' '.key[0].': '.key[1].',' endfor let inp = input('') for map in maplist From addb138cacf85480df6eea2b18882faffcdaa35b Mon Sep 17 00:00:00 2001 From: wsdjeg Date: Sat, 22 Apr 2017 08:04:57 +0800 Subject: [PATCH 4/8] Fix clossing window --- autoload/SpaceVim/mapping/guide.vim | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/autoload/SpaceVim/mapping/guide.vim b/autoload/SpaceVim/mapping/guide.vim index e240c58d6..a3d21f9d3 100644 --- a/autoload/SpaceVim/mapping/guide.vim +++ b/autoload/SpaceVim/mapping/guide.vim @@ -319,6 +319,9 @@ function! s:start_buffer() " {{{ silent 1put!=string normal! gg"_dd setlocal nomodifiable + if empty(maparg("", "c", 0, 1)) + execute 'cnoremap ' + endif call s:wait_for_input() endfunction " }}} " @vimlint(EVL102, 0, l:string) @@ -452,6 +455,7 @@ endfunction " }}} function! s:handle_submode_mapping(cmd) " {{{ let s:guide_help_mode = 0 + call s:updateStatusline() if a:cmd ==? 'page_down' call s:page_down() elseif a:cmd ==? 'page_up' From 6cf831e6928659b125f1c7e6dcab0cc4ac4c8d2a Mon Sep 17 00:00:00 2001 From: wsdjeg Date: Sat, 22 Apr 2017 08:21:27 +0800 Subject: [PATCH 5/8] Reset statusline after undo --- autoload/SpaceVim.vim | 5 ++--- autoload/SpaceVim/mapping/guide.vim | 8 +++++++- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/autoload/SpaceVim.vim b/autoload/SpaceVim.vim index 06a8f7ab4..f63d1d9ec 100644 --- a/autoload/SpaceVim.vim +++ b/autoload/SpaceVim.vim @@ -356,7 +356,8 @@ endif let g:spacevim_leader_guide_max_size = 0 if !exists("g:leaderGuide_submode_mappings") - let g:leaderGuide_submode_mappings = {'': "win_close"} + let g:leaderGuide_submode_mappings = + \ { '': 'win_close', 'n': 'page_down', 'p': 'page_up', 'u' : 'undo'} endif let g:spacevim_leader_guide_submode_mappings = {'': "win_close"} @@ -468,8 +469,6 @@ function! SpaceVim#end() abort vnoremap :LeaderGuideVisual get(g:, 'mapleader', '\') endif let g:leaderGuide_max_size = 15 - let g:leaderGuide_submode_mappings = - \ { '': 'win_close', '': 'page_down', '': 'page_up', 'u' : 'undo'} call SpaceVim#plugins#load() endfunction diff --git a/autoload/SpaceVim/mapping/guide.vim b/autoload/SpaceVim/mapping/guide.vim index a3d21f9d3..debbc330f 100644 --- a/autoload/SpaceVim/mapping/guide.vim +++ b/autoload/SpaceVim/mapping/guide.vim @@ -417,7 +417,7 @@ endfunction function! s:guide_help_msg() abort if s:guide_help_mode == 1 - let msg = ' n -> next-page, p -> previous-page, u -> undo-key, h -> help, a -> abort' + let msg = ' n -> next-page, p -> previous-page, u -> undo-key' else let msg = ' [C-h paging/help]' endif @@ -443,6 +443,8 @@ function! s:page_down() " {{{ endfunction " }}} function! s:page_undo() " {{{ call s:winclose() + let s:guide_group = {} + let s:prefix_key_inp = '' let s:lmap = s:lmap_undo call s:start_buffer() endfunction " }}} @@ -464,6 +466,10 @@ function! s:handle_submode_mapping(cmd) " {{{ call s:page_undo() elseif a:cmd ==? 'win_close' call s:winclose() + else + call feedkeys("\", "n") + redraw! + call s:wait_for_input() endif endfunction " }}} function! s:submode_mappings() " {{{ From c818ea090e72c3d25d1a47b9faf7cf9cea5cb955 Mon Sep 17 00:00:00 2001 From: wsdjeg Date: Sat, 22 Apr 2017 08:26:16 +0800 Subject: [PATCH 6/8] Change fg of help msg --- autoload/SpaceVim/mapping/guide.vim | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/autoload/SpaceVim/mapping/guide.vim b/autoload/SpaceVim/mapping/guide.vim index debbc330f..eace967ff 100644 --- a/autoload/SpaceVim/mapping/guide.vim +++ b/autoload/SpaceVim/mapping/guide.vim @@ -400,7 +400,7 @@ function! s:updateStatusline() abort hi! LeaderGuiderSep1 cterm=bold gui=bold guifg=#a89984 guibg=#fe8019 hi! LeaderGuiderName cterm=bold gui=bold guifg=#282828 guibg=#fe8019 hi! LeaderGuiderSep2 cterm=bold gui=bold guifg=#fe8019 guibg=#3c3836 - hi! LeaderGuiderFill guifg=#7c6f64 guibg=#3c3836 + hi! LeaderGuiderFill guifg=#a89984 guibg=#3c3836 let gname = get(s:guide_group, 'name', '') if !empty(gname) let gname = ' - ' . gname[1:] From 2ecd7c12714214cac1a0f6e6945182f91ca57636 Mon Sep 17 00:00:00 2001 From: wsdjeg Date: Sat, 22 Apr 2017 08:29:35 +0800 Subject: [PATCH 7/8] Fix gruvbox guide line theme --- autoload/SpaceVim/mapping/guide.vim | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/autoload/SpaceVim/mapping/guide.vim b/autoload/SpaceVim/mapping/guide.vim index eace967ff..2155ba306 100644 --- a/autoload/SpaceVim/mapping/guide.vim +++ b/autoload/SpaceVim/mapping/guide.vim @@ -397,9 +397,9 @@ endfunction " }}} function! s:updateStatusline() abort hi! LeaderGuiderPrompt cterm=bold gui=bold guifg=#282828 guibg=#a89984 - hi! LeaderGuiderSep1 cterm=bold gui=bold guifg=#a89984 guibg=#fe8019 - hi! LeaderGuiderName cterm=bold gui=bold guifg=#282828 guibg=#fe8019 - hi! LeaderGuiderSep2 cterm=bold gui=bold guifg=#fe8019 guibg=#3c3836 + hi! LeaderGuiderSep1 cterm=bold gui=bold guifg=#a89984 guibg=#504945 + hi! LeaderGuiderName cterm=bold gui=bold guifg=#a89984 guibg=#504945 + hi! LeaderGuiderSep2 cterm=bold gui=bold guifg=#504945 guibg=#3c3836 hi! LeaderGuiderFill guifg=#a89984 guibg=#3c3836 let gname = get(s:guide_group, 'name', '') if !empty(gname) From b516e9f81c2c8794ba867ae65fcb7a492b68eb41 Mon Sep 17 00:00:00 2001 From: wsdjeg Date: Sat, 22 Apr 2017 08:33:15 +0800 Subject: [PATCH 8/8] Add space into guide statusline --- autoload/SpaceVim/mapping/guide.vim | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/autoload/SpaceVim/mapping/guide.vim b/autoload/SpaceVim/mapping/guide.vim index 2155ba306..734e7603e 100644 --- a/autoload/SpaceVim/mapping/guide.vim +++ b/autoload/SpaceVim/mapping/guide.vim @@ -406,12 +406,12 @@ function! s:updateStatusline() abort let gname = ' - ' . gname[1:] let gname = substitute(gname,' ', '\\ ', 'g') endif - exe 'setlocal statusline=%#LeaderGuiderPrompt#\ Mapping\ Guide:\ ' . + exe 'setlocal statusline=%#LeaderGuiderPrompt#\ Guide:\ ' . \ '%#LeaderGuiderSep1#' . - \ '%#LeaderGuiderName#' . + \ '%#LeaderGuiderName#\ ' . \ SpaceVim#mapping#leader#getName(s:prefix_key) \ . get(s:, 'prefix_key_inp', '') . gname - \ . '%#LeaderGuiderSep2#%#LeaderGuiderFill#' + \ . '\ %#LeaderGuiderSep2#%#LeaderGuiderFill#' \ . s:guide_help_msg() endfunction