aboutsummaryrefslogtreecommitdiff
path: root/vim/bundle/tlib_vim/autoload/tlib/agent.vim
diff options
context:
space:
mode:
Diffstat (limited to 'vim/bundle/tlib_vim/autoload/tlib/agent.vim')
m---------vim/bundle/tlib_vim0
-rw-r--r--vim/bundle/tlib_vim/autoload/tlib/agent.vim665
2 files changed, 0 insertions, 665 deletions
diff --git a/vim/bundle/tlib_vim b/vim/bundle/tlib_vim
new file mode 160000
+Subproject 5636472e5dba1a4104376ce6bd93cc2546e0248
diff --git a/vim/bundle/tlib_vim/autoload/tlib/agent.vim b/vim/bundle/tlib_vim/autoload/tlib/agent.vim
deleted file mode 100644
index e61f24b..0000000
--- a/vim/bundle/tlib_vim/autoload/tlib/agent.vim
+++ /dev/null
@@ -1,665 +0,0 @@
-" @Author: Tom Link (micathom AT gmail com?subject=[vim])
-" @Website: http://www.vim.org/account/profile.php?user_id=4037
-" @License: GPL (see http://www.gnu.org/licenses/gpl.txt)
-" @Revision: 329
-
-
-" :filedoc:
-" Various agents for use as key handlers in tlib#input#List()
-
-" Number of items to move when pressing <c-up/down> in the input list window.
-TLet g:tlib_scroll_lines = 10
-
-
-" General {{{1
-
-function! tlib#agent#Exit(world, selected) "{{{3
- if a:world.key_mode == 'default'
- call a:world.CloseScratch()
- let a:world.state = 'exit empty escape'
- let a:world.list = []
- " let a:world.base = []
- call a:world.ResetSelected()
- else
- let a:world.key_mode = 'default'
- let a:world.state = 'redisplay'
- endif
- return a:world
-endf
-
-
-function! tlib#agent#CopyItems(world, selected) "{{{3
- let @* = join(a:selected, "\n")
- let a:world.state = 'redisplay'
- return a:world
-endf
-
-
-
-" InputList related {{{1
-
-function! tlib#agent#PageUp(world, selected) "{{{3
- let a:world.offset -= (winheight(0) / 2)
- let a:world.state = 'scroll'
- return a:world
-endf
-
-
-function! tlib#agent#PageDown(world, selected) "{{{3
- let a:world.offset += (winheight(0) / 2)
- let a:world.state = 'scroll'
- return a:world
-endf
-
-
-function! tlib#agent#Home(world, selected) "{{{3
- let a:world.prefidx = 1
- let a:world.state = 'redisplay'
- return a:world
-endf
-
-
-function! tlib#agent#End(world, selected) "{{{3
- let a:world.prefidx = len(a:world.list)
- let a:world.state = 'redisplay'
- return a:world
-endf
-
-
-function! tlib#agent#Up(world, selected, ...) "{{{3
- TVarArg ['lines', 1]
- let a:world.idx = ''
- if a:world.prefidx > lines
- let a:world.prefidx -= lines
- else
- let a:world.prefidx = len(a:world.list)
- endif
- let a:world.state = 'redisplay'
- return a:world
-endf
-
-
-function! tlib#agent#Down(world, selected, ...) "{{{3
- TVarArg ['lines', 1]
- let a:world.idx = ''
- if a:world.prefidx <= (len(a:world.list) - lines)
- let a:world.prefidx += lines
- else
- let a:world.prefidx = 1
- endif
- let a:world.state = 'redisplay'
- return a:world
-endf
-
-
-function! tlib#agent#UpN(world, selected) "{{{3
- return tlib#agent#Up(a:world, a:selected, g:tlib_scroll_lines)
-endf
-
-
-function! tlib#agent#DownN(world, selected) "{{{3
- return tlib#agent#Down(a:world, a:selected, g:tlib_scroll_lines)
-endf
-
-
-function! tlib#agent#ShiftLeft(world, selected) "{{{3
- let a:world.offset_horizontal -= (winwidth(0) / 2)
- if a:world.offset_horizontal < 0
- let a:world.offset_horizontal = 0
- endif
- let a:world.state = 'display shift'
- return a:world
-endf
-
-
-function! tlib#agent#ShiftRight(world, selected) "{{{3
- let a:world.offset_horizontal += (winwidth(0) / 2)
- let a:world.state = 'display shift'
- return a:world
-endf
-
-
-function! tlib#agent#Reset(world, selected) "{{{3
- let a:world.state = 'reset'
- return a:world
-endf
-
-
-function! tlib#agent#ToggleRestrictView(world, selected) "{{{3
- if empty(a:world.filtered_items)
- return tlib#agent#RestrictView(a:world, a:selected)
- else
- return tlib#agent#UnrestrictView(a:world, a:selected)
- endif
-endf
-
-
-function! tlib#agent#RestrictView(world, selected) "{{{3
- " TLogVAR a:selected
- let filtered_items = map(copy(a:selected), 'index(a:world.base, v:val) + 1')
- " TLogVAR 1, filtered_items
- let filtered_items = filter(filtered_items, 'v:val > 0')
- " TLogVAR 2, filtered_items
- if !empty(filtered_items)
- let a:world.filtered_items = filtered_items
- endif
- let a:world.state = 'display'
- return a:world
-endf
-
-
-function! tlib#agent#UnrestrictView(world, selected) "{{{3
- let a:world.filtered_items = []
- let a:world.state = 'display'
- return a:world
-endf
-
-
-function! tlib#agent#Input(world, selected) "{{{3
- let flt0 = a:world.CleanFilter(a:world.filter[0][0])
- let flt1 = input('Filter: ', flt0)
- echo
- if flt1 != flt0
- if empty(flt1)
- call getchar(0)
- else
- call a:world.SetFrontFilter(flt1)
- endif
- endif
- let a:world.state = 'display'
- return a:world
-endf
-
-
-" Suspend (see |tlib#agent#Suspend|) the input loop and jump back to the
-" original position in the parent window.
-function! tlib#agent#SuspendToParentWindow(world, selected) "{{{3
- let world = a:world
- let winnr = world.win_wnr
- " TLogVAR winnr
- if winnr != -1
- let world = tlib#agent#Suspend(world, a:selected)
- if world.state =~ '\<suspend\>'
- call world.SwitchWindow('win')
- " let pos = world.cursor
- " " TLogVAR pos
- " if !empty(pos)
- " call setpos('.', pos)
- " endif
- return world
- endif
- endif
- let world.state = 'redisplay'
- return world
-endf
-
-
-" Suspend lets you temporarily leave the input loop of
-" |tlib#input#List|. You can resume editing the list by pressing <c-z>,
-" <m-z>. <space>, <c-LeftMouse> or <MiddleMouse> in the suspended window.
-" <cr> and <LeftMouse> will immediatly select the item under the cursor.
-" < will select the item but the window will remain opened.
-function! tlib#agent#Suspend(world, selected) "{{{3
- if a:world.allow_suspend
- " TAssert IsNotEmpty(a:world.scratch)
- " TLogDBG bufnr('%')
- let br = tlib#buffer#Set(a:world.scratch)
- " TLogVAR br, a:world.bufnr, a:world.scratch
- if bufnr('%') != a:world.scratch
- echohl WarningMsg
- echom "tlib#agent#Suspend: Internal error: Not a scratch buffer:" bufname('%')
- echohl NONE
- endif
- " TLogVAR bufnr('%'), bufname('%'), a:world.scratch
- call tlib#autocmdgroup#Init()
- exec 'autocmd TLib BufEnter <buffer='. a:world.scratch .'> call tlib#input#Resume("world", 0, '. a:world.scratch .')'
- let b:tlib_world = a:world
- exec br
- let a:world.state = 'exit suspend'
- else
- echom 'Suspend disabled'
- let a:world.state = 'redisplay'
- endif
- return a:world
-endf
-
-
-function! tlib#agent#Help(world, selected) "{{{3
- let a:world.state = 'help'
- return a:world
-endf
-
-
-function! tlib#agent#OR(world, selected) "{{{3
- if !empty(a:world.filter[0])
- call insert(a:world.filter[0], '')
- endif
- let a:world.state = 'display'
- return a:world
-endf
-
-
-function! tlib#agent#AND(world, selected) "{{{3
- if !empty(a:world.filter[0])
- call insert(a:world.filter, [''])
- endif
- let a:world.state = 'display'
- return a:world
-endf
-
-
-function! tlib#agent#ReduceFilter(world, selected) "{{{3
- call a:world.ReduceFilter()
- let a:world.offset = 1
- let a:world.state = 'display'
- return a:world
-endf
-
-
-function! tlib#agent#PopFilter(world, selected) "{{{3
- call a:world.PopFilter()
- let a:world.offset = 1
- let a:world.state = 'display'
- return a:world
-endf
-
-
-function! tlib#agent#Debug(world, selected) "{{{3
- " echo string(world.state)
- echo string(a:world.filter)
- echo string(a:world.idx)
- echo string(a:world.prefidx)
- echo string(a:world.sel_idx)
- call getchar()
- let a:world.state = 'display'
- return a:world
-endf
-
-
-function! tlib#agent#Select(world, selected) "{{{3
- call a:world.SelectItem('toggle', a:world.prefidx)
- " let a:world.state = 'display keepcursor'
- let a:world.state = 'redisplay'
- return a:world
-endf
-
-
-function! tlib#agent#SelectUp(world, selected) "{{{3
- call a:world.SelectItem('toggle', a:world.prefidx)
- if a:world.prefidx > 1
- let a:world.prefidx -= 1
- endif
- let a:world.state = 'redisplay'
- return a:world
-endf
-
-
-function! tlib#agent#SelectDown(world, selected) "{{{3
- call a:world.SelectItem('toggle', a:world.prefidx)
- if a:world.prefidx < len(a:world.list)
- let a:world.prefidx += 1
- endif
- let a:world.state = 'redisplay'
- return a:world
-endf
-
-
-function! tlib#agent#SelectAll(world, selected) "{{{3
- let listrange = range(1, len(a:world.list))
- let mode = empty(filter(copy(listrange), 'index(a:world.sel_idx, a:world.GetBaseIdx(v:val)) == -1'))
- \ ? 'toggle' : 'set'
- for i in listrange
- call a:world.SelectItem(mode, i)
- endfor
- let a:world.state = 'display keepcursor'
- return a:world
-endf
-
-
-function! tlib#agent#ToggleStickyList(world, selected) "{{{3
- let a:world.sticky = !a:world.sticky
- let a:world.state = 'display keepcursor'
- return a:world
-endf
-
-
-
-" EditList related {{{1
-
-function! tlib#agent#EditItem(world, selected) "{{{3
- let lidx = a:world.prefidx
- " TLogVAR lidx
- " TLogVAR a:world.table
- let bidx = a:world.GetBaseIdx(lidx)
- " TLogVAR bidx
- let item = a:world.GetBaseItem(bidx)
- let item = input(lidx .'@'. bidx .': ', item)
- if item != ''
- call a:world.SetBaseItem(bidx, item)
- endif
- let a:world.state = 'display'
- return a:world
-endf
-
-
-" Insert a new item below the current one.
-function! tlib#agent#NewItem(world, selected) "{{{3
- let basepi = a:world.GetBaseIdx(a:world.prefidx)
- let item = input('New item: ')
- call insert(a:world.base, item, basepi)
- let a:world.state = 'reset'
- return a:world
-endf
-
-
-function! tlib#agent#DeleteItems(world, selected) "{{{3
- let remove = copy(a:world.sel_idx)
- let basepi = a:world.GetBaseIdx(a:world.prefidx)
- if index(remove, basepi) == -1
- call add(remove, basepi)
- endif
- " call map(remove, 'a:world.GetBaseIdx(v:val)')
- for idx in reverse(sort(remove))
- call remove(a:world.base, idx - 1)
- endfor
- let a:world.state = 'display'
- call a:world.ResetSelected()
- " let a:world.state = 'reset'
- return a:world
-endf
-
-
-function! tlib#agent#Cut(world, selected) "{{{3
- let world = tlib#agent#Copy(a:world, a:selected)
- return tlib#agent#DeleteItems(world, a:selected)
-endf
-
-
-function! tlib#agent#Copy(world, selected) "{{{3
- let a:world.clipboard = []
- let bidxs = copy(a:world.sel_idx)
- call add(bidxs, a:world.GetBaseIdx(a:world.prefidx))
- for bidx in sort(bidxs)
- call add(a:world.clipboard, a:world.GetBaseItem(bidx))
- endfor
- let a:world.state = 'redisplay'
- return a:world
-endf
-
-
-function! tlib#agent#Paste(world, selected) "{{{3
- if has_key(a:world, 'clipboard')
- for e in reverse(copy(a:world.clipboard))
- call insert(a:world.base, e, a:world.prefidx)
- endfor
- endif
- let a:world.state = 'display'
- call a:world.ResetSelected()
- return a:world
-endf
-
-
-function! tlib#agent#EditReturnValue(world, rv) "{{{3
- return [a:world.state !~ '\<exit\>', a:world.base]
-endf
-
-
-
-" Files related {{{1
-
-function! tlib#agent#ViewFile(world, selected) "{{{3
- if !empty(a:selected)
- let back = a:world.SwitchWindow('win')
- " TLogVAR back
- for filename in a:selected
- call tlib#file#Edit(filename)
- endfor
- " if !&hidden && &l:modified
- " let cmd0 = 'split'
- " let cmd1 = 'sbuffer'
- " else
- " let cmd0 = 'edit'
- " let cmd1 = 'buffer'
- " endif
- " call tlib#file#With(cmd0, cmd1, a:selected, a:world)
- " TLogVAR &filetype
- exec back
- let a:world.state = 'display'
- endif
- return a:world
-endf
-
-
-function! tlib#agent#EditFile(world, selected) "{{{3
- return tlib#agent#Exit(tlib#agent#ViewFile(a:world, a:selected), a:selected)
-endf
-
-
-function! tlib#agent#EditFileInSplit(world, selected) "{{{3
- call a:world.CloseScratch()
- " call tlib#file#With('edit', 'buffer', a:selected[0:0], a:world)
- " call tlib#file#With('split', 'sbuffer', a:selected[1:-1], a:world)
- call tlib#file#With('split', 'sbuffer', a:selected, a:world)
- return tlib#agent#Exit(a:world, a:selected)
-endf
-
-
-function! tlib#agent#EditFileInVSplit(world, selected) "{{{3
- call a:world.CloseScratch()
- " call tlib#file#With('edit', 'buffer', a:selected[0:0], a:world)
- " call tlib#file#With('vertical split', 'vertical sbuffer', a:selected[1:-1], a:world)
- let winpos = tlib#fixes#Winpos()
- call tlib#file#With('vertical split', 'vertical sbuffer', a:selected, a:world)
- if !empty(winpos)
- exec winpos
- endif
- return tlib#agent#Exit(a:world, a:selected)
-endf
-
-
-function! tlib#agent#EditFileInTab(world, selected) "{{{3
- " TLogVAR a:selected
- call a:world.CloseScratch()
- call tlib#file#With('tabedit', 'tab sbuffer', a:selected, a:world)
- return tlib#agent#Exit(a:world, a:selected)
-endf
-
-
-function! tlib#agent#ToggleScrollbind(world, selected) "{{{3
- let a:world.scrollbind = get(a:world, 'scrollbind') ? 0 : 1
- let a:world.state = 'redisplay'
- return a:world
-endf
-
-
-function! tlib#agent#ShowInfo(world, selected)
- let lines = []
- for f in a:selected
- if filereadable(f)
- let desc = [getfperm(f), strftime('%c', getftime(f)), getfsize(f) .' bytes', getftype(f)]
- call add(lines, fnamemodify(f, ':p'))
- call add(lines, ' '. join(desc, '; '))
- endif
- endfor
- let a:world.temp_lines = lines
- let a:world.state = 'printlines'
- return a:world
-endf
-
-
-
-" Buffer related {{{1
-
-function! tlib#agent#PreviewLine(world, selected) "{{{3
- let l = a:selected[0]
- let ww = winnr()
- exec a:world.win_wnr .'wincmd w'
- call tlib#buffer#ViewLine(l, 1)
- exec ww .'wincmd w'
- let a:world.state = 'redisplay'
- return a:world
-endf
-
-
-" If not called from the scratch, we assume/guess that we don't have to
-" suspend the input-evaluation loop.
-function! tlib#agent#GotoLine(world, selected) "{{{3
- if !empty(a:selected)
-
- " let l = a:selected[0]
- " " TLogVAR l
- " let back = a:world.SwitchWindow('win')
- " " TLogVAR back
- " " if a:world.win_wnr != winnr()
- " " let world = tlib#agent#Suspend(a:world, a:selected)
- " " exec a:world.win_wnr .'wincmd w'
- " " endif
- " call tlib#buffer#ViewLine(l)
- " exec back
- " let a:world.state = 'display'
-
- let l = a:selected[0]
- if a:world.win_wnr != winnr()
- let world = tlib#agent#Suspend(a:world, a:selected)
- exec a:world.win_wnr .'wincmd w'
- endif
- call tlib#buffer#ViewLine(l, 1)
-
- endif
- return a:world
-endf
-
-
-function! tlib#agent#DoAtLine(world, selected) "{{{3
- if !empty(a:selected)
- let cmd = input('Command: ', '', 'command')
- if !empty(cmd)
- call a:world.SwitchWindow('win')
- " let pos = getpos('.')
- let view = winsaveview()
- for l in a:selected
- call tlib#buffer#ViewLine(l, '')
- exec cmd
- endfor
- " call setpos('.', pos)
- call winrestview(view)
- endif
- endif
- call a:world.ResetSelected()
- let a:world.state = 'exit'
- return a:world
-endf
-
-
-function! tlib#agent#Wildcard(world, selected) "{{{3
- if !empty(a:world.filter[0])
- let rx_type = a:world.matcher.FilterRxPrefix()
- let flt0 = a:world.CleanFilter(a:world.filter[0][0])
- if rx_type == '\V'
- let flt0 .= '\.\{-}'
- else
- let flt0 .= '.\{-}'
- endif
- call a:world.SetFrontFilter(flt0)
- endif
- let a:world.state = 'redisplay'
- return a:world
-endf
-
-
-function! tlib#agent#Null(world, selected) "{{{3
- let a:world.state = 'redisplay'
- return a:world
-endf
-
-
-function! tlib#agent#ExecAgentByName(world, selected) "{{{3
- let s:agent_names_world = a:world
- let agent_names = {'Help': 'tlib#agent#Help'}
- for def in values(a:world.key_map[a:world.key_mode])
- if has_key(def, 'help') && !empty(def.help) && has_key(def, 'agent') && !empty(def.agent)
- let agent_names[def.help] = def.agent
- endif
- endfor
- let s:agent_names = sort(keys(agent_names))
- let command = input('Command: ', '', 'customlist,tlib#agent#CompleteAgentNames')
- " TLogVAR command
- if !has_key(agent_names, command)
- " TLogVAR command
- silent! let matches = filter(keys(agent_names), 'v:val =~ command')
- " TLogVAR matches
- if len(matches) == 1
- let command = matches[0]
- endif
- endif
- if has_key(agent_names, command)
- let agent = agent_names[command]
- return call(agent, [a:world, a:selected])
- else
- if !empty(command)
- echohl WarningMsg
- echom "Unknown command:" command
- echohl NONE
- sleep 1
- endif
- let a:world.state = 'display'
- return a:world
- endif
-endf
-
-
-function! tlib#agent#CompleteAgentNames(ArgLead, CmdLine, CursorPos)
- let arglead = tolower(a:Arglead)
- return filter(copy(s:agent_names), 'stridx(tolower(v:val), arglead) != -1')
-endf
-
-
-function! tlib#agent#Complete(world, selected) abort "{{{3
- let rxprefix = a:world.matcher.FilterRxPrefix()
- let flt = a:world.filter[0][0]
- " TLogVAR flt
- let fltrx = rxprefix . flt . '\m[^[:space:][:cntrl:][:punct:]<>*+?&~{}()\[\]\\/]\+'
- let fltrx0 = '\m^' . fltrx
- " TLogVAR fltrx, fltrx0
- let words = {}
- for item in a:world.list
- let parts = split(item, '\ze'. fltrx)
- " TLogVAR item, parts
- for part in parts
- let word = matchstr(part, fltrx0)
- " TLogVAR part, word
- if !empty(word)
- let words[word] = 1
- endif
- endfor
- endfor
- " TLogVAR keys(words)
- let completions = keys(words)
- " let completions = filter(keys(words), 'matchstr(v:val, fltrx0)')
- let completions = sort(completions, 's:SortCompletions')
- let completions = tlib#list#Uniq(completions)
- " TLogVAR 0, completions
- while len(completions) > 1
- let nchar = strwidth(completions[0]) - 1
- let completions = map(completions, 'strpart(v:val, 0, nchar)')
- " TLogVAR 'reduce', completions
- let completions = tlib#list#Uniq(completions)
- " TLogVAR 'unique', len(completions), completions
- endwh
- " TLogVAR 9, completions
- if empty(completions)
- let a:world.state = 'redisplay update'
- else
- let a:world.filter[0][0] = completions[0]
- let a:world.state = 'display update'
- endif
- return a:world
-endf
-
-
-function! s:SortCompletions(a, b) abort "{{{3
- let i1 = strwidth(a:a)
- let i2 = strwidth(a:b)
- return i2 - i1
-endf
-