" ___vital___ " NOTE: lines between '" ___vital___' is generated by :Vitalize. " Do not mofidify the code nor insert new lines before '" ___vital___' if v:version > 703 || v:version == 703 && has('patch1170') function! vital#_easymotion#Over#Commandline#Modules#DrawCommandline#import() abort return map({'suffix': '', 'make': ''}, 'function("s:" . v:key)') endfunction else function! s:_SID() abort return matchstr(expand(''), '\zs\d\+\ze__SID$') endfunction execute join(['function! vital#_easymotion#Over#Commandline#Modules#DrawCommandline#import() abort', printf("return map({'suffix': '', 'make': ''}, \"function('%s_' . v:key)\")", s:_SID()), 'endfunction'], "\n") delfunction s:_SID endif " ___vital___ scriptencoding utf-8 let s:save_cpo = &cpo set cpo&vim let s:module = { \ "name" : "DrawCommandline" \} let s:cmdheight = {} function! s:cmdheight.save() if has_key(self, "value") return endif let self.value = &cmdheight endfunction function! s:cmdheight.restore() if has_key(self, "value") let &cmdheight = self.value unlet self.value endif endfunction function! s:cmdheight.get() return self.value 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 repeat(" ", len - strdisplaywidth(a:suffix)) . a:suffix " return printf("%" . len . "S", a:suffix) endfunction let s:old_width = 0 function! s:_redraw(cmdline) let left = a:cmdline.get_prompt() . a:cmdline.getline() . (empty(a:cmdline.line.pos_char()) ? " " : "") let width = len(left) + 1 if a:cmdline.get_suffix() != "" let width += len(s:suffix(left, a:cmdline.get_suffix())) - 1 endif if &columns >= width && &columns <= s:old_width && s:old_width >= width redraw normal! : elseif &columns <= width normal! : else redraw endif let s:old_width = width call s:cmdheight.save() let height = max([(width - 1) / (&columns) + 1, s:cmdheight.get()]) if height > &cmdheight || &cmdheight > height let &cmdheight = height redraw endif endfunction function! s:_as_echon(str) return "echon " . strtrans(string(a:str)) endfunction function! s:module.on_draw_pre(cmdline) if empty(a:cmdline.line.pos_char()) let cursor = "echohl " . a:cmdline.highlights.cursor . " | echon ' '" else let cursor = "echohl " . a:cmdline.highlights.cursor_on . " | " . s:_as_echon(a:cmdline.line.pos_char()) endif let suffix = "" if a:cmdline.get_suffix() != "" let suffix = s:_as_echon(s:suffix(a:cmdline.get_prompt() . a:cmdline.getline() . repeat(" ", empty(a:cmdline.line.pos_char())), a:cmdline.get_suffix())) endif let self.draw_command = join([ \ "echohl " . a:cmdline.highlights.prompt, \ s:_as_echon(a:cmdline.get_prompt()), \ "echohl NONE", \ s:_as_echon(a:cmdline.backward()), \ cursor, \ "echohl NONE", \ s:_as_echon(a:cmdline.forward()), \ suffix, \ ], " | ") call s:_redraw(a:cmdline) endfunction function! s:_echon(expr) echon strtrans(a:expr) endfunction function! s:module.on_draw(cmdline) execute self.draw_command " execute "echohl" a:cmdline.highlights.prompt " call s:echon(a:cmdline.get_prompt()) " echohl NONE " call s:echon(a:cmdline.backward()) " if empty(a:cmdline.line.pos_char()) " execute "echohl" a:cmdline.highlights.cursor " call s:echon(' ') " else " execute "echohl" a:cmdline.highlights.cursor_on " call s:echon(a:cmdline.line.pos_char()) " endif " echohl NONE " call s:echon(a:cmdline.forward()) " if a:cmdline.get_suffix() != "" " call s:echon(s:suffix(a:cmdline.get_prompt() . a:cmdline.getline() . repeat(" ", empty(a:cmdline.line.pos_char())), a:cmdline.get_suffix())) " endif endfunction function! s:module.on_execute_pre(...) call s:cmdheight.restore() endfunction function! s:module.on_leave(...) call s:cmdheight.restore() endfunction function! s:make() return deepcopy(s:module) endfunction let &cpo = s:save_cpo unlet s:save_cpo