Skip to content

Commit

Permalink
Update vital
Browse files Browse the repository at this point in the history
  • Loading branch information
haya14busa committed Feb 23, 2015
1 parent 607fb0e commit 6b1794f
Show file tree
Hide file tree
Showing 13 changed files with 394 additions and 86 deletions.
3 changes: 1 addition & 2 deletions autoload/vital/_easymotion.vim
@@ -1,4 +1,5 @@
let s:self_version = expand('<sfile>:t:r')
let s:self_file = expand('<sfile>')

" Note: The extra argument to globpath() was added in Patch 7.2.051.
let s:globpath_third_arg = v:version > 702 || v:version == 702 && has('patch51')
Expand Down Expand Up @@ -300,5 +301,3 @@ endfunction
function! vital#{s:self_version}#new() abort
return s:_import('')
endfunction

let s:self_file = s:_unify_path(expand('<sfile>'))
119 changes: 82 additions & 37 deletions autoload/vital/_easymotion/Over/Commandline/Base.vim
Expand Up @@ -8,11 +8,14 @@ function! s:_vital_loaded(V)
let s:String = s:V.import("Over.String")
let s:Signals = s:V.import("Over.Signals")
let s:Input = s:V.import("Over.Input")
let s:Keymapping = s:V.import("Over.Keymapping")
let s:Module = s:V.import("Over.Commandline.Modules")
let s:base.variables.modules = s:Signals.make()
function! s:base.variables.modules.get_slot(val)
return a:val.slot.module
endfunction

let s:Highlight = s:V.import("Palette.Highlight")
endfunction


Expand All @@ -21,7 +24,9 @@ function! s:_vital_depends()
\ "Over.String",
\ "Over.Signals",
\ "Over.Input",
\ "Over.Keymapping",
\ "Over.Commandline.Modules",
\ "Palette.Highlight",
\ ]
endfunction

Expand Down Expand Up @@ -49,6 +54,7 @@ let s:base = {
\ "exit" : 0,
\ "keymapping" : {},
\ "suffix" : "",
\ "is_setted" : 0,
\ },
\ "highlights" : {
\ "prompt" : "NONE",
Expand Down Expand Up @@ -85,8 +91,9 @@ function! s:base.setchar(char, ...)
" 1 の場合は既に設定されていても上書きする
" 0 の場合は既に設定されていれば上書きしない
let overwrite = get(a:, 1, 1)
if overwrite || self.variables.input == self.char()
if overwrite || self.variables.is_setted == 0
let self.variables.input = a:char
let self.variables.is_setted = 1
endif
endfunction

Expand Down Expand Up @@ -219,10 +226,9 @@ endfunction


function! s:base.cnoremap(lhs, rhs)
let self.variables.keymapping[a:lhs] = {
\ "key" : a:rhs,
\ "noremap" : 1,
\ }
let key = s:Keymapping.as_key_config(a:rhs)
let key.noremap = 1
let self.variables.keymapping[a:lhs] = key
endfunction


Expand Down Expand Up @@ -359,11 +365,34 @@ function! s:base._init_variables()
endfunction


function! s:_is_valid_highlight(name)
let highlight = s:Highlight.get(a:name)
if empty(highlight)
return 0
endif

if has("gui_running")
\ && (has_key(highlight, "guifg") || has_key(highlight, "guibg"))
return 1
elseif (has_key(highlight, "ctermfg") || has_key(highlight, "ctermbg"))
return 1
endif
return 0
endfunction


function! s:base._init()
call self._init_variables()
call self.hl_cursor_off()
if !hlexists(self.highlights.cursor)
execute "highlight link " . self.highlights.cursor . " Cursor"
if s:_is_valid_highlight("Cursor")
execute "highlight link " . self.highlights.cursor . " Cursor"
else
" Workaround by CUI Vim Cursor Highlight
" issues #92
" https://github.com/osyo-manga/vital-over/issues/92
execute "highlight " . self.highlights.cursor . " term=reverse cterm=reverse gui=reverse"
endif
endif
if !hlexists(self.highlights.cursor_on)
execute "highlight link " . self.highlights.cursor_on . " " . self.highlights.cursor
Expand Down Expand Up @@ -394,16 +423,26 @@ function! s:base._input_char(char)
let self.variables.input_key = char
let self.variables.char = char
call self.setchar(self.variables.char)
let self.variables.is_setted = 0
call self.callevent("on_char_pre")
call self.insert(self.variables.input)
call self.callevent("on_char")
endfunction


function! s:base._input(input, ...)
if a:input == ""
return
endif

let self.variables.input_key = a:input
if a:0 == 0
let keymapping = self._get_keymapping()
else
let keymapping = a:1
endif
if self.is_enable_keymapping()
let key = s:_unmap(self._get_keymapping(), a:input)
let key = s:Keymapping.unmapping(keymapping, a:input)
else
let key = a:input
endif
Expand All @@ -418,6 +457,40 @@ function! s:base._input(input, ...)
endfunction


function! s:is_input_waiting(keymapping, input)
let num = len(filter(copy(a:keymapping), 'stridx(v:key, a:input) == 0'))
return num > 1 || (num == 1 && !has_key(a:keymapping, a:input))
endfunction


function! s:base._inputting()
if !self.is_enable_keymapping()
return self._input(s:Input.getchar())
endif

let input = s:Input.getchar()
let old_line = self.getline()
let old_pos = self.getpos()
let old_forward = self.forward()
let old_backward = self.backward()
let keymapping = self._get_keymapping()
try
let t = reltime()
while s:is_input_waiting(keymapping, input)
\ && str2nr(reltimestr(reltime(t))) * 1000 < &timeoutlen
call self.setline(old_backward . input . old_forward)
call self.setpos(old_pos)
call self.draw()
let input .= s:Input.getchar(0)
endwhile
finally
call self.setline(old_line)
call self.setpos(old_pos)
endtry
call self._input(input, keymapping)
endfunction


function! s:base._update()
" call self.callevent("on_update")
" if !getchar(1)
Expand All @@ -428,7 +501,8 @@ function! s:base._update()
" call self.draw()

call self.callevent("on_update")
call self._input(s:Input.getchar())
call self._inputting()
" call self._input(s:Input.getchar())
if self._is_exit()
return -1
endif
Expand Down Expand Up @@ -473,35 +547,6 @@ function! s:base._is_exit()
endfunction


function! s:_as_key_config(config)
let base = {
\ "noremap" : 0,
\ "lock" : 0,
\ }
return type(a:config) == type({}) ? extend(base, a:config)
\ : extend(base, {
\ "key" : a:config,
\ })
endfunction


function! s:_unmap(mapping, key)
let keys = s:String.split_by_keys(a:key)
if len(keys) > 1
return join(map(keys, 's:_unmap(a:mapping, v:val)'), '')
endif
if !has_key(a:mapping, a:key)
return a:key
endif
let rhs = s:_as_key_config(a:mapping[a:key])
let next = s:_as_key_config(get(a:mapping, rhs.key, {}))
if rhs.noremap && next.lock == 0
return rhs.key
endif
return s:_unmap(a:mapping, rhs.key)
endfunction


function! s:base._get_keymapping()
let result = {}
" for module in values(self.variables.modules)
Expand Down
Expand Up @@ -101,11 +101,15 @@ endfunction

function! s:module.on_char_pre(cmdline)
if a:cmdline.is_input("<Over>(buffer-complete)")
\ || a:cmdline.is_input("<Over>(buffer-complete-prev)")
if self.complete(a:cmdline) == -1
call s:_finish()
call a:cmdline.setchar('')
return
endif
if a:cmdline.is_input("<Over>(buffer-complete-prev)")
let s:count = len(s:complete_list) - 1
endif
call a:cmdline.setchar('')
call a:cmdline.tap_keyinput("Completion")
" elseif a:cmdline.is_input("\<Tab>", "Completion")
Expand All @@ -116,7 +120,8 @@ function! s:module.on_char_pre(cmdline)
if s:count >= len(s:complete_list)
let s:count = 0
endif
elseif a:cmdline.is_input("\<Left>", "Completion")
elseif a:cmdline.is_input("<Over>(buffer-complete-prev)", "Completion")
\ || a:cmdline.is_input("\<Left>", "Completion")
call a:cmdline.setchar('')
let s:count -= 1
if s:count < 0
Expand Down
Expand Up @@ -21,11 +21,11 @@ function! s:module.on_char_pre(cmdline)
elseif a:cmdline.is_input("\<C-w>")
let word = a:cmdline.backward_word()
let backward = a:cmdline.backward()[ : -strlen(word)-1 ]
call a:cmdline.setline(backward . a:cmdline.line.pos_word() . a:cmdline.forward())
call a:cmdline.setline(backward . a:cmdline.line.pos_char() . a:cmdline.forward())
call a:cmdline.setline(strchars(backward))
call a:cmdline.setchar('')
elseif a:cmdline.is_input("\<C-u>")
call a:cmdline.setline(a:cmdline.line.pos_word() . a:cmdline.forward())
call a:cmdline.setline(a:cmdline.line.pos_char() . a:cmdline.forward())
call a:cmdline.setline(0)
call a:cmdline.setchar('')
endif
Expand Down
Expand Up @@ -39,7 +39,7 @@ endfunction

let s:old_width = 0
function! s:_redraw(cmdline)
let left = a:cmdline.get_prompt() . a:cmdline.getline() . (empty(a:cmdline.line.pos_word()) ? " " : "")
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() != ""
Expand Down Expand Up @@ -71,14 +71,14 @@ endfunction


function! s:module.on_draw_pre(cmdline)
if empty(a:cmdline.line.pos_word())
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_word())
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_word())), 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,
Expand Down Expand Up @@ -106,17 +106,17 @@ function! s:module.on_draw(cmdline)
" call s:echon(a:cmdline.get_prompt())
" echohl NONE
" call s:echon(a:cmdline.backward())
" if empty(a:cmdline.line.pos_word())
" 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_word())
" 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_word())), 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

Expand Down
Expand Up @@ -4,13 +4,13 @@ set cpo&vim


function! s:_vital_loaded(V)
let s:Keymapping = a:V.import("Over.Keymapping")
let s:Keymapping = a:V.import("Palette.Keymapping")
endfunction


function! s:_vital_depends()
return [
\ "Over.Keymapping",
\ "Palette.Keymapping",
\ ]
endfunction

Expand Down Expand Up @@ -87,12 +87,13 @@ let s:vim_cmdline_mapping = {

function! s:_auto_cmap()
let cmaps = {}
let cmap_info = s:Keymapping.cmap_rhss(0, 1)
" vital-over currently doesn't support <expr> nor <buffer> mappings
for c in filter(cmap_info, "v:val['expr'] ==# 0 && v:val['buffer'] ==# 0")
let cmaps[s:Keymapping.escape_key(c['lhs'])] = {
let cmap_info = s:Keymapping.rhs_key_list("c", 0, 1)
" vital-over currently doesn't support <buffer> mappings
for c in filter(cmap_info, "v:val['buffer'] ==# 0")
let cmaps[s:Keymapping.escape_special_key(c['lhs'])] = {
\ 'noremap' : c['noremap'],
\ 'key' : s:Keymapping.escape_key(c['rhs']),
\ 'key' : s:Keymapping.escape_special_key(c['rhs']),
\ 'expr' : s:Keymapping.escape_special_key(c['expr']),
\ }
endfor
return cmaps
Expand All @@ -108,6 +109,7 @@ function! s:vim_cmdline_mapping.keymapping(cmdline)
return self._cmaps
endfunction


function! s:make_vim_cmdline_mapping()
return deepcopy(s:vim_cmdline_mapping)
endfunction
Expand Down
Expand Up @@ -15,7 +15,6 @@ endfunction

function! s:module.on_char_pre(cmdline)
if self.is_no_insert(a:cmdline.char())
\ && a:cmdline.char() == a:cmdline.variables.input
call a:cmdline.setchar("", 0)
endif
endfunction
Expand Down

0 comments on commit 6b1794f

Please sign in to comment.