Skip to content

Commit

Permalink
Merge branch 'dev': Bump up version to 1.1.0
Browse files Browse the repository at this point in the history
  • Loading branch information
haya14busa committed May 3, 2015
2 parents 1ed6367 + b46682d commit 60ffb2f
Show file tree
Hide file tree
Showing 16 changed files with 1,344 additions and 229 deletions.
309 changes: 174 additions & 135 deletions autoload/incsearch.vim

Large diffs are not rendered by default.

45 changes: 45 additions & 0 deletions autoload/incsearch/config.vim
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
"=============================================================================
" FILE: autoload/incsearch/config.vim
" AUTHOR: haya14busa
" License: MIT license
"=============================================================================
scriptencoding utf-8
let s:save_cpo = &cpo
set cpo&vim

let s:TRUE = !0
let s:FALSE = 0
lockvar s:TRUE s:FALSE

"" incsearch config
" TODO: more detail documentation
" @command is equivalent with base_key TODO: fix this inconsistence
" @count1 default: v:count1 secret
" @mode default: mode(1) secret
let s:config = {
\ 'command': '/',
\ 'is_stay': s:FALSE,
\ 'is_expr': s:FALSE,
\ 'pattern': '',
\ 'mode': 'n',
\ 'count1': 1,
\ 'modules': []
\ }

" @return config for lazy value
function! s:lazy_config() abort
let m = mode(1)
return {'count1': v:count1, 'mode': m, 'is_expr': (m is# 'no')}
endfunction

" @return config with default value
function! incsearch#config#make(additional) abort
let default = extend(copy(s:config), s:lazy_config())
let c = extend(default, a:additional)
return c
endfunction

let &cpo = s:save_cpo
unlet s:save_cpo
" __END__
" vim: expandtab softtabstop=2 shiftwidth=2 foldmethod=marker
110 changes: 90 additions & 20 deletions autoload/vital/_incsearch/Coaster/Highlight.vim
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,24 @@ scriptencoding utf-8
let s:save_cpo = &cpo
set cpo&vim


function! s:_vital_loaded(V)
let s:V = a:V
let s:Window = a:V.import("Coaster.Window")
let s:Gift = a:V.import("Gift")
call s:_init()
endfunction


function! s:_vital_depends()
return [
\ "Coaster.Window",
\ "Gift",
\ ]
endfunction



let s:base = {
\ "variables" : {
\ "hl_list" : {},
Expand All @@ -17,6 +35,7 @@ function! s:base.add(name, group, pattern, ...)
\ "group" : a:group,
\ "pattern" : a:pattern,
\ "priority" : priority,
\ "name" : a:name,
\ }
endfunction

Expand All @@ -31,9 +50,28 @@ function! s:base.hl_list()
endfunction


function! s:base.to_list()
return values(self.variables.hl_list)
endfunction


function! s:_is_equal(__expr, __hl)
let name = a:__hl.name
let group = a:__hl.group
let pattern = a:__hl.pattern
let priority = a:__hl.priority
return eval(a:__expr)
endfunction


function! s:base.to_list_by(expr)
return filter(values(self.variables.hl_list), "s:_is_equal(a:expr, v:val)")
endfunction


function! s:base.enable_list(...)
let bufnr = get(a:, 1, bufnr("%"))
return keys(get(self.variables.id_list, bufnr, {}))
let window = get(a:, 1, s:Gift.uniq_winnr())
return keys(get(self.variables.id_list, window, {}))
endfunction


Expand All @@ -46,14 +84,7 @@ endfunction


function! s:base.delete_by(expr)
for [name, _] in items(self.variables.hl_list)
let group = _.group
let pattern = _.pattern
let priority = _.priority
if eval(a:expr)
call self.delete(name)
endif
endfor
return map(self.to_list_by(a:expr), "self.delete(v:val.name)")
endfunction


Expand All @@ -65,14 +96,14 @@ endfunction


function! s:base.get_hl_id(name, ...)
let bufnr = get(a:, 1, bufnr("%"))
return get(get(self.variables.id_list, bufnr, {}), a:name, "")
let window = get(a:, 1, s:Gift.uniq_winnr())
return get(get(self.variables.id_list, window, {}), a:name, "")
endfunction


function! s:base.is_enabled(name, ...)
let bufnr = get(a:, 1, bufnr("%"))
return self.get_hl_id(a:name, bufnr) != ""
let window = get(a:, 1, s:Gift.uniq_winnr())
return self.get_hl_id(a:name, window) != ""
endfunction


Expand All @@ -84,10 +115,11 @@ function! s:base.enable(name)
if self.is_enabled(a:name)
call self.disable(a:name)
endif
if !has_key(self.variables.id_list, bufnr("%"))
let self.variables.id_list[bufnr("%")] = {}
let winnr = s:Gift.uniq_winnr()
if !has_key(self.variables.id_list, winnr)
let self.variables.id_list[winnr] = {}
endif
let self.variables.id_list[bufnr("%")][a:name] = matchadd(hl.group, hl.pattern, hl.priority)
let self.variables.id_list[winnr][a:name] = matchadd(hl.group, hl.pattern, hl.priority)
endfunction


Expand All @@ -107,8 +139,8 @@ function! s:base.disable(name)
if id == -1
return -1
endif
let bufnr = bufnr("%")
unlet! self.variables.id_list[bufnr][a:name]
let winnr = get(a:, 1, s:Gift.uniq_winnr())
unlet! self.variables.id_list[winnr][a:name]
endfunction


Expand All @@ -119,6 +151,18 @@ function! s:base.disable_all()
endfunction


function! s:base.update(name)
call self.disable(a:name)
call self.enable(a:name)
endfunction


function! s:base.update_all()
call self.disable_all()
call self.enable_all()
endfunction


function! s:base.highlight(name, group, pattern, ...)
let priority = get(a:, 1, 10)
call self.add(a:name, a:group, a:pattern, priority)
Expand All @@ -138,13 +182,19 @@ function! s:base.clear_all()
endfunction


function! s:base.as_windo()
return self.windo
endfunction


function! s:make()
let result = deepcopy(s:base)
let result.windo = s:Window.as_windo(result)
return result
endfunction


let s:global = s:make()
let s:global = deepcopy(s:base)
let s:funcs = keys(filter(copy(s:global), "type(v:val) == type(function('tr'))"))

for s:name in s:funcs
Expand All @@ -156,5 +206,25 @@ endfor
unlet s:name


function! s:_init()
let s:global.windo = s:Window.as_windo(s:global)
endfunction

" function! s:matchadd(...)
" return {
" \ "id" : call("matchadd", a:000),
" \ "bufnr" : bufnr("%"),
" \ }
" endfunction
"
"
" function! s:matchdelete(id)
" if empty(a:id)
" return -1
" endif
" return s:Buffer.execute(a:id.bufnr, "call matchdelete(" . a:id.id . ")")
" endfunction


let &cpo = s:save_cpo
unlet s:save_cpo
53 changes: 53 additions & 0 deletions autoload/vital/_incsearch/Coaster/Window.vim
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
scriptencoding utf-8
let s:save_cpo = &cpo
set cpo&vim


function! s:_vital_loaded(V)
let s:V = a:V
let s:Buffer = a:V.import("Vim.Buffer")
endfunction


function! s:_vital_depends()
return [
\ "Vim.Buffer",
\ ]
endfunction


function! s:windo(func, args, ...)
let dict = get(a:, 1, {})
if len(tabpagebuflist()) <= 1 || s:Buffer.is_cmdwin()
return call(a:func, a:args, dict)
endif
let pre_winnr = winnr()

noautocmd windo call call(a:func, a:args, dict)

if pre_winnr == winnr()
return
endif
execute pre_winnr . "wincmd w"
endfunction


function! s:as_windo(base)
let windo = {}
let windo.obj = a:base
for [key, Value] in items(a:base)
if type(function("tr")) == type(Value)
execute
\ "function! windo.". key. "(...)\n"
\ " return s:windo(self.obj." . key . ", a:000, self.obj)\n"
\ "endfunction"
endif
unlet Value
endfor
return windo
endfunction



let &cpo = s:save_cpo
unlet s:save_cpo
1 change: 0 additions & 1 deletion autoload/vital/_incsearch/Data/List.vim
Original file line number Diff line number Diff line change
Expand Up @@ -268,7 +268,6 @@ function! s:with_index(list, ...) abort
endfunction

" similar to Ruby's detect or Haskell's find.
" TODO spec and doc
function! s:find(list, default, f) abort
for x in a:list
if eval(substitute(a:f, 'v:val', string(x), 'g'))
Expand Down

0 comments on commit 60ffb2f

Please sign in to comment.