diff --git a/autoload/EasyMotion/command_line.vim b/autoload/EasyMotion/command_line.vim index 21c4b4e..f55e660 100644 --- a/autoload/EasyMotion/command_line.vim +++ b/autoload/EasyMotion/command_line.vim @@ -38,7 +38,7 @@ let s:search = s:cmdline.make() let s:search.highlights.prompt = 'Question' " Add Module: {{{ -call s:search.connect(s:modules.get("Execute").make_no_execute()) +call s:search.connect('Execute') call s:search.connect('Cancel') call s:search.connect('Redraw') call s:search.connect('Delete') @@ -169,7 +169,7 @@ function! EasyMotion#command_line#GetInput(num_strokes, prev, direction) "{{{ let s:num_strokes = a:num_strokes let s:prompt_base = s:getPromptMessage(a:num_strokes) - let s:search.set_prompt(s:prompt_base) + call s:search.set_prompt(s:prompt_base) " Screen: cursor position, first and last line let s:orig_pos = getpos('.') diff --git a/autoload/vital/_easymotion/Over/Commandline/Base.vim b/autoload/vital/_easymotion/Over/Commandline/Base.vim index e8c5ec5..67e7f82 100644 --- a/autoload/vital/_easymotion/Over/Commandline/Base.vim +++ b/autoload/vital/_easymotion/Over/Commandline/Base.vim @@ -26,7 +26,7 @@ endfunction function! s:make(...) let result = deepcopy(s:base) - let result.set_prompt(get(a:, 1, ":")) + call result.set_prompt(get(a:, 1, ":")) call result.connect(result, "_") return result endfunction @@ -46,6 +46,7 @@ let s:base = { \ "tap_key" : "", \ "exit" : 0, \ "keymapping" : {}, +\ "suffix" : "", \ }, \ "highlights" : { \ "prompt" : "NONE", @@ -139,6 +140,16 @@ function! s:base.get_prompt() endfunction +function! s:base.set_suffix(str) + let self.variables.suffix = a:str +endfunction + + +function! s:base.get_suffix() + return self.variables.suffix +endfunction + + function! s:base.insert(word, ...) if a:0 call self.line.set(a:1) @@ -317,7 +328,7 @@ function! s:base._execute(command) execute a:command catch echohl ErrorMsg - echo matchstr(v:exception, 'Vim\((\w*)\)\?:\zs.*\ze') + echom matchstr(v:exception, 'Vim\((\w*)\)\?:\zs.*\ze') echohl None call self.callevent("on_execute_failed") finally @@ -346,7 +357,7 @@ function! s:base._main(...) call self.callevent("on_char") endwhile catch - echohl ErrorMsg | echo v:throwpoint . " " . v:exception | echohl None + echohl ErrorMsg | echom v:throwpoint . " " . v:exception | echohl None return -1 finally call self._finish() @@ -361,21 +372,34 @@ function! s:base._finish() endfunction +function! s:suffix(left, suffix) + let left_len = strdisplaywidth(a:left) + let len = &columns - left_len % &columns + let len = len + (&columns * (strdisplaywidth(a:suffix) > (len - 1))) - 1 + return printf("%" . len . "S", a:suffix) +endfunction + + +function! s:echon(expr) + echon strtrans(a:expr) +endfunction + function! s:_echo_cmdline(cmdline) - call s:redraw() + call a:cmdline.redraw() execute "echohl" a:cmdline.highlights.prompt - echon a:cmdline.get_prompt() + call s:echon(a:cmdline.get_prompt()) echohl NONE - echon a:cmdline.backward() + call s:echon(a:cmdline.backward()) if empty(a:cmdline.line.pos_word()) execute "echohl" a:cmdline.highlights.cursor - echon ' ' + call s:echon(' ') else execute "echohl" a:cmdline.highlights.cursor_on - echon a:cmdline.line.pos_word() + call s:echon(a:cmdline.line.pos_word()) endif echohl NONE - echon a:cmdline.forward() + call s:echon(a:cmdline.forward()) + call s:echon(s:suffix(a:cmdline.get_prompt() . a:cmdline.getline() . repeat(" ", empty(a:cmdline.line.pos_word())), a:cmdline.get_suffix())) endfunction @@ -422,10 +446,15 @@ function! s:base._get_keymapping() return extend(extend(result, self.variables.keymapping), self.keymapping()) endfunction - -function! s:redraw() +function! s:_redraw() +" normal! : redraw - echo "" +" echo "" +endfunction + + +function! s:base.redraw() + call s:_redraw() endfunction diff --git a/autoload/vital/_easymotion/Over/Commandline/Modules/Execute.vim b/autoload/vital/_easymotion/Over/Commandline/Modules/Execute.vim index 24c4725..cd8e737 100644 --- a/autoload/vital/_easymotion/Over/Commandline/Modules/Execute.vim +++ b/autoload/vital/_easymotion/Over/Commandline/Modules/Execute.vim @@ -3,6 +3,19 @@ let s:save_cpo = &cpo set cpo&vim +function! s:silent_feedkeys(expr, name, ...) + let mode = get(a:, 1, "m") + let map = printf("(%s)", a:name) + if mode == "n" + let command = "nnoremap" + else + let command = "nmap" + endif + execute command "" map printf("%s:nunmap %s", a:expr, map) + call feedkeys(printf("\(%s)", a:name)) +endfunction + + function! s:_is_input_enter(cmdline) return a:cmdline.is_input("\") \ || a:cmdline.is_input("\") @@ -36,28 +49,18 @@ function! s:make() endfunction -let s:empty = deepcopy(s:module) - -function! s:empty.execute(...) -endfunction - - -function! s:make_no_execute() - return deepcopy(s:empty) -endfunction - - let s:search = deepcopy(s:module) let s:search.prefix = "/" function! s:search.execute(cmdline) -" let cmd = printf("call feedkeys(\"%s%s\\", 'n')", self.prefix, a:cmdline.getline()) - let cmd = printf("call search('%s')", a:cmdline.getline()) - call a:cmdline.execute(cmd) - let @/ = a:cmdline.getline() - let &hlsearch = &hlsearch - call feedkeys(":set hlsearch | set incsearch\", 'n') + call s:silent_feedkeys(":call histdel('/', -1)\", "remove_hist", "n") + let cmd = printf("call s:silent_feedkeys(\"%s%s\\", 'search', 'n')", self.prefix, a:cmdline.getline()) + execute cmd +" let cmd = printf("call search('%s')", a:cmdline.getline()) +" call a:cmdline.execute(cmd) +" let @/ = a:cmdline.getline() +" call s:silent_feedkeys(":let &hlsearch = &hlsearch\", "hlsearch", "n") endfunction diff --git a/autoload/vital/_easymotion/Over/Commandline/Modules/NoInsert.vim b/autoload/vital/_easymotion/Over/Commandline/Modules/NoInsert.vim index 76dafb3..64d2b65 100644 --- a/autoload/vital/_easymotion/Over/Commandline/Modules/NoInsert.vim +++ b/autoload/vital/_easymotion/Over/Commandline/Modules/NoInsert.vim @@ -8,13 +8,13 @@ let s:module = { \} -function! s:module.is_insert(char) +function! s:module.is_no_insert(char) return index(self.chars, a:char) >= 0 endfunction function! s:module.on_char_pre(cmdline) - if self.is_insert(a:cmdline.char()) + if self.is_no_insert(a:cmdline.char()) \ && a:cmdline.char() == a:cmdline.variables.input call a:cmdline.setchar("", 0) endif @@ -30,7 +30,7 @@ endfunction function! s:make_special_chars() let module = s:make([]) - function! module.is_insert(char) + function! module.is_no_insert(char) return char2nr(a:char) == 128 || char2nr(a:char) < 27 endfunction return module diff --git a/autoload/vital/_easymotion/Over/Commandline/Modules/Redraw.vim b/autoload/vital/_easymotion/Over/Commandline/Modules/Redraw.vim index be4556a..93b14e0 100644 --- a/autoload/vital/_easymotion/Over/Commandline/Modules/Redraw.vim +++ b/autoload/vital/_easymotion/Over/Commandline/Modules/Redraw.vim @@ -29,9 +29,8 @@ function! s:module.on_leave(cmdline) endif endfunction -function! s:module.redraw(...) - redraw - echo "" +function! s:module.redraw(cmdline) + call a:cmdline.redraw() endfunction function! s:make()