Updated plugins
This commit is contained in:
parent
ab92a1d4f5
commit
b3698e4d38
63 changed files with 5414 additions and 2901 deletions
|
@ -113,8 +113,8 @@ I recommend reading the docs of these plugins to understand them better. Each pl
|
||||||
|
|
||||||
## Included color schemes
|
## Included color schemes
|
||||||
|
|
||||||
* [dracula](https://github.com/dracula/vim): The default
|
* [peaksea](https://github.com/vim-scripts/peaksea): The default
|
||||||
* [peaksea](https://github.com/vim-scripts/peaksea)
|
* [dracula](https://github.com/dracula/vim)
|
||||||
* [vim-colors-solarized](https://github.com/altercation/vim-colors-solarized)
|
* [vim-colors-solarized](https://github.com/altercation/vim-colors-solarized)
|
||||||
* [vim-irblack](https://github.com/wgibbs/vim-irblack)
|
* [vim-irblack](https://github.com/wgibbs/vim-irblack)
|
||||||
* [mayansmoke](https://github.com/vim-scripts/mayansmoke)
|
* [mayansmoke](https://github.com/vim-scripts/mayansmoke)
|
||||||
|
|
|
@ -73,7 +73,7 @@ endfunction
|
||||||
|
|
||||||
function! ale_linters#ansible#ansible_lint#GetCommand(buffer, version) abort
|
function! ale_linters#ansible#ansible_lint#GetCommand(buffer, version) abort
|
||||||
let l:commands = {
|
let l:commands = {
|
||||||
\ '>=5.0.0': '%e --nocolor --parseable-severity -x yaml -',
|
\ '>=5.0.0': '%e --nocolor --parseable-severity -x yaml %s',
|
||||||
\ '<5.0.0': '%e --nocolor -p %t'
|
\ '<5.0.0': '%e --nocolor -p %t'
|
||||||
\}
|
\}
|
||||||
let l:command = ale#semver#GTE(a:version, [5, 0]) ? l:commands['>=5.0.0'] : l:commands['<5.0.0']
|
let l:command = ale#semver#GTE(a:version, [5, 0]) ? l:commands['>=5.0.0'] : l:commands['<5.0.0']
|
||||||
|
@ -91,6 +91,7 @@ call ale#linter#Define('ansible', {
|
||||||
\ '%e --version',
|
\ '%e --version',
|
||||||
\ function('ale_linters#ansible#ansible_lint#GetCommand'),
|
\ function('ale_linters#ansible#ansible_lint#GetCommand'),
|
||||||
\ )},
|
\ )},
|
||||||
|
\ 'lint_file': 1,
|
||||||
\ 'callback': {buffer, lines -> ale#semver#RunWithVersionCheck(
|
\ 'callback': {buffer, lines -> ale#semver#RunWithVersionCheck(
|
||||||
\ buffer,
|
\ buffer,
|
||||||
\ ale_linters#ansible#ansible_lint#GetExecutable(buffer),
|
\ ale_linters#ansible#ansible_lint#GetExecutable(buffer),
|
||||||
|
|
46
sources_non_forked/ale/ale_linters/thrift/thriftcheck.vim
Normal file
46
sources_non_forked/ale/ale_linters/thrift/thriftcheck.vim
Normal file
|
@ -0,0 +1,46 @@
|
||||||
|
" Author: Jon Parise <jon@indelible.org>
|
||||||
|
|
||||||
|
call ale#Set('thrift_thriftcheck_executable', 'thriftcheck')
|
||||||
|
call ale#Set('thrift_thriftcheck_options', '')
|
||||||
|
|
||||||
|
function! ale_linters#thrift#thriftcheck#GetCommand(buffer) abort
|
||||||
|
return '%e'
|
||||||
|
\ . ale#Pad(ale#Var(a:buffer, 'thrift_thriftcheck_options'))
|
||||||
|
\ . ' --stdin-filename %s'
|
||||||
|
\ . ' %t'
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! ale_linters#thrift#thriftcheck#Handle(buffer, lines) abort
|
||||||
|
" Matches lines like the following:
|
||||||
|
"
|
||||||
|
" file.thrift:1:1:error: "py" namespace must match "^idl\\." (namespace.pattern)
|
||||||
|
" file.thrift:3:5:warning: 64-bit integer constant -2147483649 may not work in all languages (int.64bit)
|
||||||
|
let l:pattern = '\v^[a-zA-Z]?:?[^:]+:(\d+):(\d+):(\l+): (.*) \((.*)\)$'
|
||||||
|
|
||||||
|
let l:output = []
|
||||||
|
|
||||||
|
for l:match in ale#util#GetMatches(a:lines, l:pattern)
|
||||||
|
if l:match[3] is# 'warning'
|
||||||
|
let l:type = 'W'
|
||||||
|
else
|
||||||
|
let l:type = 'E'
|
||||||
|
endif
|
||||||
|
|
||||||
|
call add(l:output, {
|
||||||
|
\ 'lnum': l:match[1] + 0,
|
||||||
|
\ 'col': l:match[2] + 0,
|
||||||
|
\ 'type': l:type,
|
||||||
|
\ 'text': l:match[4],
|
||||||
|
\ 'code': l:match[5],
|
||||||
|
\})
|
||||||
|
endfor
|
||||||
|
|
||||||
|
return l:output
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
call ale#linter#Define('thrift', {
|
||||||
|
\ 'name': 'thriftcheck',
|
||||||
|
\ 'executable': {b -> ale#Var(b, 'thrift_thriftcheck_executable')},
|
||||||
|
\ 'command': function('ale_linters#thrift#thriftcheck#GetCommand'),
|
||||||
|
\ 'callback': 'ale_linters#thrift#thriftcheck#Handle',
|
||||||
|
\})
|
|
@ -533,6 +533,7 @@ Notes:
|
||||||
* `write-good`
|
* `write-good`
|
||||||
* Thrift
|
* Thrift
|
||||||
* `thrift`
|
* `thrift`
|
||||||
|
* `thriftcheck`
|
||||||
* TypeScript
|
* TypeScript
|
||||||
* `deno`
|
* `deno`
|
||||||
* `eslint`
|
* `eslint`
|
||||||
|
|
|
@ -42,5 +42,24 @@ g:ale_thrift_thrift_options *g:ale_thrift_thrift_options*
|
||||||
This variable can be changed to customize the additional command-line
|
This variable can be changed to customize the additional command-line
|
||||||
arguments that are passed to the thrift compiler.
|
arguments that are passed to the thrift compiler.
|
||||||
|
|
||||||
|
===============================================================================
|
||||||
|
thriftcheck *ale-thrift-thriftcheck*
|
||||||
|
|
||||||
|
g:ale_thrift_thriftcheck_executable *g:ale_thrift_thriftcheck_executable*
|
||||||
|
*b:ale_thrift_thriftcheck_executable*
|
||||||
|
Type: |String|
|
||||||
|
Default: `'thriftcheck'`
|
||||||
|
|
||||||
|
See |ale-integrations-local-executables|
|
||||||
|
|
||||||
|
|
||||||
|
g:ale_thrift_thriftcheck_options *g:ale_thrift_thriftcheck_options*
|
||||||
|
*b:ale_thrift_thriftcheck_options*
|
||||||
|
Type: |String|
|
||||||
|
Default: `''`
|
||||||
|
|
||||||
|
This variable can be changed to customize the additional command-line
|
||||||
|
arguments that are passed to thriftcheck.
|
||||||
|
|
||||||
===============================================================================
|
===============================================================================
|
||||||
vim:tw=78:ts=2:sts=2:sw=2:ft=help:norl:
|
vim:tw=78:ts=2:sts=2:sw=2:ft=help:norl:
|
||||||
|
|
|
@ -460,7 +460,7 @@ integration should not be combined with ALE's own implementation.
|
||||||
|
|
||||||
ALE additionally integrates with asyncomplete.vim for offering automatic
|
ALE additionally integrates with asyncomplete.vim for offering automatic
|
||||||
completion data. ALE's asyncomplete source requires registration and should
|
completion data. ALE's asyncomplete source requires registration and should
|
||||||
use the defaults provided by the|asyncomplete#sources#ale#get_source_options| function >
|
use the defaults provided by the |asyncomplete#sources#ale#get_source_options| function >
|
||||||
|
|
||||||
" Use ALE's function for asyncomplete defaults
|
" Use ALE's function for asyncomplete defaults
|
||||||
au User asyncomplete_setup call asyncomplete#register_source(asyncomplete#sources#ale#get_source_options({
|
au User asyncomplete_setup call asyncomplete#register_source(asyncomplete#sources#ale#get_source_options({
|
||||||
|
@ -3053,6 +3053,7 @@ documented in additional help files.
|
||||||
write-good............................|ale-text-write-good|
|
write-good............................|ale-text-write-good|
|
||||||
thrift..................................|ale-thrift-options|
|
thrift..................................|ale-thrift-options|
|
||||||
thrift................................|ale-thrift-thrift|
|
thrift................................|ale-thrift-thrift|
|
||||||
|
thriftcheck...........................|ale-thrift-thriftcheck|
|
||||||
typescript..............................|ale-typescript-options|
|
typescript..............................|ale-typescript-options|
|
||||||
deno..................................|ale-typescript-deno|
|
deno..................................|ale-typescript-deno|
|
||||||
eslint................................|ale-typescript-eslint|
|
eslint................................|ale-typescript-eslint|
|
||||||
|
|
|
@ -270,7 +270,7 @@ formatting.
|
||||||
* JSON
|
* JSON
|
||||||
* [fixjson](https://github.com/rhysd/fixjson)
|
* [fixjson](https://github.com/rhysd/fixjson)
|
||||||
* [jq](https://stedolan.github.io/jq/)
|
* [jq](https://stedolan.github.io/jq/)
|
||||||
* [jsonlint](http://zaa.ch/jsonlint/)
|
* [jsonlint](https://github.com/zaach/jsonlint)
|
||||||
* [prettier](https://github.com/prettier/prettier)
|
* [prettier](https://github.com/prettier/prettier)
|
||||||
* [spectral](https://github.com/stoplightio/spectral)
|
* [spectral](https://github.com/stoplightio/spectral)
|
||||||
* Julia
|
* Julia
|
||||||
|
@ -542,6 +542,7 @@ formatting.
|
||||||
* [write-good](https://github.com/btford/write-good) :warning:
|
* [write-good](https://github.com/btford/write-good) :warning:
|
||||||
* Thrift
|
* Thrift
|
||||||
* [thrift](http://thrift.apache.org/)
|
* [thrift](http://thrift.apache.org/)
|
||||||
|
* [thriftcheck](https://github.com/pinterest/thriftcheck)
|
||||||
* TypeScript
|
* TypeScript
|
||||||
* [deno](https://deno.land/)
|
* [deno](https://deno.land/)
|
||||||
* [eslint](http://eslint.org/)
|
* [eslint](http://eslint.org/)
|
||||||
|
|
|
@ -157,7 +157,14 @@ function! s:RunRustfmt(command, tmpname, from_writepre)
|
||||||
endif
|
endif
|
||||||
|
|
||||||
call s:DeleteLines(len(l:content), line('$'))
|
call s:DeleteLines(len(l:content), line('$'))
|
||||||
call setline(1, l:content)
|
if has('nvim') && exists('*nvim_buf_set_lines')
|
||||||
|
" setline() gets called for every item on the array,
|
||||||
|
" this results on the neovim buffer callbacks being called n times,
|
||||||
|
" using nvim_buf_set_lines() makes the change in one call.
|
||||||
|
call nvim_buf_set_lines(0, 0, -1, v:true, l:content)
|
||||||
|
else
|
||||||
|
call setline(1, l:content)
|
||||||
|
endif
|
||||||
|
|
||||||
" only clear location list if it was previously filled to prevent
|
" only clear location list if it was previously filled to prevent
|
||||||
" clobbering other additions
|
" clobbering other additions
|
||||||
|
|
13
sources_non_forked/tlib/.gitignore
vendored
Normal file
13
sources_non_forked/tlib/.gitignore
vendored
Normal file
|
@ -0,0 +1,13 @@
|
||||||
|
tags
|
||||||
|
!doc/tags
|
||||||
|
Makefile
|
||||||
|
TODO.TXT
|
||||||
|
TODO_archived.viki
|
||||||
|
*.vba
|
||||||
|
*.vmb
|
||||||
|
*.zip
|
||||||
|
.last_*
|
||||||
|
test
|
||||||
|
test_*
|
||||||
|
tmp
|
||||||
|
var
|
909
sources_non_forked/tlib/CHANGES.TXT
Normal file
909
sources_non_forked/tlib/CHANGES.TXT
Normal file
|
@ -0,0 +1,909 @@
|
||||||
|
0.1
|
||||||
|
Initial release
|
||||||
|
|
||||||
|
0.2
|
||||||
|
- More list convenience functions
|
||||||
|
- tlib#EditList()
|
||||||
|
- tlib#InputList(): properly handle duplicate items; it type contains
|
||||||
|
'i', the list index + 1 is returned, not the element
|
||||||
|
|
||||||
|
0.3
|
||||||
|
- tlib#InputList(): Show feedback in statusline instead of the echo area
|
||||||
|
- tlib#GetVar(), tlib#GetValue()
|
||||||
|
|
||||||
|
0.4
|
||||||
|
- tlib#InputList(): Up/Down keys wrap around list
|
||||||
|
- tlib#InputList(): FIX: Problem when reducing the filter & using AND
|
||||||
|
- tlib#InputList(): Made <a-numeric> work (can be configured via
|
||||||
|
- tlib#InputList(): special display_format: "filename"
|
||||||
|
- tlib#Object: experimental support for some kind of OOP
|
||||||
|
- tlib#World: Extracted some functions from tlib.vim to tlib/World.vim
|
||||||
|
- tlib#FileJoin(), tlib#FileSplit(), tlib#RelativeFilename()
|
||||||
|
- tlib#Let()
|
||||||
|
- tlib#EnsureDirectoryExists(dir)
|
||||||
|
- tlib#DirName(dir)
|
||||||
|
- tlib#DecodeURL(url), tlib#EncodeChar(char), tlib#EncodeURL(url)
|
||||||
|
- FIX: Problem when using shift-up/down with filtered lists
|
||||||
|
|
||||||
|
0.5
|
||||||
|
- tlib#InputList(): FIX: Selecting items in filtered view
|
||||||
|
- tlib#InputList(): <c-bs>: Remove last AND pattern from filter
|
||||||
|
|
||||||
|
0.6
|
||||||
|
- tlib#InputList(): Disabled <c-space> map
|
||||||
|
- tlib#InputList(): try to be smart about user itentions only if a
|
||||||
|
list's length is < g:tlib_sortprefs_threshold (default: 200)
|
||||||
|
- tlib#Object: Super() method
|
||||||
|
- tlib#MyRuntimeDir()
|
||||||
|
- tlib#GetCacheName(), tlib#CacheSave(), tlib#CacheGet()
|
||||||
|
- tlib#Args(), tlib#GetArg()
|
||||||
|
- FIX: tlib#InputList(): Display problem with first item
|
||||||
|
|
||||||
|
0.7
|
||||||
|
- tlib#InputList(): <c-z> ... Suspend/Resume input
|
||||||
|
- tlib#InputList(): <c-q> ... Input text on the command line (useful on
|
||||||
|
slow systems when working with very large lists)
|
||||||
|
- tlib#InputList(): AND-pattern starting with '!' will work as 'exclude
|
||||||
|
matches'
|
||||||
|
- tlib#InputList(): FIX <c-bs> pop OR-patterns properly
|
||||||
|
- tlib#InputList(): display_format == filename: don't add '/' to
|
||||||
|
directory names (avoid filesystem access)
|
||||||
|
|
||||||
|
0.8
|
||||||
|
- FIX: Return empty cache name for buffers that have no files attached to it
|
||||||
|
- Some re-arranging
|
||||||
|
|
||||||
|
0.9
|
||||||
|
- Re-arrangements & modularization (this means many function names have
|
||||||
|
changed, on the other hand only those functions are loaded that are
|
||||||
|
actually needed)
|
||||||
|
- tlib#input#List(): Added maps with m-modifiers for <c-q>, <c-z>, <c-a>
|
||||||
|
- tlib#input#List(): Make sure &fdm is manual
|
||||||
|
- tlib#input#List(): When exiting the list view, consume the next 5
|
||||||
|
characters in the queue (if any)
|
||||||
|
- tlib#input#EditList(): Now has cut, copy, paste functionality.
|
||||||
|
- Added documentation and examples
|
||||||
|
|
||||||
|
0.10
|
||||||
|
- tlib#input#List(): (v)split type of commands leave the original window
|
||||||
|
untouched (you may use <c-w> to replace its contents)
|
||||||
|
- tlib#file#With(): Check whether an existing buffer is loaded.
|
||||||
|
- Scratch related functions went to tlib/scratch.vim so that they are
|
||||||
|
accessible from other scripts.
|
||||||
|
- Configure the list window height via g:tlib_inputlist_pct (1..100%)
|
||||||
|
|
||||||
|
0.11
|
||||||
|
NEW:
|
||||||
|
- The :TLet command replaces :TLLet (which was removed)
|
||||||
|
- :TScratch[!] command (with ! don't split but use the whole window)
|
||||||
|
- tlib#rx#Escape(text, ?magic='m')
|
||||||
|
- tlib#buffer#GetList(?show_hidden=0)
|
||||||
|
- tlib#dir#CD(), tlib#dir#Push(), tlib#dir#Pop()
|
||||||
|
- tlib#input#ListW: A slightly remodeled version of tlib#input#List
|
||||||
|
that takes a World as second argument.
|
||||||
|
- Added some documentation doc/tlib.txt (most of it is automatically
|
||||||
|
compiled from the source files)
|
||||||
|
CHANGES:
|
||||||
|
- tlib#input#List(): The default keys for AND, NOT have changed to
|
||||||
|
be more Google-like (space, minus); the keys can be configured via
|
||||||
|
global variables.
|
||||||
|
IMPROVEMENTS:
|
||||||
|
- In file listings, indicate if a file is loaded, listed, modified
|
||||||
|
etc.
|
||||||
|
- tlib#input#List(): Highlight the filter pattern
|
||||||
|
- tlib#input#List(): <c-up/down> scrolls g:tlib_scroll_lines
|
||||||
|
(default=10) lines
|
||||||
|
FIXES:
|
||||||
|
- tlib#input#List(): Centering line, clear match, clear & restore
|
||||||
|
the search register
|
||||||
|
- tlib#input#List(): Ensure the window layout doesn't change (if the
|
||||||
|
number of windows hasn't changed)
|
||||||
|
- tlib#arg#Ex(): Don't escape backslashes by default
|
||||||
|
|
||||||
|
0.12
|
||||||
|
NEW:
|
||||||
|
- tlib/tab.vim
|
||||||
|
CHANGES:
|
||||||
|
- Renamed tlib#win#SetWin() to tlib#win#Set()
|
||||||
|
IMPROVEMENTS:
|
||||||
|
- tlib#input#List(): <left>, <right> keys work in some lists
|
||||||
|
- tlib#input#List(): If an index_table is provided this will be used
|
||||||
|
instead of the item's list index.
|
||||||
|
FIXES:
|
||||||
|
- tlib#input#List(): Problem with scrolling, when the list was
|
||||||
|
shorter than the window (eg when using a vertical window).
|
||||||
|
- tlib#cache#Filename(): Don't rewrite name as relative filename if
|
||||||
|
explicitly given as argument. Avoid double (back)slashes.
|
||||||
|
- TLet: simplified
|
||||||
|
|
||||||
|
0.13
|
||||||
|
CHANGES:
|
||||||
|
- Scratch: Set &fdc=0.
|
||||||
|
- The cache directory can be configured via g:tlib_cache
|
||||||
|
- Renamed tlib#buffer#SetBuffer() to tlib#buffer#Set().
|
||||||
|
FIXES:
|
||||||
|
- tlib#input#List(): Select the active item per mouse.
|
||||||
|
- TLet: simplified
|
||||||
|
|
||||||
|
0.14
|
||||||
|
NEW:
|
||||||
|
- tlib#buffer#InsertText()
|
||||||
|
CHANGES:
|
||||||
|
- tlib#win#[SG]etLayout(): Use a dictionnary, set &cmdheight.
|
||||||
|
FIXES:
|
||||||
|
- Wrong order with pre-defined filters.
|
||||||
|
|
||||||
|
0.15
|
||||||
|
NEW:
|
||||||
|
- tlib#string#TrimLeft(), tlib#string#TrimRight(), tlib#string#Strip()
|
||||||
|
- Progress bar
|
||||||
|
|
||||||
|
0.16
|
||||||
|
NEW:
|
||||||
|
- tlib#string#Printf1()
|
||||||
|
|
||||||
|
0.17
|
||||||
|
NEW:
|
||||||
|
- TBrowseOutput
|
||||||
|
- Some minor changes
|
||||||
|
|
||||||
|
0.18
|
||||||
|
NEW:
|
||||||
|
- tlib/time.vim
|
||||||
|
- g:tlib_inputlist_livesearch_threshold
|
||||||
|
CHANGES:
|
||||||
|
- tlib#input#ListD(), World: Don't redisplay the list while typing
|
||||||
|
new letters; calculate filter regexps only once before filtering the
|
||||||
|
list.
|
||||||
|
- World.vim: Minor changes to how filenames are handled.
|
||||||
|
|
||||||
|
0.19
|
||||||
|
NEW:
|
||||||
|
- tag.vim
|
||||||
|
FIX:
|
||||||
|
- dir.vim: Use plain dir name in tlib#dir#Ensure()
|
||||||
|
- tlib#input#List(): An initial filter argument creates [[filter]]
|
||||||
|
and not as before [[''], [filter]].
|
||||||
|
- tlib#input#List(): When type was "si" and the item was picked by
|
||||||
|
filter, the wrong index was returned.
|
||||||
|
- tlib#input#List(): Don't check if chars are typed when displaying
|
||||||
|
the list for the first time.
|
||||||
|
|
||||||
|
0.20
|
||||||
|
- The arguments of tlib#tag#Collect() have changed.
|
||||||
|
- tlib#input#List(): The view can be "suspended" on initial display.
|
||||||
|
- tlib#input#List(): Follow/trace cursor functionality
|
||||||
|
|
||||||
|
0.21
|
||||||
|
- tlib#buffer#InsertText(): Respect tabs and (experimental) formatoptions+=or
|
||||||
|
- tlib/syntax.vim: Syntax-related functions
|
||||||
|
|
||||||
|
0.22
|
||||||
|
- FIX: very magic mode for tlib#rx#Escape() (thanks A Politz)
|
||||||
|
- FIX: tlib#arg#Ex: escape "!"
|
||||||
|
|
||||||
|
0.23
|
||||||
|
- Respect the setting of g:tlib_inputlist_filename_indicators
|
||||||
|
- tlib#input#List(): Reset syntax on resume; option to make list window "sticky"
|
||||||
|
- tlib#agent#ToggleStickyList()
|
||||||
|
- Simplified tlib#url#Decode()
|
||||||
|
- tlib#arg#Ex(): use fnameescape() if available
|
||||||
|
|
||||||
|
0.24
|
||||||
|
- s:prototype.SetInitialFilter: accept list as argument
|
||||||
|
- Maintain buffer MRU if required
|
||||||
|
|
||||||
|
0.25
|
||||||
|
- NEW: tlib#notify#TrimMessage(): trim message to prevent "Press ENTER"
|
||||||
|
messages (contributed by Erik Falor)
|
||||||
|
- NEW: tlib#notify#Echo()
|
||||||
|
- FIX: World.CloseScratch(): Set window
|
||||||
|
- FIX: tlib#input#ListW(): Set initial_display = 1 on reset
|
||||||
|
|
||||||
|
0.26
|
||||||
|
- NEW: tlib#normal#WithRegister()
|
||||||
|
- FIX: Try not to change numbered registers
|
||||||
|
|
||||||
|
0.27
|
||||||
|
- FIX: Cosmetic bug, wrong packaging (thanks Nathan Neff)
|
||||||
|
- Meaning of World#filter_format changed; new World#filter_options
|
||||||
|
- Filtering didn't work as advertised
|
||||||
|
- tlib#string#Count()
|
||||||
|
|
||||||
|
0.28
|
||||||
|
- tlib#input#List():
|
||||||
|
-- Improved handling of sticky lists; <cr> and <Leftmouse> resume a
|
||||||
|
suspended list and immediately selects the item under the cursor
|
||||||
|
-- Experimental "seq" matching style: the conjunctions are sequentially
|
||||||
|
ordered, they are combined with "OR" (disjunctions), the regexp is
|
||||||
|
'magic', and "." is expanded to '.\{-}'
|
||||||
|
-- Experimental "cnfd" matching style: Same as cnf but with an "elastic"
|
||||||
|
dot "." that matches '\.\{-}'
|
||||||
|
-- Filtering acts as if &ic=1 && $sc=1
|
||||||
|
-- Weighting is done by the filter
|
||||||
|
- tlib#agent#Input(): Consume <esc> when aborting input()
|
||||||
|
- INCOMPATIBLE CHANGE: Changed eligible values of g:tlib_inputlist_match
|
||||||
|
to "cnf", "cnfd", "seq" and "fuzzy"
|
||||||
|
- NEW: tlib#buffer#KeepCursorPosition()
|
||||||
|
- tlib#buffer#InsertText(): Take care of the extra line when appending
|
||||||
|
text to an empty buffer.
|
||||||
|
|
||||||
|
0.29
|
||||||
|
- tlib#string#Strip(): Strip also control characters (newlines etc.)
|
||||||
|
- tlib#rx#Suffixes(): 'suffixes' as Regexp
|
||||||
|
- World#RestoreOrigin(): Don't assume &splitbelow
|
||||||
|
|
||||||
|
0.30
|
||||||
|
- World#RestoreOrigin(): Don't assume &splitright
|
||||||
|
|
||||||
|
0.31
|
||||||
|
- :TRequire command
|
||||||
|
-tlib#input#List: For i-type list views, make sure agents are called
|
||||||
|
with the base indices.
|
||||||
|
|
||||||
|
0.32
|
||||||
|
- tlib#agent#Exit: explicitly return empty value (as a consequence,
|
||||||
|
pressing <esc> when browsing an index-list, returns 0 and not "")
|
||||||
|
- tlib#signs
|
||||||
|
- tlib#input#List: set local statusline
|
||||||
|
|
||||||
|
0.33
|
||||||
|
- Don't reset statusline
|
||||||
|
- Don't use fnamemodify() to split filenames (for performance reasons)
|
||||||
|
- scratch: Set ft after setting up scratch options
|
||||||
|
- tlib#map#PumAccept(key)
|
||||||
|
|
||||||
|
0.34
|
||||||
|
- tlib#buffer#HighlightLine(line): call tlib#autocmdgroup#Init()
|
||||||
|
(reported by Sergey Khorev)
|
||||||
|
|
||||||
|
0.35
|
||||||
|
- tlib#input#EditList(): return the list if the user presses esc
|
||||||
|
|
||||||
|
0.36
|
||||||
|
- Display a message when the filter is for whatever reason invalid
|
||||||
|
- Removed tlib#paragraph#Delete()
|
||||||
|
- New: tlib#paragraph#Define(), tlib#textobjects#StandardParagraph()
|
||||||
|
- Try to speed up list display (a rewrite of World.DisplayList() etc. is
|
||||||
|
required)
|
||||||
|
|
||||||
|
0.37
|
||||||
|
- g:tlib_inputlist_livesearch_threshold defaults to 1000
|
||||||
|
- tlib#World: optional scratch_pos field
|
||||||
|
- tlib#input#List: By default <m-NUMBER> selects by number but NUMBER is
|
||||||
|
interpreted as string
|
||||||
|
- tlib#date
|
||||||
|
- TTimeCommand
|
||||||
|
|
||||||
|
0.38
|
||||||
|
- tlib#World#Resize: set winfix{height|width}
|
||||||
|
|
||||||
|
0.39
|
||||||
|
- g:tlib#cache#dont_purge
|
||||||
|
- tlib#vim#RestoreWindow()
|
||||||
|
- tlib#ballon#...()
|
||||||
|
|
||||||
|
0.40
|
||||||
|
- tlib#agent#ViewFile: Use split/sbuffer if nohidden && modified
|
||||||
|
- tlib#buffer#GetList(): order by "basename"
|
||||||
|
|
||||||
|
version: "0.41"
|
||||||
|
- World.UseScratch(): keepalt
|
||||||
|
- Really include balloon.vim
|
||||||
|
MD5 checksum: 3fcbc4f7556f5378d39622e62ab8f379
|
||||||
|
|
||||||
|
version: "0.42"
|
||||||
|
- tlib#input#List: <s-space> inserts a *-like wildcard (represented as "__")
|
||||||
|
- Check if a cache file cannot be created because a directory of the same name exists (display a message if so)
|
||||||
|
- tlib#cache#Filename: Removed check if a directory of the same name exists (due to inconsistent use)
|
||||||
|
- Minor improvements related to buffer handling (scratch_split)
|
||||||
|
- .gitignore
|
||||||
|
- docs (thanks to blueyed)
|
||||||
|
- There is no "edit" answer possibility.
|
||||||
|
- Fix first purge: do nothing if no timestamp file.
|
||||||
|
- g:tlib_pick_single_item
|
||||||
|
- Removed pick_single_item. Changed the default behavour when a list has only 1 item. See doc for g:tlib_pick_last_item.
|
||||||
|
- Updated help for tlib#input#List(); help_extra attribute
|
||||||
|
- EXPERIMENTAL: cache_var, restore_from_cache, on_leave properties; #Initialize(), #Leave()
|
||||||
|
- added tlib#cmd#BrowseOutputWithCallback function and :TBrowseScriptnames command
|
||||||
|
- tlib#cmd#BrowseOutputWithCallback function and :TBrowseScriptnames command documentation
|
||||||
|
- s:prototype.Initialize(): unlet self.cache_var after restoring values
|
||||||
|
- tlib#input#List: filter-specific help
|
||||||
|
- Removed the seq filter (use cnfd or fuzzy instead)
|
||||||
|
- tlib#input#List: temp_prompt (for help message)
|
||||||
|
MD5 checksum: aa8b5a4602235cc1a5bc9ee45d801b81
|
||||||
|
|
||||||
|
version: "0.42"
|
||||||
|
- g:tlib#cache#silent: don't display messages when purging the cache (fixes #9)
|
||||||
|
- Changed message when deleting directories in the cache.
|
||||||
|
- g:tlib#input#use_popup: Don't rely on has('menu') but also check for gtk & win gui (fixes #10)
|
||||||
|
- debug
|
||||||
|
- tlib#input#ListW(): Didn't return a list when type == "m"
|
||||||
|
- docs (solves #11)
|
||||||
|
MD5 checksum: aa8b5a4602235cc1a5bc9ee45d801b81
|
||||||
|
|
||||||
|
version: "0.45"
|
||||||
|
- fuzzy mode: prototype.highlight defaults to g:tlib_inputlist_higroup
|
||||||
|
- tlib#scratch: Use noautocmd
|
||||||
|
- tlib#input#ListW(): Use world.RestoreOrigin() instead of tlib#win#SetLayout(world.winview)
|
||||||
|
- tlib#input#ListW(): Revert to tlib#win#SetLayout(world.winview)
|
||||||
|
- tlib#cmd#OutputAsList(): Also save output in g:tlib#cmd#last_output
|
||||||
|
- tlib#agent#Suspend(): Resume on BufEnter
|
||||||
|
- tlib#input#Resume(): Make sure we are in the right buffer
|
||||||
|
- tlib#agent#Suspend(): Use only BufEnter event to trigger a Resume
|
||||||
|
- tlib#input#ListW(): When redisplaying a list, make sure prefix > 0
|
||||||
|
- tlib#vcs: Access vcs (initially only git is supported)
|
||||||
|
- tlib#vcs: improved
|
||||||
|
- tlib#persistent: Persistent data file names
|
||||||
|
- tlib#file#With(): Trigger BufRead autocommands
|
||||||
|
- Duplicate help tags (fixes #13)
|
||||||
|
- Make sure scrolloff is 0 while viewing the list (fixes https://github.com/tomtom/vikitasks_vim/issues/2)
|
||||||
|
MD5 checksum: 0af19ebc0e424727a598a988fdc90f4e
|
||||||
|
|
||||||
|
- Support for tinykeymap (move paragraph)
|
||||||
|
- Moved para_move to autoload/tinykeymap/map
|
||||||
|
- tlib#vcs: some "diff" commands were defined as "ls"; updated hg def; %s is optional
|
||||||
|
MD5 checksum: f2f2fe0893e75bb9423c1ddcd01f38f6
|
||||||
|
version: "0.46"
|
||||||
|
|
||||||
|
- tlib#input#List: optimizations
|
||||||
|
- Prepare for multi-mode maps
|
||||||
|
- tlib#input#List: cnfx is new default filter
|
||||||
|
- Filters: minor changes to how the pattern is displayed
|
||||||
|
- g:tlib#input#format_filename: alternative method for formatting filenames
|
||||||
|
- tlib#input#List: allow multiple keymaps / modes
|
||||||
|
- Handle rezise events
|
||||||
|
- Don't initialize the same window twice
|
||||||
|
- Minor optimizations to how help is displayed
|
||||||
|
- Handle VimResize event per buffer
|
||||||
|
- Improve display of filenames & highlighting
|
||||||
|
- Filename highlighter: set Highlight_filename()
|
||||||
|
- RunStateHandlers(): set world variable
|
||||||
|
- Optimize help display
|
||||||
|
MD5 checksum: e3652927722bdc51935eb1a04238546b
|
||||||
|
version: "1.00"
|
||||||
|
|
||||||
|
- Set g:tlib_inputlist_and to ' ' again
|
||||||
|
- g:tlib#input#filename_max_width: maximum display width of filenames
|
||||||
|
- tlib#input#List: <s-esc>, <f10>: run command by name
|
||||||
|
MD5 checksum: a42f90275cdbe9f7d92cac61b884a2d1
|
||||||
|
version: "1.01"
|
||||||
|
|
||||||
|
- #UseInputListScratch(): Make sure the TLib autogroup was created (fixes #14)
|
||||||
|
MD5 checksum: 5a6da7fc99c7fc7584e8fc2f7bf86fe4
|
||||||
|
version: "1.02"
|
||||||
|
|
||||||
|
- tlib#cache#Value(cfile, generator, ftime, ...): cache value & check timestamp
|
||||||
|
- Replaced g:tlib#cache#silent with g:tlib#cache#verbosity
|
||||||
|
- FormatFilenames: improved handling of utf8 characters
|
||||||
|
- tlib#persistent#Value()
|
||||||
|
- tlib#input#List: Allow filename indiactors defined by the caller
|
||||||
|
- Custom filename_indicators are displayed after (and clearly separted from) the standard indicators
|
||||||
|
- Check the return value of an unknown_key agent
|
||||||
|
- Format filename = "l": Allow ".." as start of a directory name
|
||||||
|
- Format filename = "l": If the filename is just a filename's tail, display it on both sides
|
||||||
|
- Set g:tlib_filename_sep to "\" on Windows (again)
|
||||||
|
- g:tlib#cache#max_filename: If the cache filename is longer than N characters, use |pathshorten()|.
|
||||||
|
MD5 checksum: b64ce6764f39f40bfc95f3916bbb0057
|
||||||
|
version: "1.04"
|
||||||
|
|
||||||
|
version: "1.05"
|
||||||
|
- tlib#hash: Adler32 & CRC32 (using zlib via ruby) algorithms
|
||||||
|
- tlib#cache#Filename(): If the cache filename is too long, add the Adler32 checksum to the shortened path
|
||||||
|
- tlib#cache#Filename(): Use tlib#hash#Adler32() only if the or() function exists
|
||||||
|
- tlib#hash#Adler32(): Raise error, if or() doesn't exist
|
||||||
|
- tlib#hash#CRC32(): Alternative implementation of crc32 (doesn't work yet, thus currently disabled)
|
||||||
|
- tlib#bitwise: Bitwise operations for older versions of vim
|
||||||
|
- tlib#number: Base conversion
|
||||||
|
- tlib#input#ListW(): Handle mouse clicks more correctly
|
||||||
|
- tlib#bitwise#Num2Bits(): Supports returning floats
|
||||||
|
- tlib#hash#CRC32(): Alternative implementation of crc32 (doesn't work yet)
|
||||||
|
- tlib#hash#CRC32(): Re-enable ruby version
|
||||||
|
- tlib#hash#CRC32B(): Implementation of CRC32B checksum in vimscript (used only if +ruby isn't available)
|
||||||
|
- tlib#hash#CRC32B(): vim version: cache the crc table
|
||||||
|
- tlib#cache#Filename(): Use tlib#hash#CRC32B(file) instead of not Adler32 for filenames too long
|
||||||
|
- tlib#hash#CRC32B(): ruby version: return upper case hex value
|
||||||
|
- g:tlib#hash#use_crc32: define which crc32b version should be used
|
||||||
|
- Moved spec files from vimtlib to tlib_vim
|
||||||
|
- tlib#bitwise#Add() and tlib#bitwise#Sub()
|
||||||
|
- tlib#file#Relative(): Wrong results for filenames that don't exist
|
||||||
|
- Implementation of hash#Adler32 for earlier vim versions; g:tlib#hash#use_adler32
|
||||||
|
- tlib#cache#Filename(): Use adler32 again
|
||||||
|
- addon-info
|
||||||
|
- tlib#file#Absolute(): remove redundant "." parts in full filename
|
||||||
|
- win32: Fix moving window when using :vertical for tlib#inpu#List()
|
||||||
|
- tlib#cache#Filename(): Don't create wrong directory if the cache filename is too long
|
||||||
|
- tlib#file#Join(): if strip_slashes, also strip redundant (back)slashes
|
||||||
|
- tlib#input#ListW(): Always set post_keys variable
|
||||||
|
- tlib#file#With(): escape backslashes
|
||||||
|
- tlib#cmd#OutputAsList(): Support for nesting
|
||||||
|
- tlib#dir#NativeName(dirname)
|
||||||
|
MD5 checksum: 493f9beca44374de386f20d1613155e3
|
||||||
|
|
||||||
|
- Rename g:tlib_debug to g:tlib#debug
|
||||||
|
- Renamed g:tlib_sortprefs_threshold to g:tlib#input#sortprefs_threshold
|
||||||
|
- Renamed g:tlib#input#livesearch_threshold
|
||||||
|
- Renamed g:tlib_inputlist_match to g:tlib#input#filter_mode
|
||||||
|
- Renamed g:tlib_inputlist_higroup to g:tlib#input#higroup
|
||||||
|
- Renamed g:tlib#debug
|
||||||
|
- Moved g:tlib_pick_last_item
|
||||||
|
- Renamed g:tlib#input#and, g:tlib#input#or, g:tlib#input#not
|
||||||
|
- Moved g:tlib_numeric_chars to autoload/tlib/input.vim
|
||||||
|
- Renamed g:tlib#input#keyagents_InputList_s, g:tlib#input#keyagents_InputList_m, g:tlib#input#handlers_EditList
|
||||||
|
- Moved g:tlib_inputlist_pct, g:tlib_inputlist_width_filename, g:tlib_inputlist_filename_indicators, g:tlib_inputlist_shortmessage to autoload/tlib/World.vim
|
||||||
|
- Renamed tlib#input#pick_last_item (2)
|
||||||
|
- prototype.SelectItemsByNames()
|
||||||
|
- filtered_items: Restricted view
|
||||||
|
- prototype.PrintLines()
|
||||||
|
- Restricted view (2)
|
||||||
|
- Moved g:tlib_scroll_lines to autoload/tlib/agent.vim
|
||||||
|
- prototype.PrintLines() (2)
|
||||||
|
- tlib#input: Improved handling of popup menu (allows submenu)
|
||||||
|
- tlib#input: Allow mods in keys
|
||||||
|
- Moved g:tlib_scratch_pos to autoload/tlib/scratch.vim
|
||||||
|
- Moved g:tlib_tags_extra, g:tlib_tag_substitute to autoload/tlib/tag.vim
|
||||||
|
- tlib#agent#CompleteAgentNames(): Respect Arglead
|
||||||
|
- Move g:tlib_viewline_position to autoload/tlib/buffer.vim
|
||||||
|
- Move g:tlib_cache to autoload/tlib/cache.vim
|
||||||
|
- Renamed g:tlib_filename_sep to g:tlib#dir#sep
|
||||||
|
- prototype.UseScratch(): Set b:tlib_world
|
||||||
|
- tlib#input: f9 toggles resticted view
|
||||||
|
- tlib#input: next_agent, next_eval
|
||||||
|
- tlib#input: Revised use of the popup menu
|
||||||
|
- tlib#input: Disable popup menu for gui_gtk
|
||||||
|
- tlib#input: Re-enabled the popup menu for gtk gui
|
||||||
|
- tlib#input: FIX popup menu on Windows
|
||||||
|
- Renamed g:tlib_numeric_chars to g:tlib#input#numeric_chars (disabled per-buffer values) (fixes #35)
|
||||||
|
- Improve scratch list
|
||||||
|
- New: tlib#grep
|
||||||
|
- Merge branch 'master' of https://github.com/bruno-/tlib_vim into pull16
|
||||||
|
- g:tlib_scratch_hidden: Configure how to "hide" the scratch buffer
|
||||||
|
- tlib#grep#Do: don't escape "*" in patterns
|
||||||
|
- Optimize use of visible scratch buffers
|
||||||
|
- World.scratch_hidden parameter
|
||||||
|
- scratch: Always use keepalt & keepjumps
|
||||||
|
MD5 checksum: 2e40449c47dc606ccef57aa0b1e22e8e
|
||||||
|
version: "1.06"
|
||||||
|
|
||||||
|
version: "1.07"
|
||||||
|
- Help template
|
||||||
|
- prototype.Highlight_filename(): Use matchstr() instead of fnamemodify()
|
||||||
|
- Display buffer-related filename indicators only if g:tlib_inputlist_filename_indicators is true
|
||||||
|
- tlib#file#Join(): strip_slashes defaults to 1
|
||||||
|
MD5 checksum: 6c8fa96fd3747be05df848ee93dd789b
|
||||||
|
|
||||||
|
version: "1.08"
|
||||||
|
- list#input: Improved support for file indicators (closes #17)
|
||||||
|
- tlib#char#Get(): Optionally, also return mod
|
||||||
|
- tlib#input#ListW: Use #DisplayFormat(world.list)
|
||||||
|
- Renamed cnfx filter to glob & minor filter-related enhancements
|
||||||
|
- list#input: Make help available as command; help cannot be called via ?
|
||||||
|
- list#input: Improved help message
|
||||||
|
- list#input: Support Home & End keys
|
||||||
|
- list#input: Added glob filter
|
||||||
|
- tlib#agent#ShowInfo: Show full filename
|
||||||
|
- tlib#cmd#BrowseOutputWithCallback: Support calling callback with multiple results
|
||||||
|
- tlib#cmd#ParseScriptname: Properly parse results from :scriptnames
|
||||||
|
- tlib#tab#Set()
|
||||||
|
- Prepare for proper handling of scratch_split == -1
|
||||||
|
- tlib#vim#CopyFunction()
|
||||||
|
- tlib#cache#Value(): If generator is empty, use the optional argument as start value
|
||||||
|
- tlib#persistent#Get() refers to tlib#cache#Get()
|
||||||
|
MD5 checksum: 459ec620168d1ae9b18c69eb3f991832
|
||||||
|
|
||||||
|
- tlib#cache#Filename(): Use sha256() for VIM >= 7.4
|
||||||
|
- tlib#cache#Value(): Undo previous hack
|
||||||
|
- tlib#list#Uniq(): option to remove empty values
|
||||||
|
- tlib#cache#MTime(); tlib#persistent#Save() calls tlib#cache#Save()
|
||||||
|
- tlib#input#ListW: Temporarily set noshowmode
|
||||||
|
- tlib#list#Uniq(): Fix handling of empty items
|
||||||
|
- lis picker: Remove <C-Space> from help
|
||||||
|
- tlib#list#Uniq(): Implementation based on syntastic#util#unique(list) by scrooloose
|
||||||
|
MD5 checksum: b5fb4107d63930c2c8b1f0f6b3a7ff07
|
||||||
|
version: "1.09"
|
||||||
|
|
||||||
|
- tlib#cache#Filename(): Use sha256() for VIM >= 7.4
|
||||||
|
- tlib#cache#Value(): Undo previous hack
|
||||||
|
- tlib#list#Uniq(): option to remove empty values
|
||||||
|
- tlib#cache#MTime(); tlib#persistent#Save() calls tlib#cache#Save()
|
||||||
|
- tlib#input#ListW: Temporarily set noshowmode
|
||||||
|
- tlib#list#Uniq(): Fix handling of empty items
|
||||||
|
- lis picker: Remove <C-Space> from help
|
||||||
|
- tlib#list#Uniq(): Implementation based on syntastic#util#unique(list) by scrooloose
|
||||||
|
MD5 checksum: b5fb4107d63930c2c8b1f0f6b3a7ff07
|
||||||
|
version: "1.09"
|
||||||
|
|
||||||
|
- tlib#string#Chomp: Optional argument: max number of chars that should be removed
|
||||||
|
MD5 checksum: 8c1b94e25045580874e2f892d509291b
|
||||||
|
version: "1.10"
|
||||||
|
|
||||||
|
- tlib#vcs#FindVCS(filename): Wrong parameters to fnamemodifiy if filename is a directory
|
||||||
|
- Some system-related functions (e.g. facilitate use of cygwin tools)
|
||||||
|
- tlib#arg#StringAsKeyArgsEqual(), tlib#arg#StringAsKeyArgs(): Support "key=val" type argument lists
|
||||||
|
- tlib#vcs#Executable()
|
||||||
|
- scripts/create_crc_table.rb
|
||||||
|
- tlib#var#Get(): For namespaces other than global, replace "#" with "_"
|
||||||
|
MD5 checksum: 4a33f2f23e1fc6600b32e7f8323e001e
|
||||||
|
version: "1.11"
|
||||||
|
|
||||||
|
- tlib#list#ToDictionary()
|
||||||
|
- tlib#dir#CanonicName(): Use tlib#file#Canonic()
|
||||||
|
- tlib#file#Canonic()
|
||||||
|
MD5 checksum: 7995ab58f31eb6673d20deab8761838e
|
||||||
|
version: "1.12"
|
||||||
|
|
||||||
|
- SetInitialFilter(): Use deepcopy()
|
||||||
|
- tlib#var#List(): use keys(namespace) for newer versions of vim
|
||||||
|
- g:tlib#input#user_shortcuts (not functional yet)
|
||||||
|
- tlib#input#List: state "picked"
|
||||||
|
- UseInputListScratch(): Allow customization via self.index_next_syntax
|
||||||
|
- tlib#cmd#Capture()
|
||||||
|
- Facilitate customization of key agents via g:tlib_extend_keyagents_InputList_s, g:tlib_extend_keyagents_InputList_m
|
||||||
|
MD5 checksum: 7dd8b17a1a5b555df979381dcbd4c9aa
|
||||||
|
version: "1.13"
|
||||||
|
|
||||||
|
- SetInitialFilter(): Use deepcopy()
|
||||||
|
- tlib#var#List(): use keys(namespace) for newer versions of vim
|
||||||
|
- g:tlib#input#user_shortcuts (not functional yet)
|
||||||
|
- tlib#input#List: state "picked"
|
||||||
|
- UseInputListScratch(): Allow customization via self.index_next_syntax
|
||||||
|
- tlib#cmd#Capture()
|
||||||
|
- Facilitate customization of key agents via g:tlib_extend_keyagents_InputList_s, g:tlib_extend_keyagents_InputList_m
|
||||||
|
MD5 checksum: 7dd8b17a1a5b555df979381dcbd4c9aa
|
||||||
|
version: "1.13"
|
||||||
|
|
||||||
|
version: "1.14"
|
||||||
|
- FIX #18: Make sure the scratch isn't readonly
|
||||||
|
- FIX: display filter (properly handle backslashes)
|
||||||
|
- Remove loaded_* guard from autoload files
|
||||||
|
- tlib#notify#Echo(): minor changes
|
||||||
|
- tlib#file#Edit() (used by tlib#agent#ViewFile)
|
||||||
|
- tlib#buffer#GetList(): Buffer numbers are converted to numbers
|
||||||
|
- tlib#sys: Change order of functions (move tlib#sys#IsCygwinBin to the (possibly FIX #19)
|
||||||
|
- g:tlib#sys#check_cygpath: Call tlib#sys#IsExecutable('cygpath', 1) (possibly FIX #19)
|
||||||
|
MD5 checksum: 2cf6386218736a2d09db43c8e751e5a4
|
||||||
|
|
||||||
|
version: "1.15"
|
||||||
|
- tlib#file#Join(): New optional argument: maybe_absolute Drop preceding parts if a part looks like an absolute filename
|
||||||
|
- tlib#sys#Open(), tlib#sys#IsSpecial() (moved from viki)
|
||||||
|
- tlib#list#Uniq(): Handle hetergenous lists
|
||||||
|
- FIX #21: duplicate help tag
|
||||||
|
- NEW tlib#dictionary#Rev()
|
||||||
|
- tlib#input#List(): Use <Tab> to complete current word
|
||||||
|
- NEW tlib#arg#GetOpts(); ENH tlib#arg#StringAsKeyArgsEqual()
|
||||||
|
- cache: Allow for in memory cache
|
||||||
|
- NEW tlib#eval#Extend()
|
||||||
|
- Move qfl/loclist browser from trag to tlib
|
||||||
|
- FIX tlib#eval#Extend()
|
||||||
|
- Simplify tlib#eval#Extend()
|
||||||
|
- World.index_next_syntax may be a dict
|
||||||
|
- tlib#qfl#QflList: Use copy()
|
||||||
|
- tlib#arg#GetOpts: Handle exit code
|
||||||
|
MD5 checksum: 13fd8b0e4ba9cd932c57fc40ac3f641f
|
||||||
|
|
||||||
|
version: "1.15"
|
||||||
|
- tlib#file#Join(): New optional argument: maybe_absolute Drop preceding parts if a part looks like an absolute filename
|
||||||
|
- tlib#sys#Open(), tlib#sys#IsSpecial() (moved from viki)
|
||||||
|
- tlib#list#Uniq(): Handle hetergenous lists
|
||||||
|
- FIX #21: duplicate help tag
|
||||||
|
- NEW tlib#dictionary#Rev()
|
||||||
|
- tlib#input#List(): Use <Tab> to complete current word
|
||||||
|
- NEW tlib#arg#GetOpts(); ENH tlib#arg#StringAsKeyArgsEqual()
|
||||||
|
- cache: Allow for in memory cache
|
||||||
|
- NEW tlib#eval#Extend()
|
||||||
|
- Move qfl/loclist browser from trag to tlib
|
||||||
|
- FIX tlib#eval#Extend()
|
||||||
|
- Simplify tlib#eval#Extend()
|
||||||
|
- World.index_next_syntax may be a dict
|
||||||
|
- tlib#qfl#QflList: Use copy()
|
||||||
|
- tlib#arg#GetOpts: Handle exit code
|
||||||
|
MD5 checksum: 13fd8b0e4ba9cd932c57fc40ac3f641f
|
||||||
|
|
||||||
|
- tlib#arg#GetOpts: Handle short options
|
||||||
|
- tlib#arg: support short flags & facilitate completion
|
||||||
|
- NEW :TLibTrace
|
||||||
|
- tlib#sys#system_browser: FIX XDG string
|
||||||
|
- NEW tlib#sys#SystemInDir() (used by tlib#vcs#Ls)
|
||||||
|
- tlib#agent#Complete: improve fltrx
|
||||||
|
- Remove tlib#arg#Key(), :TKeyArg
|
||||||
|
- Move :TRequire, :TTimeCommand to macros/tlib.vim
|
||||||
|
- NEW tlib#cmd#TBrowseScriptnames()
|
||||||
|
- TScratch: use empty('<bang>')
|
||||||
|
- NEW :TLibTrace
|
||||||
|
- tlib#qfl: FIX TTagedFilesFilename regexp
|
||||||
|
- Remove tlib#arg#Key()
|
||||||
|
- tlib#buffer#InsertText(): Don't use TKeyArg
|
||||||
|
- tlib#eval#Extend: don't assign value
|
||||||
|
- NEW :TLibTrace, tlib#trace (was tlib#debug)
|
||||||
|
- NEW tlib#string#SplitCommaList()
|
||||||
|
- NEW tlib#time#FormatNow()
|
||||||
|
- tlib#arg#GetOpts: selectively disable "long", "short" flags
|
||||||
|
- tlib#arg#CComplete(): Support values completion (complete_customlist field)
|
||||||
|
- NEW tlib#date#Shift()
|
||||||
|
- tlib#qfl#Balloon(): Handle items with no bufnr
|
||||||
|
- NEW tlib#file#Glob, tlib#file#Globpath
|
||||||
|
- tlib#progressbar#Display(): optional "always" argument
|
||||||
|
- tlib#vcs#GitLsPostprocess(): Try to handle encoded filenames from git ls-files
|
||||||
|
- tlib#vcs#GitLsPostprocess: Eval only \ddd substrings
|
||||||
|
- FIX #22: duplicate tag
|
||||||
|
- tlib#buffer: Use 2match instead of 3match (incompatibility with matchparen)
|
||||||
|
- FIX #23: duplicate help tag
|
||||||
|
- tlib#string#SplitCommaList: optional "sep" argument
|
||||||
|
- Rename TLibTrace -> Tlibtrace; NEW Tlibtraceset command
|
||||||
|
- Rename s:SetSyntax -> tlib#qfl#SetSyntax
|
||||||
|
- mv tlib#rx#Convert to incubator
|
||||||
|
MD5 checksum: f3656fb35b7b3033084d6c5e504aca61
|
||||||
|
version: "1.16"
|
||||||
|
|
||||||
|
- tlib#input#List: #ReduceFilter: make sure the regexp is valid
|
||||||
|
- TTimeCommand -> Ttimecommand
|
||||||
|
- tlib#eval#Extend: mode argument for expand() compatibility
|
||||||
|
- tlib#input#List: Key handlers can have additional arguments
|
||||||
|
- tlib#qfl#AgentWithSelected: Set world
|
||||||
|
- prototype.UseInputListScratch: Run tlib_UseInputListScratch hook earlier
|
||||||
|
- tlib#qfl#AgentWithSelected: typo
|
||||||
|
- tlib#arg#GetOpts: type conversion (comma-separated lists etc.)
|
||||||
|
- tlib#arg: validators
|
||||||
|
- NEW tlib#date#IsDate()
|
||||||
|
- tlib#balloon#Remove: Unset &ballooneval, &balloonexpr
|
||||||
|
- NEW tlib#balloon#Expand()
|
||||||
|
- NEW tlib#date#Format()
|
||||||
|
- FIX tlib#date#Shift(..., "+Xm") for months
|
||||||
|
- NEW tlib#trace#Backtrace()
|
||||||
|
- NEW tlib#type#Is(), tlib#type#Are(), tlib#type#Has(), tlib#type#Have()
|
||||||
|
- NEW :Tlibassert
|
||||||
|
MD5 checksum: 3c4125a28ff1860accd254846651c251
|
||||||
|
version: "1.17"
|
||||||
|
|
||||||
|
- tlib#input#List: #ReduceFilter: make sure the regexp is valid
|
||||||
|
- TTimeCommand -> Ttimecommand
|
||||||
|
- tlib#eval#Extend: mode argument for expand() compatibility
|
||||||
|
- tlib#input#List: Key handlers can have additional arguments
|
||||||
|
- tlib#qfl#AgentWithSelected: Set world
|
||||||
|
- prototype.UseInputListScratch: Run tlib_UseInputListScratch hook earlier
|
||||||
|
- tlib#qfl#AgentWithSelected: typo
|
||||||
|
- tlib#arg#GetOpts: type conversion (comma-separated lists etc.)
|
||||||
|
- tlib#arg: validators
|
||||||
|
- NEW tlib#date#IsDate()
|
||||||
|
- tlib#balloon#Remove: Unset &ballooneval, &balloonexpr
|
||||||
|
- NEW tlib#balloon#Expand()
|
||||||
|
- NEW tlib#date#Format()
|
||||||
|
- FIX tlib#date#Shift(..., "+Xm") for months
|
||||||
|
- NEW tlib#trace#Backtrace()
|
||||||
|
- NEW tlib#type#Is(), tlib#type#Are(), tlib#type#Has(), tlib#type#Have()
|
||||||
|
- NEW :Tlibassert
|
||||||
|
MD5 checksum: 3c4125a28ff1860accd254846651c251
|
||||||
|
version: "1.17"
|
||||||
|
|
||||||
|
- tlib#input#List: #ReduceFilter: make sure the regexp is valid
|
||||||
|
- TTimeCommand -> Ttimecommand
|
||||||
|
- tlib#eval#Extend: mode argument for expand() compatibility
|
||||||
|
- tlib#input#List: Key handlers can have additional arguments
|
||||||
|
- tlib#qfl#AgentWithSelected: Set world
|
||||||
|
- prototype.UseInputListScratch: Run tlib_UseInputListScratch hook earlier
|
||||||
|
- tlib#qfl#AgentWithSelected: typo
|
||||||
|
- tlib#arg#GetOpts: type conversion (comma-separated lists etc.)
|
||||||
|
- tlib#arg: validators
|
||||||
|
- NEW tlib#date#IsDate()
|
||||||
|
- tlib#balloon#Remove: Unset &ballooneval, &balloonexpr
|
||||||
|
- NEW tlib#balloon#Expand()
|
||||||
|
- NEW tlib#date#Format()
|
||||||
|
- FIX tlib#date#Shift(..., "+Xm") for months
|
||||||
|
- NEW tlib#trace#Backtrace()
|
||||||
|
- NEW tlib#type#Is(), tlib#type#Are(), tlib#type#Has(), tlib#type#Have()
|
||||||
|
- NEW :Tlibassert
|
||||||
|
MD5 checksum: 3c4125a28ff1860accd254846651c251
|
||||||
|
version: "1.17"
|
||||||
|
|
||||||
|
- tlib#input#List: #ReduceFilter: make sure the regexp is valid
|
||||||
|
- TTimeCommand -> Ttimecommand
|
||||||
|
- tlib#eval#Extend: mode argument for expand() compatibility
|
||||||
|
- tlib#input#List: Key handlers can have additional arguments
|
||||||
|
- tlib#qfl#AgentWithSelected: Set world
|
||||||
|
- prototype.UseInputListScratch: Run tlib_UseInputListScratch hook earlier
|
||||||
|
- tlib#qfl#AgentWithSelected: typo
|
||||||
|
- tlib#arg#GetOpts: type conversion (comma-separated lists etc.)
|
||||||
|
- tlib#arg: validators
|
||||||
|
- NEW tlib#date#IsDate()
|
||||||
|
- tlib#balloon#Remove: Unset &ballooneval, &balloonexpr
|
||||||
|
- NEW tlib#balloon#Expand()
|
||||||
|
- NEW tlib#date#Format()
|
||||||
|
- FIX tlib#date#Shift(..., "+Xm") for months
|
||||||
|
- NEW tlib#trace#Backtrace()
|
||||||
|
- NEW tlib#type#Is(), tlib#type#Are(), tlib#type#Has(), tlib#type#Have()
|
||||||
|
- NEW :Tlibassert
|
||||||
|
MD5 checksum: 3c4125a28ff1860accd254846651c251
|
||||||
|
version: "1.17"
|
||||||
|
|
||||||
|
- tlib#arg: Completion for comma-separated lists
|
||||||
|
- Use "silent cd"
|
||||||
|
- NEW tlib#type#DefSchema(); FIX tlib#type#Has()
|
||||||
|
- tlib#cache#Value(): minor change
|
||||||
|
- tlib#date#IsDate() also checks whether the date is valid
|
||||||
|
- ! tlib#sys#Open(): escape special chars only once
|
||||||
|
- tlib#trace#Print: Allow for strings
|
||||||
|
- :Tlibtrace, :Tlibtraceset, :Tlibassert remove `-bar`
|
||||||
|
- NEW :Tlibtype (type/schema assertions); tlib#type#Is() also accepts schemas as "types"
|
||||||
|
- tlib#dir#CD(): Use haslocaldir()
|
||||||
|
- tlib#qfl#AgentGotoQFE: Don't use wincmd w
|
||||||
|
- NEW tlib#string#Input()
|
||||||
|
- FIX g:tlib#sys#system_rx; add OpenOffice exensions to g:tlib#sys#special_suffixes
|
||||||
|
- NEW tlib#selection#GetSelection()
|
||||||
|
- tlib#date#Shift(): Fix "Xm", ++specs
|
||||||
|
- tlib#trace#Set: FIX Properly handly "-label"
|
||||||
|
MD5 checksum: c3a1fe7d3cd86becbd3f7b0ba7ae9cd8
|
||||||
|
version: "1.19"
|
||||||
|
|
||||||
|
version: "1.20"
|
||||||
|
- tlib#arg: Completion for comma-separated lists
|
||||||
|
- Use "silent cd"
|
||||||
|
- NEW tlib#type#DefSchema(); FIX tlib#type#Has()
|
||||||
|
- tlib#cache#Value(): minor change
|
||||||
|
- tlib#date#IsDate() also checks whether the date is valid
|
||||||
|
- ! tlib#sys#Open(): escape special chars only once
|
||||||
|
- tlib#trace#Print: Allow for strings
|
||||||
|
- :Tlibtrace, :Tlibtraceset, :Tlibassert remove `-bar`
|
||||||
|
- NEW :Tlibtype (type/schema assertions); tlib#type#Is() also accepts schemas as "types"
|
||||||
|
- tlib#dir#CD(): Use haslocaldir()
|
||||||
|
- tlib#qfl#AgentGotoQFE: Don't use wincmd w
|
||||||
|
- NEW tlib#string#Input()
|
||||||
|
- FIX g:tlib#sys#system_rx; add OpenOffice exensions to g:tlib#sys#special_suffixes
|
||||||
|
- NEW tlib#selection#GetSelection()
|
||||||
|
- tlib#date#Shift(): Fix "Xm", ++specs
|
||||||
|
- tlib#trace#Set: FIX Properly handly "-label"
|
||||||
|
MD5 checksum: c919e0782931a8c628c6996903f989d3
|
||||||
|
|
||||||
|
- tlib#date#Shift(): Support for business days 'Nb'
|
||||||
|
- tlib#list#Uniq: Properly handle empty strings
|
||||||
|
- tlib#trace: Use g:tlib#trace#printer and tlib#trace#Printer_{printer}
|
||||||
|
- tlib#dictionary#Rev: Optional argument `opts = {}`; properly handle empty values etc.
|
||||||
|
- NEW g:tlib#trace#hl
|
||||||
|
- NEW spec/dictionary.vim
|
||||||
|
- tlib#agent#CompleteAgentNames: case insensitive
|
||||||
|
- tlib#arg#CComplete: --[no-]debug option
|
||||||
|
- tlib#date#Format: use localtime() if no arg is provided
|
||||||
|
- NEW tlib#file#IsAbsolute
|
||||||
|
- NEW tlib#notify#PrintError()
|
||||||
|
- tlib#trace#Print: FIX s/exec/call/
|
||||||
|
- tlib#type#Is() match full type name
|
||||||
|
- NEW tlib#string#MatchAll()
|
||||||
|
- Tlibtraceset, tlib#trace#Set(): If no `+` or `-` is prepended, assume `+`.
|
||||||
|
- tlib#list#Input: fix highlighting for filenames
|
||||||
|
- tlib#input#ListW: use world.CloseScratch(1)
|
||||||
|
- tlib#agent#ViewFile: Ignore errors in :exec back
|
||||||
|
- NEW tlib#agent#EditFileInWindow()
|
||||||
|
- :Tlibtraceset uses tlib#arg#GetOpts(), i.e. you can set the log file more easily
|
||||||
|
MD5 checksum: 20a48e225f32b9f58808096a5377af04
|
||||||
|
version: "1.22"
|
||||||
|
|
||||||
|
- tlib#date#Shift(): Support for business days 'Nb'
|
||||||
|
- tlib#list#Uniq: Properly handle empty strings
|
||||||
|
- tlib#trace: Use g:tlib#trace#printer and tlib#trace#Printer_{printer}
|
||||||
|
- tlib#dictionary#Rev: Optional argument `opts = {}`; properly handle empty values etc.
|
||||||
|
- NEW g:tlib#trace#hl
|
||||||
|
- NEW spec/dictionary.vim
|
||||||
|
- tlib#agent#CompleteAgentNames: case insensitive
|
||||||
|
- tlib#arg#CComplete: --[no-]debug option
|
||||||
|
- tlib#date#Format: use localtime() if no arg is provided
|
||||||
|
- NEW tlib#file#IsAbsolute
|
||||||
|
- NEW tlib#notify#PrintError()
|
||||||
|
- tlib#trace#Print: FIX s/exec/call/
|
||||||
|
- tlib#type#Is() match full type name
|
||||||
|
- NEW tlib#string#MatchAll()
|
||||||
|
- Tlibtraceset, tlib#trace#Set(): If no `+` or `-` is prepended, assume `+`.
|
||||||
|
- tlib#list#Input: fix highlighting for filenames
|
||||||
|
- tlib#input#ListW: use world.CloseScratch(1)
|
||||||
|
- tlib#agent#ViewFile: Ignore errors in :exec back
|
||||||
|
- NEW tlib#agent#EditFileInWindow()
|
||||||
|
- :Tlibtraceset uses tlib#arg#GetOpts(), i.e. you can set the log file more easily
|
||||||
|
MD5 checksum: 20a48e225f32b9f58808096a5377af04
|
||||||
|
version: "1.22"
|
||||||
|
|
||||||
|
- bump version 1.23 + misc changes
|
||||||
|
- FIX #24: avoid vim8 features
|
||||||
|
- tlib#win#GetID(): Alternative implementation sets a window variable to identify the window
|
||||||
|
- tlib#arg#GetOpts(): If args is a dict, return it
|
||||||
|
- tlib#file#FilterFiles(): FIX typo
|
||||||
|
- tlib#trace#Set: Experimental support for log levels
|
||||||
|
- tlib#input#ListW: make sure to close scratch when <= 1 items are in the list
|
||||||
|
- FIX #25: set win_nr again; fix some lint warnings
|
||||||
|
- tlib#progressbar#Init(): returns a statusline definition that can be used for restor
|
||||||
|
MD5 checksum: c4d6e018cbbd3b286a9b1648b748c1f3
|
||||||
|
version: "1.23"
|
||||||
|
|
||||||
|
- bump version 1.23 + misc changes
|
||||||
|
- FIX #24: avoid vim8 features
|
||||||
|
- tlib#win#GetID(): Alternative implementation sets a window variable to identify the window
|
||||||
|
- tlib#arg#GetOpts(): If args is a dict, return it
|
||||||
|
- tlib#file#FilterFiles(): FIX typo
|
||||||
|
- tlib#trace#Set: Experimental support for log levels
|
||||||
|
- tlib#input#ListW: make sure to close scratch when <= 1 items are in the list
|
||||||
|
- FIX #25: set win_nr again; fix some lint warnings
|
||||||
|
- tlib#progressbar#Init(): returns a statusline definition that can be used for restor
|
||||||
|
MD5 checksum: c4d6e018cbbd3b286a9b1648b748c1f3
|
||||||
|
version: "1.23"
|
||||||
|
|
||||||
|
- bump version 1.23 + misc changes
|
||||||
|
- FIX #24: avoid vim8 features
|
||||||
|
- tlib#win#GetID(): Alternative implementation sets a window variable to identify the window
|
||||||
|
- tlib#arg#GetOpts(): If args is a dict, return it
|
||||||
|
- tlib#file#FilterFiles(): FIX typo
|
||||||
|
- tlib#trace#Set: Experimental support for log levels
|
||||||
|
- tlib#input#ListW: make sure to close scratch when <= 1 items are in the list
|
||||||
|
- FIX #25: set win_nr again; fix some lint warnings
|
||||||
|
- tlib#progressbar#Init(): returns a statusline definition that can be used for restor
|
||||||
|
MD5 checksum: c4d6e018cbbd3b286a9b1648b748c1f3
|
||||||
|
version: "1.23"
|
||||||
|
|
||||||
|
- bump version 1.23 + misc changes
|
||||||
|
- FIX #24: avoid vim8 features
|
||||||
|
- tlib#win#GetID(): Alternative implementation sets a window variable to identify the window
|
||||||
|
- tlib#arg#GetOpts(): If args is a dict, return it
|
||||||
|
- tlib#file#FilterFiles(): FIX typo
|
||||||
|
- tlib#trace#Set: Experimental support for log levels
|
||||||
|
- tlib#input#ListW: make sure to close scratch when <= 1 items are in the list
|
||||||
|
- FIX #25: set win_nr again; fix some lint warnings
|
||||||
|
- tlib#progressbar#Init(): returns a statusline definition that can be used for restor
|
||||||
|
MD5 checksum: c4d6e018cbbd3b286a9b1648b748c1f3
|
||||||
|
version: "1.23"
|
||||||
|
|
||||||
|
- bump version 1.23 + misc changes
|
||||||
|
- FIX #24: avoid vim8 features
|
||||||
|
- tlib#win#GetID(): Alternative implementation sets a window variable to identify the window
|
||||||
|
- tlib#arg#GetOpts(): If args is a dict, return it
|
||||||
|
- tlib#file#FilterFiles(): FIX typo
|
||||||
|
- tlib#trace#Set: Experimental support for log levels
|
||||||
|
- tlib#input#ListW: make sure to close scratch when <= 1 items are in the list
|
||||||
|
- FIX #25: set win_nr again; fix some lint warnings
|
||||||
|
- tlib#progressbar#Init(): returns a statusline definition that can be used for restor
|
||||||
|
MD5 checksum: c4d6e018cbbd3b286a9b1648b748c1f3
|
||||||
|
version: "1.23"
|
||||||
|
|
||||||
|
- bump version 1.23 + misc changes
|
||||||
|
- FIX #24: avoid vim8 features
|
||||||
|
- tlib#win#GetID(): Alternative implementation sets a window variable to identify the window
|
||||||
|
- tlib#arg#GetOpts(): If args is a dict, return it
|
||||||
|
- tlib#file#FilterFiles(): FIX typo
|
||||||
|
- tlib#trace#Set: Experimental support for log levels
|
||||||
|
- tlib#input#ListW: make sure to close scratch when <= 1 items are in the list
|
||||||
|
- FIX #25: set win_nr again; fix some lint warnings
|
||||||
|
- tlib#progressbar#Init(): returns a statusline definition that can be used for restor
|
||||||
|
MD5 checksum: c4d6e018cbbd3b286a9b1648b748c1f3
|
||||||
|
version: "1.23"
|
||||||
|
|
||||||
|
- bump version 1.23 + misc changes
|
||||||
|
- FIX #24: avoid vim8 features
|
||||||
|
- tlib#win#GetID(): Alternative implementation sets a window variable to identify the window
|
||||||
|
- tlib#arg#GetOpts(): If args is a dict, return it
|
||||||
|
- tlib#file#FilterFiles(): FIX typo
|
||||||
|
- tlib#trace#Set: Experimental support for log levels
|
||||||
|
- tlib#input#ListW: make sure to close scratch when <= 1 items are in the list
|
||||||
|
- FIX #25: set win_nr again; fix some lint warnings
|
||||||
|
- tlib#progressbar#Init(): returns a statusline definition that can be used for restor
|
||||||
|
MD5 checksum: c4d6e018cbbd3b286a9b1648b748c1f3
|
||||||
|
version: "1.23"
|
||||||
|
|
||||||
|
- bump version 1.23 + misc changes
|
||||||
|
- FIX #24: avoid vim8 features
|
||||||
|
- tlib#win#GetID(): Alternative implementation sets a window variable to identify the window
|
||||||
|
- tlib#arg#GetOpts(): If args is a dict, return it
|
||||||
|
- tlib#file#FilterFiles(): FIX typo
|
||||||
|
- tlib#trace#Set: Experimental support for log levels
|
||||||
|
- tlib#input#ListW: make sure to close scratch when <= 1 items are in the list
|
||||||
|
- FIX #25: set win_nr again; fix some lint warnings
|
||||||
|
- tlib#progressbar#Init(): returns a statusline definition that can be used for restor
|
||||||
|
MD5 checksum: c4d6e018cbbd3b286a9b1648b748c1f3
|
||||||
|
version: "1.23"
|
||||||
|
|
||||||
|
- bump version 1.23 + misc changes
|
||||||
|
- FIX #24: avoid vim8 features
|
||||||
|
- tlib#win#GetID(): Alternative implementation sets a window variable to identify the window
|
||||||
|
- tlib#arg#GetOpts(): If args is a dict, return it
|
||||||
|
- tlib#file#FilterFiles(): FIX typo
|
||||||
|
- tlib#trace#Set: Experimental support for log levels
|
||||||
|
- tlib#input#ListW: make sure to close scratch when <= 1 items are in the list
|
||||||
|
- FIX #25: set win_nr again; fix some lint warnings
|
||||||
|
- tlib#progressbar#Init(): returns a statusline definition that can be used for restor
|
||||||
|
MD5 checksum: c4d6e018cbbd3b286a9b1648b748c1f3
|
||||||
|
version: "1.23"
|
||||||
|
|
674
sources_non_forked/tlib/LICENSE.TXT
Normal file
674
sources_non_forked/tlib/LICENSE.TXT
Normal file
|
@ -0,0 +1,674 @@
|
||||||
|
GNU GENERAL PUBLIC LICENSE
|
||||||
|
Version 3, 29 June 2007
|
||||||
|
|
||||||
|
Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
|
||||||
|
Everyone is permitted to copy and distribute verbatim copies
|
||||||
|
of this license document, but changing it is not allowed.
|
||||||
|
|
||||||
|
Preamble
|
||||||
|
|
||||||
|
The GNU General Public License is a free, copyleft license for
|
||||||
|
software and other kinds of works.
|
||||||
|
|
||||||
|
The licenses for most software and other practical works are designed
|
||||||
|
to take away your freedom to share and change the works. By contrast,
|
||||||
|
the GNU General Public License is intended to guarantee your freedom to
|
||||||
|
share and change all versions of a program--to make sure it remains free
|
||||||
|
software for all its users. We, the Free Software Foundation, use the
|
||||||
|
GNU General Public License for most of our software; it applies also to
|
||||||
|
any other work released this way by its authors. You can apply it to
|
||||||
|
your programs, too.
|
||||||
|
|
||||||
|
When we speak of free software, we are referring to freedom, not
|
||||||
|
price. Our General Public Licenses are designed to make sure that you
|
||||||
|
have the freedom to distribute copies of free software (and charge for
|
||||||
|
them if you wish), that you receive source code or can get it if you
|
||||||
|
want it, that you can change the software or use pieces of it in new
|
||||||
|
free programs, and that you know you can do these things.
|
||||||
|
|
||||||
|
To protect your rights, we need to prevent others from denying you
|
||||||
|
these rights or asking you to surrender the rights. Therefore, you have
|
||||||
|
certain responsibilities if you distribute copies of the software, or if
|
||||||
|
you modify it: responsibilities to respect the freedom of others.
|
||||||
|
|
||||||
|
For example, if you distribute copies of such a program, whether
|
||||||
|
gratis or for a fee, you must pass on to the recipients the same
|
||||||
|
freedoms that you received. You must make sure that they, too, receive
|
||||||
|
or can get the source code. And you must show them these terms so they
|
||||||
|
know their rights.
|
||||||
|
|
||||||
|
Developers that use the GNU GPL protect your rights with two steps:
|
||||||
|
(1) assert copyright on the software, and (2) offer you this License
|
||||||
|
giving you legal permission to copy, distribute and/or modify it.
|
||||||
|
|
||||||
|
For the developers' and authors' protection, the GPL clearly explains
|
||||||
|
that there is no warranty for this free software. For both users' and
|
||||||
|
authors' sake, the GPL requires that modified versions be marked as
|
||||||
|
changed, so that their problems will not be attributed erroneously to
|
||||||
|
authors of previous versions.
|
||||||
|
|
||||||
|
Some devices are designed to deny users access to install or run
|
||||||
|
modified versions of the software inside them, although the manufacturer
|
||||||
|
can do so. This is fundamentally incompatible with the aim of
|
||||||
|
protecting users' freedom to change the software. The systematic
|
||||||
|
pattern of such abuse occurs in the area of products for individuals to
|
||||||
|
use, which is precisely where it is most unacceptable. Therefore, we
|
||||||
|
have designed this version of the GPL to prohibit the practice for those
|
||||||
|
products. If such problems arise substantially in other domains, we
|
||||||
|
stand ready to extend this provision to those domains in future versions
|
||||||
|
of the GPL, as needed to protect the freedom of users.
|
||||||
|
|
||||||
|
Finally, every program is threatened constantly by software patents.
|
||||||
|
States should not allow patents to restrict development and use of
|
||||||
|
software on general-purpose computers, but in those that do, we wish to
|
||||||
|
avoid the special danger that patents applied to a free program could
|
||||||
|
make it effectively proprietary. To prevent this, the GPL assures that
|
||||||
|
patents cannot be used to render the program non-free.
|
||||||
|
|
||||||
|
The precise terms and conditions for copying, distribution and
|
||||||
|
modification follow.
|
||||||
|
|
||||||
|
TERMS AND CONDITIONS
|
||||||
|
|
||||||
|
0. Definitions.
|
||||||
|
|
||||||
|
"This License" refers to version 3 of the GNU General Public License.
|
||||||
|
|
||||||
|
"Copyright" also means copyright-like laws that apply to other kinds of
|
||||||
|
works, such as semiconductor masks.
|
||||||
|
|
||||||
|
"The Program" refers to any copyrightable work licensed under this
|
||||||
|
License. Each licensee is addressed as "you". "Licensees" and
|
||||||
|
"recipients" may be individuals or organizations.
|
||||||
|
|
||||||
|
To "modify" a work means to copy from or adapt all or part of the work
|
||||||
|
in a fashion requiring copyright permission, other than the making of an
|
||||||
|
exact copy. The resulting work is called a "modified version" of the
|
||||||
|
earlier work or a work "based on" the earlier work.
|
||||||
|
|
||||||
|
A "covered work" means either the unmodified Program or a work based
|
||||||
|
on the Program.
|
||||||
|
|
||||||
|
To "propagate" a work means to do anything with it that, without
|
||||||
|
permission, would make you directly or secondarily liable for
|
||||||
|
infringement under applicable copyright law, except executing it on a
|
||||||
|
computer or modifying a private copy. Propagation includes copying,
|
||||||
|
distribution (with or without modification), making available to the
|
||||||
|
public, and in some countries other activities as well.
|
||||||
|
|
||||||
|
To "convey" a work means any kind of propagation that enables other
|
||||||
|
parties to make or receive copies. Mere interaction with a user through
|
||||||
|
a computer network, with no transfer of a copy, is not conveying.
|
||||||
|
|
||||||
|
An interactive user interface displays "Appropriate Legal Notices"
|
||||||
|
to the extent that it includes a convenient and prominently visible
|
||||||
|
feature that (1) displays an appropriate copyright notice, and (2)
|
||||||
|
tells the user that there is no warranty for the work (except to the
|
||||||
|
extent that warranties are provided), that licensees may convey the
|
||||||
|
work under this License, and how to view a copy of this License. If
|
||||||
|
the interface presents a list of user commands or options, such as a
|
||||||
|
menu, a prominent item in the list meets this criterion.
|
||||||
|
|
||||||
|
1. Source Code.
|
||||||
|
|
||||||
|
The "source code" for a work means the preferred form of the work
|
||||||
|
for making modifications to it. "Object code" means any non-source
|
||||||
|
form of a work.
|
||||||
|
|
||||||
|
A "Standard Interface" means an interface that either is an official
|
||||||
|
standard defined by a recognized standards body, or, in the case of
|
||||||
|
interfaces specified for a particular programming language, one that
|
||||||
|
is widely used among developers working in that language.
|
||||||
|
|
||||||
|
The "System Libraries" of an executable work include anything, other
|
||||||
|
than the work as a whole, that (a) is included in the normal form of
|
||||||
|
packaging a Major Component, but which is not part of that Major
|
||||||
|
Component, and (b) serves only to enable use of the work with that
|
||||||
|
Major Component, or to implement a Standard Interface for which an
|
||||||
|
implementation is available to the public in source code form. A
|
||||||
|
"Major Component", in this context, means a major essential component
|
||||||
|
(kernel, window system, and so on) of the specific operating system
|
||||||
|
(if any) on which the executable work runs, or a compiler used to
|
||||||
|
produce the work, or an object code interpreter used to run it.
|
||||||
|
|
||||||
|
The "Corresponding Source" for a work in object code form means all
|
||||||
|
the source code needed to generate, install, and (for an executable
|
||||||
|
work) run the object code and to modify the work, including scripts to
|
||||||
|
control those activities. However, it does not include the work's
|
||||||
|
System Libraries, or general-purpose tools or generally available free
|
||||||
|
programs which are used unmodified in performing those activities but
|
||||||
|
which are not part of the work. For example, Corresponding Source
|
||||||
|
includes interface definition files associated with source files for
|
||||||
|
the work, and the source code for shared libraries and dynamically
|
||||||
|
linked subprograms that the work is specifically designed to require,
|
||||||
|
such as by intimate data communication or control flow between those
|
||||||
|
subprograms and other parts of the work.
|
||||||
|
|
||||||
|
The Corresponding Source need not include anything that users
|
||||||
|
can regenerate automatically from other parts of the Corresponding
|
||||||
|
Source.
|
||||||
|
|
||||||
|
The Corresponding Source for a work in source code form is that
|
||||||
|
same work.
|
||||||
|
|
||||||
|
2. Basic Permissions.
|
||||||
|
|
||||||
|
All rights granted under this License are granted for the term of
|
||||||
|
copyright on the Program, and are irrevocable provided the stated
|
||||||
|
conditions are met. This License explicitly affirms your unlimited
|
||||||
|
permission to run the unmodified Program. The output from running a
|
||||||
|
covered work is covered by this License only if the output, given its
|
||||||
|
content, constitutes a covered work. This License acknowledges your
|
||||||
|
rights of fair use or other equivalent, as provided by copyright law.
|
||||||
|
|
||||||
|
You may make, run and propagate covered works that you do not
|
||||||
|
convey, without conditions so long as your license otherwise remains
|
||||||
|
in force. You may convey covered works to others for the sole purpose
|
||||||
|
of having them make modifications exclusively for you, or provide you
|
||||||
|
with facilities for running those works, provided that you comply with
|
||||||
|
the terms of this License in conveying all material for which you do
|
||||||
|
not control copyright. Those thus making or running the covered works
|
||||||
|
for you must do so exclusively on your behalf, under your direction
|
||||||
|
and control, on terms that prohibit them from making any copies of
|
||||||
|
your copyrighted material outside their relationship with you.
|
||||||
|
|
||||||
|
Conveying under any other circumstances is permitted solely under
|
||||||
|
the conditions stated below. Sublicensing is not allowed; section 10
|
||||||
|
makes it unnecessary.
|
||||||
|
|
||||||
|
3. Protecting Users' Legal Rights From Anti-Circumvention Law.
|
||||||
|
|
||||||
|
No covered work shall be deemed part of an effective technological
|
||||||
|
measure under any applicable law fulfilling obligations under article
|
||||||
|
11 of the WIPO copyright treaty adopted on 20 December 1996, or
|
||||||
|
similar laws prohibiting or restricting circumvention of such
|
||||||
|
measures.
|
||||||
|
|
||||||
|
When you convey a covered work, you waive any legal power to forbid
|
||||||
|
circumvention of technological measures to the extent such circumvention
|
||||||
|
is effected by exercising rights under this License with respect to
|
||||||
|
the covered work, and you disclaim any intention to limit operation or
|
||||||
|
modification of the work as a means of enforcing, against the work's
|
||||||
|
users, your or third parties' legal rights to forbid circumvention of
|
||||||
|
technological measures.
|
||||||
|
|
||||||
|
4. Conveying Verbatim Copies.
|
||||||
|
|
||||||
|
You may convey verbatim copies of the Program's source code as you
|
||||||
|
receive it, in any medium, provided that you conspicuously and
|
||||||
|
appropriately publish on each copy an appropriate copyright notice;
|
||||||
|
keep intact all notices stating that this License and any
|
||||||
|
non-permissive terms added in accord with section 7 apply to the code;
|
||||||
|
keep intact all notices of the absence of any warranty; and give all
|
||||||
|
recipients a copy of this License along with the Program.
|
||||||
|
|
||||||
|
You may charge any price or no price for each copy that you convey,
|
||||||
|
and you may offer support or warranty protection for a fee.
|
||||||
|
|
||||||
|
5. Conveying Modified Source Versions.
|
||||||
|
|
||||||
|
You may convey a work based on the Program, or the modifications to
|
||||||
|
produce it from the Program, in the form of source code under the
|
||||||
|
terms of section 4, provided that you also meet all of these conditions:
|
||||||
|
|
||||||
|
a) The work must carry prominent notices stating that you modified
|
||||||
|
it, and giving a relevant date.
|
||||||
|
|
||||||
|
b) The work must carry prominent notices stating that it is
|
||||||
|
released under this License and any conditions added under section
|
||||||
|
7. This requirement modifies the requirement in section 4 to
|
||||||
|
"keep intact all notices".
|
||||||
|
|
||||||
|
c) You must license the entire work, as a whole, under this
|
||||||
|
License to anyone who comes into possession of a copy. This
|
||||||
|
License will therefore apply, along with any applicable section 7
|
||||||
|
additional terms, to the whole of the work, and all its parts,
|
||||||
|
regardless of how they are packaged. This License gives no
|
||||||
|
permission to license the work in any other way, but it does not
|
||||||
|
invalidate such permission if you have separately received it.
|
||||||
|
|
||||||
|
d) If the work has interactive user interfaces, each must display
|
||||||
|
Appropriate Legal Notices; however, if the Program has interactive
|
||||||
|
interfaces that do not display Appropriate Legal Notices, your
|
||||||
|
work need not make them do so.
|
||||||
|
|
||||||
|
A compilation of a covered work with other separate and independent
|
||||||
|
works, which are not by their nature extensions of the covered work,
|
||||||
|
and which are not combined with it such as to form a larger program,
|
||||||
|
in or on a volume of a storage or distribution medium, is called an
|
||||||
|
"aggregate" if the compilation and its resulting copyright are not
|
||||||
|
used to limit the access or legal rights of the compilation's users
|
||||||
|
beyond what the individual works permit. Inclusion of a covered work
|
||||||
|
in an aggregate does not cause this License to apply to the other
|
||||||
|
parts of the aggregate.
|
||||||
|
|
||||||
|
6. Conveying Non-Source Forms.
|
||||||
|
|
||||||
|
You may convey a covered work in object code form under the terms
|
||||||
|
of sections 4 and 5, provided that you also convey the
|
||||||
|
machine-readable Corresponding Source under the terms of this License,
|
||||||
|
in one of these ways:
|
||||||
|
|
||||||
|
a) Convey the object code in, or embodied in, a physical product
|
||||||
|
(including a physical distribution medium), accompanied by the
|
||||||
|
Corresponding Source fixed on a durable physical medium
|
||||||
|
customarily used for software interchange.
|
||||||
|
|
||||||
|
b) Convey the object code in, or embodied in, a physical product
|
||||||
|
(including a physical distribution medium), accompanied by a
|
||||||
|
written offer, valid for at least three years and valid for as
|
||||||
|
long as you offer spare parts or customer support for that product
|
||||||
|
model, to give anyone who possesses the object code either (1) a
|
||||||
|
copy of the Corresponding Source for all the software in the
|
||||||
|
product that is covered by this License, on a durable physical
|
||||||
|
medium customarily used for software interchange, for a price no
|
||||||
|
more than your reasonable cost of physically performing this
|
||||||
|
conveying of source, or (2) access to copy the
|
||||||
|
Corresponding Source from a network server at no charge.
|
||||||
|
|
||||||
|
c) Convey individual copies of the object code with a copy of the
|
||||||
|
written offer to provide the Corresponding Source. This
|
||||||
|
alternative is allowed only occasionally and noncommercially, and
|
||||||
|
only if you received the object code with such an offer, in accord
|
||||||
|
with subsection 6b.
|
||||||
|
|
||||||
|
d) Convey the object code by offering access from a designated
|
||||||
|
place (gratis or for a charge), and offer equivalent access to the
|
||||||
|
Corresponding Source in the same way through the same place at no
|
||||||
|
further charge. You need not require recipients to copy the
|
||||||
|
Corresponding Source along with the object code. If the place to
|
||||||
|
copy the object code is a network server, the Corresponding Source
|
||||||
|
may be on a different server (operated by you or a third party)
|
||||||
|
that supports equivalent copying facilities, provided you maintain
|
||||||
|
clear directions next to the object code saying where to find the
|
||||||
|
Corresponding Source. Regardless of what server hosts the
|
||||||
|
Corresponding Source, you remain obligated to ensure that it is
|
||||||
|
available for as long as needed to satisfy these requirements.
|
||||||
|
|
||||||
|
e) Convey the object code using peer-to-peer transmission, provided
|
||||||
|
you inform other peers where the object code and Corresponding
|
||||||
|
Source of the work are being offered to the general public at no
|
||||||
|
charge under subsection 6d.
|
||||||
|
|
||||||
|
A separable portion of the object code, whose source code is excluded
|
||||||
|
from the Corresponding Source as a System Library, need not be
|
||||||
|
included in conveying the object code work.
|
||||||
|
|
||||||
|
A "User Product" is either (1) a "consumer product", which means any
|
||||||
|
tangible personal property which is normally used for personal, family,
|
||||||
|
or household purposes, or (2) anything designed or sold for incorporation
|
||||||
|
into a dwelling. In determining whether a product is a consumer product,
|
||||||
|
doubtful cases shall be resolved in favor of coverage. For a particular
|
||||||
|
product received by a particular user, "normally used" refers to a
|
||||||
|
typical or common use of that class of product, regardless of the status
|
||||||
|
of the particular user or of the way in which the particular user
|
||||||
|
actually uses, or expects or is expected to use, the product. A product
|
||||||
|
is a consumer product regardless of whether the product has substantial
|
||||||
|
commercial, industrial or non-consumer uses, unless such uses represent
|
||||||
|
the only significant mode of use of the product.
|
||||||
|
|
||||||
|
"Installation Information" for a User Product means any methods,
|
||||||
|
procedures, authorization keys, or other information required to install
|
||||||
|
and execute modified versions of a covered work in that User Product from
|
||||||
|
a modified version of its Corresponding Source. The information must
|
||||||
|
suffice to ensure that the continued functioning of the modified object
|
||||||
|
code is in no case prevented or interfered with solely because
|
||||||
|
modification has been made.
|
||||||
|
|
||||||
|
If you convey an object code work under this section in, or with, or
|
||||||
|
specifically for use in, a User Product, and the conveying occurs as
|
||||||
|
part of a transaction in which the right of possession and use of the
|
||||||
|
User Product is transferred to the recipient in perpetuity or for a
|
||||||
|
fixed term (regardless of how the transaction is characterized), the
|
||||||
|
Corresponding Source conveyed under this section must be accompanied
|
||||||
|
by the Installation Information. But this requirement does not apply
|
||||||
|
if neither you nor any third party retains the ability to install
|
||||||
|
modified object code on the User Product (for example, the work has
|
||||||
|
been installed in ROM).
|
||||||
|
|
||||||
|
The requirement to provide Installation Information does not include a
|
||||||
|
requirement to continue to provide support service, warranty, or updates
|
||||||
|
for a work that has been modified or installed by the recipient, or for
|
||||||
|
the User Product in which it has been modified or installed. Access to a
|
||||||
|
network may be denied when the modification itself materially and
|
||||||
|
adversely affects the operation of the network or violates the rules and
|
||||||
|
protocols for communication across the network.
|
||||||
|
|
||||||
|
Corresponding Source conveyed, and Installation Information provided,
|
||||||
|
in accord with this section must be in a format that is publicly
|
||||||
|
documented (and with an implementation available to the public in
|
||||||
|
source code form), and must require no special password or key for
|
||||||
|
unpacking, reading or copying.
|
||||||
|
|
||||||
|
7. Additional Terms.
|
||||||
|
|
||||||
|
"Additional permissions" are terms that supplement the terms of this
|
||||||
|
License by making exceptions from one or more of its conditions.
|
||||||
|
Additional permissions that are applicable to the entire Program shall
|
||||||
|
be treated as though they were included in this License, to the extent
|
||||||
|
that they are valid under applicable law. If additional permissions
|
||||||
|
apply only to part of the Program, that part may be used separately
|
||||||
|
under those permissions, but the entire Program remains governed by
|
||||||
|
this License without regard to the additional permissions.
|
||||||
|
|
||||||
|
When you convey a copy of a covered work, you may at your option
|
||||||
|
remove any additional permissions from that copy, or from any part of
|
||||||
|
it. (Additional permissions may be written to require their own
|
||||||
|
removal in certain cases when you modify the work.) You may place
|
||||||
|
additional permissions on material, added by you to a covered work,
|
||||||
|
for which you have or can give appropriate copyright permission.
|
||||||
|
|
||||||
|
Notwithstanding any other provision of this License, for material you
|
||||||
|
add to a covered work, you may (if authorized by the copyright holders of
|
||||||
|
that material) supplement the terms of this License with terms:
|
||||||
|
|
||||||
|
a) Disclaiming warranty or limiting liability differently from the
|
||||||
|
terms of sections 15 and 16 of this License; or
|
||||||
|
|
||||||
|
b) Requiring preservation of specified reasonable legal notices or
|
||||||
|
author attributions in that material or in the Appropriate Legal
|
||||||
|
Notices displayed by works containing it; or
|
||||||
|
|
||||||
|
c) Prohibiting misrepresentation of the origin of that material, or
|
||||||
|
requiring that modified versions of such material be marked in
|
||||||
|
reasonable ways as different from the original version; or
|
||||||
|
|
||||||
|
d) Limiting the use for publicity purposes of names of licensors or
|
||||||
|
authors of the material; or
|
||||||
|
|
||||||
|
e) Declining to grant rights under trademark law for use of some
|
||||||
|
trade names, trademarks, or service marks; or
|
||||||
|
|
||||||
|
f) Requiring indemnification of licensors and authors of that
|
||||||
|
material by anyone who conveys the material (or modified versions of
|
||||||
|
it) with contractual assumptions of liability to the recipient, for
|
||||||
|
any liability that these contractual assumptions directly impose on
|
||||||
|
those licensors and authors.
|
||||||
|
|
||||||
|
All other non-permissive additional terms are considered "further
|
||||||
|
restrictions" within the meaning of section 10. If the Program as you
|
||||||
|
received it, or any part of it, contains a notice stating that it is
|
||||||
|
governed by this License along with a term that is a further
|
||||||
|
restriction, you may remove that term. If a license document contains
|
||||||
|
a further restriction but permits relicensing or conveying under this
|
||||||
|
License, you may add to a covered work material governed by the terms
|
||||||
|
of that license document, provided that the further restriction does
|
||||||
|
not survive such relicensing or conveying.
|
||||||
|
|
||||||
|
If you add terms to a covered work in accord with this section, you
|
||||||
|
must place, in the relevant source files, a statement of the
|
||||||
|
additional terms that apply to those files, or a notice indicating
|
||||||
|
where to find the applicable terms.
|
||||||
|
|
||||||
|
Additional terms, permissive or non-permissive, may be stated in the
|
||||||
|
form of a separately written license, or stated as exceptions;
|
||||||
|
the above requirements apply either way.
|
||||||
|
|
||||||
|
8. Termination.
|
||||||
|
|
||||||
|
You may not propagate or modify a covered work except as expressly
|
||||||
|
provided under this License. Any attempt otherwise to propagate or
|
||||||
|
modify it is void, and will automatically terminate your rights under
|
||||||
|
this License (including any patent licenses granted under the third
|
||||||
|
paragraph of section 11).
|
||||||
|
|
||||||
|
However, if you cease all violation of this License, then your
|
||||||
|
license from a particular copyright holder is reinstated (a)
|
||||||
|
provisionally, unless and until the copyright holder explicitly and
|
||||||
|
finally terminates your license, and (b) permanently, if the copyright
|
||||||
|
holder fails to notify you of the violation by some reasonable means
|
||||||
|
prior to 60 days after the cessation.
|
||||||
|
|
||||||
|
Moreover, your license from a particular copyright holder is
|
||||||
|
reinstated permanently if the copyright holder notifies you of the
|
||||||
|
violation by some reasonable means, this is the first time you have
|
||||||
|
received notice of violation of this License (for any work) from that
|
||||||
|
copyright holder, and you cure the violation prior to 30 days after
|
||||||
|
your receipt of the notice.
|
||||||
|
|
||||||
|
Termination of your rights under this section does not terminate the
|
||||||
|
licenses of parties who have received copies or rights from you under
|
||||||
|
this License. If your rights have been terminated and not permanently
|
||||||
|
reinstated, you do not qualify to receive new licenses for the same
|
||||||
|
material under section 10.
|
||||||
|
|
||||||
|
9. Acceptance Not Required for Having Copies.
|
||||||
|
|
||||||
|
You are not required to accept this License in order to receive or
|
||||||
|
run a copy of the Program. Ancillary propagation of a covered work
|
||||||
|
occurring solely as a consequence of using peer-to-peer transmission
|
||||||
|
to receive a copy likewise does not require acceptance. However,
|
||||||
|
nothing other than this License grants you permission to propagate or
|
||||||
|
modify any covered work. These actions infringe copyright if you do
|
||||||
|
not accept this License. Therefore, by modifying or propagating a
|
||||||
|
covered work, you indicate your acceptance of this License to do so.
|
||||||
|
|
||||||
|
10. Automatic Licensing of Downstream Recipients.
|
||||||
|
|
||||||
|
Each time you convey a covered work, the recipient automatically
|
||||||
|
receives a license from the original licensors, to run, modify and
|
||||||
|
propagate that work, subject to this License. You are not responsible
|
||||||
|
for enforcing compliance by third parties with this License.
|
||||||
|
|
||||||
|
An "entity transaction" is a transaction transferring control of an
|
||||||
|
organization, or substantially all assets of one, or subdividing an
|
||||||
|
organization, or merging organizations. If propagation of a covered
|
||||||
|
work results from an entity transaction, each party to that
|
||||||
|
transaction who receives a copy of the work also receives whatever
|
||||||
|
licenses to the work the party's predecessor in interest had or could
|
||||||
|
give under the previous paragraph, plus a right to possession of the
|
||||||
|
Corresponding Source of the work from the predecessor in interest, if
|
||||||
|
the predecessor has it or can get it with reasonable efforts.
|
||||||
|
|
||||||
|
You may not impose any further restrictions on the exercise of the
|
||||||
|
rights granted or affirmed under this License. For example, you may
|
||||||
|
not impose a license fee, royalty, or other charge for exercise of
|
||||||
|
rights granted under this License, and you may not initiate litigation
|
||||||
|
(including a cross-claim or counterclaim in a lawsuit) alleging that
|
||||||
|
any patent claim is infringed by making, using, selling, offering for
|
||||||
|
sale, or importing the Program or any portion of it.
|
||||||
|
|
||||||
|
11. Patents.
|
||||||
|
|
||||||
|
A "contributor" is a copyright holder who authorizes use under this
|
||||||
|
License of the Program or a work on which the Program is based. The
|
||||||
|
work thus licensed is called the contributor's "contributor version".
|
||||||
|
|
||||||
|
A contributor's "essential patent claims" are all patent claims
|
||||||
|
owned or controlled by the contributor, whether already acquired or
|
||||||
|
hereafter acquired, that would be infringed by some manner, permitted
|
||||||
|
by this License, of making, using, or selling its contributor version,
|
||||||
|
but do not include claims that would be infringed only as a
|
||||||
|
consequence of further modification of the contributor version. For
|
||||||
|
purposes of this definition, "control" includes the right to grant
|
||||||
|
patent sublicenses in a manner consistent with the requirements of
|
||||||
|
this License.
|
||||||
|
|
||||||
|
Each contributor grants you a non-exclusive, worldwide, royalty-free
|
||||||
|
patent license under the contributor's essential patent claims, to
|
||||||
|
make, use, sell, offer for sale, import and otherwise run, modify and
|
||||||
|
propagate the contents of its contributor version.
|
||||||
|
|
||||||
|
In the following three paragraphs, a "patent license" is any express
|
||||||
|
agreement or commitment, however denominated, not to enforce a patent
|
||||||
|
(such as an express permission to practice a patent or covenant not to
|
||||||
|
sue for patent infringement). To "grant" such a patent license to a
|
||||||
|
party means to make such an agreement or commitment not to enforce a
|
||||||
|
patent against the party.
|
||||||
|
|
||||||
|
If you convey a covered work, knowingly relying on a patent license,
|
||||||
|
and the Corresponding Source of the work is not available for anyone
|
||||||
|
to copy, free of charge and under the terms of this License, through a
|
||||||
|
publicly available network server or other readily accessible means,
|
||||||
|
then you must either (1) cause the Corresponding Source to be so
|
||||||
|
available, or (2) arrange to deprive yourself of the benefit of the
|
||||||
|
patent license for this particular work, or (3) arrange, in a manner
|
||||||
|
consistent with the requirements of this License, to extend the patent
|
||||||
|
license to downstream recipients. "Knowingly relying" means you have
|
||||||
|
actual knowledge that, but for the patent license, your conveying the
|
||||||
|
covered work in a country, or your recipient's use of the covered work
|
||||||
|
in a country, would infringe one or more identifiable patents in that
|
||||||
|
country that you have reason to believe are valid.
|
||||||
|
|
||||||
|
If, pursuant to or in connection with a single transaction or
|
||||||
|
arrangement, you convey, or propagate by procuring conveyance of, a
|
||||||
|
covered work, and grant a patent license to some of the parties
|
||||||
|
receiving the covered work authorizing them to use, propagate, modify
|
||||||
|
or convey a specific copy of the covered work, then the patent license
|
||||||
|
you grant is automatically extended to all recipients of the covered
|
||||||
|
work and works based on it.
|
||||||
|
|
||||||
|
A patent license is "discriminatory" if it does not include within
|
||||||
|
the scope of its coverage, prohibits the exercise of, or is
|
||||||
|
conditioned on the non-exercise of one or more of the rights that are
|
||||||
|
specifically granted under this License. You may not convey a covered
|
||||||
|
work if you are a party to an arrangement with a third party that is
|
||||||
|
in the business of distributing software, under which you make payment
|
||||||
|
to the third party based on the extent of your activity of conveying
|
||||||
|
the work, and under which the third party grants, to any of the
|
||||||
|
parties who would receive the covered work from you, a discriminatory
|
||||||
|
patent license (a) in connection with copies of the covered work
|
||||||
|
conveyed by you (or copies made from those copies), or (b) primarily
|
||||||
|
for and in connection with specific products or compilations that
|
||||||
|
contain the covered work, unless you entered into that arrangement,
|
||||||
|
or that patent license was granted, prior to 28 March 2007.
|
||||||
|
|
||||||
|
Nothing in this License shall be construed as excluding or limiting
|
||||||
|
any implied license or other defenses to infringement that may
|
||||||
|
otherwise be available to you under applicable patent law.
|
||||||
|
|
||||||
|
12. No Surrender of Others' Freedom.
|
||||||
|
|
||||||
|
If conditions are imposed on you (whether by court order, agreement or
|
||||||
|
otherwise) that contradict the conditions of this License, they do not
|
||||||
|
excuse you from the conditions of this License. If you cannot convey a
|
||||||
|
covered work so as to satisfy simultaneously your obligations under this
|
||||||
|
License and any other pertinent obligations, then as a consequence you may
|
||||||
|
not convey it at all. For example, if you agree to terms that obligate you
|
||||||
|
to collect a royalty for further conveying from those to whom you convey
|
||||||
|
the Program, the only way you could satisfy both those terms and this
|
||||||
|
License would be to refrain entirely from conveying the Program.
|
||||||
|
|
||||||
|
13. Use with the GNU Affero General Public License.
|
||||||
|
|
||||||
|
Notwithstanding any other provision of this License, you have
|
||||||
|
permission to link or combine any covered work with a work licensed
|
||||||
|
under version 3 of the GNU Affero General Public License into a single
|
||||||
|
combined work, and to convey the resulting work. The terms of this
|
||||||
|
License will continue to apply to the part which is the covered work,
|
||||||
|
but the special requirements of the GNU Affero General Public License,
|
||||||
|
section 13, concerning interaction through a network will apply to the
|
||||||
|
combination as such.
|
||||||
|
|
||||||
|
14. Revised Versions of this License.
|
||||||
|
|
||||||
|
The Free Software Foundation may publish revised and/or new versions of
|
||||||
|
the GNU General Public License from time to time. Such new versions will
|
||||||
|
be similar in spirit to the present version, but may differ in detail to
|
||||||
|
address new problems or concerns.
|
||||||
|
|
||||||
|
Each version is given a distinguishing version number. If the
|
||||||
|
Program specifies that a certain numbered version of the GNU General
|
||||||
|
Public License "or any later version" applies to it, you have the
|
||||||
|
option of following the terms and conditions either of that numbered
|
||||||
|
version or of any later version published by the Free Software
|
||||||
|
Foundation. If the Program does not specify a version number of the
|
||||||
|
GNU General Public License, you may choose any version ever published
|
||||||
|
by the Free Software Foundation.
|
||||||
|
|
||||||
|
If the Program specifies that a proxy can decide which future
|
||||||
|
versions of the GNU General Public License can be used, that proxy's
|
||||||
|
public statement of acceptance of a version permanently authorizes you
|
||||||
|
to choose that version for the Program.
|
||||||
|
|
||||||
|
Later license versions may give you additional or different
|
||||||
|
permissions. However, no additional obligations are imposed on any
|
||||||
|
author or copyright holder as a result of your choosing to follow a
|
||||||
|
later version.
|
||||||
|
|
||||||
|
15. Disclaimer of Warranty.
|
||||||
|
|
||||||
|
THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
|
||||||
|
APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
|
||||||
|
HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
|
||||||
|
OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
|
||||||
|
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||||
|
PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
|
||||||
|
IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
|
||||||
|
ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
|
||||||
|
|
||||||
|
16. Limitation of Liability.
|
||||||
|
|
||||||
|
IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
|
||||||
|
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
|
||||||
|
THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
|
||||||
|
GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
|
||||||
|
USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
|
||||||
|
DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
|
||||||
|
PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
|
||||||
|
EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
|
||||||
|
SUCH DAMAGES.
|
||||||
|
|
||||||
|
17. Interpretation of Sections 15 and 16.
|
||||||
|
|
||||||
|
If the disclaimer of warranty and limitation of liability provided
|
||||||
|
above cannot be given local legal effect according to their terms,
|
||||||
|
reviewing courts shall apply local law that most closely approximates
|
||||||
|
an absolute waiver of all civil liability in connection with the
|
||||||
|
Program, unless a warranty or assumption of liability accompanies a
|
||||||
|
copy of the Program in return for a fee.
|
||||||
|
|
||||||
|
END OF TERMS AND CONDITIONS
|
||||||
|
|
||||||
|
How to Apply These Terms to Your New Programs
|
||||||
|
|
||||||
|
If you develop a new program, and you want it to be of the greatest
|
||||||
|
possible use to the public, the best way to achieve this is to make it
|
||||||
|
free software which everyone can redistribute and change under these terms.
|
||||||
|
|
||||||
|
To do so, attach the following notices to the program. It is safest
|
||||||
|
to attach them to the start of each source file to most effectively
|
||||||
|
state the exclusion of warranty; and each file should have at least
|
||||||
|
the "copyright" line and a pointer to where the full notice is found.
|
||||||
|
|
||||||
|
<one line to give the program's name and a brief idea of what it does.>
|
||||||
|
Copyright (C) <year> <name of author>
|
||||||
|
|
||||||
|
This program is free software: you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation, either version 3 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
This program is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
Also add information on how to contact you by electronic and paper mail.
|
||||||
|
|
||||||
|
If the program does terminal interaction, make it output a short
|
||||||
|
notice like this when it starts in an interactive mode:
|
||||||
|
|
||||||
|
<program> Copyright (C) <year> <name of author>
|
||||||
|
This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
|
||||||
|
This is free software, and you are welcome to redistribute it
|
||||||
|
under certain conditions; type `show c' for details.
|
||||||
|
|
||||||
|
The hypothetical commands `show w' and `show c' should show the appropriate
|
||||||
|
parts of the General Public License. Of course, your program's commands
|
||||||
|
might be different; for a GUI interface, you would use an "about box".
|
||||||
|
|
||||||
|
You should also get your employer (if you work as a programmer) or school,
|
||||||
|
if any, to sign a "copyright disclaimer" for the program, if necessary.
|
||||||
|
For more information on this, and how to apply and follow the GNU GPL, see
|
||||||
|
<http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
The GNU General Public License does not permit incorporating your program
|
||||||
|
into proprietary programs. If your program is a subroutine library, you
|
||||||
|
may consider it more useful to permit linking proprietary applications with
|
||||||
|
the library. If this is what you want to do, use the GNU Lesser General
|
||||||
|
Public License instead of this License. But first, please read
|
||||||
|
<http://www.gnu.org/philosophy/why-not-lgpl.html>.
|
9
sources_non_forked/tlib/addon-info.json
Normal file
9
sources_non_forked/tlib/addon-info.json
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
{
|
||||||
|
"name" : "tlib",
|
||||||
|
"version" : "dev",
|
||||||
|
"author" : "Tom Link <micathom at gmail com>",
|
||||||
|
"maintainer" : "Tom Link <micathom at gmail com>",
|
||||||
|
"repository" : {"type": "git", "url": "git://github.com/tomtom/tlib_vim.git"},
|
||||||
|
"dependencies" : {},
|
||||||
|
"description" : "tlib -- A library of vim functions"
|
||||||
|
}
|
|
@ -0,0 +1,12 @@
|
||||||
|
" para_move.vim
|
||||||
|
" @Author: Tom Link (mailto:micathom AT gmail com?subject=[vim])
|
||||||
|
" @License: GPL (see http://www.gnu.org/licenses/gpl.txt)
|
||||||
|
" @Created: 2012-08-28.
|
||||||
|
" @Last Change: 2012-08-29.
|
||||||
|
" @Revision: 3
|
||||||
|
|
||||||
|
" Move paragraphs
|
||||||
|
call tinykeymap#EnterMap("para_move", "gp", {'name': 'move paragraph'})
|
||||||
|
call tinykeymap#Map("para_move", "j", "silent call tlib#paragraph#Move('Down', '<count>')")
|
||||||
|
call tinykeymap#Map("para_move", "k", "silent call tlib#paragraph#Move('Up', '<count>')")
|
||||||
|
|
|
@ -3,8 +3,8 @@
|
||||||
" @Website: http://www.vim.org/account/profile.php?user_id=4037
|
" @Website: http://www.vim.org/account/profile.php?user_id=4037
|
||||||
" @License: GPL (see http://www.gnu.org/licenses/gpl.txt)
|
" @License: GPL (see http://www.gnu.org/licenses/gpl.txt)
|
||||||
" @Created: 2008-11-25.
|
" @Created: 2008-11-25.
|
||||||
" @Last Change: 2014-11-18.
|
" @Last Change: 2017-09-28.
|
||||||
" @Revision: 0.0.114
|
" @Revision: 11.0.114
|
||||||
|
|
||||||
let s:prototype = tlib#Object#New({'_class': ['Filter_cnf'], 'name': 'cnf'}) "{{{2
|
let s:prototype = tlib#Object#New({'_class': ['Filter_cnf'], 'name': 'cnf'}) "{{{2
|
||||||
let s:prototype.highlight = g:tlib#input#higroup
|
let s:prototype.highlight = g:tlib#input#higroup
|
||||||
|
@ -47,7 +47,8 @@ function! s:prototype.AssessName(world, name) dict "{{{3
|
||||||
" if flt =~# '\u' && a:name =~# flt
|
" if flt =~# '\u' && a:name =~# flt
|
||||||
" let xa += 5
|
" let xa += 5
|
||||||
" endif
|
" endif
|
||||||
|
let rel = 1.0 + 5.0 * len(flt) / len(a:name)
|
||||||
|
let xa += float2nr(rel)
|
||||||
if a:name =~ '\^'. flt
|
if a:name =~ '\^'. flt
|
||||||
let xa += 4
|
let xa += 4
|
||||||
elseif a:name =~ '\<'. flt
|
elseif a:name =~ '\<'. flt
|
||||||
|
@ -131,7 +132,7 @@ function! s:prototype.ReduceFrontFilter(world) dict "{{{3
|
||||||
if empty(str)
|
if empty(str)
|
||||||
let filter = filter[0 : -2]
|
let filter = filter[0 : -2]
|
||||||
else
|
else
|
||||||
let filter = strpart(filter, 0, len(filter) - len(str))
|
let filter = tlib#string#Strcharpart(filter, 0, len(filter) - len(str))
|
||||||
endif
|
endif
|
||||||
" TLogVAR str, filter
|
" TLogVAR str, filter
|
||||||
let a:world.filter[0][0] = filter
|
let a:world.filter[0][0] = filter
|
||||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -1,8 +1,7 @@
|
||||||
" @Author: Tom Link (micathom AT gmail com?subject=[vim])
|
" @Author: Tom Link (micathom AT gmail com?subject=[vim])
|
||||||
" @Website: http://www.vim.org/account/profile.php?user_id=4037
|
" @Website: http://www.vim.org/account/profile.php?user_id=4037
|
||||||
" @License: GPL (see http://www.gnu.org/licenses/gpl.txt)
|
" @License: GPL (see http://www.gnu.org/licenses/gpl.txt)
|
||||||
" @Revision: 328
|
" @Revision: 362
|
||||||
|
|
||||||
|
|
||||||
" :filedoc:
|
" :filedoc:
|
||||||
" Various agents for use as key handlers in tlib#input#List()
|
" Various agents for use as key handlers in tlib#input#List()
|
||||||
|
@ -14,7 +13,8 @@ TLet g:tlib_scroll_lines = 10
|
||||||
" General {{{1
|
" General {{{1
|
||||||
|
|
||||||
function! tlib#agent#Exit(world, selected) "{{{3
|
function! tlib#agent#Exit(world, selected) "{{{3
|
||||||
if a:world.key_mode == 'default'
|
Tlibtrace 'tlib', a:selected
|
||||||
|
if a:world.key_mode ==# 'default'
|
||||||
call a:world.CloseScratch()
|
call a:world.CloseScratch()
|
||||||
let a:world.state = 'exit empty escape'
|
let a:world.state = 'exit empty escape'
|
||||||
let a:world.list = []
|
let a:world.list = []
|
||||||
|
@ -29,6 +29,7 @@ endf
|
||||||
|
|
||||||
|
|
||||||
function! tlib#agent#CopyItems(world, selected) "{{{3
|
function! tlib#agent#CopyItems(world, selected) "{{{3
|
||||||
|
Tlibtrace 'tlib', a:selected
|
||||||
let @* = join(a:selected, "\n")
|
let @* = join(a:selected, "\n")
|
||||||
let a:world.state = 'redisplay'
|
let a:world.state = 'redisplay'
|
||||||
return a:world
|
return a:world
|
||||||
|
@ -39,6 +40,7 @@ endf
|
||||||
" InputList related {{{1
|
" InputList related {{{1
|
||||||
|
|
||||||
function! tlib#agent#PageUp(world, selected) "{{{3
|
function! tlib#agent#PageUp(world, selected) "{{{3
|
||||||
|
Tlibtrace 'tlib', a:selected
|
||||||
let a:world.offset -= (winheight(0) / 2)
|
let a:world.offset -= (winheight(0) / 2)
|
||||||
let a:world.state = 'scroll'
|
let a:world.state = 'scroll'
|
||||||
return a:world
|
return a:world
|
||||||
|
@ -46,6 +48,7 @@ endf
|
||||||
|
|
||||||
|
|
||||||
function! tlib#agent#PageDown(world, selected) "{{{3
|
function! tlib#agent#PageDown(world, selected) "{{{3
|
||||||
|
Tlibtrace 'tlib', a:selected
|
||||||
let a:world.offset += (winheight(0) / 2)
|
let a:world.offset += (winheight(0) / 2)
|
||||||
let a:world.state = 'scroll'
|
let a:world.state = 'scroll'
|
||||||
return a:world
|
return a:world
|
||||||
|
@ -53,6 +56,7 @@ endf
|
||||||
|
|
||||||
|
|
||||||
function! tlib#agent#Home(world, selected) "{{{3
|
function! tlib#agent#Home(world, selected) "{{{3
|
||||||
|
Tlibtrace 'tlib', a:selected
|
||||||
let a:world.prefidx = 1
|
let a:world.prefidx = 1
|
||||||
let a:world.state = 'redisplay'
|
let a:world.state = 'redisplay'
|
||||||
return a:world
|
return a:world
|
||||||
|
@ -60,6 +64,7 @@ endf
|
||||||
|
|
||||||
|
|
||||||
function! tlib#agent#End(world, selected) "{{{3
|
function! tlib#agent#End(world, selected) "{{{3
|
||||||
|
Tlibtrace 'tlib', a:selected
|
||||||
let a:world.prefidx = len(a:world.list)
|
let a:world.prefidx = len(a:world.list)
|
||||||
let a:world.state = 'redisplay'
|
let a:world.state = 'redisplay'
|
||||||
return a:world
|
return a:world
|
||||||
|
@ -68,6 +73,7 @@ endf
|
||||||
|
|
||||||
function! tlib#agent#Up(world, selected, ...) "{{{3
|
function! tlib#agent#Up(world, selected, ...) "{{{3
|
||||||
TVarArg ['lines', 1]
|
TVarArg ['lines', 1]
|
||||||
|
Tlibtrace 'tlib', a:selected, lines
|
||||||
let a:world.idx = ''
|
let a:world.idx = ''
|
||||||
if a:world.prefidx > lines
|
if a:world.prefidx > lines
|
||||||
let a:world.prefidx -= lines
|
let a:world.prefidx -= lines
|
||||||
|
@ -81,6 +87,7 @@ endf
|
||||||
|
|
||||||
function! tlib#agent#Down(world, selected, ...) "{{{3
|
function! tlib#agent#Down(world, selected, ...) "{{{3
|
||||||
TVarArg ['lines', 1]
|
TVarArg ['lines', 1]
|
||||||
|
Tlibtrace 'tlib', a:selected, lines
|
||||||
let a:world.idx = ''
|
let a:world.idx = ''
|
||||||
if a:world.prefidx <= (len(a:world.list) - lines)
|
if a:world.prefidx <= (len(a:world.list) - lines)
|
||||||
let a:world.prefidx += lines
|
let a:world.prefidx += lines
|
||||||
|
@ -93,16 +100,19 @@ endf
|
||||||
|
|
||||||
|
|
||||||
function! tlib#agent#UpN(world, selected) "{{{3
|
function! tlib#agent#UpN(world, selected) "{{{3
|
||||||
|
Tlibtrace 'tlib', a:selected
|
||||||
return tlib#agent#Up(a:world, a:selected, g:tlib_scroll_lines)
|
return tlib#agent#Up(a:world, a:selected, g:tlib_scroll_lines)
|
||||||
endf
|
endf
|
||||||
|
|
||||||
|
|
||||||
function! tlib#agent#DownN(world, selected) "{{{3
|
function! tlib#agent#DownN(world, selected) "{{{3
|
||||||
|
Tlibtrace 'tlib', a:selected
|
||||||
return tlib#agent#Down(a:world, a:selected, g:tlib_scroll_lines)
|
return tlib#agent#Down(a:world, a:selected, g:tlib_scroll_lines)
|
||||||
endf
|
endf
|
||||||
|
|
||||||
|
|
||||||
function! tlib#agent#ShiftLeft(world, selected) "{{{3
|
function! tlib#agent#ShiftLeft(world, selected) "{{{3
|
||||||
|
Tlibtrace 'tlib', a:selected
|
||||||
let a:world.offset_horizontal -= (winwidth(0) / 2)
|
let a:world.offset_horizontal -= (winwidth(0) / 2)
|
||||||
if a:world.offset_horizontal < 0
|
if a:world.offset_horizontal < 0
|
||||||
let a:world.offset_horizontal = 0
|
let a:world.offset_horizontal = 0
|
||||||
|
@ -113,6 +123,7 @@ endf
|
||||||
|
|
||||||
|
|
||||||
function! tlib#agent#ShiftRight(world, selected) "{{{3
|
function! tlib#agent#ShiftRight(world, selected) "{{{3
|
||||||
|
Tlibtrace 'tlib', a:selected
|
||||||
let a:world.offset_horizontal += (winwidth(0) / 2)
|
let a:world.offset_horizontal += (winwidth(0) / 2)
|
||||||
let a:world.state = 'display shift'
|
let a:world.state = 'display shift'
|
||||||
return a:world
|
return a:world
|
||||||
|
@ -120,12 +131,14 @@ endf
|
||||||
|
|
||||||
|
|
||||||
function! tlib#agent#Reset(world, selected) "{{{3
|
function! tlib#agent#Reset(world, selected) "{{{3
|
||||||
|
Tlibtrace 'tlib', a:selected
|
||||||
let a:world.state = 'reset'
|
let a:world.state = 'reset'
|
||||||
return a:world
|
return a:world
|
||||||
endf
|
endf
|
||||||
|
|
||||||
|
|
||||||
function! tlib#agent#ToggleRestrictView(world, selected) "{{{3
|
function! tlib#agent#ToggleRestrictView(world, selected) "{{{3
|
||||||
|
Tlibtrace 'tlib', a:selected
|
||||||
if empty(a:world.filtered_items)
|
if empty(a:world.filtered_items)
|
||||||
return tlib#agent#RestrictView(a:world, a:selected)
|
return tlib#agent#RestrictView(a:world, a:selected)
|
||||||
else
|
else
|
||||||
|
@ -135,11 +148,11 @@ endf
|
||||||
|
|
||||||
|
|
||||||
function! tlib#agent#RestrictView(world, selected) "{{{3
|
function! tlib#agent#RestrictView(world, selected) "{{{3
|
||||||
" TLogVAR a:selected
|
Tlibtrace 'tlib', a:selected
|
||||||
let filtered_items = map(copy(a:selected), 'index(a:world.base, v:val) + 1')
|
let filtered_items = map(copy(a:selected), 'index(a:world.base, v:val) + 1')
|
||||||
" TLogVAR 1, filtered_items
|
Tlibtrace 'tlib', 1, filtered_items
|
||||||
let filtered_items = filter(filtered_items, 'v:val > 0')
|
let filtered_items = filter(filtered_items, 'v:val > 0')
|
||||||
" TLogVAR 2, filtered_items
|
Tlibtrace 'tlib', 2, filtered_items
|
||||||
if !empty(filtered_items)
|
if !empty(filtered_items)
|
||||||
let a:world.filtered_items = filtered_items
|
let a:world.filtered_items = filtered_items
|
||||||
endif
|
endif
|
||||||
|
@ -149,6 +162,7 @@ endf
|
||||||
|
|
||||||
|
|
||||||
function! tlib#agent#UnrestrictView(world, selected) "{{{3
|
function! tlib#agent#UnrestrictView(world, selected) "{{{3
|
||||||
|
Tlibtrace 'tlib', a:selected
|
||||||
let a:world.filtered_items = []
|
let a:world.filtered_items = []
|
||||||
let a:world.state = 'display'
|
let a:world.state = 'display'
|
||||||
return a:world
|
return a:world
|
||||||
|
@ -156,6 +170,7 @@ endf
|
||||||
|
|
||||||
|
|
||||||
function! tlib#agent#Input(world, selected) "{{{3
|
function! tlib#agent#Input(world, selected) "{{{3
|
||||||
|
Tlibtrace 'tlib', a:selected
|
||||||
let flt0 = a:world.CleanFilter(a:world.filter[0][0])
|
let flt0 = a:world.CleanFilter(a:world.filter[0][0])
|
||||||
let flt1 = input('Filter: ', flt0)
|
let flt1 = input('Filter: ', flt0)
|
||||||
echo
|
echo
|
||||||
|
@ -174,15 +189,16 @@ endf
|
||||||
" Suspend (see |tlib#agent#Suspend|) the input loop and jump back to the
|
" Suspend (see |tlib#agent#Suspend|) the input loop and jump back to the
|
||||||
" original position in the parent window.
|
" original position in the parent window.
|
||||||
function! tlib#agent#SuspendToParentWindow(world, selected) "{{{3
|
function! tlib#agent#SuspendToParentWindow(world, selected) "{{{3
|
||||||
|
Tlibtrace 'tlib', a:selected
|
||||||
let world = a:world
|
let world = a:world
|
||||||
let winnr = world.win_wnr
|
let wid = world.win_id
|
||||||
" TLogVAR winnr
|
Tlibtrace 'tlib', wid
|
||||||
if winnr != -1
|
if wid != -1
|
||||||
let world = tlib#agent#Suspend(world, a:selected)
|
let world = tlib#agent#Suspend(world, a:selected)
|
||||||
if world.state =~ '\<suspend\>'
|
if world.state =~# '\<suspend\>'
|
||||||
call world.SwitchWindow('win')
|
call world.SwitchWindow('win')
|
||||||
" let pos = world.cursor
|
" let pos = world.cursor
|
||||||
" " TLogVAR pos
|
" Tlibtrace 'tlib', pos
|
||||||
" if !empty(pos)
|
" if !empty(pos)
|
||||||
" call setpos('.', pos)
|
" call setpos('.', pos)
|
||||||
" endif
|
" endif
|
||||||
|
@ -200,17 +216,18 @@ endf
|
||||||
" <cr> and <LeftMouse> will immediatly select the item under the cursor.
|
" <cr> and <LeftMouse> will immediatly select the item under the cursor.
|
||||||
" < will select the item but the window will remain opened.
|
" < will select the item but the window will remain opened.
|
||||||
function! tlib#agent#Suspend(world, selected) "{{{3
|
function! tlib#agent#Suspend(world, selected) "{{{3
|
||||||
|
Tlibtrace 'tlib', a:selected
|
||||||
if a:world.allow_suspend
|
if a:world.allow_suspend
|
||||||
" TAssert IsNotEmpty(a:world.scratch)
|
" TAssert IsNotEmpty(a:world.scratch)
|
||||||
" TLogDBG bufnr('%')
|
" TLogDBG bufnr('%')
|
||||||
let br = tlib#buffer#Set(a:world.scratch)
|
let br = tlib#buffer#Set(a:world.scratch)
|
||||||
" TLogVAR br, a:world.bufnr, a:world.scratch
|
Tlibtrace 'tlib', br, a:world.bufnr, a:world.scratch
|
||||||
if bufnr('%') != a:world.scratch
|
if bufnr('%') != a:world.scratch
|
||||||
echohl WarningMsg
|
echohl WarningMsg
|
||||||
echom "tlib#agent#Suspend: Internal error: Not a scratch buffer:" bufname('%')
|
echom "tlib#agent#Suspend: Internal error: Not a scratch buffer:" bufname('%')
|
||||||
echohl NONE
|
echohl NONE
|
||||||
endif
|
endif
|
||||||
" TLogVAR bufnr('%'), bufname('%'), a:world.scratch
|
Tlibtrace 'tlib', bufnr('%'), bufname('%'), a:world.scratch
|
||||||
call tlib#autocmdgroup#Init()
|
call tlib#autocmdgroup#Init()
|
||||||
exec 'autocmd TLib BufEnter <buffer='. a:world.scratch .'> call tlib#input#Resume("world", 0, '. a:world.scratch .')'
|
exec 'autocmd TLib BufEnter <buffer='. a:world.scratch .'> call tlib#input#Resume("world", 0, '. a:world.scratch .')'
|
||||||
let b:tlib_world = a:world
|
let b:tlib_world = a:world
|
||||||
|
@ -225,12 +242,14 @@ endf
|
||||||
|
|
||||||
|
|
||||||
function! tlib#agent#Help(world, selected) "{{{3
|
function! tlib#agent#Help(world, selected) "{{{3
|
||||||
|
Tlibtrace 'tlib', a:selected
|
||||||
let a:world.state = 'help'
|
let a:world.state = 'help'
|
||||||
return a:world
|
return a:world
|
||||||
endf
|
endf
|
||||||
|
|
||||||
|
|
||||||
function! tlib#agent#OR(world, selected) "{{{3
|
function! tlib#agent#OR(world, selected) "{{{3
|
||||||
|
Tlibtrace 'tlib', a:selected
|
||||||
if !empty(a:world.filter[0])
|
if !empty(a:world.filter[0])
|
||||||
call insert(a:world.filter[0], '')
|
call insert(a:world.filter[0], '')
|
||||||
endif
|
endif
|
||||||
|
@ -240,6 +259,7 @@ endf
|
||||||
|
|
||||||
|
|
||||||
function! tlib#agent#AND(world, selected) "{{{3
|
function! tlib#agent#AND(world, selected) "{{{3
|
||||||
|
Tlibtrace 'tlib', a:selected
|
||||||
if !empty(a:world.filter[0])
|
if !empty(a:world.filter[0])
|
||||||
call insert(a:world.filter, [''])
|
call insert(a:world.filter, [''])
|
||||||
endif
|
endif
|
||||||
|
@ -249,6 +269,7 @@ endf
|
||||||
|
|
||||||
|
|
||||||
function! tlib#agent#ReduceFilter(world, selected) "{{{3
|
function! tlib#agent#ReduceFilter(world, selected) "{{{3
|
||||||
|
Tlibtrace 'tlib', a:selected
|
||||||
call a:world.ReduceFilter()
|
call a:world.ReduceFilter()
|
||||||
let a:world.offset = 1
|
let a:world.offset = 1
|
||||||
let a:world.state = 'display'
|
let a:world.state = 'display'
|
||||||
|
@ -257,6 +278,7 @@ endf
|
||||||
|
|
||||||
|
|
||||||
function! tlib#agent#PopFilter(world, selected) "{{{3
|
function! tlib#agent#PopFilter(world, selected) "{{{3
|
||||||
|
Tlibtrace 'tlib', a:selected
|
||||||
call a:world.PopFilter()
|
call a:world.PopFilter()
|
||||||
let a:world.offset = 1
|
let a:world.offset = 1
|
||||||
let a:world.state = 'display'
|
let a:world.state = 'display'
|
||||||
|
@ -265,6 +287,7 @@ endf
|
||||||
|
|
||||||
|
|
||||||
function! tlib#agent#Debug(world, selected) "{{{3
|
function! tlib#agent#Debug(world, selected) "{{{3
|
||||||
|
Tlibtrace 'tlib', a:selected
|
||||||
" echo string(world.state)
|
" echo string(world.state)
|
||||||
echo string(a:world.filter)
|
echo string(a:world.filter)
|
||||||
echo string(a:world.idx)
|
echo string(a:world.idx)
|
||||||
|
@ -277,6 +300,7 @@ endf
|
||||||
|
|
||||||
|
|
||||||
function! tlib#agent#Select(world, selected) "{{{3
|
function! tlib#agent#Select(world, selected) "{{{3
|
||||||
|
Tlibtrace 'tlib', a:selected
|
||||||
call a:world.SelectItem('toggle', a:world.prefidx)
|
call a:world.SelectItem('toggle', a:world.prefidx)
|
||||||
" let a:world.state = 'display keepcursor'
|
" let a:world.state = 'display keepcursor'
|
||||||
let a:world.state = 'redisplay'
|
let a:world.state = 'redisplay'
|
||||||
|
@ -285,6 +309,7 @@ endf
|
||||||
|
|
||||||
|
|
||||||
function! tlib#agent#SelectUp(world, selected) "{{{3
|
function! tlib#agent#SelectUp(world, selected) "{{{3
|
||||||
|
Tlibtrace 'tlib', a:selected
|
||||||
call a:world.SelectItem('toggle', a:world.prefidx)
|
call a:world.SelectItem('toggle', a:world.prefidx)
|
||||||
if a:world.prefidx > 1
|
if a:world.prefidx > 1
|
||||||
let a:world.prefidx -= 1
|
let a:world.prefidx -= 1
|
||||||
|
@ -295,6 +320,7 @@ endf
|
||||||
|
|
||||||
|
|
||||||
function! tlib#agent#SelectDown(world, selected) "{{{3
|
function! tlib#agent#SelectDown(world, selected) "{{{3
|
||||||
|
Tlibtrace 'tlib', a:selected
|
||||||
call a:world.SelectItem('toggle', a:world.prefidx)
|
call a:world.SelectItem('toggle', a:world.prefidx)
|
||||||
if a:world.prefidx < len(a:world.list)
|
if a:world.prefidx < len(a:world.list)
|
||||||
let a:world.prefidx += 1
|
let a:world.prefidx += 1
|
||||||
|
@ -305,6 +331,7 @@ endf
|
||||||
|
|
||||||
|
|
||||||
function! tlib#agent#SelectAll(world, selected) "{{{3
|
function! tlib#agent#SelectAll(world, selected) "{{{3
|
||||||
|
Tlibtrace 'tlib', a:selected
|
||||||
let listrange = range(1, len(a:world.list))
|
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'))
|
let mode = empty(filter(copy(listrange), 'index(a:world.sel_idx, a:world.GetBaseIdx(v:val)) == -1'))
|
||||||
\ ? 'toggle' : 'set'
|
\ ? 'toggle' : 'set'
|
||||||
|
@ -317,6 +344,7 @@ endf
|
||||||
|
|
||||||
|
|
||||||
function! tlib#agent#ToggleStickyList(world, selected) "{{{3
|
function! tlib#agent#ToggleStickyList(world, selected) "{{{3
|
||||||
|
Tlibtrace 'tlib', a:selected
|
||||||
let a:world.sticky = !a:world.sticky
|
let a:world.sticky = !a:world.sticky
|
||||||
let a:world.state = 'display keepcursor'
|
let a:world.state = 'display keepcursor'
|
||||||
return a:world
|
return a:world
|
||||||
|
@ -327,11 +355,11 @@ endf
|
||||||
" EditList related {{{1
|
" EditList related {{{1
|
||||||
|
|
||||||
function! tlib#agent#EditItem(world, selected) "{{{3
|
function! tlib#agent#EditItem(world, selected) "{{{3
|
||||||
|
Tlibtrace 'tlib', a:selected
|
||||||
let lidx = a:world.prefidx
|
let lidx = a:world.prefidx
|
||||||
" TLogVAR lidx
|
Tlibtrace 'tlib', lidx
|
||||||
" TLogVAR a:world.table
|
|
||||||
let bidx = a:world.GetBaseIdx(lidx)
|
let bidx = a:world.GetBaseIdx(lidx)
|
||||||
" TLogVAR bidx
|
Tlibtrace 'tlib', bidx
|
||||||
let item = a:world.GetBaseItem(bidx)
|
let item = a:world.GetBaseItem(bidx)
|
||||||
let item = input(lidx .'@'. bidx .': ', item)
|
let item = input(lidx .'@'. bidx .': ', item)
|
||||||
if item != ''
|
if item != ''
|
||||||
|
@ -344,6 +372,7 @@ endf
|
||||||
|
|
||||||
" Insert a new item below the current one.
|
" Insert a new item below the current one.
|
||||||
function! tlib#agent#NewItem(world, selected) "{{{3
|
function! tlib#agent#NewItem(world, selected) "{{{3
|
||||||
|
Tlibtrace 'tlib', a:selected
|
||||||
let basepi = a:world.GetBaseIdx(a:world.prefidx)
|
let basepi = a:world.GetBaseIdx(a:world.prefidx)
|
||||||
let item = input('New item: ')
|
let item = input('New item: ')
|
||||||
call insert(a:world.base, item, basepi)
|
call insert(a:world.base, item, basepi)
|
||||||
|
@ -353,6 +382,7 @@ endf
|
||||||
|
|
||||||
|
|
||||||
function! tlib#agent#DeleteItems(world, selected) "{{{3
|
function! tlib#agent#DeleteItems(world, selected) "{{{3
|
||||||
|
Tlibtrace 'tlib', a:selected
|
||||||
let remove = copy(a:world.sel_idx)
|
let remove = copy(a:world.sel_idx)
|
||||||
let basepi = a:world.GetBaseIdx(a:world.prefidx)
|
let basepi = a:world.GetBaseIdx(a:world.prefidx)
|
||||||
if index(remove, basepi) == -1
|
if index(remove, basepi) == -1
|
||||||
|
@ -370,12 +400,14 @@ endf
|
||||||
|
|
||||||
|
|
||||||
function! tlib#agent#Cut(world, selected) "{{{3
|
function! tlib#agent#Cut(world, selected) "{{{3
|
||||||
|
Tlibtrace 'tlib', a:selected
|
||||||
let world = tlib#agent#Copy(a:world, a:selected)
|
let world = tlib#agent#Copy(a:world, a:selected)
|
||||||
return tlib#agent#DeleteItems(world, a:selected)
|
return tlib#agent#DeleteItems(world, a:selected)
|
||||||
endf
|
endf
|
||||||
|
|
||||||
|
|
||||||
function! tlib#agent#Copy(world, selected) "{{{3
|
function! tlib#agent#Copy(world, selected) "{{{3
|
||||||
|
Tlibtrace 'tlib', a:selected
|
||||||
let a:world.clipboard = []
|
let a:world.clipboard = []
|
||||||
let bidxs = copy(a:world.sel_idx)
|
let bidxs = copy(a:world.sel_idx)
|
||||||
call add(bidxs, a:world.GetBaseIdx(a:world.prefidx))
|
call add(bidxs, a:world.GetBaseIdx(a:world.prefidx))
|
||||||
|
@ -388,6 +420,7 @@ endf
|
||||||
|
|
||||||
|
|
||||||
function! tlib#agent#Paste(world, selected) "{{{3
|
function! tlib#agent#Paste(world, selected) "{{{3
|
||||||
|
Tlibtrace 'tlib', a:selected
|
||||||
if has_key(a:world, 'clipboard')
|
if has_key(a:world, 'clipboard')
|
||||||
for e in reverse(copy(a:world.clipboard))
|
for e in reverse(copy(a:world.clipboard))
|
||||||
call insert(a:world.base, e, a:world.prefidx)
|
call insert(a:world.base, e, a:world.prefidx)
|
||||||
|
@ -400,6 +433,7 @@ endf
|
||||||
|
|
||||||
|
|
||||||
function! tlib#agent#EditReturnValue(world, rv) "{{{3
|
function! tlib#agent#EditReturnValue(world, rv) "{{{3
|
||||||
|
Tlibtrace 'tlib', a:rv
|
||||||
return [a:world.state !~ '\<exit\>', a:world.base]
|
return [a:world.state !~ '\<exit\>', a:world.base]
|
||||||
endf
|
endf
|
||||||
|
|
||||||
|
@ -408,22 +442,15 @@ endf
|
||||||
" Files related {{{1
|
" Files related {{{1
|
||||||
|
|
||||||
function! tlib#agent#ViewFile(world, selected) "{{{3
|
function! tlib#agent#ViewFile(world, selected) "{{{3
|
||||||
|
Tlibtrace 'tlib', a:selected
|
||||||
if !empty(a:selected)
|
if !empty(a:selected)
|
||||||
let back = a:world.SwitchWindow('win')
|
let back = a:world.SwitchWindow('win')
|
||||||
" TLogVAR back
|
Tlibtrace 'tlib', back
|
||||||
for filename in a:selected
|
for filename in a:selected
|
||||||
call tlib#file#Edit(filename)
|
call tlib#file#Edit(filename)
|
||||||
endfor
|
endfor
|
||||||
" if !&hidden && &l:modified
|
call a:world.SetOrigin(1)
|
||||||
" let cmd0 = 'split'
|
silent! exec back
|
||||||
" 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'
|
let a:world.state = 'display'
|
||||||
endif
|
endif
|
||||||
return a:world
|
return a:world
|
||||||
|
@ -431,41 +458,53 @@ endf
|
||||||
|
|
||||||
|
|
||||||
function! tlib#agent#EditFile(world, selected) "{{{3
|
function! tlib#agent#EditFile(world, selected) "{{{3
|
||||||
|
Tlibtrace 'tlib', a:selected
|
||||||
return tlib#agent#Exit(tlib#agent#ViewFile(a:world, a:selected), a:selected)
|
return tlib#agent#Exit(tlib#agent#ViewFile(a:world, a:selected), a:selected)
|
||||||
endf
|
endf
|
||||||
|
|
||||||
|
|
||||||
function! tlib#agent#EditFileInSplit(world, selected) "{{{3
|
function! tlib#agent#EditFileInSplit(world, selected) "{{{3
|
||||||
|
Tlibtrace 'tlib', a:selected
|
||||||
call a:world.CloseScratch()
|
call a:world.CloseScratch()
|
||||||
" call tlib#file#With('edit', 'buffer', a:selected[0:0], a:world)
|
call tlib#file#With('split', 'sbuffer', a:selected, a:world, 1)
|
||||||
" call tlib#file#With('split', 'sbuffer', a:selected[1:-1], a:world)
|
call a:world.SetOrigin(1)
|
||||||
call tlib#file#With('split', 'sbuffer', a:selected, a:world)
|
|
||||||
return tlib#agent#Exit(a:world, a:selected)
|
return tlib#agent#Exit(a:world, a:selected)
|
||||||
endf
|
endf
|
||||||
|
|
||||||
|
|
||||||
function! tlib#agent#EditFileInVSplit(world, selected) "{{{3
|
function! tlib#agent#EditFileInVSplit(world, selected) "{{{3
|
||||||
|
Tlibtrace 'tlib', a:selected
|
||||||
call a:world.CloseScratch()
|
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()
|
let winpos = tlib#fixes#Winpos()
|
||||||
call tlib#file#With('vertical split', 'vertical sbuffer', a:selected, a:world)
|
call tlib#file#With('vertical split', 'vertical sbuffer', a:selected, a:world, 1)
|
||||||
if !empty(winpos)
|
if !empty(winpos)
|
||||||
exec winpos
|
exec winpos
|
||||||
endif
|
endif
|
||||||
|
call a:world.SetOrigin(1)
|
||||||
return tlib#agent#Exit(a:world, a:selected)
|
return tlib#agent#Exit(a:world, a:selected)
|
||||||
endf
|
endf
|
||||||
|
|
||||||
|
|
||||||
function! tlib#agent#EditFileInTab(world, selected) "{{{3
|
function! tlib#agent#EditFileInTab(world, selected) "{{{3
|
||||||
" TLogVAR a:selected
|
Tlibtrace 'tlib', a:selected
|
||||||
call a:world.CloseScratch()
|
call a:world.CloseScratch()
|
||||||
call tlib#file#With('tabedit', 'tab sbuffer', a:selected, a:world)
|
call tlib#file#With('tabedit', 'tab sbuffer', a:selected, a:world, 1)
|
||||||
|
call a:world.SetOrigin(1)
|
||||||
|
return tlib#agent#Exit(a:world, a:selected)
|
||||||
|
endf
|
||||||
|
|
||||||
|
|
||||||
|
function! tlib#agent#EditFileInWindow(world, selected) "{{{3
|
||||||
|
Tlibtrace 'tlib', a:selected
|
||||||
|
call a:world.CloseScratch()
|
||||||
|
call tlib#file#With('hide edit', 'hide buffer', a:selected, a:world, 1)
|
||||||
|
call a:world.SetOrigin(1)
|
||||||
return tlib#agent#Exit(a:world, a:selected)
|
return tlib#agent#Exit(a:world, a:selected)
|
||||||
endf
|
endf
|
||||||
|
|
||||||
|
|
||||||
function! tlib#agent#ToggleScrollbind(world, selected) "{{{3
|
function! tlib#agent#ToggleScrollbind(world, selected) "{{{3
|
||||||
|
Tlibtrace 'tlib', a:selected
|
||||||
let a:world.scrollbind = get(a:world, 'scrollbind') ? 0 : 1
|
let a:world.scrollbind = get(a:world, 'scrollbind') ? 0 : 1
|
||||||
let a:world.state = 'redisplay'
|
let a:world.state = 'redisplay'
|
||||||
return a:world
|
return a:world
|
||||||
|
@ -473,6 +512,7 @@ endf
|
||||||
|
|
||||||
|
|
||||||
function! tlib#agent#ShowInfo(world, selected)
|
function! tlib#agent#ShowInfo(world, selected)
|
||||||
|
Tlibtrace 'tlib', a:selected
|
||||||
let lines = []
|
let lines = []
|
||||||
for f in a:selected
|
for f in a:selected
|
||||||
if filereadable(f)
|
if filereadable(f)
|
||||||
|
@ -490,12 +530,30 @@ endf
|
||||||
|
|
||||||
" Buffer related {{{1
|
" Buffer related {{{1
|
||||||
|
|
||||||
|
function! tlib#agent#ViewBufferInWindow(world, selected) "{{{3
|
||||||
|
Tlibtrace 'tlib', a:selected
|
||||||
|
if !empty(a:selected)
|
||||||
|
let back = a:world.SwitchWindow('win')
|
||||||
|
Tlibtrace 'tlib', back
|
||||||
|
for bufname in a:selected
|
||||||
|
let cmd = &modified && !&hidden ? 'sbuffer' : 'buffer'
|
||||||
|
exec cmd fnameescape(bufname)
|
||||||
|
endfor
|
||||||
|
" exec back
|
||||||
|
endif
|
||||||
|
return tlib#agent#Exit(a:world, a:selected)
|
||||||
|
endf
|
||||||
|
|
||||||
|
|
||||||
function! tlib#agent#PreviewLine(world, selected) "{{{3
|
function! tlib#agent#PreviewLine(world, selected) "{{{3
|
||||||
|
Tlibtrace 'tlib', a:selected
|
||||||
let l = a:selected[0]
|
let l = a:selected[0]
|
||||||
let ww = winnr()
|
" let ww = winnr()
|
||||||
exec a:world.win_wnr .'wincmd w'
|
let wid = tlib#win#GetID()
|
||||||
|
call tlib#agent#SuspendToParentWindow(a:world, a:selected)
|
||||||
call tlib#buffer#ViewLine(l, 1)
|
call tlib#buffer#ViewLine(l, 1)
|
||||||
exec ww .'wincmd w'
|
call tlib#win#GotoID(wid)
|
||||||
|
" exec ww .'wincmd w'
|
||||||
let a:world.state = 'redisplay'
|
let a:world.state = 'redisplay'
|
||||||
return a:world
|
return a:world
|
||||||
endf
|
endf
|
||||||
|
@ -504,24 +562,12 @@ endf
|
||||||
" If not called from the scratch, we assume/guess that we don't have to
|
" If not called from the scratch, we assume/guess that we don't have to
|
||||||
" suspend the input-evaluation loop.
|
" suspend the input-evaluation loop.
|
||||||
function! tlib#agent#GotoLine(world, selected) "{{{3
|
function! tlib#agent#GotoLine(world, selected) "{{{3
|
||||||
|
Tlibtrace 'tlib', a:selected
|
||||||
if !empty(a:selected)
|
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]
|
let l = a:selected[0]
|
||||||
if a:world.win_wnr != winnr()
|
if a:world.win_id != tlib#win#GetID()
|
||||||
let world = tlib#agent#Suspend(a:world, a:selected)
|
let world = tlib#agent#Suspend(a:world, a:selected)
|
||||||
exec a:world.win_wnr .'wincmd w'
|
call tlib#win#GotoID(a:world.win_id)
|
||||||
endif
|
endif
|
||||||
call tlib#buffer#ViewLine(l, 1)
|
call tlib#buffer#ViewLine(l, 1)
|
||||||
|
|
||||||
|
@ -531,6 +577,7 @@ endf
|
||||||
|
|
||||||
|
|
||||||
function! tlib#agent#DoAtLine(world, selected) "{{{3
|
function! tlib#agent#DoAtLine(world, selected) "{{{3
|
||||||
|
Tlibtrace 'tlib', a:selected
|
||||||
if !empty(a:selected)
|
if !empty(a:selected)
|
||||||
let cmd = input('Command: ', '', 'command')
|
let cmd = input('Command: ', '', 'command')
|
||||||
if !empty(cmd)
|
if !empty(cmd)
|
||||||
|
@ -552,6 +599,7 @@ endf
|
||||||
|
|
||||||
|
|
||||||
function! tlib#agent#Wildcard(world, selected) "{{{3
|
function! tlib#agent#Wildcard(world, selected) "{{{3
|
||||||
|
Tlibtrace 'tlib', a:selected
|
||||||
if !empty(a:world.filter[0])
|
if !empty(a:world.filter[0])
|
||||||
let rx_type = a:world.matcher.FilterRxPrefix()
|
let rx_type = a:world.matcher.FilterRxPrefix()
|
||||||
let flt0 = a:world.CleanFilter(a:world.filter[0][0])
|
let flt0 = a:world.CleanFilter(a:world.filter[0][0])
|
||||||
|
@ -568,12 +616,14 @@ endf
|
||||||
|
|
||||||
|
|
||||||
function! tlib#agent#Null(world, selected) "{{{3
|
function! tlib#agent#Null(world, selected) "{{{3
|
||||||
|
Tlibtrace 'tlib', a:selected
|
||||||
let a:world.state = 'redisplay'
|
let a:world.state = 'redisplay'
|
||||||
return a:world
|
return a:world
|
||||||
endf
|
endf
|
||||||
|
|
||||||
|
|
||||||
function! tlib#agent#ExecAgentByName(world, selected) "{{{3
|
function! tlib#agent#ExecAgentByName(world, selected) "{{{3
|
||||||
|
Tlibtrace 'tlib', a:selected
|
||||||
let s:agent_names_world = a:world
|
let s:agent_names_world = a:world
|
||||||
let agent_names = {'Help': 'tlib#agent#Help'}
|
let agent_names = {'Help': 'tlib#agent#Help'}
|
||||||
for def in values(a:world.key_map[a:world.key_mode])
|
for def in values(a:world.key_map[a:world.key_mode])
|
||||||
|
@ -583,11 +633,11 @@ function! tlib#agent#ExecAgentByName(world, selected) "{{{3
|
||||||
endfor
|
endfor
|
||||||
let s:agent_names = sort(keys(agent_names))
|
let s:agent_names = sort(keys(agent_names))
|
||||||
let command = input('Command: ', '', 'customlist,tlib#agent#CompleteAgentNames')
|
let command = input('Command: ', '', 'customlist,tlib#agent#CompleteAgentNames')
|
||||||
" TLogVAR command
|
Tlibtrace 'tlib', command
|
||||||
if !has_key(agent_names, command)
|
if !has_key(agent_names, command)
|
||||||
" TLogVAR command
|
Tlibtrace 'tlib', command
|
||||||
silent! let matches = filter(keys(agent_names), 'v:val =~ command')
|
silent! let matches = filter(keys(agent_names), 'v:val =~ command')
|
||||||
" TLogVAR matches
|
Tlibtrace 'tlib', matches
|
||||||
if len(matches) == 1
|
if len(matches) == 1
|
||||||
let command = matches[0]
|
let command = matches[0]
|
||||||
endif
|
endif
|
||||||
|
@ -609,43 +659,45 @@ endf
|
||||||
|
|
||||||
|
|
||||||
function! tlib#agent#CompleteAgentNames(ArgLead, CmdLine, CursorPos)
|
function! tlib#agent#CompleteAgentNames(ArgLead, CmdLine, CursorPos)
|
||||||
return filter(copy(s:agent_names), 'stridx(v:val, a:ArgLead) != -1')
|
let arglead = tolower(a:Arglead)
|
||||||
|
return filter(copy(s:agent_names), 'stridx(tolower(v:val), arglead) != -1')
|
||||||
endf
|
endf
|
||||||
|
|
||||||
|
|
||||||
function! tlib#agent#Complete(world, selected) abort "{{{3
|
function! tlib#agent#Complete(world, selected) abort "{{{3
|
||||||
|
Tlibtrace 'tlib', a:selected
|
||||||
let rxprefix = a:world.matcher.FilterRxPrefix()
|
let rxprefix = a:world.matcher.FilterRxPrefix()
|
||||||
let flt = a:world.filter[0][0]
|
let flt = a:world.filter[0][0]
|
||||||
" TLogVAR flt
|
Tlibtrace 'tlib', flt
|
||||||
let fltrx = rxprefix . flt . '\m[^[:space:][:cntrl:][:punct:]<>*+?&~{}()\[\]\\/]\+'
|
let fltrx = rxprefix . flt . '\m[^[:space:][:cntrl:][:punct:]<>*+?&~{}()\[\]\\/]\+'
|
||||||
let fltrx0 = '\m^' . fltrx
|
let fltrx0 = '\m^' . fltrx
|
||||||
" TLogVAR fltrx, fltrx0
|
Tlibtrace 'tlib', fltrx, fltrx0
|
||||||
let words = {}
|
let words = {}
|
||||||
for item in a:world.list
|
for item in a:world.list
|
||||||
let parts = split(item, '\ze'. fltrx)
|
let parts = split(item, '\ze'. fltrx)
|
||||||
" TLogVAR item, parts
|
Tlibtrace 'tlib', item, parts
|
||||||
for part in parts
|
for part in parts
|
||||||
let word = matchstr(part, fltrx0)
|
let word = matchstr(part, fltrx0)
|
||||||
" TLogVAR part, word
|
Tlibtrace 'tlib', part, word
|
||||||
if !empty(word)
|
if !empty(word)
|
||||||
let words[word] = 1
|
let words[word] = 1
|
||||||
endif
|
endif
|
||||||
endfor
|
endfor
|
||||||
endfor
|
endfor
|
||||||
" TLogVAR keys(words)
|
Tlibtrace 'tlib', keys(words)
|
||||||
let completions = keys(words)
|
let completions = keys(words)
|
||||||
" let completions = filter(keys(words), 'matchstr(v:val, fltrx0)')
|
" let completions = filter(keys(words), 'matchstr(v:val, fltrx0)')
|
||||||
let completions = sort(completions, 's:SortCompletions')
|
let completions = sort(completions, 's:SortCompletions')
|
||||||
let completions = tlib#list#Uniq(completions)
|
let completions = tlib#list#Uniq(completions)
|
||||||
" TLogVAR 0, completions
|
Tlibtrace 'tlib', 0, completions
|
||||||
while len(completions) > 1
|
while len(completions) > 1
|
||||||
let nchar = strwidth(completions[0]) - 1
|
let nchar = strwidth(completions[0]) - 1
|
||||||
let completions = map(completions, 'strpart(v:val, 0, nchar)')
|
let completions = map(completions, 'tlib#string#Strcharpart(v:val, 0, nchar)')
|
||||||
" TLogVAR 'reduce', completions
|
Tlibtrace 'tlib', 'reduce', completions
|
||||||
let completions = tlib#list#Uniq(completions)
|
let completions = tlib#list#Uniq(completions)
|
||||||
" TLogVAR 'unique', len(completions), completions
|
Tlibtrace 'tlib', 'unique', len(completions), completions
|
||||||
endwh
|
endwh
|
||||||
" TLogVAR 9, completions
|
Tlibtrace 'tlib', 9, completions
|
||||||
if empty(completions)
|
if empty(completions)
|
||||||
let a:world.state = 'redisplay update'
|
let a:world.state = 'redisplay update'
|
||||||
else
|
else
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
" @Author: Tom Link (micathom AT gmail com?subject=[vim])
|
" @Author: Tom Link (micathom AT gmail com?subject=[vim])
|
||||||
" @Website: http://www.vim.org/account/profile.php?user_id=4037
|
" @Website: http://www.vim.org/account/profile.php?user_id=4037
|
||||||
" @License: GPL (see http://www.gnu.org/licenses/gpl.txt)
|
" @License: GPL (see http://www.gnu.org/licenses/gpl.txt)
|
||||||
" @Last Change: 2015-11-19.
|
" @Last Change: 2017-09-28.
|
||||||
" @Revision: 251
|
" @Revision: 273
|
||||||
|
|
||||||
|
|
||||||
" :def: function! tlib#arg#Get(n, var, ?default="", ?test='')
|
" :def: function! tlib#arg#Get(n, var, ?default="", ?test='')
|
||||||
|
@ -92,30 +92,34 @@ endf
|
||||||
" ['-ab', '--', '--foo', '--bar=BAR']
|
" ['-ab', '--', '--foo', '--bar=BAR']
|
||||||
" => {'a': 1, 'b': 1, '__rest__': ['--foo', '--bar=BAR']}
|
" => {'a': 1, 'b': 1, '__rest__': ['--foo', '--bar=BAR']}
|
||||||
function! tlib#arg#GetOpts(args, ...) abort "{{{3
|
function! tlib#arg#GetOpts(args, ...) abort "{{{3
|
||||||
let throw = a:0 == 0
|
if type(a:args) == 4
|
||||||
TVarArg ['def', {}]
|
reutrn a:args
|
||||||
" TLogVAR def
|
else
|
||||||
let opts = {'__exit__': 0}
|
let throw = a:0 == 0
|
||||||
for [key, vdef] in items(get(def, 'values', {}))
|
TVarArg ['def', {}]
|
||||||
if has_key(vdef, 'default')
|
" TLogVAR def
|
||||||
let opts[key] = vdef.default
|
let opts = {'__exit__': 0}
|
||||||
endif
|
for [key, vdef] in items(get(def, 'values', {}))
|
||||||
endfor
|
if has_key(vdef, 'default')
|
||||||
let idx = 0
|
let opts[key] = vdef.default
|
||||||
for o in a:args
|
|
||||||
let [break, idx] = s:SetOpt(def, opts, idx, o)
|
|
||||||
if break == 1
|
|
||||||
break
|
|
||||||
elseif break == 2
|
|
||||||
if throw
|
|
||||||
throw 'tlib#arg#GetOpts: Show help'
|
|
||||||
else
|
|
||||||
let opts.__exit__ = 5
|
|
||||||
endif
|
endif
|
||||||
endif
|
endfor
|
||||||
endfor
|
let idx = 0
|
||||||
let opts.__rest__ = a:args[idx : -1]
|
for o in a:args
|
||||||
return opts
|
let [break, idx] = s:SetOpt(def, opts, idx, o)
|
||||||
|
if break == 1
|
||||||
|
break
|
||||||
|
elseif break == 2
|
||||||
|
if throw
|
||||||
|
throw 'tlib#arg#GetOpts: Show help'
|
||||||
|
else
|
||||||
|
let opts.__exit__ = 5
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
endfor
|
||||||
|
let opts.__rest__ = a:args[idx : -1]
|
||||||
|
return opts
|
||||||
|
endif
|
||||||
endf
|
endf
|
||||||
|
|
||||||
|
|
||||||
|
@ -147,7 +151,7 @@ function! s:SetOpt(def, opts, idx, opt) abort "{{{3
|
||||||
let default = get(vdef, 'default', '')
|
let default = get(vdef, 'default', '')
|
||||||
let type = s:GetValueType(vdef)
|
let type = s:GetValueType(vdef)
|
||||||
if default =~ '^-\?\d\+\%(\.\d\+\)$'
|
if default =~ '^-\?\d\+\%(\.\d\+\)$'
|
||||||
if type == -1
|
if type == -1 || type == 6
|
||||||
let opt .= ' (flag)'
|
let opt .= ' (flag)'
|
||||||
elseif type == 1
|
elseif type == 1
|
||||||
let opt .= '=INT'
|
let opt .= '=INT'
|
||||||
|
@ -171,6 +175,11 @@ function! s:SetOpt(def, opts, idx, opt) abort "{{{3
|
||||||
endif
|
endif
|
||||||
endif
|
endif
|
||||||
let break = 2
|
let break = 2
|
||||||
|
elseif long && a:opt =~# '^--\%(no-\)\?debug$'
|
||||||
|
if has_key(a:def, 'trace')
|
||||||
|
let mod = a:opt =~# '--no-' ? '-' : '+'
|
||||||
|
exec 'Tlibtraceset' mod . a:def.trace
|
||||||
|
endif
|
||||||
elseif long && a:opt =~# '^--no-.\+'
|
elseif long && a:opt =~# '^--no-.\+'
|
||||||
let key = matchstr(a:opt, '^--no-\zs.\+$')
|
let key = matchstr(a:opt, '^--no-\zs.\+$')
|
||||||
let a:opts[key] = s:Validate(a:def, key, 0)
|
let a:opts[key] = s:Validate(a:def, key, 0)
|
||||||
|
@ -267,12 +276,14 @@ function! tlib#arg#CComplete(def, ArgLead) abort "{{{3
|
||||||
" endif
|
" endif
|
||||||
endif
|
endif
|
||||||
if !empty(words)
|
if !empty(words)
|
||||||
let lead = substitute(a:ArgLead, '^--\w\+=', '', '')
|
let prefix = matchstr(a:ArgLead, '^--\w\+=\%([^,]\+,\s*\)*')
|
||||||
|
let lead = substitute(a:ArgLead, '^--\w\+=\%([^,]\+,\s*\)*', '', '')
|
||||||
|
" TLogVAR a:ArgLead, lead
|
||||||
if !empty(lead)
|
if !empty(lead)
|
||||||
let nchar = len(lead)
|
let nchar = len(lead)
|
||||||
call filter(words, 'strpart(v:val, 0, nchar) ==# lead')
|
call filter(words, 'tlib#string#Strcharpart(v:val, 0, nchar) ==# lead')
|
||||||
endif
|
endif
|
||||||
let words = map(words, '"--". opt ."=". v:val')
|
let words = map(words, 'prefix . v:val')
|
||||||
return sort(words)
|
return sort(words)
|
||||||
endif
|
endif
|
||||||
endif
|
endif
|
||||||
|
@ -294,9 +305,12 @@ function! tlib#arg#CComplete(def, ArgLead) abort "{{{3
|
||||||
endif
|
endif
|
||||||
let cs['-'. name] = 1
|
let cs['-'. name] = 1
|
||||||
endfor
|
endfor
|
||||||
|
if has_key(a:def, 'trace')
|
||||||
|
let cs['--debug'] = 1
|
||||||
|
endif
|
||||||
let nchar = len(a:ArgLead)
|
let nchar = len(a:ArgLead)
|
||||||
if nchar > 0
|
if nchar > 0
|
||||||
call filter(cs, 'strpart(v:key, 0, nchar) ==# a:ArgLead')
|
call filter(cs, 'tlib#string#Strcharpart(v:key, 0, nchar) ==# a:ArgLead')
|
||||||
endif
|
endif
|
||||||
return sort(keys(cs))
|
return sort(keys(cs))
|
||||||
endf
|
endf
|
||||||
|
|
|
@ -1,21 +1,21 @@
|
||||||
" @Author: Tom Link (mailto:micathom AT gmail com?subject=[vim])
|
" @Author: Tom Link (mailto:micathom AT gmail com?subject=[vim])
|
||||||
" @Website: https://github.com/tomtom
|
" @Website: https://github.com/tomtom
|
||||||
" @License: GPL (see http://www.gnu.org/licenses/gpl.txt)
|
" @License: GPL (see http://www.gnu.org/licenses/gpl.txt)
|
||||||
" @Last Change: 2015-11-23
|
" @Last Change: 2017-02-22
|
||||||
" @Revision: 38
|
" @Revision: 42
|
||||||
|
|
||||||
|
|
||||||
" Enable tracing via |:Tlibassert|.
|
" Enable tracing via |:Tlibassert|.
|
||||||
function! tlib#assert#Enable() abort "{{{3
|
function! tlib#assert#Enable() abort "{{{3
|
||||||
" :nodoc:
|
" :nodoc:
|
||||||
command! -nargs=+ -bar Tlibassert call tlib#assert#Assert(expand('<sfile>'), <q-args>, [<args>])
|
command! -nargs=+ -bang Tlibassert call tlib#assert#Assert(expand('<sfile>'), <q-args>, [<args>])
|
||||||
endf
|
endf
|
||||||
|
|
||||||
|
|
||||||
" Disable tracing via |:Tlibassert|.
|
" Disable tracing via |:Tlibassert|.
|
||||||
function! tlib#assert#Disable() abort "{{{3
|
function! tlib#assert#Disable() abort "{{{3
|
||||||
" :nodoc:
|
" :nodoc:
|
||||||
command! -nargs=+ -bang -bar Tlibassert :
|
command! -nargs=+ -bang Tlibassert :
|
||||||
endf
|
endf
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -3,8 +3,8 @@
|
||||||
" @Website: http://www.vim.org/account/profile.php?user_id=4037
|
" @Website: http://www.vim.org/account/profile.php?user_id=4037
|
||||||
" @License: GPL (see http://www.gnu.org/licenses/gpl.txt)
|
" @License: GPL (see http://www.gnu.org/licenses/gpl.txt)
|
||||||
" @Created: 2007-06-30.
|
" @Created: 2007-06-30.
|
||||||
" @Last Change: 2015-11-06.
|
" @Last Change: 2017-09-28.
|
||||||
" @Revision: 7.1.352
|
" @Revision: 12.1.352
|
||||||
|
|
||||||
|
|
||||||
" Where to display the line when using |tlib#buffer#ViewLine|.
|
" Where to display the line when using |tlib#buffer#ViewLine|.
|
||||||
|
@ -15,19 +15,19 @@ TLet g:tlib_viewline_position = 'zz'
|
||||||
let s:bmru = []
|
let s:bmru = []
|
||||||
|
|
||||||
|
|
||||||
function! tlib#buffer#EnableMRU() "{{{3
|
function! tlib#buffer#EnableMRU() abort "{{{3
|
||||||
call tlib#autocmdgroup#Init()
|
call tlib#autocmdgroup#Init()
|
||||||
autocmd TLib BufEnter * call s:BMRU_Push(bufnr('%'))
|
autocmd TLib BufEnter * call s:BMRU_Push(bufnr('%'))
|
||||||
endf
|
endf
|
||||||
|
|
||||||
|
|
||||||
function! tlib#buffer#DisableMRU() "{{{3
|
function! tlib#buffer#DisableMRU() abort "{{{3
|
||||||
call tlib#autocmdgroup#Init()
|
call tlib#autocmdgroup#Init()
|
||||||
autocmd! TLib BufEnter
|
autocmd! TLib BufEnter
|
||||||
endf
|
endf
|
||||||
|
|
||||||
|
|
||||||
function! s:BMRU_Push(bnr) "{{{3
|
function! s:BMRU_Push(bnr) abort "{{{3
|
||||||
let i = index(s:bmru, a:bnr)
|
let i = index(s:bmru, a:bnr)
|
||||||
if i >= 0
|
if i >= 0
|
||||||
call remove(s:bmru, i)
|
call remove(s:bmru, i)
|
||||||
|
@ -36,7 +36,7 @@ function! s:BMRU_Push(bnr) "{{{3
|
||||||
endf
|
endf
|
||||||
|
|
||||||
|
|
||||||
function! s:CompareBuffernameByBasename(a, b) "{{{3
|
function! s:CompareBuffernameByBasename(a, b) abort "{{{3
|
||||||
let rx = '"\zs.\{-}\ze" \+\S\+ \+\d\+$'
|
let rx = '"\zs.\{-}\ze" \+\S\+ \+\d\+$'
|
||||||
let an = matchstr(a:a, rx)
|
let an = matchstr(a:a, rx)
|
||||||
let an = fnamemodify(an, ':t')
|
let an = fnamemodify(an, ':t')
|
||||||
|
@ -47,7 +47,7 @@ function! s:CompareBuffernameByBasename(a, b) "{{{3
|
||||||
endf
|
endf
|
||||||
|
|
||||||
|
|
||||||
function! s:CompareBufferNrByMRU(a, b) "{{{3
|
function! s:CompareBufferNrByMRU(a, b) abort "{{{3
|
||||||
let an = matchstr(a:a, '\s*\zs\d\+\ze')
|
let an = matchstr(a:a, '\s*\zs\d\+\ze')
|
||||||
let bn = matchstr(a:b, '\s*\zs\d\+\ze')
|
let bn = matchstr(a:b, '\s*\zs\d\+\ze')
|
||||||
let ai = index(s:bmru, 0 + an)
|
let ai = index(s:bmru, 0 + an)
|
||||||
|
@ -66,7 +66,7 @@ endf
|
||||||
|
|
||||||
" Set the buffer to buffer and return a command as string that can be
|
" Set the buffer to buffer and return a command as string that can be
|
||||||
" evaluated by |:execute| in order to restore the original view.
|
" evaluated by |:execute| in order to restore the original view.
|
||||||
function! tlib#buffer#Set(buffer) "{{{3
|
function! tlib#buffer#Set(buffer) abort "{{{3
|
||||||
let lazyredraw = &lazyredraw
|
let lazyredraw = &lazyredraw
|
||||||
set lazyredraw
|
set lazyredraw
|
||||||
try
|
try
|
||||||
|
@ -91,12 +91,12 @@ function! tlib#buffer#Set(buffer) "{{{3
|
||||||
endf
|
endf
|
||||||
|
|
||||||
|
|
||||||
" :def: function! tlib#buffer#Eval(buffer, code)
|
" :def: function! tlib#buffer#Eval(buffer, code) abort
|
||||||
" Evaluate CODE in BUFFER.
|
" Evaluate CODE in BUFFER.
|
||||||
"
|
"
|
||||||
" EXAMPLES: >
|
" EXAMPLES: >
|
||||||
" call tlib#buffer#Eval('foo.txt', 'echo b:bar')
|
" call tlib#buffer#Eval('foo.txt', 'echo b:bar')
|
||||||
function! tlib#buffer#Eval(buffer, code) "{{{3
|
function! tlib#buffer#Eval(buffer, code) abort "{{{3
|
||||||
" let cb = bufnr('%')
|
" let cb = bufnr('%')
|
||||||
" let wb = bufwinnr('%')
|
" let wb = bufwinnr('%')
|
||||||
" " TLogVAR cb
|
" " TLogVAR cb
|
||||||
|
@ -134,7 +134,7 @@ function! tlib#buffer#Eval(buffer, code) "{{{3
|
||||||
endf
|
endf
|
||||||
|
|
||||||
|
|
||||||
" :def: function! tlib#buffer#GetList(?show_hidden=0, ?show_number=0, " ?order='bufnr')
|
" :def: function! tlib#buffer#GetList(?show_hidden=0, ?show_number=0, " ?order='bufnr') abort
|
||||||
" Possible values for the "order" argument:
|
" Possible values for the "order" argument:
|
||||||
" bufnr :: Default behaviour
|
" bufnr :: Default behaviour
|
||||||
" mru :: Sort buffers according to most recent use
|
" mru :: Sort buffers according to most recent use
|
||||||
|
@ -142,7 +142,7 @@ endf
|
||||||
"
|
"
|
||||||
" NOTE: MRU order works on second invocation only. If you want to always
|
" NOTE: MRU order works on second invocation only. If you want to always
|
||||||
" use MRU order, call tlib#buffer#EnableMRU() in your ~/.vimrc file.
|
" use MRU order, call tlib#buffer#EnableMRU() in your ~/.vimrc file.
|
||||||
function! tlib#buffer#GetList(...)
|
function! tlib#buffer#GetList(...) abort
|
||||||
TVarArg ['show_hidden', 0], ['show_number', 0], ['order', '']
|
TVarArg ['show_hidden', 0], ['show_number', 0], ['order', '']
|
||||||
" TLogVAR show_hidden, show_number, order
|
" TLogVAR show_hidden, show_number, order
|
||||||
let ls_bang = show_hidden ? '!' : ''
|
let ls_bang = show_hidden ? '!' : ''
|
||||||
|
@ -150,14 +150,14 @@ function! tlib#buffer#GetList(...)
|
||||||
exec 'silent ls'. ls_bang
|
exec 'silent ls'. ls_bang
|
||||||
redir END
|
redir END
|
||||||
let buffer_list = split(bfs, '\n')
|
let buffer_list = split(bfs, '\n')
|
||||||
if order == 'mru'
|
if order ==# 'mru'
|
||||||
if empty(s:bmru)
|
if empty(s:bmru)
|
||||||
call tlib#buffer#EnableMRU()
|
call tlib#buffer#EnableMRU()
|
||||||
echom 'tlib: Installed Buffer MRU logger; disable with: call tlib#buffer#DisableMRU()'
|
echom 'tlib: Installed Buffer MRU logger; disable with: call tlib#buffer#DisableMRU()'
|
||||||
else
|
else
|
||||||
call sort(buffer_list, function('s:CompareBufferNrByMRU'))
|
call sort(buffer_list, function('s:CompareBufferNrByMRU'))
|
||||||
endif
|
endif
|
||||||
elseif order == 'basename'
|
elseif order ==# 'basename'
|
||||||
call sort(buffer_list, function('s:CompareBuffernameByBasename'))
|
call sort(buffer_list, function('s:CompareBuffernameByBasename'))
|
||||||
endif
|
endif
|
||||||
let buffer_nr = map(copy(buffer_list), 'str2nr(matchstr(v:val, ''\s*\zs\d\+\ze''))')
|
let buffer_nr = map(copy(buffer_list), 'str2nr(matchstr(v:val, ''\s*\zs\d\+\ze''))')
|
||||||
|
@ -176,11 +176,11 @@ function! tlib#buffer#GetList(...)
|
||||||
endf
|
endf
|
||||||
|
|
||||||
|
|
||||||
" :def: function! tlib#buffer#ViewLine(line, ?position='z')
|
" :def: function! tlib#buffer#ViewLine(line, ?position='z') abort
|
||||||
" line is either a number or a string that begins with a number.
|
" line is either a number or a string that begins with a number.
|
||||||
" For possible values for position see |scroll-cursor|.
|
" For possible values for position see |scroll-cursor|.
|
||||||
" See also |g:tlib_viewline_position|.
|
" See also |g:tlib_viewline_position|.
|
||||||
function! tlib#buffer#ViewLine(line, ...) "{{{3
|
function! tlib#buffer#ViewLine(line, ...) abort "{{{3
|
||||||
if a:line
|
if a:line
|
||||||
TVarArg 'pos'
|
TVarArg 'pos'
|
||||||
let ln = matchstr(a:line, '^\d\+')
|
let ln = matchstr(a:line, '^\d\+')
|
||||||
|
@ -200,7 +200,7 @@ function! tlib#buffer#ViewLine(line, ...) "{{{3
|
||||||
endf
|
endf
|
||||||
|
|
||||||
|
|
||||||
function! s:UndoHighlightLine() "{{{3
|
function! s:UndoHighlightLine() abort "{{{3
|
||||||
2match none
|
2match none
|
||||||
autocmd! TLib CursorMoved,CursorMovedI <buffer>
|
autocmd! TLib CursorMoved,CursorMovedI <buffer>
|
||||||
autocmd! TLib CursorHold,CursorHoldI <buffer>
|
autocmd! TLib CursorHold,CursorHoldI <buffer>
|
||||||
|
@ -209,7 +209,7 @@ function! s:UndoHighlightLine() "{{{3
|
||||||
endf
|
endf
|
||||||
|
|
||||||
|
|
||||||
function! tlib#buffer#HighlightLine(...) "{{{3
|
function! tlib#buffer#HighlightLine(...) abort "{{{3
|
||||||
TVarArg ['line', line('.')]
|
TVarArg ['line', line('.')]
|
||||||
" exec '2match MatchParen /^\%'. a:line .'l.*/'
|
" exec '2match MatchParen /^\%'. a:line .'l.*/'
|
||||||
exec '2match Search /^\%'. line .'l.*/'
|
exec '2match Search /^\%'. line .'l.*/'
|
||||||
|
@ -222,7 +222,7 @@ endf
|
||||||
|
|
||||||
|
|
||||||
" Delete the lines in the current buffer. Wrapper for |:delete|.
|
" Delete the lines in the current buffer. Wrapper for |:delete|.
|
||||||
function! tlib#buffer#DeleteRange(line1, line2) "{{{3
|
function! tlib#buffer#DeleteRange(line1, line2) abort "{{{3
|
||||||
let r = @t
|
let r = @t
|
||||||
try
|
try
|
||||||
exec a:line1.','.a:line2.'delete t'
|
exec a:line1.','.a:line2.'delete t'
|
||||||
|
@ -233,14 +233,14 @@ endf
|
||||||
|
|
||||||
|
|
||||||
" Replace a range of lines.
|
" Replace a range of lines.
|
||||||
function! tlib#buffer#ReplaceRange(line1, line2, lines)
|
function! tlib#buffer#ReplaceRange(line1, line2, lines) abort
|
||||||
call tlib#buffer#DeleteRange(a:line1, a:line2)
|
call tlib#buffer#DeleteRange(a:line1, a:line2)
|
||||||
call append(a:line1 - 1, a:lines)
|
call append(a:line1 - 1, a:lines)
|
||||||
endf
|
endf
|
||||||
|
|
||||||
|
|
||||||
" Initialize some scratch area at the bottom of the current buffer.
|
" Initialize some scratch area at the bottom of the current buffer.
|
||||||
function! tlib#buffer#ScratchStart() "{{{3
|
function! tlib#buffer#ScratchStart() abort "{{{3
|
||||||
norm! Go
|
norm! Go
|
||||||
let b:tlib_inbuffer_scratch = line('$')
|
let b:tlib_inbuffer_scratch = line('$')
|
||||||
return b:tlib_inbuffer_scratch
|
return b:tlib_inbuffer_scratch
|
||||||
|
@ -248,7 +248,7 @@ endf
|
||||||
|
|
||||||
|
|
||||||
" Remove the in-buffer scratch area.
|
" Remove the in-buffer scratch area.
|
||||||
function! tlib#buffer#ScratchEnd() "{{{3
|
function! tlib#buffer#ScratchEnd() abort "{{{3
|
||||||
if !exists('b:tlib_inbuffer_scratch')
|
if !exists('b:tlib_inbuffer_scratch')
|
||||||
echoerr 'tlib: In-buffer scratch not initalized'
|
echoerr 'tlib: In-buffer scratch not initalized'
|
||||||
endif
|
endif
|
||||||
|
@ -258,14 +258,14 @@ endf
|
||||||
|
|
||||||
|
|
||||||
" Run exec on all buffers via bufdo and return to the original buffer.
|
" Run exec on all buffers via bufdo and return to the original buffer.
|
||||||
function! tlib#buffer#BufDo(exec) "{{{3
|
function! tlib#buffer#BufDo(exec) abort "{{{3
|
||||||
let bn = bufnr('%')
|
let bn = bufnr('%')
|
||||||
exec 'bufdo '. a:exec
|
exec 'bufdo '. a:exec
|
||||||
exec 'buffer! '. bn
|
exec 'buffer! '. bn
|
||||||
endf
|
endf
|
||||||
|
|
||||||
|
|
||||||
" :def: function! tlib#buffer#InsertText(text, keyargs)
|
" :def: function! tlib#buffer#InsertText(text, keyargs) abort
|
||||||
" Keyargs:
|
" Keyargs:
|
||||||
" 'shift': 0|N
|
" 'shift': 0|N
|
||||||
" 'col': col('.')|N
|
" 'col': col('.')|N
|
||||||
|
@ -273,7 +273,7 @@ endf
|
||||||
" 'indent': 0|1
|
" 'indent': 0|1
|
||||||
" 'pos': 'e'|'s' ... Where to locate the cursor (somewhat like s and e in {offset})
|
" 'pos': 'e'|'s' ... Where to locate the cursor (somewhat like s and e in {offset})
|
||||||
" Insert text (a string) in the buffer.
|
" Insert text (a string) in the buffer.
|
||||||
function! tlib#buffer#InsertText(text, ...) "{{{3
|
function! tlib#buffer#InsertText(text, ...) abort "{{{3
|
||||||
TVarArg ['keyargs', {}]
|
TVarArg ['keyargs', {}]
|
||||||
" TLogVAR a:text, keyargs
|
" TLogVAR a:text, keyargs
|
||||||
let keyargs = extend({
|
let keyargs = extend({
|
||||||
|
@ -298,16 +298,16 @@ function! tlib#buffer#InsertText(text, ...) "{{{3
|
||||||
" exec 'norm! '. keyargs.lineno .'G'
|
" exec 'norm! '. keyargs.lineno .'G'
|
||||||
call cursor(keyargs.lineno, keyargs.col)
|
call cursor(keyargs.lineno, keyargs.col)
|
||||||
if keyargs.indent && keyargs.col > 1
|
if keyargs.indent && keyargs.col > 1
|
||||||
if &fo =~# '[or]'
|
if &formatoptions =~# '[or]'
|
||||||
" FIXME: Is the simple version sufficient?
|
" FIXME: Is the simple version sufficient?
|
||||||
" VERSION 1
|
" VERSION 1
|
||||||
" " This doesn't work because it's not guaranteed that the
|
" " This doesn't work because it's not guaranteed that the
|
||||||
" " cursor is set.
|
" " cursor is set.
|
||||||
" let cline = getline('.')
|
" let cline = getline('.')
|
||||||
" norm! a
|
" norm! a
|
||||||
" "norm! o
|
" "norm! o
|
||||||
" " TAssertExec redraw | sleep 3
|
" " TAssertExec redraw | sleep 3
|
||||||
" let idt = strpart(getline('.'), 0, keyargs.col('.') + keyargs.shift)
|
" let idt = tlib#string#Strcharpart(getline('.'), 0, keyargs.col('.') + keyargs.shift)
|
||||||
" " TLogVAR idt
|
" " TLogVAR idt
|
||||||
" let idtl = len(idt)
|
" let idtl = len(idt)
|
||||||
" -1,.delete
|
" -1,.delete
|
||||||
|
@ -346,10 +346,10 @@ function! tlib#buffer#InsertText(text, ...) "{{{3
|
||||||
let tlen = len(text)
|
let tlen = len(text)
|
||||||
let posshift = matchstr(keyargs.pos, '\d\+')
|
let posshift = matchstr(keyargs.pos, '\d\+')
|
||||||
" TLogVAR keyargs.pos
|
" TLogVAR keyargs.pos
|
||||||
if keyargs.pos =~ '^e'
|
if keyargs.pos =~# '^e'
|
||||||
exec keyargs.lineno + tlen - 1
|
exec keyargs.lineno + tlen - 1
|
||||||
exec 'norm! 0'. (len(text[-1]) - len(post) + posshift - 1) .'l'
|
exec 'norm! 0'. (len(text[-1]) - len(post) + posshift - 1) .'l'
|
||||||
elseif keyargs.pos =~ '^s'
|
elseif keyargs.pos =~# '^s'
|
||||||
" TLogVAR keyargs.lineno, pre, posshift
|
" TLogVAR keyargs.lineno, pre, posshift
|
||||||
exec keyargs.lineno
|
exec keyargs.lineno
|
||||||
exec 'norm! '. len(pre) .'|'
|
exec 'norm! '. len(pre) .'|'
|
||||||
|
@ -363,7 +363,7 @@ function! tlib#buffer#InsertText(text, ...) "{{{3
|
||||||
endf
|
endf
|
||||||
|
|
||||||
|
|
||||||
function! tlib#buffer#InsertText0(text, ...) "{{{3
|
function! tlib#buffer#InsertText0(text, ...) abort "{{{3
|
||||||
TVarArg ['keyargs', {}]
|
TVarArg ['keyargs', {}]
|
||||||
let mode = get(keyargs, 'mode', 'i')
|
let mode = get(keyargs, 'mode', 'i')
|
||||||
" TLogVAR mode
|
" TLogVAR mode
|
||||||
|
@ -382,13 +382,13 @@ function! tlib#buffer#InsertText0(text, ...) "{{{3
|
||||||
endf
|
endf
|
||||||
|
|
||||||
|
|
||||||
function! tlib#buffer#CurrentByte() "{{{3
|
function! tlib#buffer#CurrentByte() abort "{{{3
|
||||||
return line2byte(line('.')) + col('.')
|
return line2byte(line('.')) + col('.')
|
||||||
endf
|
endf
|
||||||
|
|
||||||
|
|
||||||
" Evaluate cmd while maintaining the cursor position and jump registers.
|
" Evaluate cmd while maintaining the cursor position and jump registers.
|
||||||
function! tlib#buffer#KeepCursorPosition(cmd) "{{{3
|
function! tlib#buffer#KeepCursorPosition(cmd) abort "{{{3
|
||||||
" let pos = getpos('.')
|
" let pos = getpos('.')
|
||||||
let view = winsaveview()
|
let view = winsaveview()
|
||||||
try
|
try
|
||||||
|
|
|
@ -3,8 +3,8 @@
|
||||||
" @Website: http://www.vim.org/account/profile.php?user_id=4037
|
" @Website: http://www.vim.org/account/profile.php?user_id=4037
|
||||||
" @License: GPL (see http://www.gnu.org/licenses/gpl.txt)
|
" @License: GPL (see http://www.gnu.org/licenses/gpl.txt)
|
||||||
" @Created: 2007-06-30.
|
" @Created: 2007-06-30.
|
||||||
" @Last Change: 2015-10-24.
|
" @Last Change: 2019-01-02.
|
||||||
" @Revision: 31.1.243
|
" @Revision: 125.1.243
|
||||||
|
|
||||||
|
|
||||||
" The cache directory. If empty, use |tlib#dir#MyRuntime|.'/cache'.
|
" The cache directory. If empty, use |tlib#dir#MyRuntime|.'/cache'.
|
||||||
|
@ -45,21 +45,37 @@ TLet g:tlib#cache#dont_purge = ['[\/]\.last_purge$']
|
||||||
" |pathshorten()|.
|
" |pathshorten()|.
|
||||||
TLet g:tlib#cache#max_filename = 200
|
TLet g:tlib#cache#max_filename = 200
|
||||||
|
|
||||||
|
TLet g:tlib#cache#use_json = 0
|
||||||
|
|
||||||
|
TLet g:tlib#cache#use_encoding = ''
|
||||||
|
|
||||||
|
|
||||||
let s:cache = {}
|
let s:cache = {}
|
||||||
|
|
||||||
|
|
||||||
" :display: tlib#cache#Dir(?mode = 'bg')
|
" :display: tlib#cache#Dir(?mode = 'bg', ?ensure_dir = true)
|
||||||
" The default cache directory.
|
" The default cache directory.
|
||||||
function! tlib#cache#Dir(...) "{{{3
|
function! tlib#cache#Dir(...) "{{{3
|
||||||
TVarArg ['mode', 'bg']
|
TVarArg ['mode', 'bg'], ['ensure_dir', 1]
|
||||||
let dir = tlib#var#Get('tlib_cache', mode)
|
let dir = tlib#var#Get('tlib_cache', mode)
|
||||||
if empty(dir)
|
if empty(dir)
|
||||||
let dir = tlib#file#Join([tlib#dir#MyRuntime(), 'cache'])
|
let dir = tlib#file#Join([tlib#dir#MyRuntime(), 'cache'])
|
||||||
endif
|
endif
|
||||||
|
if ensure_dir
|
||||||
|
call tlib#dir#Ensure(dir)
|
||||||
|
endif
|
||||||
return dir
|
return dir
|
||||||
endf
|
endf
|
||||||
|
|
||||||
|
|
||||||
|
" :display: tlib#cache#EncodedFilename(type, file, ?mkdir=0, ?dir='')
|
||||||
|
" Encode `file` and call |tlib#cache#Filename()|.
|
||||||
|
function! tlib#cache#EncodedFilename(type, file, ...) "{{{3
|
||||||
|
let file = tlib#url#Encode(a:file)
|
||||||
|
return call(function('tlib#cache#Filename'), [a:type, file] + a:000)
|
||||||
|
endf
|
||||||
|
|
||||||
|
|
||||||
" :def: function! tlib#cache#Filename(type, ?file=%, ?mkdir=0, ?dir='')
|
" :def: function! tlib#cache#Filename(type, ?file=%, ?mkdir=0, ?dir='')
|
||||||
function! tlib#cache#Filename(type, ...) "{{{3
|
function! tlib#cache#Filename(type, ...) "{{{3
|
||||||
" TLogDBG 'bufname='. bufname('.')
|
" TLogDBG 'bufname='. bufname('.')
|
||||||
|
@ -90,12 +106,15 @@ function! tlib#cache#Filename(type, ...) "{{{3
|
||||||
" TLogVAR file, dir, mkdir
|
" TLogVAR file, dir, mkdir
|
||||||
let cache_file = tlib#file#Join([dir, file])
|
let cache_file = tlib#file#Join([dir, file])
|
||||||
if len(cache_file) > g:tlib#cache#max_filename
|
if len(cache_file) > g:tlib#cache#max_filename
|
||||||
|
" echom "DBG long filename" cache_file
|
||||||
|
" echom "DBG long filename" dir
|
||||||
if v:version >= 704
|
if v:version >= 704
|
||||||
let shortfilename = pathshorten(file) .'_'. sha256(file)
|
let shortfilename = sha256(file)
|
||||||
else
|
else
|
||||||
let shortfilename = pathshorten(file) .'_'. tlib#hash#Adler32(file)
|
let shortfilename = tlib#hash#Adler32(file)
|
||||||
endif
|
endif
|
||||||
let cache_file = tlib#cache#Filename(a:type, shortfilename, mkdir, dir0)
|
" let cache_file = tlib#cache#Filename(a:type, shortfilename, mkdir, dir0)
|
||||||
|
let cache_file = tlib#file#Join([dir, shortfilename])
|
||||||
else
|
else
|
||||||
if mkdir && !isdirectory(dir)
|
if mkdir && !isdirectory(dir)
|
||||||
try
|
try
|
||||||
|
@ -126,15 +145,45 @@ function! s:SetTimestamp(cfile, type) "{{{3
|
||||||
endf
|
endf
|
||||||
|
|
||||||
|
|
||||||
function! tlib#cache#Save(cfile, dictionary, ...) "{{{3
|
function! s:PutValue(cfile, value) abort "{{{3
|
||||||
|
let s:cache[a:cfile] = {'mtime': localtime(), 'data': a:value}
|
||||||
|
endf
|
||||||
|
|
||||||
|
|
||||||
|
function! s:GetValue(cfile, default) abort "{{{3
|
||||||
|
return get(get(s:cache, a:cfile, {}), 'data', a:default)
|
||||||
|
endf
|
||||||
|
|
||||||
|
|
||||||
|
function! s:GetCacheTime(cfile) abort "{{{3
|
||||||
|
let not_found = !has_key(s:cache, a:cfile)
|
||||||
|
let cftime = not_found ? -1 : s:cache[a:cfile].mtime
|
||||||
|
return cftime
|
||||||
|
endf
|
||||||
|
|
||||||
|
|
||||||
|
function! tlib#cache#Save(cfile, value, ...) "{{{3
|
||||||
TVarArg ['options', {}]
|
TVarArg ['options', {}]
|
||||||
let in_memory = get(options, 'in_memory', 0)
|
let in_memory = get(options, 'in_memory', 0)
|
||||||
if in_memory
|
if in_memory
|
||||||
" TLogVAR in_memory, a:cfile, localtime()
|
" TLogVAR in_memory, a:cfile, localtime()
|
||||||
let s:cache[a:cfile] = {'mtime': localtime(), 'data': a:dictionary}
|
call s:PutValue(a:cfile, a:value)
|
||||||
elseif !empty(a:cfile)
|
elseif !empty(a:cfile)
|
||||||
" TLogVAR a:dictionary
|
" TLogVAR a:value
|
||||||
call writefile([string(a:dictionary)], a:cfile, 'b')
|
let cfile = a:cfile
|
||||||
|
if g:tlib#cache#use_json && exists('*json_encode')
|
||||||
|
try
|
||||||
|
let value = json_encode(a:value)
|
||||||
|
let cfile .= '.json'
|
||||||
|
catch
|
||||||
|
echoerr v:exception
|
||||||
|
let value = string(a:value)
|
||||||
|
endtry
|
||||||
|
else
|
||||||
|
let value = string(a:value)
|
||||||
|
endif
|
||||||
|
Tlibtrace 'tlib', cfile, value
|
||||||
|
call writefile([value], cfile, 'b')
|
||||||
call s:SetTimestamp(a:cfile, 'write')
|
call s:SetTimestamp(a:cfile, 'write')
|
||||||
endif
|
endif
|
||||||
endf
|
endf
|
||||||
|
@ -152,16 +201,57 @@ function! tlib#cache#Get(cfile, ...) "{{{3
|
||||||
let in_memory = get(options, 'in_memory', 0)
|
let in_memory = get(options, 'in_memory', 0)
|
||||||
if in_memory
|
if in_memory
|
||||||
" TLogVAR in_memory, a:cfile
|
" TLogVAR in_memory, a:cfile
|
||||||
return get(get(s:cache, a:cfile, {}), 'data', default)
|
return s:GetValue(a:cfile, default)
|
||||||
else
|
else
|
||||||
call tlib#cache#MaybePurge()
|
call tlib#cache#MaybePurge()
|
||||||
if !empty(a:cfile) && filereadable(a:cfile)
|
if !empty(a:cfile)
|
||||||
let val = readfile(a:cfile, 'b')
|
let jsonfile = a:cfile .'.json'
|
||||||
call s:SetTimestamp(a:cfile, 'read')
|
let use_json = g:tlib#cache#use_json && exists('*json_decode') && exists('v:none') && filereadable(jsonfile)
|
||||||
return eval(join(val, "\n"))
|
if use_json
|
||||||
else
|
let use_json = 1
|
||||||
return default
|
let cfile = jsonfile
|
||||||
|
else
|
||||||
|
let cfile = a:cfile
|
||||||
|
endif
|
||||||
|
let mt = s:GetCacheTime(cfile)
|
||||||
|
let ft = getftime(cfile)
|
||||||
|
if mt != -1 && mt >= ft
|
||||||
|
return s:GetValue(cfile, default)
|
||||||
|
elseif ft != -1
|
||||||
|
call s:SetTimestamp(cfile, 'read')
|
||||||
|
let val = join(readfile(cfile, 'b'), '\n')
|
||||||
|
try
|
||||||
|
if use_json
|
||||||
|
" NOTE: Copy result of json_decode() in order to
|
||||||
|
" avoid "E741: value is locked" error in vim8.
|
||||||
|
let value = json_decode(val)
|
||||||
|
if value is v:none
|
||||||
|
let value = default
|
||||||
|
else
|
||||||
|
let value = copy(value)
|
||||||
|
endif
|
||||||
|
else
|
||||||
|
let value = eval(val)
|
||||||
|
endif
|
||||||
|
call s:PutValue(cfile, value)
|
||||||
|
return value
|
||||||
|
catch
|
||||||
|
echohl ErrorMsg
|
||||||
|
echom v:exception
|
||||||
|
echom 'tlib#cache#Get: Invalid value in:' cfile
|
||||||
|
echom 'Value:' string(val)
|
||||||
|
echom 'Please review the file and delete it if necessary'
|
||||||
|
echom 'Will use default value:' string(default)
|
||||||
|
echohl NONE
|
||||||
|
if g:tlib#debug
|
||||||
|
let @* = string(val)
|
||||||
|
endif
|
||||||
|
" call s:PutValue(cfile, default)
|
||||||
|
return default
|
||||||
|
endtry
|
||||||
|
endif
|
||||||
endif
|
endif
|
||||||
|
return default
|
||||||
endif
|
endif
|
||||||
endf
|
endf
|
||||||
|
|
||||||
|
@ -172,10 +262,14 @@ endf
|
||||||
function! tlib#cache#Value(cfile, generator, ftime, ...) "{{{3
|
function! tlib#cache#Value(cfile, generator, ftime, ...) "{{{3
|
||||||
TVarArg ['args', []], ['options', {}]
|
TVarArg ['args', []], ['options', {}]
|
||||||
let in_memory = get(options, 'in_memory', 0)
|
let in_memory = get(options, 'in_memory', 0)
|
||||||
let not_found = in_memory ? !has_key(s:cache, a:cfile) : !filereadable(a:cfile)
|
if in_memory
|
||||||
" TLogVAR in_memory, not_found
|
let cftime = s:GetCacheTime(a:cfile)
|
||||||
let cftime = in_memory ? (not_found ? 0 : s:cache[a:cfile].mtime) : getftime(a:cfile)
|
else
|
||||||
if not_found || (a:ftime != 0 && cftime < a:ftime)
|
let cftime = getftime(a:cfile)
|
||||||
|
endif
|
||||||
|
let ftime = a:ftime
|
||||||
|
" TLogVAR in_memory, cftime
|
||||||
|
if cftime == -1 || ftime == -1 || (ftime != 0 && cftime < ftime)
|
||||||
" TLogVAR a:generator, args
|
" TLogVAR a:generator, args
|
||||||
let val = call(a:generator, args)
|
let val = call(a:generator, args)
|
||||||
" TLogVAR val
|
" TLogVAR val
|
||||||
|
@ -194,6 +288,12 @@ function! tlib#cache#Value(cfile, generator, ftime, ...) "{{{3
|
||||||
endf
|
endf
|
||||||
|
|
||||||
|
|
||||||
|
function! tlib#cache#ValueFromName(type, name, ...) abort "{{{3
|
||||||
|
let cfile = tlib#cache#Filename(a:type, tlib#url#Encode(a:name), 1)
|
||||||
|
return call(function('tlib#cache#Value'), [cfile] + a:000)
|
||||||
|
endf
|
||||||
|
|
||||||
|
|
||||||
" Call |tlib#cache#Purge()| if the last purge was done before
|
" Call |tlib#cache#Purge()| if the last purge was done before
|
||||||
" |g:tlib#cache#purge_every_days|.
|
" |g:tlib#cache#purge_every_days|.
|
||||||
function! tlib#cache#MaybePurge() "{{{3
|
function! tlib#cache#MaybePurge() "{{{3
|
||||||
|
@ -251,16 +351,12 @@ function! tlib#cache#Purge() "{{{3
|
||||||
try
|
try
|
||||||
for file in files
|
for file in files
|
||||||
if isdirectory(file)
|
if isdirectory(file)
|
||||||
if empty(filter(copy(newer), 'strpart(v:val, 0, len(file)) ==# file'))
|
if empty(filter(copy(newer), 'tlib#string#Strcharpart(v:val, 0, len(file)) ==# file'))
|
||||||
call add(deldir, file)
|
call add(deldir, file)
|
||||||
endif
|
endif
|
||||||
else
|
else
|
||||||
if getftime(file) < threshold
|
if getftime(file) < threshold
|
||||||
if delete(file)
|
call s:Delete(msg, file, '')
|
||||||
call add(msg, "TLib: Could not delete cache file: ". file)
|
|
||||||
elseif g:tlib#cache#verbosity >= 2
|
|
||||||
call add(msg, "TLib: Delete cache file: ". file)
|
|
||||||
endif
|
|
||||||
else
|
else
|
||||||
call add(newer, file)
|
call add(newer, file)
|
||||||
endif
|
endif
|
||||||
|
@ -273,56 +369,68 @@ function! tlib#cache#Purge() "{{{3
|
||||||
echo join(msg, "\n")
|
echo join(msg, "\n")
|
||||||
endif
|
endif
|
||||||
if !empty(deldir)
|
if !empty(deldir)
|
||||||
if &shell =~ 'sh\(\.exe\)\?$'
|
let deldir = filter(reverse(sort(deldir)), 's:Delete(msg, v:val, "d")')
|
||||||
let scriptfile = 'deldir.sh'
|
if !empty(deldir)
|
||||||
let rmdir = 'rm -rf %s'
|
if &shell =~ 'sh\(\.exe\)\?$'
|
||||||
else
|
let scriptfile = 'deldir.sh'
|
||||||
let scriptfile = 'deldir.bat'
|
let rmdir = 'rm -rf %s'
|
||||||
let rmdir = 'rmdir /S /Q %s'
|
else
|
||||||
endif
|
let scriptfile = 'deldir.bat'
|
||||||
let enc = g:tlib#cache#script_encoding
|
let rmdir = 'rmdir /S /Q %s'
|
||||||
if has('multi_byte') && enc != &enc
|
|
||||||
call map(deldir, 'iconv(v:val, &enc, enc)')
|
|
||||||
endif
|
|
||||||
let scriptfile = tlib#file#Join([dir, scriptfile])
|
|
||||||
if filereadable(scriptfile)
|
|
||||||
let script = readfile(scriptfile)
|
|
||||||
else
|
|
||||||
let script = []
|
|
||||||
endif
|
|
||||||
let script += map(copy(deldir), 'printf(rmdir, shellescape(v:val, 1))')
|
|
||||||
let script = tlib#list#Uniq(script)
|
|
||||||
call writefile(script, scriptfile)
|
|
||||||
call inputsave()
|
|
||||||
if g:tlib#cache#run_script == 0
|
|
||||||
if g:tlib#cache#verbosity >= 1
|
|
||||||
echohl WarningMsg
|
|
||||||
if g:tlib#cache#verbosity >= 2
|
|
||||||
echom "TLib: Purged cache. Need to run script to delete directories"
|
|
||||||
endif
|
|
||||||
echom "TLib: Please review and execute: ". scriptfile
|
|
||||||
echohl NONE
|
|
||||||
endif
|
endif
|
||||||
else
|
let enc = g:tlib#cache#script_encoding
|
||||||
try
|
if has('multi_byte') && enc != &enc
|
||||||
let yn = g:tlib#cache#run_script == 2 ? 'y' : tlib#input#Dialog("TLib: About to delete directories by means of a shell script.\nDirectory removal script: ". scriptfile ."\nRun script to delete directories now?", ['yes', 'no', 'edit'], 'no')
|
call map(deldir, 'iconv(v:val, &enc, enc)')
|
||||||
if yn =~ '^y\%[es]$'
|
endif
|
||||||
exec 'cd '. fnameescape(dir)
|
let scriptfile = tlib#file#Join([dir, scriptfile])
|
||||||
exec '! ' &shell shellescape(scriptfile, 1)
|
if filereadable(scriptfile)
|
||||||
exec 'cd -'
|
let script = readfile(scriptfile)
|
||||||
call delete(scriptfile)
|
else
|
||||||
elseif yn =~ '^e\%[dit]$'
|
let script = []
|
||||||
exec 'edit '. fnameescape(scriptfile)
|
endif
|
||||||
|
let script += map(copy(deldir), 'printf(rmdir, shellescape(v:val, 1))')
|
||||||
|
let script = tlib#list#Uniq(script)
|
||||||
|
call writefile(script, scriptfile)
|
||||||
|
call inputsave()
|
||||||
|
if g:tlib#cache#run_script == 0
|
||||||
|
if g:tlib#cache#verbosity >= 1
|
||||||
|
echohl WarningMsg
|
||||||
|
if g:tlib#cache#verbosity >= 2
|
||||||
|
echom "TLib: Purged cache. Need to run script to delete directories"
|
||||||
|
endif
|
||||||
|
echom "TLib: Please review and execute: ". scriptfile
|
||||||
|
echohl NONE
|
||||||
endif
|
endif
|
||||||
finally
|
else
|
||||||
call inputrestore()
|
try
|
||||||
endtry
|
let yn = g:tlib#cache#run_script == 2 ? 'y' : tlib#input#Dialog("TLib: About to delete directories by means of a shell script.\nDirectory removal script: ". scriptfile ."\nRun script to delete directories now?", ['yes', 'no', 'edit'], 'no')
|
||||||
|
if yn =~ '^y\%[es]$'
|
||||||
|
exec 'silent cd '. fnameescape(dir)
|
||||||
|
exec '! ' &shell shellescape(scriptfile, 1)
|
||||||
|
exec 'silent cd -'
|
||||||
|
call delete(scriptfile)
|
||||||
|
elseif yn =~ '^e\%[dit]$'
|
||||||
|
exec 'edit '. fnameescape(scriptfile)
|
||||||
|
endif
|
||||||
|
finally
|
||||||
|
call inputrestore()
|
||||||
|
endtry
|
||||||
|
endif
|
||||||
endif
|
endif
|
||||||
endif
|
endif
|
||||||
call s:PurgeTimestamp(dir)
|
call s:PurgeTimestamp(dir)
|
||||||
endf
|
endf
|
||||||
|
|
||||||
|
|
||||||
|
function! s:Delete(msg, file, flags) abort "{{{3
|
||||||
|
let rv = delete(a:file, a:flags)
|
||||||
|
if !rv && g:tlib#cache#verbosity >= 2
|
||||||
|
call add(a:msg, "TLib#cache: Delete ". file)
|
||||||
|
endif
|
||||||
|
return rv
|
||||||
|
endf
|
||||||
|
|
||||||
|
|
||||||
function! s:PurgeTimestamp(dir) "{{{3
|
function! s:PurgeTimestamp(dir) "{{{3
|
||||||
let last_purge = tlib#file#Join([a:dir, '.last_purge'])
|
let last_purge = tlib#file#Join([a:dir, '.last_purge'])
|
||||||
" TLogVAR last_purge
|
" TLogVAR last_purge
|
||||||
|
@ -338,7 +446,7 @@ function! tlib#cache#ListFilesInCache(...) "{{{3
|
||||||
endif
|
endif
|
||||||
let files = reverse(split(filess, '\n'))
|
let files = reverse(split(filess, '\n'))
|
||||||
let pos0 = len(tlib#dir#CanonicName(dir))
|
let pos0 = len(tlib#dir#CanonicName(dir))
|
||||||
call filter(files, 's:ShouldPurge(strpart(v:val, pos0))')
|
call filter(files, 's:ShouldPurge(tlib#string#Strcharpart(v:val, pos0))')
|
||||||
return files
|
return files
|
||||||
endf
|
endf
|
||||||
|
|
||||||
|
|
|
@ -3,8 +3,8 @@
|
||||||
" @Website: http://www.vim.org/account/profile.php?user_id=4037
|
" @Website: http://www.vim.org/account/profile.php?user_id=4037
|
||||||
" @License: GPL (see http://www.gnu.org/licenses/gpl.txt)
|
" @License: GPL (see http://www.gnu.org/licenses/gpl.txt)
|
||||||
" @Created: 2010-03-25.
|
" @Created: 2010-03-25.
|
||||||
" @Last Change: 2015-11-23.
|
" @Last Change: 2017-09-06.
|
||||||
" @Revision: 21.0.34
|
" @Revision: 44.0.34
|
||||||
|
|
||||||
|
|
||||||
if !exists('g:tlib#date#ShortDatePrefix') | let g:tlib#date#ShortDatePrefix = '20' | endif "{{{2
|
if !exists('g:tlib#date#ShortDatePrefix') | let g:tlib#date#ShortDatePrefix = '20' | endif "{{{2
|
||||||
|
@ -17,12 +17,14 @@ let g:tlib#date#date_format = '%Y-%m-%d'
|
||||||
|
|
||||||
|
|
||||||
function! tlib#date#IsDate(text) abort "{{{3
|
function! tlib#date#IsDate(text) abort "{{{3
|
||||||
return a:text =~# '^'. g:tlib#date#date_rx .'$'
|
return a:text =~# '^'. g:tlib#date#date_rx .'$' &&
|
||||||
|
\ !empty(tlib#date#Parse(a:text, 0, 1))
|
||||||
endf
|
endf
|
||||||
|
|
||||||
|
|
||||||
function! tlib#date#Format(secs1970) abort "{{{3
|
function! tlib#date#Format(...) abort "{{{3
|
||||||
return strftime(g:tlib#date#date_format, a:secs1970)
|
let secs1970 = a:0 >= 1 ? a:1 : localtime()
|
||||||
|
return strftime(g:tlib#date#date_format, secs1970)
|
||||||
endf
|
endf
|
||||||
|
|
||||||
|
|
||||||
|
@ -37,11 +39,16 @@ function! tlib#date#DiffInDays(date, ...)
|
||||||
endf
|
endf
|
||||||
|
|
||||||
|
|
||||||
" :display: tlib#date#Parse(date, ?allow_zero=0) "{{{3
|
" :display: tlib#date#Parse(date, ?allow_zero=0, ?silent=0) "{{{3
|
||||||
function! tlib#date#Parse(date, ...) "{{{3
|
function! tlib#date#Parse(date, ...) "{{{3
|
||||||
let min = a:0 >= 1 && a:1 ? 0 : 1
|
let min = a:0 >= 1 && a:1 ? 0 : 1
|
||||||
" TLogVAR a:date, min
|
let silent = a:0 >= 2 ? a:2 : 0
|
||||||
|
Tlibtype 'tlib', a:date, min, silent
|
||||||
let m = matchlist(a:date, '^\(\d\{2}\|\d\{4}\)-\(\d\{1,2}\)-\(\d\{1,2}\)$')
|
let m = matchlist(a:date, '^\(\d\{2}\|\d\{4}\)-\(\d\{1,2}\)-\(\d\{1,2}\)$')
|
||||||
|
Tlibtype 'tlib', m
|
||||||
|
let year = ''
|
||||||
|
let month = ''
|
||||||
|
let days = ''
|
||||||
if !empty(m)
|
if !empty(m)
|
||||||
let year = m[1]
|
let year = m[1]
|
||||||
let month = m[2]
|
let month = m[2]
|
||||||
|
@ -61,13 +68,17 @@ function! tlib#date#Parse(date, ...) "{{{3
|
||||||
endif
|
endif
|
||||||
endif
|
endif
|
||||||
endif
|
endif
|
||||||
|
Tlibtype 'tlib', year, month, days
|
||||||
if empty(m) || year == '' || month == '' || days == '' ||
|
if empty(m) || year == '' || month == '' || days == '' ||
|
||||||
\ month < min || month > 12 || days < min || days > 31
|
\ month < min || month > 12 || days < min || days > 31
|
||||||
echoerr 'TLib: Invalid date: '. a:date
|
if !silent
|
||||||
|
echoerr 'TLib: Invalid date: '. a:date
|
||||||
|
endif
|
||||||
return []
|
return []
|
||||||
endif
|
endif
|
||||||
if strlen(year) == 2
|
if strlen(year) == 2
|
||||||
let year = g:tlib#date#ShortDatePrefix . year
|
let year = g:tlib#date#ShortDatePrefix . year
|
||||||
|
Tlibtype 'tlib', year
|
||||||
endif
|
endif
|
||||||
return [0 + year, 0 + month, 0 + days]
|
return [0 + year, 0 + month, 0 + days]
|
||||||
endf
|
endf
|
||||||
|
@ -137,22 +148,35 @@ function! tlib#date#Shift(date, shift) abort "{{{3
|
||||||
let ml = matchlist(a:date, g:tlib#date#date_rx)
|
let ml = matchlist(a:date, g:tlib#date#date_rx)
|
||||||
" TLogVAR a:date, a:shift, n, ml
|
" TLogVAR a:date, a:shift, n, ml
|
||||||
if a:shift =~ 'd$'
|
if a:shift =~ 'd$'
|
||||||
let secs = tlib#date#SecondsSince1970(a:date) + g:tlib#date#dayshift * n
|
let date = tlib#date#AddDays(a:date, n)
|
||||||
" TLogVAR secs
|
elseif a:shift =~ 'b$'
|
||||||
|
let n1 = n
|
||||||
|
let secs = tlib#date#SecondsSince1970(a:date)
|
||||||
|
while n1 > 0
|
||||||
|
let n1 -= 1
|
||||||
|
let secs += g:tlib#date#dayshift
|
||||||
|
let uday = strftime('%u', secs)
|
||||||
|
if uday == 6
|
||||||
|
let secs += g:tlib#date#dayshift * 2
|
||||||
|
elseif uday == 7
|
||||||
|
let secs += g:tlib#date#dayshift
|
||||||
|
endif
|
||||||
|
endwh
|
||||||
let date = tlib#date#Format(secs)
|
let date = tlib#date#Format(secs)
|
||||||
elseif a:shift =~ 'w$'
|
elseif a:shift =~ 'w$'
|
||||||
let secs = tlib#date#SecondsSince1970(a:date) + g:tlib#date#dayshift * n * 7
|
let date = tlib#date#AddDays(a:date, n * 7)
|
||||||
let date = tlib#date#Format(secs)
|
|
||||||
elseif a:shift =~ 'm$'
|
elseif a:shift =~ 'm$'
|
||||||
let d = str2nr(ml[3])
|
let d = str2nr(ml[3])
|
||||||
let ms = str2nr(ml[2]) + n
|
let ms = str2nr(ml[2]) + n
|
||||||
let m = (ms - 1) % 12 + 1
|
let m = (ms - 1) % 12 + 1
|
||||||
let yr = str2nr(ml[1]) + ms / 12
|
let yr = str2nr(ml[1]) + (ms - 1) / 12
|
||||||
let date = printf('%04d-%02d-%02d', yr, m, d)
|
let date = printf('%04d-%02d-%02d', yr, m, d)
|
||||||
" TLogVAR d, ms, m, yr, date
|
" TLogVAR d, ms, m, yr, date
|
||||||
elseif a:shift =~ 'y$'
|
elseif a:shift =~ 'y$'
|
||||||
let yr = str2nr(ml[1]) + n
|
let yr = str2nr(ml[1]) + n
|
||||||
let date = substitute(a:date, '^\d\{4}', yr, '')
|
let date = substitute(a:date, '^\d\{4}', yr, '')
|
||||||
|
else
|
||||||
|
throw 'tlib#date#Shift: Unsupported arguments: '. string(a:shift)
|
||||||
endif
|
endif
|
||||||
" if !empty(ml[4]) && date !~ '\s'. ml[4] .'$'
|
" if !empty(ml[4]) && date !~ '\s'. ml[4] .'$'
|
||||||
" let date .= ' '. ml[4]
|
" let date .= ' '. ml[4]
|
||||||
|
@ -161,3 +185,11 @@ function! tlib#date#Shift(date, shift) abort "{{{3
|
||||||
return date
|
return date
|
||||||
endf
|
endf
|
||||||
|
|
||||||
|
|
||||||
|
function! tlib#date#AddDays(date, n) abort "{{{3
|
||||||
|
let secs = tlib#date#SecondsSince1970(a:date) + g:tlib#date#dayshift * a:n
|
||||||
|
" TLogVAR secs
|
||||||
|
let date = tlib#date#Format(secs)
|
||||||
|
return date
|
||||||
|
endf
|
||||||
|
|
||||||
|
|
|
@ -1,14 +1,44 @@
|
||||||
" @Author: Tom Link (mailto:micathom AT gmail com?subject=[vim])
|
" @Author: Tom Link (mailto:micathom AT gmail com?subject=[vim])
|
||||||
" @Website: https://github.com/tomtom
|
" @Website: https://github.com/tomtom
|
||||||
" @License: GPL (see http://www.gnu.org/licenses/gpl.txt)
|
" @License: GPL (see http://www.gnu.org/licenses/gpl.txt)
|
||||||
" @Last Change: 2015-10-14
|
" @Last Change: 2016-04-06
|
||||||
" @Revision: 2
|
" @Revision: 22
|
||||||
|
|
||||||
|
|
||||||
function! tlib#dictionary#Rev(dict) abort "{{{3
|
" :display: tlib#dictionary#Rev(dict, ?opts = {}) abort "{{{3
|
||||||
|
function! tlib#dictionary#Rev(dict, ...) abort "{{{3
|
||||||
|
let opts = a:0 >= 1 ? a:1 : {}
|
||||||
|
Tlibtype a:dict, 'dict', opts, 'dict'
|
||||||
let rev = {}
|
let rev = {}
|
||||||
|
let use_string = get(opts, 'use_string', 0)
|
||||||
|
let use_eval = get(opts, 'use_eval', 0)
|
||||||
|
let values_as_list = get(opts, 'values_as_list', 0)
|
||||||
for [m, f] in items(a:dict)
|
for [m, f] in items(a:dict)
|
||||||
let rev[f] = m
|
if use_string
|
||||||
|
let k = string(f)
|
||||||
|
else
|
||||||
|
let k = type(f) == 1 ? f : string(f)
|
||||||
|
if k ==# ''
|
||||||
|
let k = get(opts, 'empty', '')
|
||||||
|
if empty(k)
|
||||||
|
continue
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
if use_eval
|
||||||
|
let v = eval(m)
|
||||||
|
else
|
||||||
|
let v = m
|
||||||
|
endif
|
||||||
|
if values_as_list
|
||||||
|
if has_key(rev, k)
|
||||||
|
call add(rev[k], v)
|
||||||
|
else
|
||||||
|
let rev[k] = [v]
|
||||||
|
endif
|
||||||
|
else
|
||||||
|
let rev[k] = v
|
||||||
|
endif
|
||||||
endfor
|
endfor
|
||||||
return rev
|
return rev
|
||||||
endf
|
endf
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
" @Author: Tom Link (micathom AT gmail com?subject=[vim])
|
" @Author: Tom Link (micathom AT gmail com?subject=[vim])
|
||||||
" @Website: http://www.vim.org/account/profile.php?user_id=4037
|
" @Website: http://www.vim.org/account/profile.php?user_id=4037
|
||||||
" @License: GPL (see http://www.gnu.org/licenses/gpl.txt)
|
" @License: GPL (see http://www.gnu.org/licenses/gpl.txt)
|
||||||
" @Revision: 40
|
" @Revision: 43
|
||||||
|
|
||||||
" TLet g:tlib#dir#sep = '/'
|
" TLet g:tlib#dir#sep = '/'
|
||||||
TLet g:tlib#dir#sep = exists('+shellslash') && !&shellslash ? '\' : '/'
|
TLet g:tlib#dir#sep = exists('+shellslash') && !&shellslash ? '\' : '/'
|
||||||
|
@ -65,12 +65,12 @@ endf
|
||||||
|
|
||||||
" :def: function! tlib#dir#CD(dir, ?locally=0) => CWD
|
" :def: function! tlib#dir#CD(dir, ?locally=0) => CWD
|
||||||
function! tlib#dir#CD(dir, ...) "{{{3
|
function! tlib#dir#CD(dir, ...) "{{{3
|
||||||
TVarArg ['locally', 0]
|
TVarArg ['locally', haslocaldir()]
|
||||||
let cmd = locally ? 'lcd! ' : 'cd! '
|
let cmd = locally ? 'lcd! ' : 'cd! '
|
||||||
" let cwd = getcwd()
|
" let cwd = getcwd()
|
||||||
let cmd .= tlib#arg#Ex(a:dir)
|
let cmd .= tlib#arg#Ex(a:dir)
|
||||||
" TLogVAR a:dir, locally, cmd
|
" TLogVAR a:dir, locally, cmd
|
||||||
exec cmd
|
exec 'silent' cmd
|
||||||
" return cwd
|
" return cwd
|
||||||
return getcwd()
|
return getcwd()
|
||||||
endf
|
endf
|
||||||
|
@ -78,7 +78,7 @@ endf
|
||||||
|
|
||||||
" :def: function! tlib#dir#Push(dir, ?locally=0) => CWD
|
" :def: function! tlib#dir#Push(dir, ?locally=0) => CWD
|
||||||
function! tlib#dir#Push(dir, ...) "{{{3
|
function! tlib#dir#Push(dir, ...) "{{{3
|
||||||
TVarArg ['locally', 0]
|
TVarArg ['locally', haslocaldir()]
|
||||||
call add(s:dir_stack, [getcwd(), locally])
|
call add(s:dir_stack, [getcwd(), locally])
|
||||||
return tlib#dir#CD(a:dir, locally)
|
return tlib#dir#CD(a:dir, locally)
|
||||||
endf
|
endf
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
" @Author: Tom Link (micathom AT gmail com?subject=[vim])
|
" @Author: Tom Link (micathom AT gmail com?subject=[vim])
|
||||||
" @Website: http://www.vim.org/account/profile.php?user_id=4037
|
" @Website: http://www.vim.org/account/profile.php?user_id=4037
|
||||||
" @License: GPL (see http://www.gnu.org/licenses/gpl.txt)
|
" @License: GPL (see http://www.gnu.org/licenses/gpl.txt)
|
||||||
" @Revision: 168
|
" @Revision: 225
|
||||||
|
|
||||||
|
|
||||||
if !exists('g:tlib#file#drop')
|
if !exists('g:tlib#file#drop')
|
||||||
|
@ -24,6 +24,12 @@ if !exists('g:tlib#file#absolute_filename_rx')
|
||||||
let g:tlib#file#absolute_filename_rx = '^\~\?[\/]' "{{{2
|
let g:tlib#file#absolute_filename_rx = '^\~\?[\/]' "{{{2
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
|
||||||
|
if !exists('g:tlib#file#reject_rx')
|
||||||
|
let g:tlib#file#reject_rx = '\%(^\|[\/]\)\%(tags\|Thumbs\.db\)$' "{{{2
|
||||||
|
endif
|
||||||
|
|
||||||
|
|
||||||
""" File related {{{1
|
""" File related {{{1
|
||||||
" For the following functions please see ../../test/tlib.vim for examples.
|
" For the following functions please see ../../test/tlib.vim for examples.
|
||||||
|
|
||||||
|
@ -31,9 +37,9 @@ endif
|
||||||
" EXAMPLES: >
|
" EXAMPLES: >
|
||||||
" tlib#file#Split('foo/bar/filename.txt')
|
" tlib#file#Split('foo/bar/filename.txt')
|
||||||
" => ['foo', 'bar', 'filename.txt']
|
" => ['foo', 'bar', 'filename.txt']
|
||||||
function! tlib#file#Split(filename) "{{{3
|
function! tlib#file#Split(filename) abort "{{{3
|
||||||
let prefix = matchstr(a:filename, '^\(\w\+:\)\?/\+')
|
let prefix = matchstr(a:filename, '^\(\w\+:\)\?/\+')
|
||||||
" TLogVAR prefix
|
Tlibtrace 'tlib', prefix
|
||||||
if !empty(prefix)
|
if !empty(prefix)
|
||||||
let filename = a:filename[len(prefix) : -1]
|
let filename = a:filename[len(prefix) : -1]
|
||||||
else
|
else
|
||||||
|
@ -52,9 +58,9 @@ endf
|
||||||
" EXAMPLES: >
|
" EXAMPLES: >
|
||||||
" tlib#file#Join(['foo', 'bar', 'filename.txt'])
|
" tlib#file#Join(['foo', 'bar', 'filename.txt'])
|
||||||
" => 'foo/bar/filename.txt'
|
" => 'foo/bar/filename.txt'
|
||||||
function! tlib#file#Join(filename_parts, ...) "{{{3
|
function! tlib#file#Join(filename_parts, ...) abort "{{{3
|
||||||
TVarArg ['strip_slashes', 1], 'maybe_absolute'
|
TVarArg ['strip_slashes', 1], 'maybe_absolute'
|
||||||
" TLogVAR a:filename_parts, strip_slashes
|
Tlibtrace 'tlib', a:filename_parts, strip_slashes
|
||||||
if maybe_absolute
|
if maybe_absolute
|
||||||
let filename_parts = []
|
let filename_parts = []
|
||||||
for part in a:filename_parts
|
for part in a:filename_parts
|
||||||
|
@ -70,7 +76,7 @@ function! tlib#file#Join(filename_parts, ...) "{{{3
|
||||||
" let rx = tlib#rx#Escape(g:tlib#dir#sep) .'$'
|
" let rx = tlib#rx#Escape(g:tlib#dir#sep) .'$'
|
||||||
let rx = '[/\\]\+$'
|
let rx = '[/\\]\+$'
|
||||||
let parts = map(copy(filename_parts), 'substitute(v:val, rx, "", "")')
|
let parts = map(copy(filename_parts), 'substitute(v:val, rx, "", "")')
|
||||||
" TLogVAR parts
|
Tlibtrace 'tlib', parts
|
||||||
return join(parts, g:tlib#dir#sep)
|
return join(parts, g:tlib#dir#sep)
|
||||||
else
|
else
|
||||||
return join(filename_parts, g:tlib#dir#sep)
|
return join(filename_parts, g:tlib#dir#sep)
|
||||||
|
@ -81,18 +87,18 @@ endf
|
||||||
" EXAMPLES: >
|
" EXAMPLES: >
|
||||||
" tlib#file#Relative('foo/bar/filename.txt', 'foo')
|
" tlib#file#Relative('foo/bar/filename.txt', 'foo')
|
||||||
" => 'bar/filename.txt'
|
" => 'bar/filename.txt'
|
||||||
function! tlib#file#Relative(filename, basedir) "{{{3
|
function! tlib#file#Relative(filename, basedir) abort "{{{3
|
||||||
" TLogVAR a:filename, a:basedir
|
Tlibtrace 'tlib', a:filename, a:basedir
|
||||||
" TLogDBG getcwd()
|
" TLogDBG getcwd()
|
||||||
" TLogDBG expand('%:p')
|
" TLogDBG expand('%:p')
|
||||||
let b0 = tlib#file#Absolute(a:basedir)
|
let b0 = tlib#file#Absolute(a:basedir)
|
||||||
let b = tlib#file#Split(b0)
|
let b = tlib#file#Split(b0)
|
||||||
" TLogVAR b
|
Tlibtrace 'tlib', b
|
||||||
let f0 = tlib#file#Absolute(a:filename)
|
let f0 = tlib#file#Absolute(a:filename)
|
||||||
let fn = fnamemodify(f0, ':t')
|
let fn = fnamemodify(f0, ':t')
|
||||||
let fd = fnamemodify(f0, ':h')
|
let fd = fnamemodify(f0, ':h')
|
||||||
let f = tlib#file#Split(fd)
|
let f = tlib#file#Split(fd)
|
||||||
" TLogVAR f0, fn, fd, f
|
Tlibtrace 'tlib', f0, fn, fd, f
|
||||||
if f[0] != b[0]
|
if f[0] != b[0]
|
||||||
let rv = f0
|
let rv = f0
|
||||||
else
|
else
|
||||||
|
@ -103,18 +109,23 @@ function! tlib#file#Relative(filename, basedir) "{{{3
|
||||||
call remove(f, 0)
|
call remove(f, 0)
|
||||||
call remove(b, 0)
|
call remove(b, 0)
|
||||||
endwh
|
endwh
|
||||||
" TLogVAR f, b
|
Tlibtrace 'tlib', f, b
|
||||||
let rv = tlib#file#Join(repeat(['..'], len(b)) + f + [fn])
|
let rv = tlib#file#Join(repeat(['..'], len(b)) + f + [fn])
|
||||||
endif
|
endif
|
||||||
" TLogVAR rv
|
Tlibtrace 'tlib', rv
|
||||||
return rv
|
return rv
|
||||||
endf
|
endf
|
||||||
|
|
||||||
|
|
||||||
function! tlib#file#Absolute(filename, ...) "{{{3
|
function! tlib#file#IsAbsolute(filename) abort "{{{3
|
||||||
|
return a:filename =~? '^\%(/\|\w\+:/\)'
|
||||||
|
endf
|
||||||
|
|
||||||
|
|
||||||
|
function! tlib#file#Absolute(filename, ...) abort "{{{3
|
||||||
if filereadable(a:filename)
|
if filereadable(a:filename)
|
||||||
let filename = fnamemodify(a:filename, ':p')
|
let filename = fnamemodify(a:filename, ':p')
|
||||||
elseif a:filename =~ '^\(/\|[^\/]\+:\)'
|
elseif a:filename =~# '^\(/\|[^\/]\+:\)'
|
||||||
let filename = a:filename
|
let filename = a:filename
|
||||||
else
|
else
|
||||||
let cwd = a:0 >= 1 ? a:1 : getcwd()
|
let cwd = a:0 >= 1 ? a:1 : getcwd()
|
||||||
|
@ -126,17 +137,19 @@ function! tlib#file#Absolute(filename, ...) "{{{3
|
||||||
endf
|
endf
|
||||||
|
|
||||||
|
|
||||||
function! tlib#file#Canonic(filename, ...) "{{{3
|
function! tlib#file#Canonic(filename, ...) abort "{{{3
|
||||||
TVarArg ['mode', '']
|
TVarArg ['mode', '']
|
||||||
if a:filename =~ '^\\\\'
|
if empty(mode)
|
||||||
let mode = 'windows'
|
if a:filename =~# '^\\\\'
|
||||||
elseif a:filename =~ '^\(file\|ftp\|http\)s\?:'
|
let mode = 'windows'
|
||||||
let mode = 'url'
|
elseif a:filename =~# '^\(file\|ftp\|http\)s\?:'
|
||||||
elseif (empty(mode) && g:tlib#sys#windows)
|
let mode = 'url'
|
||||||
let mode = 'windows'
|
elseif (empty(mode) && g:tlib#sys#windows)
|
||||||
|
let mode = 'windows'
|
||||||
|
endif
|
||||||
endif
|
endif
|
||||||
let filename = a:filename
|
let filename = a:filename
|
||||||
if mode == 'windows'
|
if mode ==# 'windows'
|
||||||
let filename = substitute(filename, '/', '\\', 'g')
|
let filename = substitute(filename, '/', '\\', 'g')
|
||||||
else
|
else
|
||||||
let filename = substitute(filename, '\\', '/', 'g')
|
let filename = substitute(filename, '\\', '/', 'g')
|
||||||
|
@ -145,7 +158,7 @@ function! tlib#file#Canonic(filename, ...) "{{{3
|
||||||
endf
|
endf
|
||||||
|
|
||||||
|
|
||||||
function! s:SetScrollBind(world) "{{{3
|
function! s:SetScrollBind(world) abort "{{{3
|
||||||
let sb = get(a:world, 'scrollbind', &scrollbind)
|
let sb = get(a:world, 'scrollbind', &scrollbind)
|
||||||
if sb != &scrollbind
|
if sb != &scrollbind
|
||||||
let &scrollbind = sb
|
let &scrollbind = sb
|
||||||
|
@ -153,60 +166,81 @@ function! s:SetScrollBind(world) "{{{3
|
||||||
endf
|
endf
|
||||||
|
|
||||||
|
|
||||||
" :def: function! tlib#file#With(fcmd, bcmd, files, ?world={})
|
" :def: function! tlib#file#With(fcmd, bcmd, files, ?world={}) abort
|
||||||
function! tlib#file#With(fcmd, bcmd, files, ...) "{{{3
|
function! tlib#file#With(fcmd, bcmd, files, ...) abort "{{{3
|
||||||
" TLogVAR a:fcmd, a:bcmd, a:files
|
Tlibtrace 'tlib', a:fcmd, a:bcmd, a:files
|
||||||
|
let world = a:0 >= 1 ? a:1 : {}
|
||||||
|
let unset_switchbuf = a:0 >= 2 ? a:2 : 0
|
||||||
exec tlib#arg#Let([['world', {}]])
|
exec tlib#arg#Let([['world', {}]])
|
||||||
call tlib#autocmdgroup#Init()
|
call tlib#autocmdgroup#Init()
|
||||||
augroup TLibFileRead
|
augroup TLibFileRead
|
||||||
autocmd!
|
autocmd!
|
||||||
augroup END
|
augroup END
|
||||||
for f in a:files
|
if unset_switchbuf
|
||||||
let bn = bufnr('^'.f.'$')
|
let switchbuf = &switchbuf
|
||||||
" TLogVAR f, bn
|
set switchbuf&
|
||||||
let bufloaded = bufloaded(bn)
|
endif
|
||||||
let ok = 0
|
try
|
||||||
let s:bufread = ""
|
for f in a:files
|
||||||
if bn != -1 && buflisted(bn)
|
try
|
||||||
if !empty(a:bcmd)
|
let bn = bufnr('^'.f.'$')
|
||||||
" TLogDBG a:bcmd .' '. bn
|
Tlibtrace 'tlib', f, bn
|
||||||
exec a:bcmd .' '. bn
|
let bufloaded = bufloaded(bn)
|
||||||
let ok = 1
|
let ok = 0
|
||||||
call s:SetScrollBind(world)
|
let s:bufread = ""
|
||||||
endif
|
if bn != -1 && buflisted(bn)
|
||||||
else
|
if !empty(a:bcmd)
|
||||||
if filereadable(f)
|
let bcmd = a:bcmd .' '. bn
|
||||||
if !empty(a:fcmd)
|
Tlibtrace 'tlib', bcmd
|
||||||
" TLogDBG a:fcmd .' '. tlib#arg#Ex(f)
|
exec bcmd
|
||||||
exec 'autocmd TLibFileRead BufRead' escape(f, '\ ') 'let s:bufread=expand("<afile>:p")'
|
let ok = 1
|
||||||
try
|
call s:SetScrollBind(world)
|
||||||
exec a:fcmd .' '. tlib#arg#Ex(f)
|
endif
|
||||||
finally
|
else
|
||||||
exec 'autocmd! TLibFileRead BufRead'
|
if filereadable(f)
|
||||||
endtry
|
if !empty(a:fcmd)
|
||||||
let ok = 1
|
" TLogDBG a:fcmd .' '. tlib#arg#Ex(f)
|
||||||
call s:SetScrollBind(world)
|
exec 'autocmd TLibFileRead BufRead' escape(f, '\ ') 'let s:bufread=expand("<afile>:p")'
|
||||||
|
try
|
||||||
|
let fcmd = a:fcmd .' '. tlib#arg#Ex(f)
|
||||||
|
Tlibtrace 'tlib', fcmd
|
||||||
|
exec fcmd
|
||||||
|
finally
|
||||||
|
exec 'autocmd! TLibFileRead BufRead'
|
||||||
|
endtry
|
||||||
|
let ok = 1
|
||||||
|
call s:SetScrollBind(world)
|
||||||
|
endif
|
||||||
|
else
|
||||||
|
echohl error
|
||||||
|
echom 'File not readable: '. f
|
||||||
|
echohl NONE
|
||||||
|
endif
|
||||||
endif
|
endif
|
||||||
else
|
Tlibtrace 'tlib', ok, bufloaded, &filetype
|
||||||
echohl error
|
if empty(s:bufread) && ok && !bufloaded && empty(&filetype)
|
||||||
echom 'File not readable: '. f
|
doautocmd BufRead
|
||||||
|
endif
|
||||||
|
catch /^Vim\%((\a\+)\)\=:E325/
|
||||||
|
echohl ErrorMsg
|
||||||
|
echom v:exception
|
||||||
echohl NONE
|
echohl NONE
|
||||||
endif
|
endtry
|
||||||
|
endfor
|
||||||
|
finally
|
||||||
|
augroup! TLibFileRead
|
||||||
|
if unset_switchbuf
|
||||||
|
let &switchbuf = switchbuf
|
||||||
endif
|
endif
|
||||||
" TLogVAR ok, bufloaded, &filetype
|
unlet! s:bufread
|
||||||
if empty(s:bufread) && ok && !bufloaded && empty(&filetype)
|
endtry
|
||||||
doautocmd BufRead
|
|
||||||
endif
|
|
||||||
endfor
|
|
||||||
augroup! TLibFileRead
|
|
||||||
unlet! s:bufread
|
|
||||||
" TLogDBG "done"
|
" TLogDBG "done"
|
||||||
endf
|
endf
|
||||||
|
|
||||||
|
|
||||||
" Return 0 if the file isn't readable/doesn't exist.
|
" Return 0 if the file isn't readable/doesn't exist.
|
||||||
" Otherwise return 1.
|
" Otherwise return 1.
|
||||||
function! tlib#file#Edit(fileid) "{{{3
|
function! tlib#file#Edit(fileid) abort "{{{3
|
||||||
if type(a:fileid) == 0
|
if type(a:fileid) == 0
|
||||||
let bn = a:fileid
|
let bn = a:fileid
|
||||||
let filename = fnamemodify(bufname(bn), ':p')
|
let filename = fnamemodify(bufname(bn), ':p')
|
||||||
|
@ -217,20 +251,26 @@ function! tlib#file#Edit(fileid) "{{{3
|
||||||
if filename == expand('%:p')
|
if filename == expand('%:p')
|
||||||
return 1
|
return 1
|
||||||
else
|
else
|
||||||
" TLogVAR a:fileid, bn, filename, g:tlib#file#drop, filereadable(filename)
|
Tlibtrace 'tlib', a:fileid, bn, filename, g:tlib#file#drop, filereadable(filename), bufnr('%')
|
||||||
if bn != -1 && buflisted(bn)
|
if bn != -1 && buflisted(bn)
|
||||||
if g:tlib#file#drop
|
if g:tlib#file#drop
|
||||||
" echom "DBG" get(g:tlib#file#edit_cmds, 'drop', 'drop') fnameescape(filename)
|
" echom "DBG" get(g:tlib#file#edit_cmds, 'drop', 'drop') fnameescape(filename)
|
||||||
exec get(g:tlib#file#edit_cmds, 'drop', 'drop') fnameescape(filename)
|
exec get(g:tlib#file#edit_cmds, 'drop', 'drop') fnameescape(filename)
|
||||||
|
" echom "DBG" bufnr('%')
|
||||||
else
|
else
|
||||||
" echom "DBG" get(g:tlib#file#edit_cmds, 'buffer', 'buffer') bn
|
" echom "DBG" get(g:tlib#file#edit_cmds, 'buffer', 'buffer') bn
|
||||||
exec get(g:tlib#file#edit_cmds, 'buffer', 'buffer') bn
|
exec get(g:tlib#file#edit_cmds, 'buffer', 'buffer') bn
|
||||||
|
" echom "DBG" bufnr('%')
|
||||||
endif
|
endif
|
||||||
return 1
|
return 1
|
||||||
elseif filereadable(filename)
|
endif
|
||||||
|
if !filereadable(filename) && exists('#TLibPrepareFile#User')
|
||||||
|
exec 'doautocmd TLibPrepareFile User' filename
|
||||||
|
endif
|
||||||
|
if filereadable(filename)
|
||||||
try
|
try
|
||||||
" let file = tlib#arg#Ex(filename)
|
" let file = tlib#arg#Ex(filename)
|
||||||
" " TLogVAR file
|
" Tlibtrace 'tlib', file
|
||||||
" echom "DBG" get(g:tlib#file#edit_cmds, 'edit', 'edit') fnameescape(filename)
|
" echom "DBG" get(g:tlib#file#edit_cmds, 'edit', 'edit') fnameescape(filename)
|
||||||
exec get(g:tlib#file#edit_cmds, 'edit', 'edit') fnameescape(filename)
|
exec get(g:tlib#file#edit_cmds, 'edit', 'edit') fnameescape(filename)
|
||||||
catch /E325/
|
catch /E325/
|
||||||
|
@ -252,27 +292,65 @@ function! tlib#file#Edit(fileid) "{{{3
|
||||||
endf
|
endf
|
||||||
|
|
||||||
|
|
||||||
|
function! tlib#file#FilterFiles(files, options) abort "{{{3
|
||||||
|
Tlibtrace 'tlib', a:files, a:options, g:tlib#file#reject_rx
|
||||||
|
if !get(a:options, 'all', 0)
|
||||||
|
call filter(a:files, 'v:val !~# g:tlib#file#reject_rx')
|
||||||
|
endif
|
||||||
|
Tlibtrace 'tlib', a:files
|
||||||
|
let type = get(a:options, 'type', 'fd')
|
||||||
|
Tlibtrace 'tlib', type
|
||||||
|
if type !~# 'd' || type !~# 'f'
|
||||||
|
call filter(a:files, 'isdirectory(v:val) ? type =~# "d" : type =~# "f"')
|
||||||
|
endif
|
||||||
|
Tlibtrace 'tlib', a:files
|
||||||
|
return a:files
|
||||||
|
endf
|
||||||
|
|
||||||
|
|
||||||
if v:version > 704 || (v:version == 704 && has('patch279'))
|
if v:version > 704 || (v:version == 704 && has('patch279'))
|
||||||
|
|
||||||
function! tlib#file#Glob(pattern) abort "{{{3
|
function! tlib#file#Glob(pattern, ...) abort "{{{3
|
||||||
return glob(a:pattern, 0, 1)
|
let all = a:0 >= 1 ? a:1 : 0
|
||||||
|
let nosuf = a:0 >= 2 ? a:2 : 0
|
||||||
|
return tlib#file#FilterFiles(glob(a:pattern, nosuf, 1), {'all': all})
|
||||||
endf
|
endf
|
||||||
|
|
||||||
function! tlib#file#Globpath(path, pattern) abort "{{{3
|
function! tlib#file#Globpath(path, pattern, ...) abort "{{{3
|
||||||
return globpath(a:path, a:pattern, 0, 1)
|
let all = a:0 >= 1 ? a:1 : 0
|
||||||
|
let nosuf = a:0 >= 2 ? a:2 : 0
|
||||||
|
return tlib#file#FilterFiles(globpath(a:path, a:pattern, nosuf, 1), {'all': all})
|
||||||
endf
|
endf
|
||||||
|
|
||||||
else
|
else
|
||||||
|
|
||||||
" :nodoc:
|
" :nodoc:
|
||||||
function! tlib#file#Glob(pattern) abort "{{{3
|
function! tlib#file#Glob(pattern, ...) abort "{{{3
|
||||||
return split(glob(a:pattern), '\n')
|
let all = a:0 >= 1 ? a:1 : 0
|
||||||
|
let nosuf = a:0 >= 2 ? a:2 : 0
|
||||||
|
return tlib#file#FilterFiles(split(glob(a:pattern, nosuf), '\n'), {'all': all})
|
||||||
endf
|
endf
|
||||||
|
|
||||||
" :nodoc:
|
" :nodoc:
|
||||||
function! tlib#file#Globpath(path, pattern) abort "{{{3
|
function! tlib#file#Globpath(path, pattern, ...) abort "{{{3
|
||||||
return split(globpath(a:path, a:pattern), '\n')
|
let all = a:0 >= 1 ? a:1 : 0
|
||||||
|
let nosuf = a:0 >= 2 ? a:2 : 0
|
||||||
|
return tlib#file#FilterFiles(split(globpath(a:path, a:pattern), '\n'), {'all': all})
|
||||||
endf
|
endf
|
||||||
|
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
|
||||||
|
let s:filereadable = {}
|
||||||
|
|
||||||
|
augroup TLib
|
||||||
|
autocmd BufWritePost,FileWritePost,FocusLost * let s:filereadable = {}
|
||||||
|
augroup end
|
||||||
|
|
||||||
|
function! tlib#file#Filereadable(filename) abort "{{{3
|
||||||
|
if !has_key(s:filereadable, a:filename)
|
||||||
|
let s:filereadable[a:filename] = filereadable(a:filename)
|
||||||
|
endif
|
||||||
|
return s:filereadable[a:filename]
|
||||||
|
endf
|
||||||
|
|
||||||
|
|
|
@ -1,8 +1,7 @@
|
||||||
" @Author: Tom Link (micathom AT gmail com?subject=[vim])
|
" @Author: Tom Link (micathom AT gmail com?subject=[vim])
|
||||||
" @Website: http://www.vim.org/account/profile.php?user_id=4037
|
" @Website: http://www.vim.org/account/profile.php?user_id=4037
|
||||||
" @License: GPL (see http://www.gnu.org/licenses/gpl.txt)
|
" @License: GPL (see http://www.gnu.org/licenses/gpl.txt)
|
||||||
" @Revision: 1366
|
" @Revision: 1430
|
||||||
|
|
||||||
|
|
||||||
" :filedoc:
|
" :filedoc:
|
||||||
" Input-related, select from a list etc.
|
" Input-related, select from a list etc.
|
||||||
|
@ -312,7 +311,7 @@ function! tlib#input#List(type, ...) "{{{3
|
||||||
if !empty(filter)
|
if !empty(filter)
|
||||||
" let world.initial_filter = [[''], [filter]]
|
" let world.initial_filter = [[''], [filter]]
|
||||||
" let world.initial_filter = [[filter]]
|
" let world.initial_filter = [[filter]]
|
||||||
" TLogVAR world.initial_filter
|
Tlibtrace 'tlib', world.initial_filter, filter
|
||||||
call world.SetInitialFilter(filter)
|
call world.SetInitialFilter(filter)
|
||||||
endif
|
endif
|
||||||
endif
|
endif
|
||||||
|
@ -333,10 +332,11 @@ endf
|
||||||
" (an instance of tlib#World as returned by |tlib#World#New|).
|
" (an instance of tlib#World as returned by |tlib#World#New|).
|
||||||
function! tlib#input#ListW(world, ...) "{{{3
|
function! tlib#input#ListW(world, ...) "{{{3
|
||||||
TVarArg 'cmd'
|
TVarArg 'cmd'
|
||||||
" let time0 = str2float(reltimestr(reltime())) " DBG
|
let time0 = str2float(reltimestr(reltime()))
|
||||||
" TLogVAR time0
|
Tlibtrace 'tlib', time0
|
||||||
let world = a:world
|
let world = a:world
|
||||||
if world.pick_last_item >= 1 && stridx(world.type, 'e') == -1 && len(world.base) <= 1
|
if world.pick_last_item >= 1 && stridx(world.type, 'e') == -1 && len(world.base) <= 1
|
||||||
|
call world.CloseScratch(1)
|
||||||
let rv = get(world.base, 0, world.rv)
|
let rv = get(world.base, 0, world.rv)
|
||||||
if stridx(world.type, 'm') != -1
|
if stridx(world.type, 'm') != -1
|
||||||
return [rv]
|
return [rv]
|
||||||
|
@ -345,7 +345,7 @@ function! tlib#input#ListW(world, ...) "{{{3
|
||||||
endif
|
endif
|
||||||
endif
|
endif
|
||||||
call s:Init(world, cmd)
|
call s:Init(world, cmd)
|
||||||
" TLogVAR world.state, world.sticky, world.initial_index
|
Tlibtrace 'tlib', world.state, world.sticky, world.initial_index
|
||||||
" let statusline = &l:statusline
|
" let statusline = &l:statusline
|
||||||
" let laststatus = &laststatus
|
" let laststatus = &laststatus
|
||||||
let showmode = &showmode
|
let showmode = &showmode
|
||||||
|
@ -361,38 +361,24 @@ function! tlib#input#ListW(world, ...) "{{{3
|
||||||
try
|
try
|
||||||
while !empty(world.state) && world.state !~ '^exit' && (world.show_empty || !empty(world.base))
|
while !empty(world.state) && world.state !~ '^exit' && (world.show_empty || !empty(world.base))
|
||||||
let post_keys = ''
|
let post_keys = ''
|
||||||
" TLogDBG 'while'
|
Tlibtrace 'tlib', 'while', world.state
|
||||||
" TLogVAR world.state
|
let time01 = str2float(reltimestr(reltime()))
|
||||||
" let time01 = str2float(reltimestr(reltime())) " DBG
|
Tlibtrace 'tlib', time01, time01 - time0
|
||||||
" TLogVAR time01, time01 - time0
|
|
||||||
try
|
try
|
||||||
let world = s:RunStateHandlers(world)
|
let world = s:RunStateHandlers(world)
|
||||||
|
|
||||||
" if exists('b:tlib_world_event')
|
let time02 = str2float(reltimestr(reltime()))
|
||||||
" let event = b:tlib_world_event
|
Tlibtrace 'tlib', time02, time02 - time0
|
||||||
" unlet! b:tlib_world_event
|
|
||||||
" if event == 'WinLeave'
|
|
||||||
" " let world.resume_state = world.state
|
|
||||||
" let world = tlib#agent#Suspend(world, world.rv)
|
|
||||||
" break
|
|
||||||
" endif
|
|
||||||
" endif
|
|
||||||
|
|
||||||
" let time02 = str2float(reltimestr(reltime())) " DBG
|
|
||||||
" TLogVAR time02, time02 - time0
|
|
||||||
if world.state =~ '\<reset\>'
|
if world.state =~ '\<reset\>'
|
||||||
" TLogDBG 'reset'
|
|
||||||
" call world.Reset(world.state =~ '\<initial\>')
|
|
||||||
call world.Reset()
|
call world.Reset()
|
||||||
continue
|
continue
|
||||||
endif
|
endif
|
||||||
|
|
||||||
call s:SetOffset(world)
|
call s:SetOffset(world)
|
||||||
|
|
||||||
" let time02 = str2float(reltimestr(reltime())) " DBG
|
let time02 = str2float(reltimestr(reltime()))
|
||||||
" TLogVAR time02, time02 - time0
|
Tlibtrace 'tlib', time02, time02 - time0
|
||||||
" TLogDBG 1
|
Tlibtrace 'tlib', world.state
|
||||||
" TLogVAR world.state
|
|
||||||
if world.state == 'scroll'
|
if world.state == 'scroll'
|
||||||
let world.prefidx = world.offset
|
let world.prefidx = world.offset
|
||||||
let world.state = 'redisplay'
|
let world.state = 'redisplay'
|
||||||
|
@ -402,33 +388,26 @@ function! tlib#input#ListW(world, ...) "{{{3
|
||||||
let world.sticky = 1
|
let world.sticky = 1
|
||||||
endif
|
endif
|
||||||
|
|
||||||
" TLogVAR world.filter
|
Tlibtrace 'tlib', world.filter
|
||||||
" TLogVAR world.sticky
|
Tlibtrace 'tlib', world.sticky
|
||||||
if world.state =~ '\<picked\>'
|
if world.state =~ '\<picked\>'
|
||||||
" TLogVAR world.rv
|
Tlibtrace 'tlib', world.rv
|
||||||
throw 'picked'
|
throw 'picked'
|
||||||
elseif world.state =~ '\<pick\>'
|
elseif world.state =~ '\<pick\>'
|
||||||
let world.rv = world.CurrentItem()
|
let world.rv = world.CurrentItem()
|
||||||
" TLogVAR world.rv
|
Tlibtrace 'tlib', world.rv
|
||||||
throw 'picked'
|
throw 'picked'
|
||||||
elseif world.state =~ 'display'
|
elseif world.state =~ 'display'
|
||||||
if world.state =~ '^display'
|
if world.state =~ '^display'
|
||||||
" let time03 = str2float(reltimestr(reltime())) " DBG
|
let time03 = str2float(reltimestr(reltime()))
|
||||||
" TLogVAR time03, time03 - time0
|
Tlibtrace 'tlib', time03, time03 - time0
|
||||||
if world.IsValidFilter()
|
if world.IsValidFilter()
|
||||||
|
let time1 = str2float(reltimestr(reltime()))
|
||||||
" let time1 = str2float(reltimestr(reltime())) " DBG
|
Tlibtrace 'tlib', time1, time1 - time0
|
||||||
" TLogVAR time1, time1 - time0
|
|
||||||
call world.BuildTableList()
|
call world.BuildTableList()
|
||||||
" let time2 = str2float(reltimestr(reltime())) " DBG
|
let time2 = str2float(reltimestr(reltime()))
|
||||||
" TLogVAR time2, time2 - time0
|
Tlibtrace 'tlib', time2, time2 - time0
|
||||||
" TLogDBG 2
|
|
||||||
" TLogDBG len(world.table)
|
|
||||||
" TLogVAR world.table
|
|
||||||
" let world.list = map(copy(world.table), 'world.GetBaseItem(v:val)')
|
|
||||||
" TLogDBG 3
|
|
||||||
let world.llen = len(world.list)
|
let world.llen = len(world.list)
|
||||||
" TLogVAR world.index_table
|
|
||||||
if empty(world.index_table)
|
if empty(world.index_table)
|
||||||
let dindex = range(1, world.llen)
|
let dindex = range(1, world.llen)
|
||||||
let world.index_width = len(world.llen)
|
let world.index_width = len(world.llen)
|
||||||
|
@ -436,12 +415,11 @@ function! tlib#input#ListW(world, ...) "{{{3
|
||||||
let dindex = world.index_table
|
let dindex = world.index_table
|
||||||
let world.index_width = len(max(dindex))
|
let world.index_width = len(max(dindex))
|
||||||
endif
|
endif
|
||||||
" let time3 = str2float(reltimestr(reltime())) " DBG
|
let time3 = str2float(reltimestr(reltime()))
|
||||||
" TLogVAR time3, time3 - time0
|
Tlibtrace 'tlib', time3, time3 - time0
|
||||||
if world.llen == 0 && !world.show_empty
|
if world.llen == 0 && !world.show_empty
|
||||||
call world.ReduceFilter()
|
call world.ReduceFilter()
|
||||||
let world.offset = 1
|
let world.offset = 1
|
||||||
" TLogDBG 'ReduceFilter'
|
|
||||||
continue
|
continue
|
||||||
else
|
else
|
||||||
if world.llen == 1
|
if world.llen == 1
|
||||||
|
@ -449,18 +427,15 @@ function! tlib#input#ListW(world, ...) "{{{3
|
||||||
if world.pick_last_item >= 2
|
if world.pick_last_item >= 2
|
||||||
" echom 'Pick last item: '. world.list[0]
|
" echom 'Pick last item: '. world.list[0]
|
||||||
let world.prefidx = '1'
|
let world.prefidx = '1'
|
||||||
" TLogDBG 'pick last item'
|
|
||||||
throw 'pick'
|
throw 'pick'
|
||||||
endif
|
endif
|
||||||
else
|
else
|
||||||
let world.last_item = ''
|
let world.last_item = ''
|
||||||
endif
|
endif
|
||||||
endif
|
endif
|
||||||
" let time4 = str2float(reltimestr(reltime())) " DBG
|
let time4 = str2float(reltimestr(reltime()))
|
||||||
" TLogVAR time4, time4 - time0
|
Tlibtrace 'tlib', time4, time4 - time0
|
||||||
" TLogDBG 4
|
Tlibtrace 'tlib', world.idx, world.llen, world.state
|
||||||
" TLogVAR world.idx, world.llen, world.state
|
|
||||||
" TLogDBG world.FilterIsEmpty()
|
|
||||||
if world.state == 'display'
|
if world.state == 'display'
|
||||||
if world.idx == '' && world.llen < g:tlib#input#sortprefs_threshold && !world.FilterIsEmpty()
|
if world.idx == '' && world.llen < g:tlib#input#sortprefs_threshold && !world.FilterIsEmpty()
|
||||||
call world.SetPrefIdx()
|
call world.SetPrefIdx()
|
||||||
|
@ -473,27 +448,22 @@ function! tlib#input#ListW(world, ...) "{{{3
|
||||||
let world.prefidx = 1
|
let world.prefidx = 1
|
||||||
endif
|
endif
|
||||||
endif
|
endif
|
||||||
" let time5 = str2float(reltimestr(reltime())) " DBG
|
let time5 = str2float(reltimestr(reltime()))
|
||||||
" TLogVAR time5, time5 - time0
|
Tlibtrace 'tlib', time5, time5 - time0
|
||||||
" TLogVAR world.initial_index, world.prefidx
|
Tlibtrace 'tlib', world.initial_index, world.prefidx
|
||||||
" TLogDBG 5
|
Tlibtrace 'tlib', len(world.list)
|
||||||
" TLogDBG len(world.list)
|
|
||||||
" TLogVAR world.list
|
|
||||||
let dlist = world.DisplayFormat(world.list)
|
let dlist = world.DisplayFormat(world.list)
|
||||||
" TLogVAR world.prefidx
|
Tlibtrace 'tlib', world.prefidx
|
||||||
" TLogDBG 6
|
let time6 = str2float(reltimestr(reltime()))
|
||||||
" let time6 = str2float(reltimestr(reltime())) " DBG
|
Tlibtrace 'tlib', time6, time6 - time0
|
||||||
" TLogVAR time6, time6 - time0
|
|
||||||
if world.offset_horizontal > 0
|
if world.offset_horizontal > 0
|
||||||
call map(dlist, 'v:val[world.offset_horizontal:-1]')
|
call map(dlist, 'tlib#string#Strcharpart(v:val, world.offset_horizontal)')
|
||||||
endif
|
endif
|
||||||
" let time7 = str2float(reltimestr(reltime())) " DBG
|
let time7 = str2float(reltimestr(reltime()))
|
||||||
" TLogVAR time7, time7 - time0
|
Tlibtrace 'tlib', time7, time7 - time0
|
||||||
" TLogVAR dindex
|
|
||||||
let dlist = map(range(0, world.llen - 1), 'printf("%0'. world.index_width .'d", dindex[v:val]) .": ". dlist[v:val]')
|
let dlist = map(range(0, world.llen - 1), 'printf("%0'. world.index_width .'d", dindex[v:val]) .": ". dlist[v:val]')
|
||||||
" TLogVAR dlist
|
let time8 = str2float(reltimestr(reltime()))
|
||||||
" let time8 = str2float(reltimestr(reltime())) " DBG
|
Tlibtrace 'tlib', time8, time8 - time0
|
||||||
" TLogVAR time8, time8 - time0
|
|
||||||
|
|
||||||
else
|
else
|
||||||
|
|
||||||
|
@ -505,30 +475,14 @@ function! tlib#input#ListW(world, ...) "{{{3
|
||||||
let world.prefidx = 1
|
let world.prefidx = 1
|
||||||
endif
|
endif
|
||||||
endif
|
endif
|
||||||
" TLogVAR world.idx, world.prefidx
|
Tlibtrace 'tlib', world.idx, world.prefidx
|
||||||
|
|
||||||
" TLogDBG 7
|
Tlibtrace 'tlib', world.prefidx, world.offset
|
||||||
" TLogVAR world.prefidx, world.offset
|
Tlibtrace 'tlib', world.initial_display, !tlib#char#IsAvailable()
|
||||||
" TLogDBG (world.prefidx > world.offset + winheight(0) - 1)
|
|
||||||
" if world.prefidx > world.offset + winheight(0) - 1
|
|
||||||
" let listtop = world.llen - winheight(0) + 1
|
|
||||||
" let listoff = world.prefidx - winheight(0) + 1
|
|
||||||
" let world.offset = min([listtop, listoff])
|
|
||||||
" TLogVAR world.prefidx
|
|
||||||
" TLogDBG len(list)
|
|
||||||
" TLogDBG winheight(0)
|
|
||||||
" TLogVAR listtop, listoff, world.offset
|
|
||||||
" elseif world.prefidx < world.offset
|
|
||||||
" let world.offset = world.prefidx
|
|
||||||
" endif
|
|
||||||
" TLogDBG 8
|
|
||||||
" TLogVAR world.initial_display, !tlib#char#IsAvailable()
|
|
||||||
if world.state =~ '\<update\>' || world.initial_display || !tlib#char#IsAvailable()
|
if world.state =~ '\<update\>' || world.initial_display || !tlib#char#IsAvailable()
|
||||||
" TLogDBG len(dlist)
|
|
||||||
call world.DisplayList(world.Query(), dlist)
|
call world.DisplayList(world.Query(), dlist)
|
||||||
call world.FollowCursor()
|
call world.FollowCursor()
|
||||||
let world.initial_display = 0
|
let world.initial_display = 0
|
||||||
" TLogDBG 9
|
|
||||||
endif
|
endif
|
||||||
if world.state =~ '\<hibernate\>'
|
if world.state =~ '\<hibernate\>'
|
||||||
let world.state = 'suspend'
|
let world.state = 'suspend'
|
||||||
|
@ -548,9 +502,10 @@ function! tlib#input#ListW(world, ...) "{{{3
|
||||||
endif
|
endif
|
||||||
endif
|
endif
|
||||||
" TAssert IsNotEmpty(world.scratch)
|
" TAssert IsNotEmpty(world.scratch)
|
||||||
|
let world.list_wid = tlib#win#GetID()
|
||||||
let world.list_wnr = winnr()
|
let world.list_wnr = winnr()
|
||||||
|
|
||||||
" TLogVAR world.state, world.next_state
|
Tlibtrace 'tlib', world.state, world.next_state
|
||||||
if !empty(world.next_state)
|
if !empty(world.next_state)
|
||||||
let world.state = world.next_state
|
let world.state = world.next_state
|
||||||
let world.next_state = ''
|
let world.next_state = ''
|
||||||
|
@ -568,7 +523,7 @@ function! tlib#input#ListW(world, ...) "{{{3
|
||||||
endif
|
endif
|
||||||
if has('gui_win32')
|
if has('gui_win32')
|
||||||
let exec_cmd = input(query, '')
|
let exec_cmd = input(query, '')
|
||||||
" TLogVAR exec_cmd
|
Tlibtrace 'tlib', exec_cmd
|
||||||
if exec_cmd == ''
|
if exec_cmd == ''
|
||||||
let world.state = 'redisplay'
|
let world.state = 'redisplay'
|
||||||
else
|
else
|
||||||
|
@ -576,17 +531,15 @@ function! tlib#input#ListW(world, ...) "{{{3
|
||||||
endif
|
endif
|
||||||
elseif has('gui_gtk') || has('gui_gtk2')
|
elseif has('gui_gtk') || has('gui_gtk2')
|
||||||
let c = s:GetModdedChar(world)
|
let c = s:GetModdedChar(world)
|
||||||
" TLogVAR c
|
Tlibtrace 'tlib', c
|
||||||
endif
|
endif
|
||||||
else
|
else
|
||||||
" TLogVAR world.timeout
|
Tlibtrace 'tlib', world.timeout
|
||||||
let c = s:GetModdedChar(world)
|
let c = s:GetModdedChar(world)
|
||||||
" TLogVAR c, has_key(world.key_map[world.key_mode],c)
|
Tlibtrace 'tlib', c, has_key(world.key_map[world.key_mode],c)
|
||||||
endif
|
endif
|
||||||
" TLogVAR c
|
Tlibtrace 'tlib', c
|
||||||
" TLogDBG string(sort(keys(world.key_map[world.key_mode])))
|
Tlibtrace 'tlib', world.next_agent, world.next_eval
|
||||||
|
|
||||||
" TLogVAR world.next_agent, world.next_eval
|
|
||||||
if !empty(world.next_agent)
|
if !empty(world.next_agent)
|
||||||
let nagent = world.next_agent
|
let nagent = world.next_agent
|
||||||
let world.next_agent = ''
|
let world.next_agent = ''
|
||||||
|
@ -604,19 +557,17 @@ function! tlib#input#ListW(world, ...) "{{{3
|
||||||
elseif has_key(world.key_map[world.key_mode], c)
|
elseif has_key(world.key_map[world.key_mode], c)
|
||||||
let sr = @/
|
let sr = @/
|
||||||
silent! let @/ = lastsearch
|
silent! let @/ = lastsearch
|
||||||
" TLogVAR c, world.key_map[world.key_mode][c]
|
Tlibtrace 'tlib', c, world.key_map[world.key_mode][c]
|
||||||
" TLog "Agent: ". string(world.key_map[world.key_mode][c])
|
" TLog "Agent: ". string(world.key_map[world.key_mode][c])
|
||||||
let handler = world.key_map[world.key_mode][c]
|
let handler = world.key_map[world.key_mode][c]
|
||||||
" " TLogVAR handler
|
Tlibtrace 'tlib', handler
|
||||||
" let world = call(handler.agent, [world, world.GetSelectedItems(world.CurrentItem())])
|
|
||||||
" call s:CheckAgentReturnValue(c, world)
|
|
||||||
let world = s:CallAgent(handler, world, world.GetSelectedItems(world.CurrentItem()))
|
let world = s:CallAgent(handler, world, world.GetSelectedItems(world.CurrentItem()))
|
||||||
silent! let @/ = sr
|
silent! let @/ = sr
|
||||||
" continue
|
" continue
|
||||||
elseif c == 13
|
elseif c == 13
|
||||||
throw 'pick'
|
throw 'pick'
|
||||||
elseif c == 27
|
elseif c == 27
|
||||||
" TLogVAR c, world.key_mode
|
Tlibtrace 'tlib', c, world.key_mode
|
||||||
if world.key_mode != 'default'
|
if world.key_mode != 'default'
|
||||||
let world.key_mode = 'default'
|
let world.key_mode = 'default'
|
||||||
let world.state = 'redisplay'
|
let world.state = 'redisplay'
|
||||||
|
@ -666,7 +617,7 @@ function! tlib#input#ListW(world, ...) "{{{3
|
||||||
let world.state = 'exit empty'
|
let world.state = 'exit empty'
|
||||||
endif
|
endif
|
||||||
endif
|
endif
|
||||||
" TLogVAR world.prefidx, world.state
|
Tlibtrace 'tlib', world.prefidx, world.state
|
||||||
elseif has_key(world.key_map[world.key_mode], 'unknown_key')
|
elseif has_key(world.key_map[world.key_mode], 'unknown_key')
|
||||||
let agent = world.key_map[world.key_mode].unknown_key.agent
|
let agent = world.key_map[world.key_mode].unknown_key.agent
|
||||||
" let world = call(agent, [world, c])
|
" let world = call(agent, [world, c])
|
||||||
|
@ -675,17 +626,17 @@ function! tlib#input#ListW(world, ...) "{{{3
|
||||||
elseif c >= 32
|
elseif c >= 32
|
||||||
let world.state = 'display'
|
let world.state = 'display'
|
||||||
let numbase = get(world.numeric_chars, c, -99999)
|
let numbase = get(world.numeric_chars, c, -99999)
|
||||||
" TLogVAR numbase, world.numeric_chars, c
|
Tlibtrace 'tlib', numbase, world.numeric_chars, c
|
||||||
if numbase != -99999
|
if numbase != -99999
|
||||||
let world.idx .= (c - numbase)
|
let world.idx .= (c - numbase)
|
||||||
if len(world.idx) == world.index_width
|
if len(world.idx) == world.index_width
|
||||||
let world.prefidx = world.idx
|
let world.prefidx = world.idx
|
||||||
" TLogVAR world.prefidx
|
Tlibtrace 'tlib', world.prefidx
|
||||||
throw 'pick'
|
throw 'pick'
|
||||||
endif
|
endif
|
||||||
else
|
else
|
||||||
let world.idx = ''
|
let world.idx = ''
|
||||||
" TLogVAR world.filter
|
Tlibtrace 'tlib', world.filter
|
||||||
if world.llen > g:tlib#input#livesearch_threshold
|
if world.llen > g:tlib#input#livesearch_threshold
|
||||||
let pattern = input('Filter: ', world.CleanFilter(world.filter[0][0]) . nr2char(c))
|
let pattern = input('Filter: ', world.CleanFilter(world.filter[0][0]) . nr2char(c))
|
||||||
if empty(pattern)
|
if empty(pattern)
|
||||||
|
@ -718,61 +669,50 @@ function! tlib#input#ListW(world, ...) "{{{3
|
||||||
call world.ClearAllMarks()
|
call world.ClearAllMarks()
|
||||||
call world.MarkCurrent(world.prefidx)
|
call world.MarkCurrent(world.prefidx)
|
||||||
let world.state = ''
|
let world.state = ''
|
||||||
" TLogDBG 'Pick item #'. world.prefidx
|
|
||||||
|
|
||||||
finally
|
finally
|
||||||
" TLogDBG 'finally 1', world.state
|
|
||||||
if world.state =~ '\<suspend\>'
|
if world.state =~ '\<suspend\>'
|
||||||
" if !world.allow_suspend
|
" if !world.allow_suspend
|
||||||
" echom "Cannot be suspended"
|
" echom "Cannot be suspended"
|
||||||
" let world.state = 'redisplay'
|
" let world.state = 'redisplay'
|
||||||
" endif
|
" endif
|
||||||
elseif !empty(world.list) && !empty(world.base)
|
elseif !empty(world.list) && !empty(world.base)
|
||||||
" TLogVAR world.list
|
|
||||||
if empty(world.state)
|
if empty(world.state)
|
||||||
let world.rv = world.CurrentItem()
|
let world.rv = world.CurrentItem()
|
||||||
" TLogVAR world.state, world.rv
|
Tlibtrace 'tlib', world.state, world.rv
|
||||||
endif
|
endif
|
||||||
" TLogVAR "postprocess"
|
|
||||||
for handler in world.post_handlers
|
for handler in world.post_handlers
|
||||||
let state = get(handler, 'postprocess', '')
|
let state = get(handler, 'postprocess', '')
|
||||||
" TLogVAR handler
|
Tlibtrace 'tlib', handler
|
||||||
" TLogVAR state
|
Tlibtrace 'tlib', state
|
||||||
" TLogVAR world.state
|
Tlibtrace 'tlib', world.state
|
||||||
if state == world.state
|
if state == world.state
|
||||||
let agent = handler.agent
|
let agent = handler.agent
|
||||||
let [world, world.rv] = call(agent, [world, world.rv])
|
let [world, world.rv] = call(agent, [world, world.rv])
|
||||||
" TLogVAR world.state, world.rv
|
Tlibtrace 'tlib', world.state, world.rv
|
||||||
call s:CheckAgentReturnValue(agent, world)
|
call s:CheckAgentReturnValue(agent, world)
|
||||||
endif
|
endif
|
||||||
endfor
|
endfor
|
||||||
endif
|
endif
|
||||||
" TLogDBG 'state0='. world.state
|
|
||||||
endtry
|
endtry
|
||||||
" TLogDBG 'state1='. world.state
|
|
||||||
endwh
|
endwh
|
||||||
|
|
||||||
" TLogVAR world.state
|
Tlibtrace 'tlib', world.state
|
||||||
" TLogDBG string(tlib#win#List())
|
Tlibtrace 'tlib', len(world.list)
|
||||||
" TLogDBG 'exit while loop'
|
Tlibtrace 'tlib', world.sel_idx
|
||||||
" TLogVAR world.list
|
Tlibtrace 'tlib', world.idx
|
||||||
" TLogVAR world.sel_idx
|
Tlibtrace 'tlib', world.prefidx
|
||||||
" TLogVAR world.idx
|
Tlibtrace 'tlib', world.rv
|
||||||
" TLogVAR world.prefidx
|
|
||||||
" TLogVAR world.rv
|
|
||||||
" TLogVAR world.type, world.state, world.return_agent, world.index_table, world.rv
|
|
||||||
if world.state =~ '\<\(empty\|escape\)\>'
|
if world.state =~ '\<\(empty\|escape\)\>'
|
||||||
let world.sticky = 0
|
let world.sticky = 0
|
||||||
endif
|
endif
|
||||||
if world.state =~ '\<suspend\>'
|
if world.state =~ '\<suspend\>'
|
||||||
" TLogDBG 'return suspended'
|
Tlibtrace 'tlib', world.prefidx
|
||||||
" TLogVAR world.prefidx
|
|
||||||
" exec world.prefidx
|
" exec world.prefidx
|
||||||
return
|
return
|
||||||
elseif world.state =~ '\<empty\>'
|
elseif world.state =~ '\<empty\>'
|
||||||
" TLog "empty"
|
" TLog "empty"
|
||||||
" TLogDBG 'return empty'
|
Tlibtrace 'tlib', world.type
|
||||||
" TLogVAR world.type
|
|
||||||
if stridx(world.type, 'm') != -1
|
if stridx(world.type, 'm') != -1
|
||||||
return []
|
return []
|
||||||
elseif stridx(world.type, 'i') != -1
|
elseif stridx(world.type, 'i') != -1
|
||||||
|
@ -781,23 +721,18 @@ function! tlib#input#ListW(world, ...) "{{{3
|
||||||
return ''
|
return ''
|
||||||
endif
|
endif
|
||||||
elseif !empty(world.return_agent)
|
elseif !empty(world.return_agent)
|
||||||
" TLogDBG 'return agent'
|
Tlibtrace 'tlib', world.return_agent
|
||||||
" TLogVAR world.return_agent
|
call world.CloseScratch(1)
|
||||||
call world.CloseScratch()
|
|
||||||
" TLogDBG "return_agent ". string(tlib#win#List())
|
|
||||||
" TAssert IsNotEmpty(world.scratch)
|
" TAssert IsNotEmpty(world.scratch)
|
||||||
return call(world.return_agent, [world, world.GetSelectedItems(world.rv)])
|
return call(world.return_agent, [world, world.GetSelectedItems(world.rv)])
|
||||||
elseif stridx(world.type, 'w') != -1
|
elseif stridx(world.type, 'w') != -1
|
||||||
" TLog "return_world"
|
" TLog "return_world"
|
||||||
" TLogDBG 'return world'
|
|
||||||
return world
|
return world
|
||||||
elseif stridx(world.type, 'm') != -1
|
elseif stridx(world.type, 'm') != -1
|
||||||
" TLog "return_multi"
|
" TLog "return_multi"
|
||||||
" TLogDBG 'return multi'
|
|
||||||
return world.GetSelectedItems(world.rv)
|
return world.GetSelectedItems(world.rv)
|
||||||
elseif stridx(world.type, 'i') != -1
|
elseif stridx(world.type, 'i') != -1
|
||||||
" TLog "return_index"
|
" TLog "return_index"
|
||||||
" TLogDBG 'return index'
|
|
||||||
if empty(world.index_table)
|
if empty(world.index_table)
|
||||||
return world.rv
|
return world.rv
|
||||||
else
|
else
|
||||||
|
@ -805,14 +740,13 @@ function! tlib#input#ListW(world, ...) "{{{3
|
||||||
endif
|
endif
|
||||||
else
|
else
|
||||||
" TLog "return_else"
|
" TLog "return_else"
|
||||||
" TLogDBG 'return normal'
|
|
||||||
return world.rv
|
return world.rv
|
||||||
endif
|
endif
|
||||||
|
|
||||||
finally
|
finally
|
||||||
call world.Leave()
|
call world.Leave()
|
||||||
|
|
||||||
" TLogVAR statusline
|
" Tlibtrace 'tlib', statusline
|
||||||
" let &l:statusline = statusline
|
" let &l:statusline = statusline
|
||||||
" let &laststatus = laststatus
|
" let &laststatus = laststatus
|
||||||
if &showmode != showmode
|
if &showmode != showmode
|
||||||
|
@ -824,42 +758,39 @@ function! tlib#input#ListW(world, ...) "{{{3
|
||||||
silent! aunmenu ]TLibInputListPopupMenu
|
silent! aunmenu ]TLibInputListPopupMenu
|
||||||
endif
|
endif
|
||||||
|
|
||||||
" TLogDBG 'finally 2'
|
Tlibtrace 'tlib', world.state
|
||||||
" TLogDBG string(world.Methods())
|
|
||||||
" TLogVAR world.state
|
|
||||||
" TLogDBG string(tlib#win#List())
|
|
||||||
if world.state !~ '\<suspend\>'
|
if world.state !~ '\<suspend\>'
|
||||||
" redraw
|
" redraw
|
||||||
" TLogVAR world.sticky, bufnr("%")
|
Tlibtrace 'tlib', world.sticky, bufnr("%")
|
||||||
if world.sticky
|
if world.sticky
|
||||||
" TLogDBG "sticky"
|
Tlibtrace 'tlib', world.bufnr
|
||||||
" TLogVAR world.bufnr
|
|
||||||
" TLogDBG bufwinnr(world.bufnr)
|
|
||||||
if world.scratch_split > 0
|
if world.scratch_split > 0
|
||||||
if bufwinnr(world.bufnr) == -1
|
if bufwinnr(world.bufnr) == -1
|
||||||
" TLogDBG "UseScratch"
|
|
||||||
call world.UseScratch()
|
call world.UseScratch()
|
||||||
endif
|
endif
|
||||||
let world = tlib#agent#SuspendToParentWindow(world, world.GetSelectedItems(world.rv))
|
let world = tlib#agent#SuspendToParentWindow(world, world.GetSelectedItems(world.rv))
|
||||||
endif
|
endif
|
||||||
else
|
else
|
||||||
" TLogDBG "non sticky"
|
Tlibtrace 'tlib', world.state, world.win_id, world.bufnr
|
||||||
" TLogVAR world.state, world.win_wnr, world.bufnr
|
if world.CloseScratch(1)
|
||||||
if world.CloseScratch()
|
Tlibtrace 'tlib', get(world,'winview','')
|
||||||
" TLogVAR world.winview
|
|
||||||
call tlib#win#SetLayout(world.winview)
|
call tlib#win#SetLayout(world.winview)
|
||||||
endif
|
endif
|
||||||
endif
|
endif
|
||||||
endif
|
endif
|
||||||
|
if world.state !~ '\<norestore\>'
|
||||||
|
call world.RestoreWindow()
|
||||||
|
endif
|
||||||
" for i in range(0,5)
|
" for i in range(0,5)
|
||||||
" call getchar(0)
|
" call getchar(0)
|
||||||
" endfor
|
" endfor
|
||||||
echo
|
echo
|
||||||
redraw!
|
redraw!
|
||||||
if !empty(post_keys)
|
if !empty(post_keys)
|
||||||
" TLogVAR post_keys
|
Tlibtrace 'tlib', post_keys
|
||||||
call feedkeys(post_keys)
|
call feedkeys(post_keys)
|
||||||
endif
|
endif
|
||||||
|
let world.state = ''
|
||||||
endtry
|
endtry
|
||||||
endf
|
endf
|
||||||
|
|
||||||
|
@ -871,7 +802,7 @@ function! s:CallAgent(handler, world, list) abort "{{{3
|
||||||
let args += a:handler.args
|
let args += a:handler.args
|
||||||
endif
|
endif
|
||||||
let world = call(agent, args)
|
let world = call(agent, args)
|
||||||
" TLogVAR world.state, world.rv
|
Tlibtrace 'tlib', world.state, world.rv
|
||||||
call s:CheckAgentReturnValue(agent, world)
|
call s:CheckAgentReturnValue(agent, world)
|
||||||
return world
|
return world
|
||||||
endf
|
endf
|
||||||
|
@ -887,7 +818,7 @@ endf
|
||||||
|
|
||||||
|
|
||||||
function! s:Init(world, cmd) "{{{3
|
function! s:Init(world, cmd) "{{{3
|
||||||
" TLogVAR a:cmd
|
Tlibtrace 'tlib', a:cmd
|
||||||
let a:world.initial_display = 1
|
let a:world.initial_display = 1
|
||||||
if a:cmd =~ '\<sticky\>'
|
if a:cmd =~ '\<sticky\>'
|
||||||
let a:world.sticky = 1
|
let a:world.sticky = 1
|
||||||
|
@ -905,7 +836,7 @@ function! s:Init(world, cmd) "{{{3
|
||||||
" let a:world.state = a:world.resume_state
|
" let a:world.state = a:world.resume_state
|
||||||
" endif
|
" endif
|
||||||
elseif !a:world.initialized
|
elseif !a:world.initialized
|
||||||
" TLogVAR a:world.initialized, a:world.win_wnr, a:world.bufnr
|
Tlibtrace 'tlib', a:world.initialized, a:world.win_id, a:world.bufnr
|
||||||
let a:world.filetype = &filetype
|
let a:world.filetype = &filetype
|
||||||
let a:world.fileencoding = &fileencoding
|
let a:world.fileencoding = &fileencoding
|
||||||
call a:world.SetMatchMode(tlib#var#Get('tlib#input#filter_mode', 'wb'))
|
call a:world.SetMatchMode(tlib#var#Get('tlib#input#filter_mode', 'wb'))
|
||||||
|
@ -913,9 +844,9 @@ function! s:Init(world, cmd) "{{{3
|
||||||
if !has_key(a:world, 'key_mode')
|
if !has_key(a:world, 'key_mode')
|
||||||
let a:world.key_mode = 'default'
|
let a:world.key_mode = 'default'
|
||||||
endif
|
endif
|
||||||
" TLogVAR has_key(a:world,'key_map')
|
Tlibtrace 'tlib', has_key(a:world,'key_map')
|
||||||
if has_key(a:world, 'key_map')
|
if has_key(a:world, 'key_map')
|
||||||
" TLogVAR has_key(a:world.key_map,a:world.key_mode)
|
Tlibtrace 'tlib', has_key(a:world.key_map,a:world.key_mode)
|
||||||
if has_key(a:world.key_map, a:world.key_mode)
|
if has_key(a:world.key_map, a:world.key_mode)
|
||||||
let a:world.key_map[a:world.key_mode] = extend(
|
let a:world.key_map[a:world.key_mode] = extend(
|
||||||
\ a:world.key_map[a:world.key_mode],
|
\ a:world.key_map[a:world.key_mode],
|
||||||
|
@ -929,14 +860,14 @@ function! s:Init(world, cmd) "{{{3
|
||||||
\ a:world.key_mode : copy(g:tlib#input#keyagents_InputList_s)
|
\ a:world.key_mode : copy(g:tlib#input#keyagents_InputList_s)
|
||||||
\ }
|
\ }
|
||||||
endif
|
endif
|
||||||
" TLogVAR a:world.type
|
Tlibtrace 'tlib', a:world.type
|
||||||
if stridx(a:world.type, 'm') != -1
|
if stridx(a:world.type, 'm') != -1
|
||||||
call extend(a:world.key_map[a:world.key_mode], g:tlib#input#keyagents_InputList_m, 'force')
|
call extend(a:world.key_map[a:world.key_mode], g:tlib#input#keyagents_InputList_m, 'force')
|
||||||
endif
|
endif
|
||||||
for key_mode in keys(a:world.key_map)
|
for key_mode in keys(a:world.key_map)
|
||||||
let a:world.key_map[key_mode] = map(a:world.key_map[key_mode], 'type(v:val) == 4 ? v:val : {"agent": v:val}')
|
let a:world.key_map[key_mode] = map(a:world.key_map[key_mode], 'type(v:val) == 4 ? v:val : {"agent": v:val}')
|
||||||
endfor
|
endfor
|
||||||
" TLogVAR a:world.key_mode
|
Tlibtrace 'tlib', a:world.key_mode
|
||||||
if type(a:world.key_handlers) == 3
|
if type(a:world.key_handlers) == 3
|
||||||
call s:ExtendKeyMap(a:world, a:world.key_mode, a:world.key_handlers)
|
call s:ExtendKeyMap(a:world, a:world.key_mode, a:world.key_handlers)
|
||||||
elseif type(a:world.key_handlers) == 4
|
elseif type(a:world.key_handlers) == 4
|
||||||
|
@ -946,12 +877,12 @@ function! s:Init(world, cmd) "{{{3
|
||||||
else
|
else
|
||||||
throw "tlib#input#ListW: key_handlers must be either a list or a dictionary"
|
throw "tlib#input#ListW: key_handlers must be either a list or a dictionary"
|
||||||
endif
|
endif
|
||||||
" TLogVAR a:world.type, a:world.key_map
|
Tlibtrace 'tlib', a:world.type, a:world.key_map
|
||||||
if !empty(a:cmd)
|
if !empty(a:cmd)
|
||||||
let a:world.state .= ' '. a:cmd
|
let a:world.state .= ' '. a:cmd
|
||||||
endif
|
endif
|
||||||
endif
|
endif
|
||||||
" TLogVAR a:world.state, a:world.sticky
|
Tlibtrace 'tlib', a:world.state, a:world.sticky
|
||||||
endf
|
endf
|
||||||
|
|
||||||
|
|
||||||
|
@ -979,7 +910,7 @@ function! s:PopupmenuExists()
|
||||||
let rv = 0
|
let rv = 0
|
||||||
endtry
|
endtry
|
||||||
endif
|
endif
|
||||||
" TLogVAR rv
|
Tlibtrace 'tlib', rv
|
||||||
return rv
|
return rv
|
||||||
endf
|
endf
|
||||||
|
|
||||||
|
@ -1144,9 +1075,9 @@ function! tlib#input#EditList(query, list, ...) "{{{3
|
||||||
let handlers = a:0 >= 1 && !empty(a:1) ? a:1 : g:tlib#input#handlers_EditList
|
let handlers = a:0 >= 1 && !empty(a:1) ? a:1 : g:tlib#input#handlers_EditList
|
||||||
let default = a:0 >= 2 ? a:2 : []
|
let default = a:0 >= 2 ? a:2 : []
|
||||||
let timeout = a:0 >= 3 ? a:3 : 0
|
let timeout = a:0 >= 3 ? a:3 : 0
|
||||||
" TLogVAR handlers
|
Tlibtrace 'tlib', handlers
|
||||||
let rv = tlib#input#List('me', a:query, copy(a:list), handlers, default, timeout)
|
let rv = tlib#input#List('me', a:query, copy(a:list), handlers, default, timeout)
|
||||||
" TLogVAR rv
|
Tlibtrace 'tlib', rv
|
||||||
if empty(rv)
|
if empty(rv)
|
||||||
return a:list
|
return a:list
|
||||||
else
|
else
|
||||||
|
@ -1157,7 +1088,7 @@ endf
|
||||||
|
|
||||||
|
|
||||||
function! tlib#input#Resume(name, pick, bufnr) "{{{3
|
function! tlib#input#Resume(name, pick, bufnr) "{{{3
|
||||||
" TLogVAR a:name, a:pick
|
Tlibtrace 'tlib', a:name, a:pick
|
||||||
echo
|
echo
|
||||||
if bufnr('%') != a:bufnr
|
if bufnr('%') != a:bufnr
|
||||||
if g:tlib#debug
|
if g:tlib#debug
|
||||||
|
@ -1182,10 +1113,8 @@ function! tlib#input#Resume(name, pick, bufnr) "{{{3
|
||||||
else
|
else
|
||||||
call tlib#autocmdgroup#Init()
|
call tlib#autocmdgroup#Init()
|
||||||
autocmd! TLib BufEnter <buffer>
|
autocmd! TLib BufEnter <buffer>
|
||||||
if b:tlib_{a:name}.state =~ '\<suspend\>'
|
if b:tlib_{a:name}.state !~# 'display\>'
|
||||||
let b:tlib_{a:name}.state = 'redisplay'
|
let b:tlib_{a:name}.state = 'redisplay'
|
||||||
else
|
|
||||||
let b:tlib_{a:name}.state .= ' redisplay'
|
|
||||||
endif
|
endif
|
||||||
" call tlib#input#List('resume '. a:name)
|
" call tlib#input#List('resume '. a:name)
|
||||||
let cmd = 'resume '. a:name
|
let cmd = 'resume '. a:name
|
||||||
|
@ -1245,24 +1174,25 @@ endf
|
||||||
" endif
|
" endif
|
||||||
" endf
|
" endf
|
||||||
" call tlib#input#Edit('foo', b:var, 'FooContinue')
|
" call tlib#input#Edit('foo', b:var, 'FooContinue')
|
||||||
function! tlib#input#Edit(name, value, callback, ...) "{{{3
|
function! tlib#input#EditW(world, name, value, callback, ...) "{{{3
|
||||||
" TLogVAR a:value
|
Tlibtrace 'tlib', a:value
|
||||||
TVarArg ['args', []]
|
TVarArg ['args', []]
|
||||||
let sargs = {'scratch': '__EDIT__'. a:name .'__', 'win_wnr': winnr()}
|
let sargs = {'scratch': '__EDIT__'. a:name .'__', 'win_id': tlib#win#GetID()}
|
||||||
let scr = tlib#scratch#UseScratch(sargs)
|
let scr = tlib#scratch#UseScratch(sargs)
|
||||||
|
let b:tlib_world = a:world
|
||||||
|
|
||||||
" :nodoc:
|
" :nodoc:
|
||||||
map <buffer> <c-w>c :call <SID>EditCallback(0)<cr>
|
map <buffer> <c-w>c :call tlib#input#EditCallback(0)<cr>
|
||||||
" :nodoc:
|
" :nodoc:
|
||||||
imap <buffer> <c-w>c <c-o>call <SID>EditCallback(0)<cr>
|
imap <buffer> <c-w>c <c-o>call tlib#input#EditCallback(0)<cr>
|
||||||
" :nodoc:
|
" :nodoc:
|
||||||
map <buffer> <c-s> :call <SID>EditCallback(1)<cr>
|
map <buffer> <c-s> :call tlib#input#EditCallback(1)<cr>
|
||||||
" :nodoc:
|
" :nodoc:
|
||||||
imap <buffer> <c-s> <c-o>call <SID>EditCallback(1)<cr>
|
imap <buffer> <c-s> <c-o>call tlib#input#EditCallback(1)<cr>
|
||||||
" :nodoc:
|
" :nodoc:
|
||||||
map <buffer> <c-w><cr> :call <SID>EditCallback(1)<cr>
|
map <buffer> <c-w><cr> :call tlib#input#EditCallback(1)<cr>
|
||||||
" :nodoc:
|
" :nodoc:
|
||||||
imap <buffer> <c-w><cr> <c-o>call <SID>EditCallback(1)<cr>
|
imap <buffer> <c-w><cr> <c-o>call tlib#input#EditCallback(1)<cr>
|
||||||
|
|
||||||
call tlib#normal#WithRegister('gg"tdG', 't')
|
call tlib#normal#WithRegister('gg"tdG', 't')
|
||||||
call append(1, split(a:value, "\<c-j>", 1))
|
call append(1, split(a:value, "\<c-j>", 1))
|
||||||
|
@ -1285,14 +1215,17 @@ function! tlib#input#Edit(name, value, callback, ...) "{{{3
|
||||||
endif
|
endif
|
||||||
let b:tlib_scratch_edit_args = args
|
let b:tlib_scratch_edit_args = args
|
||||||
let b:tlib_scratch_edit_scratch = sargs
|
let b:tlib_scratch_edit_scratch = sargs
|
||||||
" exec 'autocmd BufDelete,BufHidden,BufUnload <buffer> call s:EditCallback('. string(a:name) .')'
|
" exec 'autocmd BufDelete,BufHidden,BufUnload <buffer> call tlib#input#EditCallback('. string(a:name) .')'
|
||||||
" echohl MoreMsg
|
" echohl MoreMsg
|
||||||
" echom 'Press <c-s> to enter, <c-w>c to cancel editing.'
|
" echom 'Press <c-s> to enter, <c-w>c to cancel editing.'
|
||||||
" echohl NONE
|
" echohl NONE
|
||||||
|
let world = getbufvar(scr, 'tlib_world', a:world)
|
||||||
|
let world.state .= ' norestore'
|
||||||
|
return world
|
||||||
endf
|
endf
|
||||||
|
|
||||||
|
|
||||||
function! s:EditCallback(...) "{{{3
|
function! tlib#input#EditCallback(...) "{{{3
|
||||||
TVarArg ['ok', -1]
|
TVarArg ['ok', -1]
|
||||||
" , ['bufnr', -1]
|
" , ['bufnr', -1]
|
||||||
" autocmd! BufDelete,BufHidden,BufUnload <buffer>
|
" autocmd! BufDelete,BufHidden,BufUnload <buffer>
|
||||||
|
@ -1304,10 +1237,11 @@ function! s:EditCallback(...) "{{{3
|
||||||
let cb = b:tlib_scratch_edit_callback
|
let cb = b:tlib_scratch_edit_callback
|
||||||
let args = b:tlib_scratch_edit_args
|
let args = b:tlib_scratch_edit_args
|
||||||
let sargs = b:tlib_scratch_edit_scratch
|
let sargs = b:tlib_scratch_edit_scratch
|
||||||
" TLogVAR cb, args, sargs
|
let world = b:tlib_world
|
||||||
|
Tlibtrace 'tlib', cb, args, sargs
|
||||||
|
call call(cb, args + [ok, text, world])
|
||||||
call tlib#scratch#CloseScratch(b:tlib_scratch_edit_scratch)
|
call tlib#scratch#CloseScratch(b:tlib_scratch_edit_scratch)
|
||||||
call tlib#win#Set(sargs.win_wnr)
|
call tlib#win#SetById(sargs.win_id)
|
||||||
call call(cb, args + [ok, text])
|
|
||||||
endf
|
endf
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -3,18 +3,18 @@
|
||||||
" @Website: http://www.vim.org/account/profile.php?user_id=4037
|
" @Website: http://www.vim.org/account/profile.php?user_id=4037
|
||||||
" @License: GPL (see http://www.gnu.org/licenses/gpl.txt)
|
" @License: GPL (see http://www.gnu.org/licenses/gpl.txt)
|
||||||
" @Created: 2007-06-30.
|
" @Created: 2007-06-30.
|
||||||
" @Last Change: 2015-10-21.
|
" @Last Change: 2017-03-26.
|
||||||
" @Revision: 61
|
" @Revision: 71
|
||||||
|
|
||||||
|
|
||||||
""" List related functions {{{1
|
""" List related functions {{{1
|
||||||
" For the following functions please see ../../test/tlib.vim for examples.
|
" For the following functions please see ../../test/tlib.vim for examples.
|
||||||
|
|
||||||
" :def: function! tlib#list#Inject(list, initial_value, funcref)
|
" :def: function! tlib#list#Inject(list, initial_value, funcref) abort
|
||||||
" EXAMPLES: >
|
" EXAMPLES: >
|
||||||
" echo tlib#list#Inject([1,2,3], 0, function('Add')
|
" echo tlib#list#Inject([1,2,3], 0, function('Add')
|
||||||
" => 6
|
" => 6
|
||||||
function! tlib#list#Inject(list, value, Function) "{{{3
|
function! tlib#list#Inject(list, value, Function) abort "{{{3
|
||||||
if empty(a:list)
|
if empty(a:list)
|
||||||
return a:value
|
return a:value
|
||||||
else
|
else
|
||||||
|
@ -29,7 +29,7 @@ endf
|
||||||
" EXAMPLES: >
|
" EXAMPLES: >
|
||||||
" tlib#list#Compact([0,1,2,3,[], {}, ""])
|
" tlib#list#Compact([0,1,2,3,[], {}, ""])
|
||||||
" => [1,2,3]
|
" => [1,2,3]
|
||||||
function! tlib#list#Compact(list) "{{{3
|
function! tlib#list#Compact(list) abort "{{{3
|
||||||
return filter(copy(a:list), '!empty(v:val)')
|
return filter(copy(a:list), '!empty(v:val)')
|
||||||
endf
|
endf
|
||||||
|
|
||||||
|
@ -37,7 +37,7 @@ endf
|
||||||
" EXAMPLES: >
|
" EXAMPLES: >
|
||||||
" tlib#list#Flatten([0,[1,2,[3,""]]])
|
" tlib#list#Flatten([0,[1,2,[3,""]]])
|
||||||
" => [0,1,2,3,""]
|
" => [0,1,2,3,""]
|
||||||
function! tlib#list#Flatten(list) "{{{3
|
function! tlib#list#Flatten(list) abort "{{{3
|
||||||
let acc = []
|
let acc = []
|
||||||
for e in a:list
|
for e in a:list
|
||||||
if type(e) == 3
|
if type(e) == 3
|
||||||
|
@ -51,27 +51,27 @@ function! tlib#list#Flatten(list) "{{{3
|
||||||
endf
|
endf
|
||||||
|
|
||||||
|
|
||||||
" :def: function! tlib#list#FindAll(list, filter, ?process_expr="")
|
" :def: function! tlib#list#FindAll(list, filter, ?process_expr="") abort
|
||||||
" Basically the same as filter()
|
" Basically the same as filter()
|
||||||
"
|
"
|
||||||
" EXAMPLES: >
|
" EXAMPLES: >
|
||||||
" tlib#list#FindAll([1,2,3], 'v:val >= 2')
|
" tlib#list#FindAll([1,2,3], 'v:val >= 2')
|
||||||
" => [2, 3]
|
" => [2, 3]
|
||||||
function! tlib#list#FindAll(list, filter, ...) "{{{3
|
function! tlib#list#FindAll(list, filter, ...) abort "{{{3
|
||||||
let rv = filter(copy(a:list), a:filter)
|
let rv = filter(copy(a:list), a:filter)
|
||||||
if a:0 >= 1 && a:1 != ''
|
if a:0 >= 1 && !empty(a:1)
|
||||||
let rv = map(rv, a:1)
|
let rv = map(rv, a:1)
|
||||||
endif
|
endif
|
||||||
return rv
|
return rv
|
||||||
endf
|
endf
|
||||||
|
|
||||||
|
|
||||||
" :def: function! tlib#list#Find(list, filter, ?default="", ?process_expr="")
|
" :def: function! tlib#list#Find(list, filter, ?default="", ?process_expr="") abort
|
||||||
"
|
"
|
||||||
" EXAMPLES: >
|
" EXAMPLES: >
|
||||||
" tlib#list#Find([1,2,3], 'v:val >= 2')
|
" tlib#list#Find([1,2,3], 'v:val >= 2')
|
||||||
" => 2
|
" => 2
|
||||||
function! tlib#list#Find(list, filter, ...) "{{{3
|
function! tlib#list#Find(list, filter, ...) abort "{{{3
|
||||||
let default = a:0 >= 1 ? a:1 : ''
|
let default = a:0 >= 1 ? a:1 : ''
|
||||||
let expr = a:0 >= 2 ? a:2 : ''
|
let expr = a:0 >= 2 ? a:2 : ''
|
||||||
return get(tlib#list#FindAll(a:list, a:filter, expr), 0, default)
|
return get(tlib#list#FindAll(a:list, a:filter, expr), 0, default)
|
||||||
|
@ -81,7 +81,7 @@ endf
|
||||||
" EXAMPLES: >
|
" EXAMPLES: >
|
||||||
" tlib#list#Any([1,2,3], 'v:val >= 2')
|
" tlib#list#Any([1,2,3], 'v:val >= 2')
|
||||||
" => 1
|
" => 1
|
||||||
function! tlib#list#Any(list, expr) "{{{3
|
function! tlib#list#Any(list, expr) abort "{{{3
|
||||||
return !empty(tlib#list#FindAll(a:list, a:expr))
|
return !empty(tlib#list#FindAll(a:list, a:expr))
|
||||||
endf
|
endf
|
||||||
|
|
||||||
|
@ -89,7 +89,7 @@ endf
|
||||||
" EXAMPLES: >
|
" EXAMPLES: >
|
||||||
" tlib#list#All([1,2,3], 'v:val >= 2')
|
" tlib#list#All([1,2,3], 'v:val >= 2')
|
||||||
" => 0
|
" => 0
|
||||||
function! tlib#list#All(list, expr) "{{{3
|
function! tlib#list#All(list, expr) abort "{{{3
|
||||||
return len(tlib#list#FindAll(a:list, a:expr)) == len(a:list)
|
return len(tlib#list#FindAll(a:list, a:expr)) == len(a:list)
|
||||||
endf
|
endf
|
||||||
|
|
||||||
|
@ -97,7 +97,7 @@ endf
|
||||||
" EXAMPLES: >
|
" EXAMPLES: >
|
||||||
" tlib#list#Remove([1,2,1,2], 2)
|
" tlib#list#Remove([1,2,1,2], 2)
|
||||||
" => [1,1,2]
|
" => [1,1,2]
|
||||||
function! tlib#list#Remove(list, element) "{{{3
|
function! tlib#list#Remove(list, element) abort "{{{3
|
||||||
let idx = index(a:list, a:element)
|
let idx = index(a:list, a:element)
|
||||||
if idx != -1
|
if idx != -1
|
||||||
call remove(a:list, idx)
|
call remove(a:list, idx)
|
||||||
|
@ -109,17 +109,17 @@ endf
|
||||||
" EXAMPLES: >
|
" EXAMPLES: >
|
||||||
" tlib#list#RemoveAll([1,2,1,2], 2)
|
" tlib#list#RemoveAll([1,2,1,2], 2)
|
||||||
" => [1,1]
|
" => [1,1]
|
||||||
function! tlib#list#RemoveAll(list, element) "{{{3
|
function! tlib#list#RemoveAll(list, element) abort "{{{3
|
||||||
call filter(a:list, 'v:val != a:element')
|
call filter(a:list, 'v:val != a:element')
|
||||||
return a:list
|
return a:list
|
||||||
endf
|
endf
|
||||||
|
|
||||||
|
|
||||||
" :def: function! tlib#list#Zip(lists, ?default='')
|
" :def: function! tlib#list#Zip(lists, ?default='') abort
|
||||||
" EXAMPLES: >
|
" EXAMPLES: >
|
||||||
" tlib#list#Zip([[1,2,3], [4,5,6]])
|
" tlib#list#Zip([[1,2,3], [4,5,6]])
|
||||||
" => [[1,4], [2,5], [3,6]]
|
" => [[1,4], [2,5], [3,6]]
|
||||||
function! tlib#list#Zip(lists, ...) "{{{3
|
function! tlib#list#Zip(lists, ...) abort "{{{3
|
||||||
TVarArg 'default'
|
TVarArg 'default'
|
||||||
let lists = copy(a:lists)
|
let lists = copy(a:lists)
|
||||||
let max = 0
|
let max = 0
|
||||||
|
@ -133,24 +133,30 @@ function! tlib#list#Zip(lists, ...) "{{{3
|
||||||
return map(range(0, max - 1), 's:GetNthElement(v:val, lists, default)')
|
return map(range(0, max - 1), 's:GetNthElement(v:val, lists, default)')
|
||||||
endf
|
endf
|
||||||
|
|
||||||
function! s:GetNthElement(n, lists, default) "{{{3
|
function! s:GetNthElement(n, lists, default) abort "{{{3
|
||||||
" TLogVAR a:n, a:lists, a:default
|
" TLogVAR a:n, a:lists, a:default
|
||||||
return map(copy(a:lists), 'get(v:val, a:n, a:default)')
|
return map(copy(a:lists), 'get(v:val, a:n, a:default)')
|
||||||
endf
|
endf
|
||||||
|
|
||||||
|
|
||||||
function! tlib#list#Uniq(list, ...) "{{{3
|
function! tlib#list#Uniq(list, ...) abort "{{{3
|
||||||
" TLogVAR a:list
|
" TLogVAR a:list
|
||||||
TVarArg ['get_value', ''], ['remove_empty', 0]
|
TVarArg ['get_value', ''], ['remove_empty', 0]
|
||||||
if remove_empty
|
if remove_empty
|
||||||
call filter(a:list, 'type(v:val) == 0 || !empty(v:val)')
|
call filter(a:list, 'type(v:val) == 0 || !empty(v:val)')
|
||||||
endif
|
endif
|
||||||
" CREDITS: Based on syntastic#util#unique(list) by scrooloose
|
" CREDITS: Based on syntastic#util#unique(list) by scrooloose
|
||||||
|
let emptystring = 0
|
||||||
let seen = {}
|
let seen = {}
|
||||||
let uniques = []
|
let uniques = []
|
||||||
if empty(get_value)
|
if empty(get_value)
|
||||||
for e in a:list
|
for e in a:list
|
||||||
if !has_key(seen, e)
|
if empty(e)
|
||||||
|
if !emptystring
|
||||||
|
let emptystring = 1
|
||||||
|
call add(uniques, e)
|
||||||
|
endif
|
||||||
|
elseif !has_key(seen, e)
|
||||||
let seen[e] = 1
|
let seen[e] = 1
|
||||||
call add(uniques, e)
|
call add(uniques, e)
|
||||||
endif
|
endif
|
||||||
|
@ -159,18 +165,23 @@ function! tlib#list#Uniq(list, ...) "{{{3
|
||||||
else
|
else
|
||||||
for e in a:list
|
for e in a:list
|
||||||
let v = eval(printf(get_value, string(e)))
|
let v = eval(printf(get_value, string(e)))
|
||||||
if !has_key(seen, v)
|
if empty(v)
|
||||||
|
if !emptystring
|
||||||
|
let emptystring = 1
|
||||||
|
call add(uniques, v)
|
||||||
|
endif
|
||||||
|
elseif !has_key(seen, v)
|
||||||
let seen[v] = 1
|
let seen[v] = 1
|
||||||
call add(uniques, e)
|
call add(uniques, v)
|
||||||
endif
|
endif
|
||||||
unlet e
|
unlet e v
|
||||||
endfor
|
endfor
|
||||||
endif
|
endif
|
||||||
return uniques
|
return uniques
|
||||||
endf
|
endf
|
||||||
|
|
||||||
|
|
||||||
function! tlib#list#ToDictionary(list, default, ...) "{{{3
|
function! tlib#list#ToDictionary(list, default, ...) abort "{{{3
|
||||||
TVarArg ['generator', '']
|
TVarArg ['generator', '']
|
||||||
let dict = {}
|
let dict = {}
|
||||||
for item in a:list
|
for item in a:list
|
||||||
|
|
|
@ -3,8 +3,8 @@
|
||||||
" @Website: http://www.vim.org/account/profile.php?user_id=4037
|
" @Website: http://www.vim.org/account/profile.php?user_id=4037
|
||||||
" @License: GPL (see http://www.gnu.org/licenses/gpl.txt)
|
" @License: GPL (see http://www.gnu.org/licenses/gpl.txt)
|
||||||
" @Created: 2008-09-19.
|
" @Created: 2008-09-19.
|
||||||
" @Last Change: 2015-04-07.
|
" @Last Change: 2017-09-28.
|
||||||
" @Revision: 0.3.19
|
" @Revision: 3.3.19
|
||||||
|
|
||||||
let s:save_cpo = &cpo
|
let s:save_cpo = &cpo
|
||||||
set cpo&vim
|
set cpo&vim
|
||||||
|
@ -24,7 +24,7 @@ function! tlib#notify#Echo(text, ...)
|
||||||
if !empty(style)
|
if !empty(style)
|
||||||
exec 'echohl' style
|
exec 'echohl' style
|
||||||
endif
|
endif
|
||||||
echo strpart(text, 0, &columns - 1)
|
echo tlib#string#Strcharpart(text, 0, &columns - 1)
|
||||||
finally
|
finally
|
||||||
if !empty(style)
|
if !empty(style)
|
||||||
echohl None
|
echohl None
|
||||||
|
@ -93,13 +93,21 @@ function! tlib#notify#TrimMessage(message) "{{{3
|
||||||
let front = to_fill / 2 - 1
|
let front = to_fill / 2 - 1
|
||||||
let back = front
|
let back = front
|
||||||
if to_fill % 2 == 0 | let back -= 1 | endif
|
if to_fill % 2 == 0 | let back -= 1 | endif
|
||||||
return strpart(a:message, 0, front) . filler .
|
return tlib#string#Strcharpart(a:message, 0, front) . filler .
|
||||||
\strpart(a:message, strlen(a:message) - back)
|
\ tlib#string#Strcharpart(a:message, strlen(a:message) - back)
|
||||||
else
|
else
|
||||||
return a:message
|
return a:message
|
||||||
endif
|
endif
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
|
|
||||||
|
function! tlib#notify#PrintError() abort "{{{3
|
||||||
|
echohl ErrorMsg
|
||||||
|
echom v:exception
|
||||||
|
echom v:throwpoint
|
||||||
|
echohl NONE
|
||||||
|
endf
|
||||||
|
|
||||||
|
|
||||||
let &cpo = s:save_cpo
|
let &cpo = s:save_cpo
|
||||||
unlet s:save_cpo
|
unlet s:save_cpo
|
||||||
|
|
|
@ -1,22 +1,21 @@
|
||||||
" @Author: Tom Link (mailto:micathom AT gmail com?subject=[vim])
|
" @Author: Tom Link (mailto:micathom AT gmail com?subject=[vim])
|
||||||
" @License: GPL (see http://www.gnu.org/licenses/gpl.txt)
|
" @License: GPL (see http://www.gnu.org/licenses/gpl.txt)
|
||||||
" @Revision: 14
|
" @Revision: 18
|
||||||
|
|
||||||
|
|
||||||
function! tlib#number#ConvertBase(num, base, ...) "{{{3
|
function! tlib#number#ConvertBase(num, base, ...) "{{{3
|
||||||
let rtype = a:0 >= 1 ? a:1 : 'string'
|
let rtype = a:0 >= 1 ? a:1 : 'string'
|
||||||
|
if a:base > 36
|
||||||
|
throw 'tlib#number#ConvertBase: base > 36 is not supported'
|
||||||
|
endif
|
||||||
" TLogVAR a:num, a:base, rtype
|
" TLogVAR a:num, a:base, rtype
|
||||||
let rv = []
|
let rv = []
|
||||||
let num = 0.0 + a:num
|
let num = 0.0 + a:num
|
||||||
|
let chars = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"
|
||||||
while floor(num) > 0.0
|
while floor(num) > 0.0
|
||||||
let div = floor(num / a:base)
|
let div = floor(num / a:base)
|
||||||
let num1 = float2nr(num - a:base * div)
|
let num1 = float2nr(num - a:base * div)
|
||||||
if a:base <= 10
|
call insert(rv, chars[num1])
|
||||||
call insert(rv, num1)
|
|
||||||
elseif a:base == 16
|
|
||||||
let char = "0123456789ABCDEF"[num1]
|
|
||||||
call insert(rv, char)
|
|
||||||
endif
|
|
||||||
let num = num / a:base
|
let num = num / a:base
|
||||||
endwh
|
endwh
|
||||||
" TLogVAR rv
|
" TLogVAR rv
|
||||||
|
|
|
@ -2,8 +2,8 @@
|
||||||
" @Author: Tom Link (mailto:micathom AT gmail com?subject=[vim])
|
" @Author: Tom Link (mailto:micathom AT gmail com?subject=[vim])
|
||||||
" @License: GPL (see http://www.gnu.org/licenses/gpl.txt)
|
" @License: GPL (see http://www.gnu.org/licenses/gpl.txt)
|
||||||
" @Created: 2012-05-11.
|
" @Created: 2012-05-11.
|
||||||
" @Last Change: 2012-05-11.
|
" @Last Change: 2017-03-29.
|
||||||
" @Revision: 12
|
" @Revision: 15
|
||||||
|
|
||||||
" The directory for persistent data files. If empty, use
|
" The directory for persistent data files. If empty, use
|
||||||
" |tlib#dir#MyRuntime|.'/share'.
|
" |tlib#dir#MyRuntime|.'/share'.
|
||||||
|
@ -21,6 +21,13 @@ function! tlib#persistent#Dir() "{{{3
|
||||||
return dir
|
return dir
|
||||||
endf
|
endf
|
||||||
|
|
||||||
|
" :display: tlib#persistent#EncodedFilename(type, file, ?mkdir=0, ?dir='')
|
||||||
|
" Encode `file` and call |tlib#persistent#Filename()|.
|
||||||
|
function! tlib#persistent#EncodedFilename(type, file, ...) "{{{3
|
||||||
|
let file = tlib#url#Encode(a:file)
|
||||||
|
return call(function('tlib#persistent#Filename'), [a:type, file] + a:000)
|
||||||
|
endf
|
||||||
|
|
||||||
" :def: function! tlib#persistent#Filename(type, ?file=%, ?mkdir=0)
|
" :def: function! tlib#persistent#Filename(type, ?file=%, ?mkdir=0)
|
||||||
function! tlib#persistent#Filename(type, ...) "{{{3
|
function! tlib#persistent#Filename(type, ...) "{{{3
|
||||||
" TLogDBG 'bufname='. bufname('.')
|
" TLogDBG 'bufname='. bufname('.')
|
||||||
|
@ -41,7 +48,7 @@ function! tlib#persistent#Value(...) "{{{3
|
||||||
return call('tlib#cache#Value', a:000)
|
return call('tlib#cache#Value', a:000)
|
||||||
endf
|
endf
|
||||||
|
|
||||||
function! tlib#persistent#Save(cfile, dictionary) "{{{3
|
function! tlib#persistent#Save(...) "{{{3
|
||||||
call tlib#cache#Save(a:cfile, a:dictionary)
|
call call(function('tlib#cache#Save'), a:000)
|
||||||
endf
|
endf
|
||||||
|
|
||||||
|
|
|
@ -1,8 +1,10 @@
|
||||||
" @Author: Tom Link (mailto:micathom AT gmail com?subject=[vim])
|
" @Author: Tom Link (mailto:micathom AT gmail com?subject=[vim])
|
||||||
" @Website: http://www.vim.org/account/profile.php?user_id=4037
|
" @Website: http://www.vim.org/account/profile.php?user_id=4037
|
||||||
" @License: GPL (see http://www.gnu.org/licenses/gpl.txt)
|
" @License: GPL (see http://www.gnu.org/licenses/gpl.txt)
|
||||||
" @Revision: 72
|
" @Revision: 86
|
||||||
|
|
||||||
|
let s:id = 0
|
||||||
|
let s:ids = []
|
||||||
let s:statusline = []
|
let s:statusline = []
|
||||||
let s:laststatus = []
|
let s:laststatus = []
|
||||||
let s:max = []
|
let s:max = []
|
||||||
|
@ -23,14 +25,48 @@ let s:timestamp = -1
|
||||||
" endtry
|
" endtry
|
||||||
function! tlib#progressbar#Init(max, ...) "{{{3
|
function! tlib#progressbar#Init(max, ...) "{{{3
|
||||||
TVarArg ['format', '%s'], ['width', 10]
|
TVarArg ['format', '%s'], ['width', 10]
|
||||||
|
let s:id += 1
|
||||||
|
call insert(s:ids, s:id)
|
||||||
call insert(s:statusline, &statusline)
|
call insert(s:statusline, &statusline)
|
||||||
call insert(s:laststatus, &laststatus)
|
call insert(s:laststatus, &laststatus)
|
||||||
call insert(s:max, a:max)
|
call insert(s:max, a:max)
|
||||||
call insert(s:format, format)
|
call insert(s:format, format)
|
||||||
call insert(s:width, width)
|
call insert(s:width, width)
|
||||||
call insert(s:value, -1)
|
call insert(s:value, -1)
|
||||||
|
let sl = {
|
||||||
|
\ 'id': s:id,
|
||||||
|
\ 'statusline': &statusline,
|
||||||
|
\ 'laststatus': &laststatus,
|
||||||
|
\ 'max': a:max,
|
||||||
|
\ 'format': format,
|
||||||
|
\ 'width': width,
|
||||||
|
\ 'value': -1
|
||||||
|
\ }
|
||||||
let &laststatus = 2
|
let &laststatus = 2
|
||||||
let s:timestamp = localtime()
|
let s:timestamp = localtime()
|
||||||
|
return sl
|
||||||
|
endf
|
||||||
|
|
||||||
|
|
||||||
|
function! tlib#progressbar#Restore(...) "{{{3
|
||||||
|
if a:0 >= 1
|
||||||
|
let sl = a:1
|
||||||
|
let idx = index(s:ids, sl.id)
|
||||||
|
let &statusline = sl.statusline
|
||||||
|
let &laststatus = sl.laststatus
|
||||||
|
else
|
||||||
|
let idx = 0
|
||||||
|
let &statusline = remove(s:statusline, idx)
|
||||||
|
let &laststatus = remove(s:laststatus, idx)
|
||||||
|
endif
|
||||||
|
call remove(s:ids, idx)
|
||||||
|
call remove(s:max, idx)
|
||||||
|
call remove(s:format, idx)
|
||||||
|
call remove(s:width, idx)
|
||||||
|
call remove(s:value, idx)
|
||||||
|
redrawstatus
|
||||||
|
" redraw
|
||||||
|
" echo
|
||||||
endf
|
endf
|
||||||
|
|
||||||
|
|
||||||
|
@ -48,7 +84,7 @@ function! tlib#progressbar#Display(value, ...) "{{{3
|
||||||
let pbl = repeat('#', val)
|
let pbl = repeat('#', val)
|
||||||
let pbr = repeat('.', s:width[0] - val)
|
let pbr = repeat('.', s:width[0] - val)
|
||||||
let txt = printf(s:format[0], '['.pbl.pbr.']') . extra
|
let txt = printf(s:format[0], '['.pbl.pbr.']') . extra
|
||||||
let &l:statusline = txt
|
let &statusline = txt
|
||||||
" TLogDBG txt
|
" TLogDBG txt
|
||||||
redrawstatus
|
redrawstatus
|
||||||
" redraw
|
" redraw
|
||||||
|
@ -57,16 +93,3 @@ function! tlib#progressbar#Display(value, ...) "{{{3
|
||||||
endf
|
endf
|
||||||
|
|
||||||
|
|
||||||
function! tlib#progressbar#Restore() "{{{3
|
|
||||||
let &l:statusline = remove(s:statusline, 0)
|
|
||||||
let &laststatus = remove(s:laststatus, 0)
|
|
||||||
redrawstatus
|
|
||||||
" redraw
|
|
||||||
" echo
|
|
||||||
call remove(s:max, 0)
|
|
||||||
call remove(s:format, 0)
|
|
||||||
call remove(s:width, 0)
|
|
||||||
call remove(s:value, 0)
|
|
||||||
endf
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
" @Author: Tom Link (mailto:micathom AT gmail com?subject=[vim])
|
" @Author: Tom Link (mailto:micathom AT gmail com?subject=[vim])
|
||||||
" @Website: https://github.com/tomtom
|
" @Website: https://github.com/tomtom
|
||||||
" @License: GPL (see http://www.gnu.org/licenses/gpl.txt)
|
" @License: GPL (see http://www.gnu.org/licenses/gpl.txt)
|
||||||
" @Last Change: 2015-11-13
|
" @Last Change: 2018-02-08
|
||||||
" @Revision: 59
|
" @Revision: 69
|
||||||
|
|
||||||
" :nodoc:
|
" :nodoc:
|
||||||
TLet g:tlib#qfl#world = {
|
TLet g:tlib#qfl#world = {
|
||||||
|
@ -29,7 +29,10 @@ TLet g:tlib#qfl#world = {
|
||||||
|
|
||||||
function! tlib#qfl#FormatQFLE(qfe) dict abort "{{{3
|
function! tlib#qfl#FormatQFLE(qfe) dict abort "{{{3
|
||||||
let filename = tlib#qfl#QfeFilename(a:qfe)
|
let filename = tlib#qfl#QfeFilename(a:qfe)
|
||||||
if get(self, 'qfl_short_filename', '')
|
let short_filename = get(self, 'qfl_short_filename', '')
|
||||||
|
if short_filename ==# 'basename'
|
||||||
|
let filename = matchstr(filename, '[^\\/]\+$')
|
||||||
|
elseif !empty(short_filename)
|
||||||
let filename = pathshorten(filename)
|
let filename = pathshorten(filename)
|
||||||
endif
|
endif
|
||||||
return printf("%s|%d| %s", filename, a:qfe.lnum, get(a:qfe, "text"))
|
return printf("%s|%d| %s", filename, a:qfe.lnum, get(a:qfe, "text"))
|
||||||
|
@ -119,11 +122,11 @@ endf
|
||||||
|
|
||||||
|
|
||||||
function! tlib#qfl#AgentEditQFE(world, selected, ...) "{{{3
|
function! tlib#qfl#AgentEditQFE(world, selected, ...) "{{{3
|
||||||
TVarArg ['cmd_edit', ''], ['cmd_buffer', '']
|
TVarArg ['cmd_edit', ''], ['cmd_buffer', ''], ['set_origin', 1]
|
||||||
" TVarArg ['cmd_edit', 'edit'], ['cmd_buffer', 'buffer']
|
" TVarArg ['cmd_edit', 'edit'], ['cmd_buffer', 'buffer']
|
||||||
" TLogVAR a:selected
|
" TLogVAR a:selected
|
||||||
if empty(a:selected)
|
if empty(a:selected)
|
||||||
call a:world.RestoreOrigin()
|
" call a:world.RestoreOrigin()
|
||||||
" call a:world.ResetSelected()
|
" call a:world.ResetSelected()
|
||||||
else
|
else
|
||||||
call a:world.RestoreOrigin()
|
call a:world.RestoreOrigin()
|
||||||
|
@ -148,11 +151,13 @@ function! tlib#qfl#AgentEditQFE(world, selected, ...) "{{{3
|
||||||
" TLogDBG bufname('%')
|
" TLogDBG bufname('%')
|
||||||
" TLogVAR &filetype
|
" TLogVAR &filetype
|
||||||
call tlib#buffer#ViewLine(qfe.lnum)
|
call tlib#buffer#ViewLine(qfe.lnum)
|
||||||
" call a:world.SetOrigin()
|
|
||||||
" exec back
|
" exec back
|
||||||
endif
|
endif
|
||||||
endif
|
endif
|
||||||
endfor
|
endfor
|
||||||
|
if set_origin
|
||||||
|
call a:world.SetOrigin()
|
||||||
|
endif
|
||||||
endif
|
endif
|
||||||
return a:world
|
return a:world
|
||||||
endf
|
endf
|
||||||
|
@ -161,7 +166,7 @@ endf
|
||||||
function! tlib#qfl#AgentPreviewQFE(world, selected) "{{{3
|
function! tlib#qfl#AgentPreviewQFE(world, selected) "{{{3
|
||||||
" TLogVAR a:selected
|
" TLogVAR a:selected
|
||||||
let back = a:world.SwitchWindow('win')
|
let back = a:world.SwitchWindow('win')
|
||||||
call tlib#qfl#AgentEditQFE(a:world, a:selected[0:0])
|
call tlib#qfl#AgentEditQFE(a:world, a:selected[0:0], '', '', 0)
|
||||||
exec back
|
exec back
|
||||||
redraw
|
redraw
|
||||||
let a:world.state = 'redisplay'
|
let a:world.state = 'redisplay'
|
||||||
|
@ -170,14 +175,12 @@ endf
|
||||||
|
|
||||||
|
|
||||||
function! tlib#qfl#AgentGotoQFE(world, selected) "{{{3
|
function! tlib#qfl#AgentGotoQFE(world, selected) "{{{3
|
||||||
|
let world = a:world
|
||||||
if !empty(a:selected)
|
if !empty(a:selected)
|
||||||
if a:world.win_wnr != winnr()
|
let world = tlib#agent#Suspend(world, a:selected)
|
||||||
let world = tlib#agent#Suspend(a:world, a:selected)
|
call tlib#qfl#AgentEditQFE(world, a:selected[0:0])
|
||||||
exec a:world.win_wnr .'wincmd w'
|
|
||||||
endif
|
|
||||||
call tlib#qfl#AgentEditQFE(a:world, a:selected[0:0])
|
|
||||||
endif
|
endif
|
||||||
return a:world
|
return world
|
||||||
endf
|
endf
|
||||||
|
|
||||||
|
|
||||||
|
@ -201,7 +204,7 @@ function! tlib#qfl#RunCmdOnSelected(world, selected, cmd, ...) "{{{3
|
||||||
" TLogVAR a:cmd
|
" TLogVAR a:cmd
|
||||||
for entry in a:selected
|
for entry in a:selected
|
||||||
" TLogVAR entry, a:world.GetBaseItem(entry)
|
" TLogVAR entry, a:world.GetBaseItem(entry)
|
||||||
call tlib#qfl#AgentEditQFE(a:world, [entry])
|
call tlib#qfl#AgentEditQFE(a:world, [entry], '', '', 0)
|
||||||
" TLogDBG bufname('%')
|
" TLogDBG bufname('%')
|
||||||
exec a:cmd
|
exec a:cmd
|
||||||
" let item = a:world.data[a:world.GetBaseIdx(entry - 1)]
|
" let item = a:world.data[a:world.GetBaseIdx(entry - 1)]
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
" @Author: Tom Link (micathom AT gmail com?subject=[vim])
|
" @Author: Tom Link (micathom AT gmail com?subject=[vim])
|
||||||
" @Website: http://www.vim.org/account/profile.php?user_id=4037
|
" @Website: http://www.vim.org/account/profile.php?user_id=4037
|
||||||
" @License: GPL (see http://www.gnu.org/licenses/gpl.txt)
|
" @License: GPL (see http://www.gnu.org/licenses/gpl.txt)
|
||||||
" @Revision: 113
|
" @Revision: 114
|
||||||
|
|
||||||
|
|
||||||
" :def: function! tlib#rx#Escape(text, ?magic='m')
|
" :def: function! tlib#rx#Escape(text, ?magic='m')
|
||||||
|
@ -30,13 +30,7 @@ endf
|
||||||
" Escape return |sub-replace-special|.
|
" Escape return |sub-replace-special|.
|
||||||
function! tlib#rx#EscapeReplace(text, ...) "{{{3
|
function! tlib#rx#EscapeReplace(text, ...) "{{{3
|
||||||
TVarArg ['magic', 'm']
|
TVarArg ['magic', 'm']
|
||||||
if magic ==# 'm' || magic ==# 'v'
|
return escape(a:text, '\&~')
|
||||||
return escape(a:text, '\&~')
|
|
||||||
elseif magic ==# 'M' || magic ==# 'V'
|
|
||||||
return escape(a:text, '\')
|
|
||||||
else
|
|
||||||
echoerr 'magic must be one of: m, v, M, V'
|
|
||||||
endif
|
|
||||||
endf
|
endf
|
||||||
|
|
||||||
|
|
||||||
|
|
40
sources_non_forked/tlib/autoload/tlib/selection.vim
Normal file
40
sources_non_forked/tlib/autoload/tlib/selection.vim
Normal file
|
@ -0,0 +1,40 @@
|
||||||
|
" @Author: Tom Link (mailto: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)
|
||||||
|
" @Last Change: 2017-09-28
|
||||||
|
" @Revision: 4
|
||||||
|
|
||||||
|
|
||||||
|
" :display: tlib#selection#GetSelection(mode, ?mbeg="'<", ?mend="'>", ?opmode='selection')
|
||||||
|
" mode can be one of: selection, lines, block
|
||||||
|
function! tlib#selection#GetSelection(mode, ...) range "{{{3
|
||||||
|
if a:0 >= 2
|
||||||
|
let mbeg = a:1
|
||||||
|
let mend = a:2
|
||||||
|
else
|
||||||
|
let mbeg = "'<"
|
||||||
|
let mend = "'>"
|
||||||
|
endif
|
||||||
|
let opmode = a:0 >= 3 ? a:3 : 'selection'
|
||||||
|
let l0 = line(mbeg)
|
||||||
|
let l1 = line(mend)
|
||||||
|
let text = getline(l0, l1)
|
||||||
|
let c0 = col(mbeg)
|
||||||
|
let c1 = col(mend)
|
||||||
|
" TLogVAR mbeg, mend, opmode, l0, l1, c0, c1
|
||||||
|
" TLogVAR text[-1]
|
||||||
|
" TLogVAR len(text[-1])
|
||||||
|
if opmode == 'block'
|
||||||
|
let clen = c1 - c0
|
||||||
|
call map(text, 'tlib#string#Strcharpart(v:val, c0, clen)')
|
||||||
|
elseif opmode == 'selection'
|
||||||
|
if c1 > 1
|
||||||
|
let text[-1] = tlib#string#Strcharpart(text[-1], 0, c1 - (a:mode == 'o' || c1 > len(text[-1]) ? 0 : 1))
|
||||||
|
endif
|
||||||
|
if c0 > 1
|
||||||
|
let text[0] = tlib#string#Strcharpart(text[0], c0 - 1)
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
return text
|
||||||
|
endf
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
" @Author: Tom Link (micathom AT gmail com?subject=[vim])
|
" @Author: Tom Link (micathom AT gmail com?subject=[vim])
|
||||||
" @Website: http://www.vim.org/account/profile.php?user_id=4037
|
" @Website: http://www.vim.org/account/profile.php?user_id=4037
|
||||||
" @License: GPL (see http://www.gnu.org/licenses/gpl.txt)
|
" @License: GPL (see http://www.gnu.org/licenses/gpl.txt)
|
||||||
" @Revision: 121
|
" @Revision: 148
|
||||||
|
|
||||||
|
|
||||||
" :def: function! tlib#string#RemoveBackslashes(text, ?chars=' ')
|
" :def: function! tlib#string#RemoveBackslashes(text, ?chars=' ')
|
||||||
|
@ -22,11 +22,21 @@ function! tlib#string#Chomp(string, ...) "{{{3
|
||||||
endf
|
endf
|
||||||
|
|
||||||
|
|
||||||
function! tlib#string#Format(template, dict) "{{{3
|
" Format a template string. Placeholders have the format "%{NAME}". A
|
||||||
let parts = split(a:template, '\ze%\({.\{-}}\|.\)')
|
" "%" can be inserted as "%%".
|
||||||
|
"
|
||||||
|
" Examples:
|
||||||
|
" echo tlib#string#Format("foo %{bar} foo", {'bar': 123}, ?prefix='%')
|
||||||
|
" => foo 123 foo
|
||||||
|
function! tlib#string#Format(template, dict, ...) "{{{3
|
||||||
|
let prefix = a:0 >= 1 ? a:1 : '%'
|
||||||
|
let pesc = prefix . prefix
|
||||||
|
let prx = tlib#rx#Escape(prefix)
|
||||||
|
let parts = split(a:template, '\ze'. prx .'\({.\{-}}\|.\)')
|
||||||
|
let partrx = '^'. prx .'\({\(.\{-}\)}\|\(.\)\)\(.*\)$'
|
||||||
let out = []
|
let out = []
|
||||||
for part in parts
|
for part in parts
|
||||||
let ml = matchlist(part, '^%\({\(.\{-}\)}\|\(.\)\)\(.*\)$')
|
let ml = matchlist(part, partrx)
|
||||||
if empty(ml)
|
if empty(ml)
|
||||||
let rest = part
|
let rest = part
|
||||||
else
|
else
|
||||||
|
@ -34,8 +44,8 @@ function! tlib#string#Format(template, dict) "{{{3
|
||||||
let rest = ml[4]
|
let rest = ml[4]
|
||||||
if has_key(a:dict, var)
|
if has_key(a:dict, var)
|
||||||
call add(out, a:dict[var])
|
call add(out, a:dict[var])
|
||||||
elseif var == '%%'
|
elseif var ==# pesc
|
||||||
call add(out, '%')
|
call add(out, prefix)
|
||||||
else
|
else
|
||||||
call add(out, ml[1])
|
call add(out, ml[1])
|
||||||
endif
|
endif
|
||||||
|
@ -156,3 +166,43 @@ function! tlib#string#SplitCommaList(text, ...) abort "{{{3
|
||||||
return parts
|
return parts
|
||||||
endf
|
endf
|
||||||
|
|
||||||
|
|
||||||
|
function! tlib#string#Input(...) abort "{{{3
|
||||||
|
TVarArg ['text', ''], ['completion', '']
|
||||||
|
call inputsave()
|
||||||
|
let rv = call(function('input'), a:000)
|
||||||
|
call inputrestore()
|
||||||
|
return rv
|
||||||
|
endf
|
||||||
|
|
||||||
|
|
||||||
|
" :display: tlib#string#MatchAll(string, sep_regexp, ?item_regexp='') abort
|
||||||
|
function! tlib#string#MatchAll(string, regexp, ...) abort "{{{3
|
||||||
|
let eregexp = a:0 >= 1 ? a:1 : ''
|
||||||
|
Tlibtrace 'tlib', a:string, a:regexp, eregexp
|
||||||
|
let ms = []
|
||||||
|
if a:regexp =~ '\\ze'
|
||||||
|
let regexp1 = substitute(a:regexp, '\\ze.*$', '', '')
|
||||||
|
else
|
||||||
|
let regexp1 = a:regexp
|
||||||
|
endif
|
||||||
|
for m in split(a:string, '\ze'. regexp1)
|
||||||
|
let m1 = matchstr(m, !empty(eregexp) ? eregexp : a:regexp)
|
||||||
|
Tlibtrace 'tlib', m, m1
|
||||||
|
if !empty(m1)
|
||||||
|
call add(ms, m1)
|
||||||
|
endif
|
||||||
|
endfor
|
||||||
|
return ms
|
||||||
|
endf
|
||||||
|
|
||||||
|
if exists('*strcharpart')
|
||||||
|
function! tlib#string#Strcharpart(...) abort "{{{3
|
||||||
|
return call(function('strcharpart'), a:000)
|
||||||
|
endf
|
||||||
|
else
|
||||||
|
function! tlib#string#Strcharpart(...) abort "{{{3
|
||||||
|
return call(function('strpart'), a:000)
|
||||||
|
endf
|
||||||
|
endif
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
" @Author: Tom Link (mailto:micathom AT gmail com?subject=[vim])
|
" @Author: Tom Link (mailto:micathom AT gmail com?subject=[vim])
|
||||||
" @License: GPL (see http://www.gnu.org/licenses/gpl.txt)
|
" @License: GPL (see http://www.gnu.org/licenses/gpl.txt)
|
||||||
" @Last Change: 2015-11-07.
|
" @Last Change: 2017-04-12.
|
||||||
" @Revision: 51
|
" @Revision: 62
|
||||||
|
|
||||||
|
|
||||||
if !exists('g:tlib#sys#special_protocols')
|
if !exists('g:tlib#sys#special_protocols')
|
||||||
|
@ -16,14 +16,14 @@ if !exists('g:tlib#sys#special_suffixes')
|
||||||
" A list of |regexp|s matching suffixes that should be handled by
|
" A list of |regexp|s matching suffixes that should be handled by
|
||||||
" |g:tlib#sys#system_browser|.
|
" |g:tlib#sys#system_browser|.
|
||||||
" CAVEAT: Must be a |\V| |regexp|.
|
" CAVEAT: Must be a |\V| |regexp|.
|
||||||
let g:tlib#sys#special_suffixes = ['xlsx\?', 'docx\?', 'pptx\?', 'accdb', 'mdb', 'sqlite', 'pdf', 'jpg', 'png', 'gif'] "{{{2
|
let g:tlib#sys#special_suffixes = ['xlsx\?', 'docx\?', 'pptx\?', 'accdb', 'mdb', 'sqlite', 'pdf', 'jpg', 'png', 'gif', 'od\[tspg]'] "{{{2
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
|
||||||
if !exists('g:tlib#sys#system_rx')
|
if !exists('g:tlib#sys#system_rx')
|
||||||
" Open links matching this |regexp| with |g:tlib#sys#system_browser|.
|
" Open links matching this |regexp| with |g:tlib#sys#system_browser|.
|
||||||
" CAVEAT: Must be a |\V| |regexp|.
|
" CAVEAT: Must be a |\V| |regexp|.
|
||||||
let g:tlib#sys#system_rx = printf('\V\%(\^\%(%s\):\|.\%(%s\)\)', join(g:tlib#sys#special_protocols, '\|'), join(g:tlib#sys#special_suffixes, '\|')) "{{{2
|
let g:tlib#sys#system_rx = printf('\V\%(\^\%(%s\):\|.\%(%s\)\$\)', join(g:tlib#sys#special_protocols, '\|'), join(g:tlib#sys#special_suffixes, '\|')) "{{{2
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
|
||||||
|
@ -39,7 +39,7 @@ if !exists("g:tlib#sys#system_browser")
|
||||||
let g:tlib#sys#system_browser = "exec 'silent !open' shellescape('%s')"
|
let g:tlib#sys#system_browser = "exec 'silent !open' shellescape('%s')"
|
||||||
elseif exists('$XDG_CURRENT_DESKTOP') && !empty($XDG_CURRENT_DESKTOP)
|
elseif exists('$XDG_CURRENT_DESKTOP') && !empty($XDG_CURRENT_DESKTOP)
|
||||||
let g:tlib#sys#system_browser = "exec 'silent !xdg-open' shellescape('%s') '&'"
|
let g:tlib#sys#system_browser = "exec 'silent !xdg-open' shellescape('%s') '&'"
|
||||||
elseif $GNOME_DESKTOP_SESSION_ID != "" || $DESKTOP_SESSION == 'gnome'
|
elseif !empty($GNOME_DESKTOP_SESSION_ID) || $DESKTOP_SESSION ==# 'gnome'
|
||||||
let g:tlib#sys#system_browser = "exec 'silent !gnome-open' shellescape('%s')"
|
let g:tlib#sys#system_browser = "exec 'silent !gnome-open' shellescape('%s')"
|
||||||
elseif exists("$KDEDIR") && !empty($KDEDIR)
|
elseif exists("$KDEDIR") && !empty($KDEDIR)
|
||||||
let g:tlib#sys#system_browser = "exec 'silent !kfmclient exec' shellescape('%s')"
|
let g:tlib#sys#system_browser = "exec 'silent !kfmclient exec' shellescape('%s')"
|
||||||
|
@ -185,9 +185,7 @@ function! tlib#sys#Open(filename) abort "{{{3
|
||||||
Tlibtrace 'tlib', a:filename
|
Tlibtrace 'tlib', a:filename
|
||||||
if !empty(g:tlib#sys#system_browser) && tlib#sys#IsSpecial(a:filename)
|
if !empty(g:tlib#sys#system_browser) && tlib#sys#IsSpecial(a:filename)
|
||||||
try
|
try
|
||||||
let cmd = printf(g:tlib#sys#system_browser, escape(a:filename, ' %#!'))
|
call tlib#sys#OpenWithSystemViewer(a:filename)
|
||||||
Tlibtrace 'tlib', cmd
|
|
||||||
exec cmd
|
|
||||||
return 1
|
return 1
|
||||||
catch
|
catch
|
||||||
echohl ErrorMsg
|
echohl ErrorMsg
|
||||||
|
@ -199,13 +197,22 @@ function! tlib#sys#Open(filename) abort "{{{3
|
||||||
endf
|
endf
|
||||||
|
|
||||||
|
|
||||||
|
" Open filename with the default system viewer.
|
||||||
|
function! tlib#sys#OpenWithSystemViewer(filename) abort "{{{3
|
||||||
|
let cmd = printf(g:tlib#sys#system_browser, a:filename)
|
||||||
|
" let cmd = printf(g:tlib#sys#system_browser, escape(a:filename, ' %#!'))
|
||||||
|
Tlibtrace 'tlib', cmd
|
||||||
|
exec cmd
|
||||||
|
endf
|
||||||
|
|
||||||
|
|
||||||
" :def: function! tlib#sys#SystemInDir(dir, expr, ?input='')
|
" :def: function! tlib#sys#SystemInDir(dir, expr, ?input='')
|
||||||
function! tlib#sys#SystemInDir(dir, ...) abort "{{{3
|
function! tlib#sys#SystemInDir(dir, ...) abort "{{{3
|
||||||
call tlib#dir#CD(a:dir)
|
call tlib#dir#CD(a:dir)
|
||||||
try
|
try
|
||||||
return call(function('system'), a:000)
|
return call(function('system'), a:000)
|
||||||
finally
|
finally
|
||||||
cd! -
|
silent cd! -
|
||||||
endtry
|
endtry
|
||||||
endf
|
endf
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
" @Author: Tom Link (mailto:micathom AT gmail com?subject=[vim])
|
" @Author: Tom Link (mailto:micathom AT gmail com?subject=[vim])
|
||||||
" @Website: http://www.vim.org/account/profile.php?user_id=4037
|
" @Website: http://www.vim.org/account/profile.php?user_id=4037
|
||||||
" @License: GPL (see http://www.gnu.org/licenses/gpl.txt)
|
" @License: GPL (see http://www.gnu.org/licenses/gpl.txt)
|
||||||
" @Revision: 59
|
" @Revision: 64
|
||||||
|
|
||||||
|
|
||||||
" Extra tags for |tlib#tag#Retrieve()| (see there). Can also be buffer-local.
|
" Extra tags for |tlib#tag#Retrieve()| (see there). Can also be buffer-local.
|
||||||
|
@ -47,7 +47,7 @@ TLet g:tlib_tag_substitute = {
|
||||||
" < tags from the JDK will be included.
|
" < tags from the JDK will be included.
|
||||||
function! tlib#tag#Retrieve(rx, ...) "{{{3
|
function! tlib#tag#Retrieve(rx, ...) "{{{3
|
||||||
TVarArg ['extra_tags', 0]
|
TVarArg ['extra_tags', 0]
|
||||||
" TLogVAR a:rx, extra_tags
|
Tlibtrace 'tlib', a:rx, extra_tags
|
||||||
if extra_tags
|
if extra_tags
|
||||||
let tags_orig = &l:tags
|
let tags_orig = &l:tags
|
||||||
if empty(tags_orig)
|
if empty(tags_orig)
|
||||||
|
@ -65,7 +65,8 @@ function! tlib#tag#Retrieve(rx, ...) "{{{3
|
||||||
else
|
else
|
||||||
let taglist = taglist(a:rx)
|
let taglist = taglist(a:rx)
|
||||||
endif
|
endif
|
||||||
return taglist
|
Tlibtrace 'tlib', len(taglist)
|
||||||
|
return copy(taglist)
|
||||||
endf
|
endf
|
||||||
|
|
||||||
|
|
||||||
|
@ -76,7 +77,7 @@ endf
|
||||||
" :def: function! tlib#tag#Collect(constraints, ?use_extra=1, ?match_front=1)
|
" :def: function! tlib#tag#Collect(constraints, ?use_extra=1, ?match_front=1)
|
||||||
function! tlib#tag#Collect(constraints, ...) "{{{3
|
function! tlib#tag#Collect(constraints, ...) "{{{3
|
||||||
TVarArg ['use_extra', 0], ['match_end', 1], ['match_front', 1]
|
TVarArg ['use_extra', 0], ['match_end', 1], ['match_front', 1]
|
||||||
" TLogVAR a:constraints, use_extra
|
Tlibtrace 'tlib', a:constraints, use_extra, match_end, match_front
|
||||||
let rx = get(a:constraints, 'name', '')
|
let rx = get(a:constraints, 'name', '')
|
||||||
if empty(rx) || rx == '*'
|
if empty(rx) || rx == '*'
|
||||||
let rx = '.'
|
let rx = '.'
|
||||||
|
@ -92,9 +93,9 @@ function! tlib#tag#Collect(constraints, ...) "{{{3
|
||||||
endif
|
endif
|
||||||
let rx = join(rxl, '')
|
let rx = join(rxl, '')
|
||||||
endif
|
endif
|
||||||
" TLogVAR rx, use_extra
|
Tlibtrace 'tlib', rx, use_extra
|
||||||
let tags = tlib#tag#Retrieve(rx, use_extra)
|
let tags = tlib#tag#Retrieve(rx, use_extra)
|
||||||
" TLogDBG len(tags)
|
Tlibtrace 'tlib', len(tags)
|
||||||
for [field, rx] in items(a:constraints)
|
for [field, rx] in items(a:constraints)
|
||||||
if !empty(rx) && rx != '*'
|
if !empty(rx) && rx != '*'
|
||||||
" TLogVAR field, rx
|
" TLogVAR field, rx
|
||||||
|
@ -105,7 +106,7 @@ function! tlib#tag#Collect(constraints, ...) "{{{3
|
||||||
endif
|
endif
|
||||||
endif
|
endif
|
||||||
endfor
|
endfor
|
||||||
" TLogVAR tags
|
Tlibtrace 'tlib', len(tags)
|
||||||
return tags
|
return tags
|
||||||
endf
|
endf
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
" @Author: Tom Link (mailto:micathom AT gmail com?subject=[vim])
|
" @Author: Tom Link (mailto:micathom AT gmail com?subject=[vim])
|
||||||
" @Website: http://www.vim.org/account/profile.php?user_id=4037
|
" @Website: http://www.vim.org/account/profile.php?user_id=4037
|
||||||
" @License: GPL (see http://www.gnu.org/licenses/gpl.txt)
|
" @License: GPL (see http://www.gnu.org/licenses/gpl.txt)
|
||||||
" @Revision: 36
|
" @Revision: 42
|
||||||
|
|
||||||
|
|
||||||
function! tlib#time#MSecs() "{{{3
|
function! tlib#time#MSecs() "{{{3
|
||||||
|
@ -65,3 +65,20 @@ function! tlib#time#DiffMSecs(a, b, ...) "{{{3
|
||||||
endf
|
endf
|
||||||
|
|
||||||
|
|
||||||
|
function! tlib#time#Command(cmd, ...) abort "{{{3
|
||||||
|
let loops = a:0 >= 1 ? a:1 : 1
|
||||||
|
let silent = a:0 >= 1 ? a:1 : 0
|
||||||
|
let start = tlib#time#Now()
|
||||||
|
for loop in range(loops)
|
||||||
|
if silent
|
||||||
|
silent! exec a:cmd
|
||||||
|
else
|
||||||
|
exec a:cmd
|
||||||
|
endif
|
||||||
|
endfor
|
||||||
|
let end = tlib#time#Now()
|
||||||
|
let diff = tlib#time#Diff(end, start)
|
||||||
|
echom 'Time:' diff
|
||||||
|
return diff
|
||||||
|
endf
|
||||||
|
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
" @Author: Tom Link (mailto:micathom AT gmail com?subject=[vim])
|
" @Author: Tom Link (mailto:micathom AT gmail com?subject=[vim])
|
||||||
" @Website: https://github.com/tomtom
|
" @Website: https://github.com/tomtom
|
||||||
" @License: GPL (see http://www.gnu.org/licenses/gpl.txt)
|
" @License: GPL (see http://www.gnu.org/licenses/gpl.txt)
|
||||||
" @Last Change: 2015-11-23
|
" @Last Change: 2017-03-09
|
||||||
" @Revision: 134
|
" @Revision: 205
|
||||||
|
|
||||||
|
|
||||||
if !exists('g:tlib#trace#backtrace')
|
if !exists('g:tlib#trace#backtrace')
|
||||||
|
@ -12,19 +12,42 @@ if !exists('g:tlib#trace#backtrace')
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
|
||||||
if !exists('g:tlib#trace#printf')
|
if !exists('g:tlib#trace#printer')
|
||||||
" The command used for printing traces from |tlib#trace#Print()|.
|
" Possible values:
|
||||||
let g:tlib#trace#printf = 'echom %s' "{{{2
|
" - 'echom'
|
||||||
|
" - ['file', FILENAME]
|
||||||
|
let g:tlib#trace#printer = 'echom' "{{{2
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
|
||||||
let s:trace_hl = {'error': 'ErrorMsg', 'fatal': 'ErrorMsg', 'warning': 'WarningMsg'}
|
if !exists('g:tlib#trace#hl')
|
||||||
|
let g:tlib#trace#hl = {'error': 'ErrorMsg', 'fatal': 'ErrorMsg', 'warn': 'WarningMsg'} "{{{2
|
||||||
|
endif
|
||||||
|
|
||||||
|
|
||||||
" Set |g:tlib#trace#printf| to make |tlib#trace#Print()| print to
|
" Print traces from |tlib#trace#Print()|.
|
||||||
" `filename`.
|
function! tlib#trace#Printer_echom(type, text, args) abort "{{{3
|
||||||
function! tlib#trace#PrintToFile(filename) abort "{{{3
|
let hl = get(g:tlib#trace#hl, a:type, '')
|
||||||
let g:tlib#trace#printf = 'call writefile([%s], '. string(a:filename) .', "a")'
|
try
|
||||||
|
if !empty(hl)
|
||||||
|
exec 'echohl' hl
|
||||||
|
endif
|
||||||
|
echom a:text
|
||||||
|
finally
|
||||||
|
if !empty(hl)
|
||||||
|
echohl NONE
|
||||||
|
endif
|
||||||
|
endtry
|
||||||
|
endf
|
||||||
|
|
||||||
|
|
||||||
|
function! tlib#trace#Printer_file(type, text, args) abort "{{{3
|
||||||
|
let filename = get(a:args, 0, '')
|
||||||
|
if exists(filename) && !filewritable(filename)
|
||||||
|
throw 'tlib#trace#Printer_file: Cannot write to file: '. filename
|
||||||
|
else
|
||||||
|
call writefile([a:text], filename, 'a')
|
||||||
|
endif
|
||||||
endf
|
endf
|
||||||
|
|
||||||
|
|
||||||
|
@ -34,26 +57,58 @@ endf
|
||||||
" Examples:
|
" Examples:
|
||||||
" call tlib#trace#Set(["+foo", "-bar"])
|
" call tlib#trace#Set(["+foo", "-bar"])
|
||||||
" call tlib#trace#Set("+foo,-bar")
|
" call tlib#trace#Set("+foo,-bar")
|
||||||
function! tlib#trace#Set(vars) abort "{{{3
|
function! tlib#trace#Set(vars, ...) abort "{{{3
|
||||||
|
let reset = a:0 >= 1 ? a:1 : 0
|
||||||
|
if reset
|
||||||
|
call tlib#trace#Reset()
|
||||||
|
endif
|
||||||
|
if empty(a:vars)
|
||||||
|
return
|
||||||
|
endif
|
||||||
call tlib#trace#Enable()
|
call tlib#trace#Enable()
|
||||||
if type(a:vars) == 1
|
if type(a:vars) == v:t_string
|
||||||
let vars = tlib#string#SplitCommaList(a:vars, '[,[:space:]]\+')
|
let vars = tlib#string#SplitCommaList(a:vars, '[,[:space:]]\+')
|
||||||
|
let opts = {}
|
||||||
|
elseif type(a:vars) == v:t_dict
|
||||||
|
let vars = a:vars.__rest__
|
||||||
|
if has_key(a:vars, 'file')
|
||||||
|
let g:tlib#trace#printer = ['file', a:vars.file]
|
||||||
|
endif
|
||||||
|
if has_key(a:vars, 'echo')
|
||||||
|
let g:tlib#trace#printer = 'echom'
|
||||||
|
endif
|
||||||
else
|
else
|
||||||
let vars = a:vars
|
let vars = a:vars
|
||||||
|
let opts = {}
|
||||||
endif
|
endif
|
||||||
|
" TLogVAR vars
|
||||||
for rx in vars
|
for rx in vars
|
||||||
let rx1 = substitute(rx, '^[+-]', '', 'g')
|
let rx1 = substitute(rx, '^[+-]', '', 'g')
|
||||||
if rx1 !~# '^\%(error\|fatal\)$' && s:trace_rx !~# '[(|]'. tlib#rx#Escape(rx1) .'\\'
|
if rx1 !~# '^\%(error\|warn\|fatal\)$'
|
||||||
|
let erx1 = tlib#rx#Escape(rx1)
|
||||||
" TLogVAR rx, rx1
|
" TLogVAR rx, rx1
|
||||||
if rx =~ '^+'
|
" echom "DBG" s:trace_rx
|
||||||
let s:trace_rx = substitute(s:trace_rx, '\ze\\)\$', '\\|'. tlib#rx#EscapeReplace(rx1), '')
|
if rx =~ '^-'
|
||||||
elseif rx =~ '^-'
|
let erx1 .= '\[0-\d\]\\?'
|
||||||
let s:trace_rx = substitute(s:trace_rx, '\\|'. tlib#rx#Escape(rx1), '', '')
|
if s:trace_rx =~# '[(|]'. erx1 .'\\'
|
||||||
|
let s:trace_rx = substitute(s:trace_rx, '\\|'. erx1, '', '')
|
||||||
|
endif
|
||||||
|
" elseif rx =~ '^+'
|
||||||
else
|
else
|
||||||
echohl WarningMsg
|
if erx1 =~ '\d$'
|
||||||
echom 'tlib#trace#Print: Unsupported syntax:' rx
|
let erx1 = substitute(erx1, '\d$', '[0-\0]\\?', '')
|
||||||
echohl NONE
|
else
|
||||||
|
let erx1 .= '[0-9]\?'
|
||||||
|
endif
|
||||||
|
if s:trace_rx !~# '[(|]'. erx1 .'\\'
|
||||||
|
let s:trace_rx = substitute(s:trace_rx, '\ze\\)\$', '\\|'. escape(erx1, '\'), '')
|
||||||
|
endif
|
||||||
|
" else
|
||||||
|
" echohl WarningMsg
|
||||||
|
" echom 'tlib#trace#Print: Unsupported syntax:' rx
|
||||||
|
" echohl NONE
|
||||||
endif
|
endif
|
||||||
|
" echom "DBG" s:trace_rx
|
||||||
endif
|
endif
|
||||||
endfor
|
endfor
|
||||||
echom "SetTrace:" s:trace_rx
|
echom "SetTrace:" s:trace_rx
|
||||||
|
@ -71,6 +126,7 @@ endf
|
||||||
" Print the values of vars. The first value is a "guard" (see
|
" Print the values of vars. The first value is a "guard" (see
|
||||||
" |:Tlibtrace|).
|
" |:Tlibtrace|).
|
||||||
function! tlib#trace#Print(caller, vars, values) abort "{{{3
|
function! tlib#trace#Print(caller, vars, values) abort "{{{3
|
||||||
|
" echom "DBG tlib#trace#Print" string(a:vars) string(a:values)
|
||||||
let msg = ['TRACE']
|
let msg = ['TRACE']
|
||||||
let guard = a:values[0]
|
let guard = a:values[0]
|
||||||
if type(guard) == 0
|
if type(guard) == 0
|
||||||
|
@ -88,22 +144,47 @@ function! tlib#trace#Print(caller, vars, values) abort "{{{3
|
||||||
call add(msg, bt .':')
|
call add(msg, bt .':')
|
||||||
endif
|
endif
|
||||||
endif
|
endif
|
||||||
for i in range(1, len(a:vars) - 1)
|
if len(a:vars) == len(a:values)
|
||||||
let v = substitute(a:vars[i], ',$', '', '')
|
for i in range(1, len(a:vars) - 1)
|
||||||
let r = string(a:values[i])
|
let v = substitute(a:vars[i], ',$', '', '')
|
||||||
call add(msg, v .'='. r .';')
|
if type(a:values[i]) == v:t_func
|
||||||
endfor
|
let r = string(a:values[i])
|
||||||
exec printf(g:tlib#trace#printf, string(join(msg)))
|
else
|
||||||
|
let r = a:values[i]
|
||||||
|
endif
|
||||||
|
if v =~# '^\([''"]\).\{-}\1$'
|
||||||
|
call add(msg, r .';')
|
||||||
|
else
|
||||||
|
call add(msg, v .'='. string(r) .';')
|
||||||
|
endif
|
||||||
|
unlet r
|
||||||
|
endfor
|
||||||
|
else
|
||||||
|
call add(msg, join(a:values[1:-1]))
|
||||||
|
endif
|
||||||
|
if type(g:tlib#trace#printer) == v:t_string
|
||||||
|
let printer = g:tlib#trace#printer
|
||||||
|
let args = []
|
||||||
|
else
|
||||||
|
let [printer; args] = g:tlib#trace#printer
|
||||||
|
endif
|
||||||
|
call tlib#trace#Printer_{printer}(guard, join(msg), args)
|
||||||
endif
|
endif
|
||||||
endf
|
endf
|
||||||
|
|
||||||
|
|
||||||
|
function! tlib#trace#Reset() abort "{{{3
|
||||||
|
let s:trace_rx = '^\%(error\|fatal\|warn\|info\)$'
|
||||||
|
let g:tlib#trace#printer = 'echom'
|
||||||
|
endf
|
||||||
|
|
||||||
|
|
||||||
" Enable tracing via |:Tlibtrace|.
|
" Enable tracing via |:Tlibtrace|.
|
||||||
function! tlib#trace#Enable() abort "{{{3
|
function! tlib#trace#Enable() abort "{{{3
|
||||||
if !exists('s:trace_rx')
|
if !exists('s:trace_rx')
|
||||||
let s:trace_rx = '^\%(error\)$'
|
call tlib#trace#Reset()
|
||||||
" :nodoc:
|
" :nodoc:
|
||||||
command! -nargs=+ -bar Tlibtrace call tlib#trace#Print(expand('<sfile>'), [<f-args>], [<args>])
|
command! -nargs=+ -bang Tlibtrace call tlib#trace#Print(expand('<sfile>'), [<f-args>], [<args>])
|
||||||
endif
|
endif
|
||||||
endf
|
endf
|
||||||
|
|
||||||
|
@ -111,7 +192,7 @@ endf
|
||||||
" Disable tracing via |:Tlibtrace|.
|
" Disable tracing via |:Tlibtrace|.
|
||||||
function! tlib#trace#Disable() abort "{{{3
|
function! tlib#trace#Disable() abort "{{{3
|
||||||
" :nodoc:
|
" :nodoc:
|
||||||
command! -nargs=+ -bang -bar Tlibtrace :
|
command! -nargs=+ -bang Tlibtrace :
|
||||||
unlet! s:trace_rx
|
unlet! s:trace_rx
|
||||||
endf
|
endf
|
||||||
|
|
||||||
|
|
|
@ -2,8 +2,30 @@
|
||||||
" @Website: http://www.vim.org/account/profile.php?user_id=4037
|
" @Website: http://www.vim.org/account/profile.php?user_id=4037
|
||||||
" @License: GPL (see http://www.gnu.org/licenses/gpl.txt)
|
" @License: GPL (see http://www.gnu.org/licenses/gpl.txt)
|
||||||
" @Created: 2007-09-30.
|
" @Created: 2007-09-30.
|
||||||
" @Last Change: 2015-11-23.
|
" @Last Change: 2017-02-22.
|
||||||
" @Revision: 6
|
" @Revision: 57
|
||||||
|
|
||||||
|
|
||||||
|
let g:tlib#type#nil = []
|
||||||
|
|
||||||
|
|
||||||
|
" Enable type assertiona via |:Tlibtype|.
|
||||||
|
function! tlib#type#Enable() abort "{{{3
|
||||||
|
" :nodoc:
|
||||||
|
command! -nargs=+ Tlibtype call tlib#type#Check(expand('<sfile>'), [<f-args>], [<args>])
|
||||||
|
endf
|
||||||
|
|
||||||
|
|
||||||
|
" Disable type assertiona via |:Tlibtype|.
|
||||||
|
function! tlib#type#Disable() abort "{{{3
|
||||||
|
" :nodoc:
|
||||||
|
command! -nargs=+ Tlibtype :
|
||||||
|
endf
|
||||||
|
|
||||||
|
|
||||||
|
function! tlib#type#IsNil(expr) abort "{{{3
|
||||||
|
return tlib#type#Is(a:expr, v:t_none) || a:expr is g:tlib#type#nil
|
||||||
|
endf
|
||||||
|
|
||||||
|
|
||||||
function! tlib#type#IsNumber(expr)
|
function! tlib#type#IsNumber(expr)
|
||||||
|
@ -32,25 +54,37 @@ endf
|
||||||
|
|
||||||
|
|
||||||
function! tlib#type#Is(val, type) abort "{{{3
|
function! tlib#type#Is(val, type) abort "{{{3
|
||||||
if type(a:type) == 0
|
if has_key(s:schemas, a:type)
|
||||||
let type = a:type
|
return tlib#type#Has(a:val, a:type)
|
||||||
elseif a:type =~? '^n\%[umber]'
|
|
||||||
let type = 0
|
|
||||||
elseif a:type =~? '^s\%[tring]'
|
|
||||||
let type = 1
|
|
||||||
elseif a:type =~? '^fu\%[ncref]'
|
|
||||||
let type = 2
|
|
||||||
elseif a:type =~? '^l\%[ist]'
|
|
||||||
let type = 3
|
|
||||||
elseif a:type =~? '^d\%[ictionary]'
|
|
||||||
let type = 4
|
|
||||||
elseif a:type =~? '^fl\%[oat]'
|
|
||||||
let type = 5
|
|
||||||
else
|
else
|
||||||
throw 'tlib#type#Is: Unknown type: ' a:type
|
if type(a:type) == 0
|
||||||
|
let type = a:type
|
||||||
|
elseif a:type =~? '^b\%[oolean]$'
|
||||||
|
let type = v:t_bool
|
||||||
|
elseif a:type =~? '^c\%[hannel]$'
|
||||||
|
let type = v:t_channel
|
||||||
|
elseif a:type =~? '^d\%[ictionary]$'
|
||||||
|
let type = v:t_dict
|
||||||
|
elseif a:type =~? '^fl\%[oat]$'
|
||||||
|
let type = v:t_float
|
||||||
|
elseif a:type =~? '^fu\%[ncref]$'
|
||||||
|
let type = v:t_func
|
||||||
|
elseif a:type =~? '^j\%[ob]$'
|
||||||
|
let type = v:t_job
|
||||||
|
elseif a:type =~? '^l\%[ist]$'
|
||||||
|
let type = v:t_list
|
||||||
|
elseif a:type =~? '^\%(nil\|null\|none\)$'
|
||||||
|
let type = v:t_none
|
||||||
|
elseif a:type =~? '^n\%[umber]$'
|
||||||
|
let type = v:t_number
|
||||||
|
elseif a:type =~? '^s\%[tring]$'
|
||||||
|
let type = v:t_string
|
||||||
|
else
|
||||||
|
throw 'tlib#type#Is: Unknown type: ' a:type
|
||||||
|
endif
|
||||||
|
Tlibtrace 'tlib', a:val, a:type, type, type(a:val), type(a:val) == a:type
|
||||||
|
return type(a:val) == type
|
||||||
endif
|
endif
|
||||||
" TLogVAR a:val, a:type, type, type(a:val), type(a:val) == a:type
|
|
||||||
return type(a:val) == type
|
|
||||||
endf
|
endf
|
||||||
|
|
||||||
|
|
||||||
|
@ -59,13 +93,50 @@ function! tlib#type#Are(vals, type) abort "{{{3
|
||||||
endf
|
endf
|
||||||
|
|
||||||
|
|
||||||
function! tlib#type#Has(val, lst) abort "{{{3
|
let s:schemas = {}
|
||||||
return tlib#assert#All(map(a:lst, 'has_key(a:val, v:val)'))
|
|
||||||
|
|
||||||
|
function! tlib#type#Define(name, schema) abort "{{{3
|
||||||
|
let s:schemas[a:name] = deepcopy(a:schema)
|
||||||
endf
|
endf
|
||||||
|
|
||||||
|
|
||||||
function! tlib#type#Have(vals, lst) abort "{{{3
|
function! tlib#type#Has(val, schema) abort "{{{3
|
||||||
return tlib#assert#Map(a:vals, 'tlib#type#Has(v:val,'. string(a:lst) .')')
|
Tlibtrace 'tlib', type(a:val), type(a:schema)
|
||||||
|
if !tlib#type#IsDictionary(a:val)
|
||||||
|
Tlibtrace 'tlib', 'not a dictionary', a:val
|
||||||
|
return 0
|
||||||
|
endif
|
||||||
|
if tlib#type#IsString(a:schema)
|
||||||
|
Tlibtrace 'tlib', a:schema
|
||||||
|
let schema = copy(s:schemas[a:schema])
|
||||||
|
else
|
||||||
|
let schema = copy(a:schema)
|
||||||
|
endif
|
||||||
|
if tlib#type#IsDictionary(schema)
|
||||||
|
return tlib#assert#All(map(schema, 'has_key(a:val, v:key) && tlib#type#Is(a:val[v:key], v:val)'))
|
||||||
|
else
|
||||||
|
Tlibtrace 'tlib', keys(a:val), schema
|
||||||
|
return tlib#assert#All(map(schema, 'has_key(a:val, v:val)'))
|
||||||
|
endif
|
||||||
endf
|
endf
|
||||||
|
|
||||||
|
|
||||||
|
function! tlib#type#Have(vals, schema) abort "{{{3
|
||||||
|
return tlib#assert#Map(a:vals, 'tlib#type#Has(v:val,'. string(a:schema) .')')
|
||||||
|
endf
|
||||||
|
|
||||||
|
|
||||||
|
function! tlib#type#Check(caller, names, vals) abort "{{{3
|
||||||
|
Tlibtrace 'tlib', a:names, a:vals, len(a:names)
|
||||||
|
for i in range(0, len(a:names) - 1, 2)
|
||||||
|
let val = a:vals[i]
|
||||||
|
let type = a:vals[i + 1]
|
||||||
|
Tlibtrace 'tlib', i, val, type
|
||||||
|
if !tlib#type#Is(val, type)
|
||||||
|
let name = matchstr(a:names[i], '^''\zs.\{-}\ze'',\?$')
|
||||||
|
throw 'tlib#type#Check: Type mismatch: '. name .':'. a:vals[i + 1]
|
||||||
|
endif
|
||||||
|
endfor
|
||||||
|
endf
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
" @Author: Tom Link (micathom AT gmail com?subject=[vim])
|
" @Author: Tom Link (micathom AT gmail com?subject=[vim])
|
||||||
" @Website: http://www.vim.org/account/profile.php?user_id=4037
|
" @Website: http://www.vim.org/account/profile.php?user_id=4037
|
||||||
" @License: GPL (see http://www.gnu.org/licenses/gpl.txt)
|
" @License: GPL (see http://www.gnu.org/licenses/gpl.txt)
|
||||||
" @Revision: 30
|
" @Revision: 34
|
||||||
|
|
||||||
|
|
||||||
" Define a variable called NAME if yet undefined.
|
" Define a variable called NAME if yet undefined.
|
||||||
|
@ -52,10 +52,17 @@ endf
|
||||||
function! tlib#var#Get(var, namespace, ...) "{{{3
|
function! tlib#var#Get(var, namespace, ...) "{{{3
|
||||||
let var_ = substitute(a:var, '#', '_', 'g')
|
let var_ = substitute(a:var, '#', '_', 'g')
|
||||||
for namespace in split(a:namespace, '\zs')
|
for namespace in split(a:namespace, '\zs')
|
||||||
let vname = namespace == 'g' ? a:var : var_
|
let vname = namespace ==# 'g' ? a:var : var_
|
||||||
let var = namespace .':'. vname
|
let var = namespace .':'. vname
|
||||||
if exists(var)
|
if exists(var)
|
||||||
return {var}
|
return {var}
|
||||||
|
elseif namespace ==# 'g'
|
||||||
|
try
|
||||||
|
let val = {var}
|
||||||
|
catch /^Vim\%((\a\+)\)\=:E\(121\|15\)/
|
||||||
|
continue
|
||||||
|
endtry
|
||||||
|
return val
|
||||||
endif
|
endif
|
||||||
endfor
|
endfor
|
||||||
return a:0 >= 1 ? a:1 : ''
|
return a:0 >= 1 ? a:1 : ''
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
" @Author: Tom Link (mailto:micathom AT gmail com?subject=[vim])
|
" @Author: Tom Link (mailto:micathom AT gmail com?subject=[vim])
|
||||||
" @License: GPL (see http://www.gnu.org/licenses/gpl.txt)
|
" @License: GPL (see http://www.gnu.org/licenses/gpl.txt)
|
||||||
" @Created: 2012-03-08.
|
" @Created: 2012-03-08.
|
||||||
" @Last Change: 2015-11-07.
|
" @Last Change: 2017-04-10.
|
||||||
" @Revision: 190
|
" @Revision: 224
|
||||||
|
|
||||||
scriptencoding utf-8
|
scriptencoding utf-8
|
||||||
|
|
||||||
|
@ -14,21 +14,19 @@ TLet g:tlib#vcs#def = {
|
||||||
\ 'dir': '.git',
|
\ 'dir': '.git',
|
||||||
\ 'ls': 'git ls-files --full-name',
|
\ 'ls': 'git ls-files --full-name',
|
||||||
\ 'ls.postprocess': '*tlib#vcs#GitLsPostprocess',
|
\ 'ls.postprocess': '*tlib#vcs#GitLsPostprocess',
|
||||||
\ 'diff': 'git diff --no-ext-diff -U0 %s'
|
\ 'diff': 'git diff --no-ext-diff -U0 %s',
|
||||||
\ },
|
\ 'status': 'git status -s',
|
||||||
|
\ 'status.filterrx': '^\C[ MADRCU!?]\{2}\s'},
|
||||||
\ 'hg': {
|
\ 'hg': {
|
||||||
\ 'dir': '.hg',
|
\ 'dir': '.hg',
|
||||||
\ 'diff': 'hg diff -U0 %s',
|
\ 'diff': 'hg diff -U0 %s',
|
||||||
\ 'ls': 'hg manifest'
|
\ 'ls': 'hg manifest'},
|
||||||
\ },
|
|
||||||
\ 'svn': {
|
\ 'svn': {
|
||||||
\ 'dir': '.svn',
|
\ 'dir': '.svn',
|
||||||
\ 'diff': 'svn diff --diff-cmd diff --extensions -U0 %s',
|
\ 'diff': 'svn diff --diff-cmd diff --extensions -U0 %s'},
|
||||||
\ },
|
|
||||||
\ 'bzr': {
|
\ 'bzr': {
|
||||||
\ 'dir': '.bzr',
|
\ 'dir': '.bzr',
|
||||||
\ 'diff': 'bzr diff --diff-options=-U0 %s',
|
\ 'diff': 'bzr diff --diff-options=-U0 %s'}
|
||||||
\ }
|
|
||||||
\ }
|
\ }
|
||||||
|
|
||||||
|
|
||||||
|
@ -36,7 +34,7 @@ TLet g:tlib#vcs#def = {
|
||||||
" empty, support for that VCS will be removed. If no key is present, it
|
" empty, support for that VCS will be removed. If no key is present, it
|
||||||
" is assumed that the VCS "type" is the name of the executable.
|
" is assumed that the VCS "type" is the name of the executable.
|
||||||
" :display: g:tlib#vcs#executables {...}
|
" :display: g:tlib#vcs#executables {...}
|
||||||
TLet g:tlib#vcs#executables = {}
|
TLet g:tlib#vcs#executables = {}
|
||||||
|
|
||||||
|
|
||||||
" If non-empty, use it as a format string to check whether a VCS is
|
" If non-empty, use it as a format string to check whether a VCS is
|
||||||
|
@ -60,36 +58,44 @@ function! tlib#vcs#Executable(type) "{{{3
|
||||||
endf
|
endf
|
||||||
|
|
||||||
|
|
||||||
|
let s:vcs_cache = {}
|
||||||
|
autocmd TLib FocusGained * let s:vcs_cache = {}
|
||||||
|
|
||||||
|
|
||||||
function! tlib#vcs#FindVCS(filename) "{{{3
|
function! tlib#vcs#FindVCS(filename) "{{{3
|
||||||
let type = ''
|
let type = ''
|
||||||
let dir = ''
|
let dir = ''
|
||||||
let dirname = fnamemodify(a:filename, isdirectory(a:filename) ? ':p' : ':p:h')
|
let filename = fnamemodify(a:filename, ':p')
|
||||||
let path = escape(dirname, ';') .';'
|
let dirname = isdirectory(filename) ? filename : fnamemodify(filename, ':h')
|
||||||
" TLogVAR a:filename, dirname, path
|
if !has_key(s:vcs_cache, dirname)
|
||||||
Tlibtrace 'tlib', a:filename, path
|
let path = escape(dirname, ';') .';'
|
||||||
let depth = -1
|
" TLogVAR filename, dirname, path
|
||||||
for vcs in keys(g:tlib#vcs#def)
|
Tlibtrace 'tlib', filename, path
|
||||||
let subdir = g:tlib#vcs#def[vcs].dir
|
let depth = -1
|
||||||
let vcsdir = finddir(subdir, path)
|
for vcs in keys(g:tlib#vcs#def)
|
||||||
" TLogVAR vcs, subdir, vcsdir
|
let subdir = g:tlib#vcs#def[vcs].dir
|
||||||
Tlibtrace 'tlib', vcs, subdir, vcsdir
|
let vcsdir = finddir(subdir, path)
|
||||||
if !empty(vcsdir)
|
" TLogVAR vcs, subdir, vcsdir
|
||||||
let vcsdir_depth = len(split(fnamemodify(vcsdir, ':p'), '\/'))
|
Tlibtrace 'tlib', vcs, subdir, vcsdir
|
||||||
if vcsdir_depth > depth
|
if !empty(vcsdir)
|
||||||
let depth = vcsdir_depth
|
let vcsdir_depth = len(split(fnamemodify(vcsdir, ':p'), '\/'))
|
||||||
let type = vcs
|
if vcsdir_depth > depth
|
||||||
let dir = vcsdir
|
let depth = vcsdir_depth
|
||||||
" TLogVAR type, depth
|
let type = vcs
|
||||||
|
let dir = vcsdir
|
||||||
|
" TLogVAR type, depth
|
||||||
|
endif
|
||||||
endif
|
endif
|
||||||
|
endfor
|
||||||
|
Tlibtrace 'tlib', type, dir
|
||||||
|
" TLogVAR type, dir
|
||||||
|
if empty(type)
|
||||||
|
let s:vcs_cache[dirname] = ['', '']
|
||||||
|
else
|
||||||
|
let s:vcs_cache[dirname] = [type, dir]
|
||||||
endif
|
endif
|
||||||
endfor
|
|
||||||
Tlibtrace 'tlib', type, dir
|
|
||||||
" TLogVAR type, dir
|
|
||||||
if empty(type)
|
|
||||||
return ['', '']
|
|
||||||
else
|
|
||||||
return [type, dir]
|
|
||||||
endif
|
endif
|
||||||
|
return s:vcs_cache[dirname]
|
||||||
endf
|
endf
|
||||||
|
|
||||||
|
|
||||||
|
@ -97,7 +103,7 @@ function! s:GetCmd(vcstype, cmd)
|
||||||
let vcsdef = get(g:tlib#vcs#def, a:vcstype, {})
|
let vcsdef = get(g:tlib#vcs#def, a:vcstype, {})
|
||||||
if has_key(vcsdef, a:cmd)
|
if has_key(vcsdef, a:cmd)
|
||||||
let cmd = vcsdef[a:cmd]
|
let cmd = vcsdef[a:cmd]
|
||||||
if cmd =~ '^\*'
|
if cmd =~# '^\*'
|
||||||
let cmd = substitute(cmd, '^\*', '', '')
|
let cmd = substitute(cmd, '^\*', '', '')
|
||||||
else
|
else
|
||||||
let bin = get(g:tlib#vcs#executables, a:vcstype, '')
|
let bin = get(g:tlib#vcs#executables, a:vcstype, '')
|
||||||
|
@ -134,7 +140,7 @@ function! tlib#vcs#Ls(...) "{{{3
|
||||||
if !empty(ls)
|
if !empty(ls)
|
||||||
let rootdir = fnamemodify(vcsdir, ':p:h:h')
|
let rootdir = fnamemodify(vcsdir, ':p:h:h')
|
||||||
" TLogVAR vcsdir, rootdir
|
" TLogVAR vcsdir, rootdir
|
||||||
if ls =~ '%s'
|
if ls =~# '%s'
|
||||||
let cmd = printf(ls, shellescape(rootdir))
|
let cmd = printf(ls, shellescape(rootdir))
|
||||||
else
|
else
|
||||||
let cmd = ls
|
let cmd = ls
|
||||||
|
@ -176,7 +182,7 @@ endf
|
||||||
|
|
||||||
|
|
||||||
function! tlib#vcs#GitLsPostprocess(filename) abort "{{{3
|
function! tlib#vcs#GitLsPostprocess(filename) abort "{{{3
|
||||||
if a:filename =~ '^".\{-}"$'
|
if a:filename =~# '^".\{-}"$'
|
||||||
let filename = matchstr(a:filename, '^"\zs.\{-}\ze"$')
|
let filename = matchstr(a:filename, '^"\zs.\{-}\ze"$')
|
||||||
let filename = substitute(filename, '\%(\\\@<!\\\(\d\d\d\)\)\+', '\=eval(''"''. submatch(0) .''"'')', 'g')
|
let filename = substitute(filename, '\%(\\\@<!\\\(\d\d\d\)\)\+', '\=eval(''"''. submatch(0) .''"'')', 'g')
|
||||||
" let filename = eval(a:filename)
|
" let filename = eval(a:filename)
|
||||||
|
@ -187,3 +193,38 @@ function! tlib#vcs#GitLsPostprocess(filename) abort "{{{3
|
||||||
endif
|
endif
|
||||||
endf
|
endf
|
||||||
|
|
||||||
|
|
||||||
|
function! tlib#vcs#Status(...) abort "{{{3
|
||||||
|
let filename = a:0 >= 1 ? a:1 : '%'
|
||||||
|
let vcs = a:0 >= 2 ? a:2 : tlib#vcs#FindVCS(filename)
|
||||||
|
if !empty(vcs)
|
||||||
|
let [vcstype, vcsdir] = vcs
|
||||||
|
let cstatus = s:GetCmd(vcstype, 'status')
|
||||||
|
if !empty(cstatus)
|
||||||
|
let status = exists('*systemlist') ? systemlist(cstatus) : split(system(cstatus), '\n')
|
||||||
|
let sfilter = s:GetCmd(vcstype, 'status.filterrx')
|
||||||
|
if !empty(sfilter)
|
||||||
|
let status = filter(status, 'v:val =~# sfilter')
|
||||||
|
endif
|
||||||
|
return status
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
endf
|
||||||
|
|
||||||
|
|
||||||
|
function! tlib#vcs#IsDirty(...) abort "{{{3
|
||||||
|
let filename = a:0 >= 1 ? a:1 : '%'
|
||||||
|
let vcs = a:0 >= 2 ? a:2 : tlib#vcs#FindVCS(filename)
|
||||||
|
let status = tlib#vcs#Status(filename, vcs)
|
||||||
|
return empty(status) ? '' : vcs[0] .'!'
|
||||||
|
endf
|
||||||
|
|
||||||
|
|
||||||
|
" function! tlib#vcs#EnableTStatus() abort "{{{3
|
||||||
|
" if has('vim_starting')
|
||||||
|
" autocmd VimEnter * TStatusregister1 --event=FocusGained,BufRead,BufWritePost %s tlib#vcs#IsDirty()
|
||||||
|
" else
|
||||||
|
" TStatusregister1 --event=FocusGained,BufRead,BufWritePost %s tlib#vcs#IsDirty()
|
||||||
|
" endif
|
||||||
|
" endf
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,12 @@
|
||||||
" @Author: Tom Link (micathom AT gmail com?subject=[vim])
|
" @Author: Tom Link (micathom AT gmail com?subject=[vim])
|
||||||
" @Website: http://www.vim.org/account/profile.php?user_id=4037
|
" @Website: http://www.vim.org/account/profile.php?user_id=4037
|
||||||
" @License: GPL (see http://www.gnu.org/licenses/gpl.txt)
|
" @License: GPL (see http://www.gnu.org/licenses/gpl.txt)
|
||||||
" @Revision: 55
|
" @Revision: 84
|
||||||
|
|
||||||
|
|
||||||
|
if !exists('g:tlib#win#use_winid')
|
||||||
|
let g:tlib#win#use_winid = exists('*win_gotoid') && exists('*win_getid') "{{{2
|
||||||
|
endif
|
||||||
|
|
||||||
|
|
||||||
" Return vim code to jump back to the original window.
|
" Return vim code to jump back to the original window.
|
||||||
|
@ -20,6 +25,70 @@ function! tlib#win#Set(winnr) "{{{3
|
||||||
endif
|
endif
|
||||||
return ''
|
return ''
|
||||||
endf
|
endf
|
||||||
|
|
||||||
|
|
||||||
|
if g:tlib#win#use_winid
|
||||||
|
let g:tlib#win#null_id = -1
|
||||||
|
function! tlib#win#GetID() abort "{{{3
|
||||||
|
return win_getid()
|
||||||
|
endf
|
||||||
|
function! tlib#win#GotoID(win_id) abort "{{{3
|
||||||
|
call win_gotoid(a:win_id)
|
||||||
|
endf
|
||||||
|
else
|
||||||
|
let s:win_id = 0
|
||||||
|
let g:tlib#win#null_id = {}
|
||||||
|
function! tlib#win#GetID() abort "{{{3
|
||||||
|
if !exists('w:tlib_win_id')
|
||||||
|
let s:win_id += 1
|
||||||
|
let w:tlib_win_id = s:win_id
|
||||||
|
endif
|
||||||
|
return {'tabpagenr': tabpagenr(), 'bufnr': bufnr('%'), 'winnr': winnr(), 'win_id': w:tlib_win_id}
|
||||||
|
endf
|
||||||
|
function! tlib#win#GotoID(win_id) abort "{{{3
|
||||||
|
Tlibtrace 'tlib', a:win_id
|
||||||
|
if tabpagenr() != a:win_id.tabpagenr
|
||||||
|
exec 'tabnext' a:win_id.tabpagenr
|
||||||
|
endif
|
||||||
|
for wnr in range(1, winnr('$'))
|
||||||
|
let win_id = getwinvar(wnr, 'tlib_win_id', -1)
|
||||||
|
Tlibtrace 'tlib', wnr, win_id
|
||||||
|
if win_id == a:win_id.win_id
|
||||||
|
Tlibtrace 'tlib', wnr
|
||||||
|
exec wnr 'wincmd w'
|
||||||
|
return
|
||||||
|
endif
|
||||||
|
endfor
|
||||||
|
" Was the window closed? What should we do now?
|
||||||
|
if winnr() != a:win_id.winnr
|
||||||
|
exec a:win_id.winnr 'wincmd w'
|
||||||
|
endif
|
||||||
|
if bufnr('%') != a:win_id.bufnr
|
||||||
|
exec 'hide buffer' a:win_id.bufnr
|
||||||
|
endif
|
||||||
|
endf
|
||||||
|
endif
|
||||||
|
|
||||||
|
|
||||||
|
" Return vim code to jump back to the original window.
|
||||||
|
function! tlib#win#SetById(win_id) "{{{3
|
||||||
|
if a:win_id != g:tlib#win#null_id
|
||||||
|
let win_id = tlib#win#GetID()
|
||||||
|
call tlib#win#GotoID(a:win_id)
|
||||||
|
return printf('call tlib#win#GotoID(%s)', win_id)
|
||||||
|
" " TLogVAR a:winnr
|
||||||
|
" " TLogDBG winnr()
|
||||||
|
" " TLogDBG string(tlib#win#List())
|
||||||
|
" if winnr() != a:winnr && winbufnr(a:winnr) != -1
|
||||||
|
" let rv = winnr().'wincmd w'
|
||||||
|
" exec a:winnr .'wincmd w'
|
||||||
|
" " TLogVAR rv
|
||||||
|
" " TLogDBG string(tlib#win#List())
|
||||||
|
" return rv
|
||||||
|
" endif
|
||||||
|
endif
|
||||||
|
return ''
|
||||||
|
endf
|
||||||
|
|
||||||
|
|
||||||
" :def: function! tlib#win#GetLayout(?save_view=0)
|
" :def: function! tlib#win#GetLayout(?save_view=0)
|
||||||
|
|
223
sources_non_forked/tlib/doc/tags
Normal file
223
sources_non_forked/tlib/doc/tags
Normal file
|
@ -0,0 +1,223 @@
|
||||||
|
:TBrowseOutput tlib.txt /*:TBrowseOutput*
|
||||||
|
:TBrowseScriptnames tlib.txt /*:TBrowseScriptnames*
|
||||||
|
:TLet tlib.txt /*:TLet*
|
||||||
|
:TScratch tlib.txt /*:TScratch*
|
||||||
|
:TVarArg tlib.txt /*:TVarArg*
|
||||||
|
:Tbrowseloc tlib.txt /*:Tbrowseloc*
|
||||||
|
:Tbrowseqfl tlib.txt /*:Tbrowseqfl*
|
||||||
|
:Texecloc tlib.txt /*:Texecloc*
|
||||||
|
:Texecqfl tlib.txt /*:Texecqfl*
|
||||||
|
:Tlibtrace tlib.txt /*:Tlibtrace*
|
||||||
|
:Tlibtraceset tlib.txt /*:Tlibtraceset*
|
||||||
|
autoload/tlib/Filter_cnf.vim tlib.txt /*autoload\/tlib\/Filter_cnf.vim*
|
||||||
|
autoload/tlib/Filter_cnfd.vim tlib.txt /*autoload\/tlib\/Filter_cnfd.vim*
|
||||||
|
autoload/tlib/Filter_fuzzy.vim tlib.txt /*autoload\/tlib\/Filter_fuzzy.vim*
|
||||||
|
autoload/tlib/Filter_glob.vim tlib.txt /*autoload\/tlib\/Filter_glob.vim*
|
||||||
|
autoload/tlib/Object.vim tlib.txt /*autoload\/tlib\/Object.vim*
|
||||||
|
autoload/tlib/World.vim tlib.txt /*autoload\/tlib\/World.vim*
|
||||||
|
autoload/tlib/agent.vim tlib.txt /*autoload\/tlib\/agent.vim*
|
||||||
|
autoload/tlib/arg.vim tlib.txt /*autoload\/tlib\/arg.vim*
|
||||||
|
autoload/tlib/assert.vim tlib.txt /*autoload\/tlib\/assert.vim*
|
||||||
|
autoload/tlib/buffer.vim tlib.txt /*autoload\/tlib\/buffer.vim*
|
||||||
|
autoload/tlib/cache.vim tlib.txt /*autoload\/tlib\/cache.vim*
|
||||||
|
autoload/tlib/char.vim tlib.txt /*autoload\/tlib\/char.vim*
|
||||||
|
autoload/tlib/cmd.vim tlib.txt /*autoload\/tlib\/cmd.vim*
|
||||||
|
autoload/tlib/comments.vim tlib.txt /*autoload\/tlib\/comments.vim*
|
||||||
|
autoload/tlib/date.vim tlib.txt /*autoload\/tlib\/date.vim*
|
||||||
|
autoload/tlib/dir.vim tlib.txt /*autoload\/tlib\/dir.vim*
|
||||||
|
autoload/tlib/file.vim tlib.txt /*autoload\/tlib\/file.vim*
|
||||||
|
autoload/tlib/hook.vim tlib.txt /*autoload\/tlib\/hook.vim*
|
||||||
|
autoload/tlib/input.vim tlib.txt /*autoload\/tlib\/input.vim*
|
||||||
|
autoload/tlib/list.vim tlib.txt /*autoload\/tlib\/list.vim*
|
||||||
|
autoload/tlib/map.vim tlib.txt /*autoload\/tlib\/map.vim*
|
||||||
|
autoload/tlib/normal.vim tlib.txt /*autoload\/tlib\/normal.vim*
|
||||||
|
autoload/tlib/notify.vim tlib.txt /*autoload\/tlib\/notify.vim*
|
||||||
|
autoload/tlib/paragraph.vim tlib.txt /*autoload\/tlib\/paragraph.vim*
|
||||||
|
autoload/tlib/persistent.vim tlib.txt /*autoload\/tlib\/persistent.vim*
|
||||||
|
autoload/tlib/progressbar.vim tlib.txt /*autoload\/tlib\/progressbar.vim*
|
||||||
|
autoload/tlib/rx.vim tlib.txt /*autoload\/tlib\/rx.vim*
|
||||||
|
autoload/tlib/scratch.vim tlib.txt /*autoload\/tlib\/scratch.vim*
|
||||||
|
autoload/tlib/selection.vim tlib.txt /*autoload\/tlib\/selection.vim*
|
||||||
|
autoload/tlib/signs.vim tlib.txt /*autoload\/tlib\/signs.vim*
|
||||||
|
autoload/tlib/string.vim tlib.txt /*autoload\/tlib\/string.vim*
|
||||||
|
autoload/tlib/sys.vim tlib.txt /*autoload\/tlib\/sys.vim*
|
||||||
|
autoload/tlib/tab.vim tlib.txt /*autoload\/tlib\/tab.vim*
|
||||||
|
autoload/tlib/tag.vim tlib.txt /*autoload\/tlib\/tag.vim*
|
||||||
|
autoload/tlib/textobjects.vim tlib.txt /*autoload\/tlib\/textobjects.vim*
|
||||||
|
autoload/tlib/trace.vim tlib.txt /*autoload\/tlib\/trace.vim*
|
||||||
|
autoload/tlib/type.vim tlib.txt /*autoload\/tlib\/type.vim*
|
||||||
|
autoload/tlib/url.vim tlib.txt /*autoload\/tlib\/url.vim*
|
||||||
|
autoload/tlib/var.vim tlib.txt /*autoload\/tlib\/var.vim*
|
||||||
|
autoload/tlib/vcs.vim tlib.txt /*autoload\/tlib\/vcs.vim*
|
||||||
|
autoload/tlib/vim.vim tlib.txt /*autoload\/tlib\/vim.vim*
|
||||||
|
autoload/tlib/win.vim tlib.txt /*autoload\/tlib\/win.vim*
|
||||||
|
g:tlib#Filter_glob#char tlib.txt /*g:tlib#Filter_glob#char*
|
||||||
|
g:tlib#Filter_glob#seq tlib.txt /*g:tlib#Filter_glob#seq*
|
||||||
|
g:tlib#cache#dont_purge tlib.txt /*g:tlib#cache#dont_purge*
|
||||||
|
g:tlib#cache#max_filename tlib.txt /*g:tlib#cache#max_filename*
|
||||||
|
g:tlib#cache#purge_days tlib.txt /*g:tlib#cache#purge_days*
|
||||||
|
g:tlib#cache#purge_every_days tlib.txt /*g:tlib#cache#purge_every_days*
|
||||||
|
g:tlib#cache#run_script tlib.txt /*g:tlib#cache#run_script*
|
||||||
|
g:tlib#cache#script_encoding tlib.txt /*g:tlib#cache#script_encoding*
|
||||||
|
g:tlib#cache#verbosity tlib.txt /*g:tlib#cache#verbosity*
|
||||||
|
g:tlib#dir#sep tlib.txt /*g:tlib#dir#sep*
|
||||||
|
g:tlib#file#drop tlib.txt /*g:tlib#file#drop*
|
||||||
|
g:tlib#input#filename_max_width tlib.txt /*g:tlib#input#filename_max_width*
|
||||||
|
g:tlib#input#filename_padding_r tlib.txt /*g:tlib#input#filename_padding_r*
|
||||||
|
g:tlib#input#filter_mode tlib.txt /*g:tlib#input#filter_mode*
|
||||||
|
g:tlib#input#format_filename tlib.txt /*g:tlib#input#format_filename*
|
||||||
|
g:tlib#input#higroup tlib.txt /*g:tlib#input#higroup*
|
||||||
|
g:tlib#input#keyagents_InputList_s tlib.txt /*g:tlib#input#keyagents_InputList_s*
|
||||||
|
g:tlib#input#livesearch_threshold tlib.txt /*g:tlib#input#livesearch_threshold*
|
||||||
|
g:tlib#input#numeric_chars tlib.txt /*g:tlib#input#numeric_chars*
|
||||||
|
g:tlib#input#sortprefs_threshold tlib.txt /*g:tlib#input#sortprefs_threshold*
|
||||||
|
g:tlib#input#use_popup tlib.txt /*g:tlib#input#use_popup*
|
||||||
|
g:tlib#input#user_shortcuts tlib.txt /*g:tlib#input#user_shortcuts*
|
||||||
|
g:tlib#scratch#hidden tlib.txt /*g:tlib#scratch#hidden*
|
||||||
|
g:tlib#sys#check_cygpath tlib.txt /*g:tlib#sys#check_cygpath*
|
||||||
|
g:tlib#sys#cygwin_expr tlib.txt /*g:tlib#sys#cygwin_expr*
|
||||||
|
g:tlib#sys#cygwin_path_rx tlib.txt /*g:tlib#sys#cygwin_path_rx*
|
||||||
|
g:tlib#sys#special_protocols tlib.txt /*g:tlib#sys#special_protocols*
|
||||||
|
g:tlib#sys#special_suffixes tlib.txt /*g:tlib#sys#special_suffixes*
|
||||||
|
g:tlib#sys#system_browser tlib.txt /*g:tlib#sys#system_browser*
|
||||||
|
g:tlib#sys#system_rx tlib.txt /*g:tlib#sys#system_rx*
|
||||||
|
g:tlib#trace#backtrace tlib.txt /*g:tlib#trace#backtrace*
|
||||||
|
g:tlib#trace#printer tlib.txt /*g:tlib#trace#printer*
|
||||||
|
g:tlib#vcs#check tlib.txt /*g:tlib#vcs#check*
|
||||||
|
g:tlib#vcs#def tlib.txt /*g:tlib#vcs#def*
|
||||||
|
g:tlib#vcs#executables tlib.txt /*g:tlib#vcs#executables*
|
||||||
|
g:tlib#vim#simalt_maximize tlib.txt /*g:tlib#vim#simalt_maximize*
|
||||||
|
g:tlib#vim#simalt_restore tlib.txt /*g:tlib#vim#simalt_restore*
|
||||||
|
g:tlib#vim#use_vimtweak tlib.txt /*g:tlib#vim#use_vimtweak*
|
||||||
|
g:tlib#vim#use_wmctrl tlib.txt /*g:tlib#vim#use_wmctrl*
|
||||||
|
g:tlib_cache tlib.txt /*g:tlib_cache*
|
||||||
|
g:tlib_inputlist_filename_indicators tlib.txt /*g:tlib_inputlist_filename_indicators*
|
||||||
|
g:tlib_inputlist_max_cols tlib.txt /*g:tlib_inputlist_max_cols*
|
||||||
|
g:tlib_inputlist_max_lines tlib.txt /*g:tlib_inputlist_max_lines*
|
||||||
|
g:tlib_inputlist_pct tlib.txt /*g:tlib_inputlist_pct*
|
||||||
|
g:tlib_inputlist_shortmessage tlib.txt /*g:tlib_inputlist_shortmessage*
|
||||||
|
g:tlib_inputlist_width_filename tlib.txt /*g:tlib_inputlist_width_filename*
|
||||||
|
g:tlib_persistent tlib.txt /*g:tlib_persistent*
|
||||||
|
g:tlib_pick_last_item tlib.txt /*g:tlib_pick_last_item*
|
||||||
|
g:tlib_scratch_pos tlib.txt /*g:tlib_scratch_pos*
|
||||||
|
g:tlib_scroll_lines tlib.txt /*g:tlib_scroll_lines*
|
||||||
|
g:tlib_tag_substitute tlib.txt /*g:tlib_tag_substitute*
|
||||||
|
g:tlib_tags_extra tlib.txt /*g:tlib_tags_extra*
|
||||||
|
g:tlib_viewline_position tlib.txt /*g:tlib_viewline_position*
|
||||||
|
plugin/02tlib.vim tlib.txt /*plugin\/02tlib.vim*
|
||||||
|
standard-paragraph tlib.txt /*standard-paragraph*
|
||||||
|
tlib#Filter_cnf#New() tlib.txt /*tlib#Filter_cnf#New()*
|
||||||
|
tlib#Filter_cnfd#New() tlib.txt /*tlib#Filter_cnfd#New()*
|
||||||
|
tlib#Filter_fuzzy#New() tlib.txt /*tlib#Filter_fuzzy#New()*
|
||||||
|
tlib#Filter_glob#New() tlib.txt /*tlib#Filter_glob#New()*
|
||||||
|
tlib#Object#New() tlib.txt /*tlib#Object#New()*
|
||||||
|
tlib#agent#GotoLine() tlib.txt /*tlib#agent#GotoLine()*
|
||||||
|
tlib#agent#NewItem() tlib.txt /*tlib#agent#NewItem()*
|
||||||
|
tlib#agent#Suspend() tlib.txt /*tlib#agent#Suspend()*
|
||||||
|
tlib#agent#SuspendToParentWindow() tlib.txt /*tlib#agent#SuspendToParentWindow()*
|
||||||
|
tlib#arg#Ex() tlib.txt /*tlib#arg#Ex()*
|
||||||
|
tlib#arg#Get() tlib.txt /*tlib#arg#Get()*
|
||||||
|
tlib#arg#GetOpts() tlib.txt /*tlib#arg#GetOpts()*
|
||||||
|
tlib#arg#Let() tlib.txt /*tlib#arg#Let()*
|
||||||
|
tlib#assert#Disable() tlib.txt /*tlib#assert#Disable()*
|
||||||
|
tlib#assert#Enable() tlib.txt /*tlib#assert#Enable()*
|
||||||
|
tlib#buffer#BufDo() tlib.txt /*tlib#buffer#BufDo()*
|
||||||
|
tlib#buffer#DeleteRange() tlib.txt /*tlib#buffer#DeleteRange()*
|
||||||
|
tlib#buffer#Eval() tlib.txt /*tlib#buffer#Eval()*
|
||||||
|
tlib#buffer#GetList() tlib.txt /*tlib#buffer#GetList()*
|
||||||
|
tlib#buffer#InsertText() tlib.txt /*tlib#buffer#InsertText()*
|
||||||
|
tlib#buffer#KeepCursorPosition() tlib.txt /*tlib#buffer#KeepCursorPosition()*
|
||||||
|
tlib#buffer#ReplaceRange() tlib.txt /*tlib#buffer#ReplaceRange()*
|
||||||
|
tlib#buffer#ScratchEnd() tlib.txt /*tlib#buffer#ScratchEnd()*
|
||||||
|
tlib#buffer#ScratchStart() tlib.txt /*tlib#buffer#ScratchStart()*
|
||||||
|
tlib#buffer#Set() tlib.txt /*tlib#buffer#Set()*
|
||||||
|
tlib#buffer#ViewLine() tlib.txt /*tlib#buffer#ViewLine()*
|
||||||
|
tlib#cache#Dir() tlib.txt /*tlib#cache#Dir()*
|
||||||
|
tlib#cache#EncodedFilename() tlib.txt /*tlib#cache#EncodedFilename()*
|
||||||
|
tlib#cache#MaybePurge() tlib.txt /*tlib#cache#MaybePurge()*
|
||||||
|
tlib#cache#Purge() tlib.txt /*tlib#cache#Purge()*
|
||||||
|
tlib#cache#Value() tlib.txt /*tlib#cache#Value()*
|
||||||
|
tlib#char#Get() tlib.txt /*tlib#char#Get()*
|
||||||
|
tlib#cmd#BrowseOutput() tlib.txt /*tlib#cmd#BrowseOutput()*
|
||||||
|
tlib#cmd#BrowseOutputWithCallback() tlib.txt /*tlib#cmd#BrowseOutputWithCallback()*
|
||||||
|
tlib#cmd#Time() tlib.txt /*tlib#cmd#Time()*
|
||||||
|
tlib#cmd#UseVertical() tlib.txt /*tlib#cmd#UseVertical()*
|
||||||
|
tlib#comments#Comments() tlib.txt /*tlib#comments#Comments()*
|
||||||
|
tlib#date#SecondsSince1970() tlib.txt /*tlib#date#SecondsSince1970()*
|
||||||
|
tlib#dir#CanonicName() tlib.txt /*tlib#dir#CanonicName()*
|
||||||
|
tlib#dir#Ensure() tlib.txt /*tlib#dir#Ensure()*
|
||||||
|
tlib#dir#MyRuntime() tlib.txt /*tlib#dir#MyRuntime()*
|
||||||
|
tlib#dir#NativeName() tlib.txt /*tlib#dir#NativeName()*
|
||||||
|
tlib#dir#PlainName() tlib.txt /*tlib#dir#PlainName()*
|
||||||
|
tlib#file#Edit() tlib.txt /*tlib#file#Edit()*
|
||||||
|
tlib#file#Join() tlib.txt /*tlib#file#Join()*
|
||||||
|
tlib#file#Relative() tlib.txt /*tlib#file#Relative()*
|
||||||
|
tlib#file#Split() tlib.txt /*tlib#file#Split()*
|
||||||
|
tlib#hook#Run() tlib.txt /*tlib#hook#Run()*
|
||||||
|
tlib#input#CommandSelect() tlib.txt /*tlib#input#CommandSelect()*
|
||||||
|
tlib#input#Edit() tlib.txt /*tlib#input#Edit()*
|
||||||
|
tlib#input#EditList() tlib.txt /*tlib#input#EditList()*
|
||||||
|
tlib#input#List() tlib.txt /*tlib#input#List()*
|
||||||
|
tlib#input#ListD() tlib.txt /*tlib#input#ListD()*
|
||||||
|
tlib#input#ListW() tlib.txt /*tlib#input#ListW()*
|
||||||
|
tlib#list#All() tlib.txt /*tlib#list#All()*
|
||||||
|
tlib#list#Any() tlib.txt /*tlib#list#Any()*
|
||||||
|
tlib#list#Compact() tlib.txt /*tlib#list#Compact()*
|
||||||
|
tlib#list#Find() tlib.txt /*tlib#list#Find()*
|
||||||
|
tlib#list#FindAll() tlib.txt /*tlib#list#FindAll()*
|
||||||
|
tlib#list#Flatten() tlib.txt /*tlib#list#Flatten()*
|
||||||
|
tlib#list#Inject() tlib.txt /*tlib#list#Inject()*
|
||||||
|
tlib#list#Remove() tlib.txt /*tlib#list#Remove()*
|
||||||
|
tlib#list#RemoveAll() tlib.txt /*tlib#list#RemoveAll()*
|
||||||
|
tlib#list#Zip() tlib.txt /*tlib#list#Zip()*
|
||||||
|
tlib#map#PumAccept() tlib.txt /*tlib#map#PumAccept()*
|
||||||
|
tlib#normal#WithRegister() tlib.txt /*tlib#normal#WithRegister()*
|
||||||
|
tlib#notify#Echo() tlib.txt /*tlib#notify#Echo()*
|
||||||
|
tlib#notify#TrimMessage() tlib.txt /*tlib#notify#TrimMessage()*
|
||||||
|
tlib#paragraph#GetMetric() tlib.txt /*tlib#paragraph#GetMetric()*
|
||||||
|
tlib#paragraph#Move() tlib.txt /*tlib#paragraph#Move()*
|
||||||
|
tlib#persistent#Dir() tlib.txt /*tlib#persistent#Dir()*
|
||||||
|
tlib#persistent#EncodedFilename() tlib.txt /*tlib#persistent#EncodedFilename()*
|
||||||
|
tlib#progressbar#Init() tlib.txt /*tlib#progressbar#Init()*
|
||||||
|
tlib#rx#Escape() tlib.txt /*tlib#rx#Escape()*
|
||||||
|
tlib#rx#EscapeReplace() tlib.txt /*tlib#rx#EscapeReplace()*
|
||||||
|
tlib#scratch#CloseScratch() tlib.txt /*tlib#scratch#CloseScratch()*
|
||||||
|
tlib#scratch#UseScratch() tlib.txt /*tlib#scratch#UseScratch()*
|
||||||
|
tlib#selection#GetSelection() tlib.txt /*tlib#selection#GetSelection()*
|
||||||
|
tlib#signs#ClearAll() tlib.txt /*tlib#signs#ClearAll()*
|
||||||
|
tlib#signs#ClearBuffer() tlib.txt /*tlib#signs#ClearBuffer()*
|
||||||
|
tlib#signs#Mark() tlib.txt /*tlib#signs#Mark()*
|
||||||
|
tlib#string#Format() tlib.txt /*tlib#string#Format()*
|
||||||
|
tlib#string#Printf1() tlib.txt /*tlib#string#Printf1()*
|
||||||
|
tlib#string#RemoveBackslashes() tlib.txt /*tlib#string#RemoveBackslashes()*
|
||||||
|
tlib#sys#IsSpecial() tlib.txt /*tlib#sys#IsSpecial()*
|
||||||
|
tlib#sys#MaybeUseCygpath() tlib.txt /*tlib#sys#MaybeUseCygpath()*
|
||||||
|
tlib#sys#Open() tlib.txt /*tlib#sys#Open()*
|
||||||
|
tlib#sys#OpenWithSystemViewer() tlib.txt /*tlib#sys#OpenWithSystemViewer()*
|
||||||
|
tlib#tab#BufMap() tlib.txt /*tlib#tab#BufMap()*
|
||||||
|
tlib#tab#TabWinNr() tlib.txt /*tlib#tab#TabWinNr()*
|
||||||
|
tlib#tag#Collect() tlib.txt /*tlib#tag#Collect()*
|
||||||
|
tlib#tag#Retrieve() tlib.txt /*tlib#tag#Retrieve()*
|
||||||
|
tlib#trace#Disable() tlib.txt /*tlib#trace#Disable()*
|
||||||
|
tlib#trace#Enable() tlib.txt /*tlib#trace#Enable()*
|
||||||
|
tlib#trace#Print() tlib.txt /*tlib#trace#Print()*
|
||||||
|
tlib#trace#Printer_echom() tlib.txt /*tlib#trace#Printer_echom()*
|
||||||
|
tlib#trace#Set() tlib.txt /*tlib#trace#Set()*
|
||||||
|
tlib#type#Disable() tlib.txt /*tlib#type#Disable()*
|
||||||
|
tlib#type#Enable() tlib.txt /*tlib#type#Enable()*
|
||||||
|
tlib#url#Decode() tlib.txt /*tlib#url#Decode()*
|
||||||
|
tlib#url#DecodeChar() tlib.txt /*tlib#url#DecodeChar()*
|
||||||
|
tlib#url#Encode() tlib.txt /*tlib#url#Encode()*
|
||||||
|
tlib#url#EncodeChar() tlib.txt /*tlib#url#EncodeChar()*
|
||||||
|
tlib#var#EGet() tlib.txt /*tlib#var#EGet()*
|
||||||
|
tlib#var#Get() tlib.txt /*tlib#var#Get()*
|
||||||
|
tlib#var#Let() tlib.txt /*tlib#var#Let()*
|
||||||
|
tlib#var#List() tlib.txt /*tlib#var#List()*
|
||||||
|
tlib#vcs#Diff() tlib.txt /*tlib#vcs#Diff()*
|
||||||
|
tlib#vcs#Ls() tlib.txt /*tlib#vcs#Ls()*
|
||||||
|
tlib#vim#Maximize() tlib.txt /*tlib#vim#Maximize()*
|
||||||
|
tlib#vim#RestoreWindow() tlib.txt /*tlib#vim#RestoreWindow()*
|
||||||
|
tlib#win#Set() tlib.txt /*tlib#win#Set()*
|
||||||
|
tlib#win#SetById() tlib.txt /*tlib#win#SetById()*
|
||||||
|
tlib.txt tlib.txt /*tlib.txt*
|
||||||
|
v_sp tlib.txt /*v_sp*
|
File diff suppressed because it is too large
Load diff
30
sources_non_forked/tlib/etc/tpl_tlib.txt
Normal file
30
sources_non_forked/tlib/etc/tpl_tlib.txt
Normal file
|
@ -0,0 +1,30 @@
|
||||||
|
*tlib.txt* tlib -- A library of vim functions
|
||||||
|
Author: Tom Link, micathom at gmail com
|
||||||
|
|
||||||
|
This library provides some utility functions. There isn't much need to
|
||||||
|
install it unless another plugin requires you to do so.
|
||||||
|
|
||||||
|
Most of the library is included in autoload files. No autocommands are
|
||||||
|
created. With the exception of loading ../plugin/02tlib.vim at startup
|
||||||
|
the library has no impact on startup time or anything else.
|
||||||
|
|
||||||
|
The change-log is included at the bottom of ../plugin/02tlib.vim
|
||||||
|
(move the cursor over the file name and type gfG)
|
||||||
|
|
||||||
|
Demo of |tlib#input#List()|:
|
||||||
|
http://vimsomnia.blogspot.com/2010/11/selecting-items-from-list-with-tlibs.html
|
||||||
|
|
||||||
|
|
||||||
|
-----------------------------------------------------------------------
|
||||||
|
Install~
|
||||||
|
|
||||||
|
Edit the vba file and type: >
|
||||||
|
|
||||||
|
:so %
|
||||||
|
|
||||||
|
See :help vimball for details. If you have difficulties, please make
|
||||||
|
sure, you have the current version of vimball (vimscript #1502)
|
||||||
|
installed.
|
||||||
|
|
||||||
|
|
||||||
|
%s
|
38
sources_non_forked/tlib/macros/tlib.vim
Normal file
38
sources_non_forked/tlib/macros/tlib.vim
Normal file
|
@ -0,0 +1,38 @@
|
||||||
|
" @Author: Tom Link (micathom AT gmail com?subject=[vim])
|
||||||
|
" @GIT: http://github.com/tomtom/tlib_vim/
|
||||||
|
" @License: GPL (see http://www.gnu.org/licenses/gpl.txt)
|
||||||
|
" @Last Change: 2015-11-09.
|
||||||
|
" @Revision: 10
|
||||||
|
|
||||||
|
if &cp || exists("loaded_tlib_macros")
|
||||||
|
finish
|
||||||
|
endif
|
||||||
|
let loaded_tlib_macros = 1
|
||||||
|
|
||||||
|
let s:save_cpo = &cpo
|
||||||
|
set cpo&vim
|
||||||
|
|
||||||
|
|
||||||
|
" :display: :TRequire NAME [VERSION [FILE]]
|
||||||
|
" Make a certain vim file is loaded.
|
||||||
|
"
|
||||||
|
" Conventions: If FILE isn't defined, plugin/NAME.vim is loaded. The
|
||||||
|
" file must provide a variable loaded_{NAME} that represents the version
|
||||||
|
" number.
|
||||||
|
command! -nargs=+ TRequire let s:require = [<f-args>]
|
||||||
|
\ | if !exists('loaded_'. get(s:require, 0))
|
||||||
|
\ | exec 'runtime '. get(s:require, 2, 'plugin/'. get(s:require, 0) .'.vim')
|
||||||
|
\ | if !exists('loaded_'. get(s:require, 0)) || loaded_{get(s:require, 0)} < get(s:require, 1, loaded_{get(s:require, 0)})
|
||||||
|
\ | echoerr 'Require '. get(s:require, 0) .' >= '. get(s:require, 1, 'any version will do')
|
||||||
|
\ | finish
|
||||||
|
\ | endif
|
||||||
|
\ | endif | unlet s:require
|
||||||
|
|
||||||
|
|
||||||
|
" :display: :Ttimecommand CMD
|
||||||
|
" Time the execution time of CMD.
|
||||||
|
command! -nargs=1 -complete=command Ttimecommand call tlib#cmd#Time(<q-args>)
|
||||||
|
|
||||||
|
|
||||||
|
let &cpo = s:save_cpo
|
||||||
|
unlet s:save_cpo
|
|
@ -1,8 +1,8 @@
|
||||||
" @Author: Tom Link (micathom AT gmail com?subject=[vim])
|
" @Author: Tom Link (micathom AT gmail com?subject=[vim])
|
||||||
" @Created: 2007-04-10.
|
" @Created: 2007-04-10.
|
||||||
" @Last Change: 2015-11-23.
|
" @Last Change: 2019-04-09.
|
||||||
" @License: GPL (see http://www.gnu.org/licenses/gpl.txt)
|
" @License: GPL (see http://www.gnu.org/licenses/gpl.txt)
|
||||||
" @Revision: 808
|
" @Revision: 836
|
||||||
" @Website: http://www.vim.org/account/profile.php?user_id=4037
|
" @Website: http://www.vim.org/account/profile.php?user_id=4037
|
||||||
" GetLatestVimScripts: 1863 1 tlib.vim
|
" GetLatestVimScripts: 1863 1 tlib.vim
|
||||||
" tlib.vim -- Some utility functions
|
" tlib.vim -- Some utility functions
|
||||||
|
@ -14,7 +14,7 @@ if v:version < 700 "{{{2
|
||||||
echoerr "tlib requires Vim >= 7"
|
echoerr "tlib requires Vim >= 7"
|
||||||
finish
|
finish
|
||||||
endif
|
endif
|
||||||
let g:loaded_tlib = 117
|
let g:loaded_tlib = 127
|
||||||
|
|
||||||
let s:save_cpo = &cpo
|
let s:save_cpo = &cpo
|
||||||
set cpo&vim
|
set cpo&vim
|
||||||
|
@ -74,7 +74,17 @@ command! -nargs=1 -complete=command TBrowseOutput call tlib#cmd#BrowseOutput(<q-
|
||||||
"
|
"
|
||||||
" EXAMPLES: >
|
" EXAMPLES: >
|
||||||
" TBrowseScriptnames
|
" TBrowseScriptnames
|
||||||
command! -nargs=0 -complete=command TBrowseScriptnames call tlib#cmd#TBrowseScriptnames()
|
command! -nargs=0 TBrowseScriptnames call tlib#cmd#TBrowseScriptnames()
|
||||||
|
|
||||||
|
|
||||||
|
" :display: :Texecqfl CMD
|
||||||
|
" Run CMD and display the quickfix list.
|
||||||
|
command! -nargs=1 Texecqfl <args> | call tlib#qfl#QflList(getqflist())
|
||||||
|
|
||||||
|
|
||||||
|
" :display: :Texecloc CMD
|
||||||
|
" Run CMD and display the quickfix list.
|
||||||
|
command! -nargs=1 Texecloc <args> | call tlib#qfl#QflList(getloclist(0))
|
||||||
|
|
||||||
|
|
||||||
" :display: :Tlibtrace GUARD, VAR1, VAR2...
|
" :display: :Tlibtrace GUARD, VAR1, VAR2...
|
||||||
|
@ -85,17 +95,31 @@ command! -nargs=0 -complete=command TBrowseScriptnames call tlib#cmd#TBrowseScri
|
||||||
" If GUARD is a number that evaluates to true or if it is a string that
|
" If GUARD is a number that evaluates to true or if it is a string that
|
||||||
" matches a |regexp|, which was added using Tlibtrace! (with '!'),
|
" matches a |regexp|, which was added using Tlibtrace! (with '!'),
|
||||||
" display the values of VAR1, VAR2 ...
|
" display the values of VAR1, VAR2 ...
|
||||||
command! -nargs=+ -bang -bar Tlibtrace :
|
command! -nargs=+ -bang Tlibtrace :
|
||||||
|
|
||||||
|
|
||||||
" :Tlibtraceset +RX1, -RX2...
|
" :Tlibtraceset[!] [--file=FILE] +RX1 -RX2...
|
||||||
" If |tlib#trace#Enable()| was called: With the optional <bang>, users
|
" If |tlib#trace#Enable()| was called: With the optional <bang>, users
|
||||||
" can add and remove GUARDs (actually a |regexp|) that should be traced.
|
" can add and remove GUARDs (actually a |regexp|) that should be traced.
|
||||||
command! -nargs=+ -bang -bar Tlibtraceset call tlib#trace#Set(<q-args>)
|
"
|
||||||
|
" If no `+` or `-` is prepended, assume `+`.
|
||||||
|
"
|
||||||
|
" With the optional bang '!', reset any options.
|
||||||
|
command! -nargs=+ -bang Tlibtraceset call tlib#trace#Set(tlib#arg#GetOpts([<f-args>], {'short': 0}), !empty("<bang>"))
|
||||||
|
|
||||||
|
|
||||||
" :display: :Tlibtrace ASSERTION
|
" :display: :Tlibtrace ASSERTION
|
||||||
command! -nargs=+ -bang -bar Tlibassert :
|
command! -nargs=+ -bang Tlibassert :
|
||||||
|
|
||||||
|
" :display: :Tlibtype val, 'type', ...
|
||||||
|
command! -nargs=+ Tlibtype :
|
||||||
|
|
||||||
|
|
||||||
|
" Browse the current |quickfix| list.
|
||||||
|
command! -bar Tbrowseqfl call tlib#qfl#Browse()
|
||||||
|
|
||||||
|
" Browse the current |location-list|.
|
||||||
|
command! -bar Tbrowseloc call tlib#loclist#Browse()
|
||||||
|
|
||||||
|
|
||||||
let &cpo = s:save_cpo
|
let &cpo = s:save_cpo
|
||||||
|
|
|
@ -0,0 +1,50 @@
|
||||||
|
" The following variable configures the way |tlib#input#ListD()| works.
|
||||||
|
" In this example, we allow selection of multiple items (we could also
|
||||||
|
" allow only a single choice and make |tlib#input#ListD()| work on the
|
||||||
|
" indices, not the items).
|
||||||
|
"
|
||||||
|
" We also set a prompt that will be displayed in the command area.
|
||||||
|
"
|
||||||
|
" By default, |tlib#input#ListD()| will automatically select an item if
|
||||||
|
" there is only one item left matching the filter. In this example, we
|
||||||
|
" disable this feature.
|
||||||
|
"
|
||||||
|
" For demonstration purposes, we also define a key handler that prints
|
||||||
|
" the selected items.
|
||||||
|
let s:state = {
|
||||||
|
\ 'type': 'm',
|
||||||
|
\ 'query': 'Select lines for command output',
|
||||||
|
\ 'pick_last_item': 0,
|
||||||
|
\ 'key_handlers': [
|
||||||
|
\ {'key': 16, 'agent': 'PrintMe', 'key_name': '<c-p>', 'help': 'Print line'},
|
||||||
|
\ ],
|
||||||
|
\ }
|
||||||
|
|
||||||
|
" A key handler takes two arguments: the current state of the list
|
||||||
|
" display and a list of selected items/indices (depending on the type
|
||||||
|
" parameter).
|
||||||
|
function! PrintMe(state, items) "{{{3
|
||||||
|
echom "You selected:"
|
||||||
|
for i in a:items
|
||||||
|
echom i
|
||||||
|
endfor
|
||||||
|
call input("Press ENTER to continue")
|
||||||
|
let a:state.state = 'redisplay'
|
||||||
|
return a:state
|
||||||
|
endf
|
||||||
|
|
||||||
|
" In this example, we evaluate an ex-command with |:execute| and display
|
||||||
|
" the command's output as list. The user can select certain lines by
|
||||||
|
" typing some pattern or by pressing <a-NUMBER> to select an item by
|
||||||
|
" number. The user can then press <c-p> to print the lines (see above)
|
||||||
|
" or <cr> to pick the selected lines.
|
||||||
|
function! SelectOutput(ex) "{{{3
|
||||||
|
redir => lines
|
||||||
|
silent exec a:ex
|
||||||
|
redir END
|
||||||
|
let state = copy(s:state)
|
||||||
|
let state.base = split(lines, '\n')
|
||||||
|
let picked = tlib#input#ListD(state)
|
||||||
|
echom "You picked: ". join(picked, ', ')
|
||||||
|
endf
|
||||||
|
|
67
sources_non_forked/tlib/scripts/create_crc_table.rb
Normal file
67
sources_non_forked/tlib/scripts/create_crc_table.rb
Normal file
|
@ -0,0 +1,67 @@
|
||||||
|
# @Author: Tom Link (micathom AT gmail com)
|
||||||
|
# @License: GPL (see http://www.gnu.org/licenses/gpl.txt)
|
||||||
|
# @Revision: 14
|
||||||
|
|
||||||
|
|
||||||
|
def crc_vim_table
|
||||||
|
tbl = [0x00000000, 0x77073096, 0xee0e612c, 0x990951ba, 0x076dc419,
|
||||||
|
0x706af48f, 0xe963a535, 0x9e6495a3, 0x0edb8832, 0x79dcb8a4,
|
||||||
|
0xe0d5e91e, 0x97d2d988, 0x09b64c2b, 0x7eb17cbd, 0xe7b82d07,
|
||||||
|
0x90bf1d91, 0x1db71064, 0x6ab020f2, 0xf3b97148, 0x84be41de,
|
||||||
|
0x1adad47d, 0x6ddde4eb, 0xf4d4b551, 0x83d385c7, 0x136c9856,
|
||||||
|
0x646ba8c0, 0xfd62f97a, 0x8a65c9ec, 0x14015c4f, 0x63066cd9,
|
||||||
|
0xfa0f3d63, 0x8d080df5, 0x3b6e20c8, 0x4c69105e, 0xd56041e4,
|
||||||
|
0xa2677172, 0x3c03e4d1, 0x4b04d447, 0xd20d85fd, 0xa50ab56b,
|
||||||
|
0x35b5a8fa, 0x42b2986c, 0xdbbbc9d6, 0xacbcf940, 0x32d86ce3,
|
||||||
|
0x45df5c75, 0xdcd60dcf, 0xabd13d59, 0x26d930ac, 0x51de003a,
|
||||||
|
0xc8d75180, 0xbfd06116, 0x21b4f4b5, 0x56b3c423, 0xcfba9599,
|
||||||
|
0xb8bda50f, 0x2802b89e, 0x5f058808, 0xc60cd9b2, 0xb10be924,
|
||||||
|
0x2f6f7c87, 0x58684c11, 0xc1611dab, 0xb6662d3d, 0x76dc4190,
|
||||||
|
0x01db7106, 0x98d220bc, 0xefd5102a, 0x71b18589, 0x06b6b51f,
|
||||||
|
0x9fbfe4a5, 0xe8b8d433, 0x7807c9a2, 0x0f00f934, 0x9609a88e,
|
||||||
|
0xe10e9818, 0x7f6a0dbb, 0x086d3d2d, 0x91646c97, 0xe6635c01,
|
||||||
|
0x6b6b51f4, 0x1c6c6162, 0x856530d8, 0xf262004e, 0x6c0695ed,
|
||||||
|
0x1b01a57b, 0x8208f4c1, 0xf50fc457, 0x65b0d9c6, 0x12b7e950,
|
||||||
|
0x8bbeb8ea, 0xfcb9887c, 0x62dd1ddf, 0x15da2d49, 0x8cd37cf3,
|
||||||
|
0xfbd44c65, 0x4db26158, 0x3ab551ce, 0xa3bc0074, 0xd4bb30e2,
|
||||||
|
0x4adfa541, 0x3dd895d7, 0xa4d1c46d, 0xd3d6f4fb, 0x4369e96a,
|
||||||
|
0x346ed9fc, 0xad678846, 0xda60b8d0, 0x44042d73, 0x33031de5,
|
||||||
|
0xaa0a4c5f, 0xdd0d7cc9, 0x5005713c, 0x270241aa, 0xbe0b1010,
|
||||||
|
0xc90c2086, 0x5768b525, 0x206f85b3, 0xb966d409, 0xce61e49f,
|
||||||
|
0x5edef90e, 0x29d9c998, 0xb0d09822, 0xc7d7a8b4, 0x59b33d17,
|
||||||
|
0x2eb40d81, 0xb7bd5c3b, 0xc0ba6cad, 0xedb88320, 0x9abfb3b6,
|
||||||
|
0x03b6e20c, 0x74b1d29a, 0xead54739, 0x9dd277af, 0x04db2615,
|
||||||
|
0x73dc1683, 0xe3630b12, 0x94643b84, 0x0d6d6a3e, 0x7a6a5aa8,
|
||||||
|
0xe40ecf0b, 0x9309ff9d, 0x0a00ae27, 0x7d079eb1, 0xf00f9344,
|
||||||
|
0x8708a3d2, 0x1e01f268, 0x6906c2fe, 0xf762575d, 0x806567cb,
|
||||||
|
0x196c3671, 0x6e6b06e7, 0xfed41b76, 0x89d32be0, 0x10da7a5a,
|
||||||
|
0x67dd4acc, 0xf9b9df6f, 0x8ebeeff9, 0x17b7be43, 0x60b08ed5,
|
||||||
|
0xd6d6a3e8, 0xa1d1937e, 0x38d8c2c4, 0x4fdff252, 0xd1bb67f1,
|
||||||
|
0xa6bc5767, 0x3fb506dd, 0x48b2364b, 0xd80d2bda, 0xaf0a1b4c,
|
||||||
|
0x36034af6, 0x41047a60, 0xdf60efc3, 0xa867df55, 0x316e8eef,
|
||||||
|
0x4669be79, 0xcb61b38c, 0xbc66831a, 0x256fd2a0, 0x5268e236,
|
||||||
|
0xcc0c7795, 0xbb0b4703, 0x220216b9, 0x5505262f, 0xc5ba3bbe,
|
||||||
|
0xb2bd0b28, 0x2bb45a92, 0x5cb36a04, 0xc2d7ffa7, 0xb5d0cf31,
|
||||||
|
0x2cd99e8b, 0x5bdeae1d, 0x9b64c2b0, 0xec63f226, 0x756aa39c,
|
||||||
|
0x026d930a, 0x9c0906a9, 0xeb0e363f, 0x72076785, 0x05005713,
|
||||||
|
0x95bf4a82, 0xe2b87a14, 0x7bb12bae, 0x0cb61b38, 0x92d28e9b,
|
||||||
|
0xe5d5be0d, 0x7cdcefb7, 0x0bdbdf21, 0x86d3d2d4, 0xf1d4e242,
|
||||||
|
0x68ddb3f8, 0x1fda836e, 0x81be16cd, 0xf6b9265b, 0x6fb077e1,
|
||||||
|
0x18b74777, 0x88085ae6, 0xff0f6a70, 0x66063bca, 0x11010b5c,
|
||||||
|
0x8f659eff, 0xf862ae69, 0x616bffd3, 0x166ccf45, 0xa00ae278,
|
||||||
|
0xd70dd2ee, 0x4e048354, 0x3903b3c2, 0xa7672661, 0xd06016f7,
|
||||||
|
0x4969474d, 0x3e6e77db, 0xaed16a4a, 0xd9d65adc, 0x40df0b66,
|
||||||
|
0x37d83bf0, 0xa9bcae53, 0xdebb9ec5, 0x47b2cf7f, 0x30b5ffe9,
|
||||||
|
0xbdbdf21c, 0xcabac28a, 0x53b39330, 0x24b4a3a6, 0xbad03605,
|
||||||
|
0xcdd70693, 0x54de5729, 0x23d967bf, 0xb3667a2e, 0xc4614ab8,
|
||||||
|
0x5d681b02, 0x2a6f2b94, 0xb40bbe37, 0xc30c8ea1, 0x5a05df1b,
|
||||||
|
0x2d02ef8d]
|
||||||
|
tbl.map! do |num|
|
||||||
|
b = "%b" % num
|
||||||
|
bits = b.split(//)
|
||||||
|
bits.map! {|b| b.to_i}
|
||||||
|
bits.reverse
|
||||||
|
end
|
||||||
|
VIM::command("let @t = '#{tbl.inspect}'")
|
||||||
|
end
|
||||||
|
|
66
sources_non_forked/tlib/spec/tlib/arg.vim
Normal file
66
sources_non_forked/tlib/spec/tlib/arg.vim
Normal file
|
@ -0,0 +1,66 @@
|
||||||
|
" @Author: Tom Link (mailto: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)
|
||||||
|
" @Created: 2010-04-03.
|
||||||
|
" @Last Change: 2010-04-03.
|
||||||
|
" @Revision: 1
|
||||||
|
|
||||||
|
let s:save_cpo = &cpo
|
||||||
|
set cpo&vim
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
SpecBegin 'title': 'tlib#arg'
|
||||||
|
|
||||||
|
function! TestGetArg(...) "{{{3
|
||||||
|
exec tlib#arg#Get(1, 'foo', 1)
|
||||||
|
return foo
|
||||||
|
endf
|
||||||
|
|
||||||
|
function! TestGetArg1(...) "{{{3
|
||||||
|
exec tlib#arg#Get(1, 'foo', 1, '!= ""')
|
||||||
|
return foo
|
||||||
|
endf
|
||||||
|
|
||||||
|
Should be equal TestGetArg(), 1
|
||||||
|
Should be equal TestGetArg(''), ''
|
||||||
|
Should be equal TestGetArg(2), 2
|
||||||
|
Should be equal TestGetArg1(), 1
|
||||||
|
Should be equal TestGetArg1(''), 1
|
||||||
|
Should be equal TestGetArg1(2), 2
|
||||||
|
|
||||||
|
function! TestArgs(...) "{{{3
|
||||||
|
exec tlib#arg#Let([['foo', "o"], ['bar', 2]])
|
||||||
|
return repeat(foo, bar)
|
||||||
|
endf
|
||||||
|
Should be equal TestArgs(), 'oo'
|
||||||
|
Should be equal TestArgs('a'), 'aa'
|
||||||
|
Should be equal TestArgs('a', 3), 'aaa'
|
||||||
|
|
||||||
|
function! TestArgs1(...) "{{{3
|
||||||
|
exec tlib#arg#Let(['foo', ['bar', 2]])
|
||||||
|
return repeat(foo, bar)
|
||||||
|
endf
|
||||||
|
Should be equal TestArgs1(), ''
|
||||||
|
Should be equal TestArgs1('a'), 'aa'
|
||||||
|
Should be equal TestArgs1('a', 3), 'aaa'
|
||||||
|
|
||||||
|
function! TestArgs2(...) "{{{3
|
||||||
|
exec tlib#arg#Let(['foo', 'bar'], 1)
|
||||||
|
return repeat(foo, bar)
|
||||||
|
endf
|
||||||
|
Should be equal TestArgs2(), '1'
|
||||||
|
Should be equal TestArgs2('a'), 'a'
|
||||||
|
Should be equal TestArgs2('a', 3), 'aaa'
|
||||||
|
|
||||||
|
function! TestArgs3(...)
|
||||||
|
TVarArg ['a', 1], 'b'
|
||||||
|
return a . b
|
||||||
|
endf
|
||||||
|
Should be equal TestArgs3(), '1'
|
||||||
|
Should be equal TestArgs3('a'), 'a'
|
||||||
|
Should be equal TestArgs3('a', 3), 'a3'
|
||||||
|
|
||||||
|
|
||||||
|
let &cpo = s:save_cpo
|
||||||
|
unlet s:save_cpo
|
61
sources_non_forked/tlib/spec/tlib/date.vim
Normal file
61
sources_non_forked/tlib/spec/tlib/date.vim
Normal file
|
@ -0,0 +1,61 @@
|
||||||
|
" @Author: Tom Link (micathom AT gmail com?subject=[vim])
|
||||||
|
" @Website: http://www.vim.org/account/profile.php?user_id=4037
|
||||||
|
" @GIT: http://github.com/tomtom/vimtlib/
|
||||||
|
" @License: GPL (see http://www.gnu.org/licenses/gpl.txt)
|
||||||
|
" @Created: 2010-09-17.
|
||||||
|
" @Last Change: 2016-03-16.
|
||||||
|
" @Revision: 21
|
||||||
|
|
||||||
|
SpecBegin 'title': 'tlib#date'
|
||||||
|
|
||||||
|
Should be equal tlib#date#Parse('2000-1-0', 1), [2000, 1, 0]
|
||||||
|
Should be equal tlib#date#Parse('2000-1-2'), [2000, 1, 2]
|
||||||
|
Should be equal tlib#date#Parse('2000-01-02'), [2000, 1, 2]
|
||||||
|
Should be equal tlib#date#Parse('2000-10-20'), [2000, 10, 20]
|
||||||
|
|
||||||
|
Should be equal tlib#date#Parse('00-1-0', 1), [2000, 1, 0]
|
||||||
|
Should be equal tlib#date#Parse('00-1-2'), [2000, 1, 2]
|
||||||
|
Should be equal tlib#date#Parse('00-01-02'), [2000, 1, 2]
|
||||||
|
Should be equal tlib#date#Parse('00-10-20'), [2000, 10, 20]
|
||||||
|
|
||||||
|
Should be equal tlib#date#Parse('2000/2/1'), [2000, 1, 2]
|
||||||
|
Should be equal tlib#date#Parse('2000/02/01'), [2000, 1, 2]
|
||||||
|
Should be equal tlib#date#Parse('2000/20/10'), [2000, 10, 20]
|
||||||
|
|
||||||
|
Should be equal tlib#date#Parse('00/2/1'), [2000, 1, 2]
|
||||||
|
Should be equal tlib#date#Parse('00/02/01'), [2000, 1, 2]
|
||||||
|
Should be equal tlib#date#Parse('00/20/10'), [2000, 10, 20]
|
||||||
|
|
||||||
|
Should be equal tlib#date#Parse('2.1.2000'), [2000, 1, 2]
|
||||||
|
Should be equal tlib#date#Parse('2. 1. 2000'), [2000, 1, 2]
|
||||||
|
Should be equal tlib#date#Parse('02.01.2000'), [2000, 1, 2]
|
||||||
|
Should be equal tlib#date#Parse('02. 01. 2000'), [2000, 1, 2]
|
||||||
|
Should be equal tlib#date#Parse('20.10.2000'), [2000, 10, 20]
|
||||||
|
Should be equal tlib#date#Parse('20. 10. 2000'), [2000, 10, 20]
|
||||||
|
|
||||||
|
Should throw exception "tlib#date#Parse('2000-14-2')", 'TLib: Invalid date'
|
||||||
|
Should throw exception "tlib#date#Parse('2000-011-02')", 'TLib: Invalid date'
|
||||||
|
Should throw exception "tlib#date#Parse('2000-10-40')", 'TLib: Invalid date'
|
||||||
|
Should throw exception "tlib#date#Parse('2000-10-0')", 'TLib: Invalid date'
|
||||||
|
|
||||||
|
Should be equal tlib#date#Shift('2015-10-29', '1m'), '2015-11-29'
|
||||||
|
Should be equal tlib#date#Shift('2015-11-29', '1m'), '2015-12-29'
|
||||||
|
Should be equal tlib#date#Shift('2015-12-29', '1m'), '2016-01-29'
|
||||||
|
Should be equal tlib#date#Shift('2016-01-29', '1m'), '2016-02-29'
|
||||||
|
Should be equal tlib#date#Shift('2015-10-29', '2m'), '2015-12-29'
|
||||||
|
Should be equal tlib#date#Shift('2015-10-29', '3m'), '2016-01-29'
|
||||||
|
Should be equal tlib#date#Shift('2015-10-29', '4m'), '2016-02-29'
|
||||||
|
Should be equal tlib#date#Shift('2015-12-30', '1d'), '2015-12-31'
|
||||||
|
Should be equal tlib#date#Shift('2015-12-31', '1d'), '2016-01-01'
|
||||||
|
Should be equal tlib#date#Shift('2015-12-30', '2d'), '2016-01-01'
|
||||||
|
Should be equal tlib#date#Shift('2015-12-30', '3d'), '2016-01-02'
|
||||||
|
|
||||||
|
Should be equal tlib#date#Shift('2016-03-16', '1b'), '2016-03-17'
|
||||||
|
Should be equal tlib#date#Shift('2016-03-16', '2b'), '2016-03-18'
|
||||||
|
Should be equal tlib#date#Shift('2016-03-16', '3b'), '2016-03-21'
|
||||||
|
Should be equal tlib#date#Shift('2016-03-16', '4b'), '2016-03-22'
|
||||||
|
Should be equal tlib#date#Shift('2016-03-16', '5b'), '2016-03-23'
|
||||||
|
Should be equal tlib#date#Shift('2016-03-16', '6b'), '2016-03-24'
|
||||||
|
Should be equal tlib#date#Shift('2016-03-16', '7b'), '2016-03-25'
|
||||||
|
Should be equal tlib#date#Shift('2016-03-16', '8b'), '2016-03-28'
|
||||||
|
|
28
sources_non_forked/tlib/spec/tlib/dictionary.vim
Normal file
28
sources_non_forked/tlib/spec/tlib/dictionary.vim
Normal file
|
@ -0,0 +1,28 @@
|
||||||
|
" @Author: Tom Link (mailto:micathom AT gmail com?subject=[vim])
|
||||||
|
" @Website: https://github.com/tomtom
|
||||||
|
" @License: GPL (see http://www.gnu.org/licenses/gpl.txt)
|
||||||
|
" @Created: 2016-04-03.
|
||||||
|
" @Last Change: 2016-04-03.
|
||||||
|
|
||||||
|
let s:save_cpo = &cpo
|
||||||
|
set cpo&vim
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
SpecBegin 'title': 'tlib#dictionary'
|
||||||
|
|
||||||
|
|
||||||
|
It should handle basic test cases for tlib#dictionary#Rev properly.
|
||||||
|
|
||||||
|
Should be equal tlib#dictionary#Rev({}), {}
|
||||||
|
Should be equal tlib#dictionary#Rev({1: 2, 3: 4}), {'2': '1', '4': '3'}
|
||||||
|
Should be equal tlib#dictionary#Rev({1: '', 3: 4}, {'empty': '*'}), {'*': '1', '4': '3'}
|
||||||
|
Should be equal tlib#dictionary#Rev({1: '', 3: 4}, {'use_string': 1}), {'''''': '1', '4': '3'}
|
||||||
|
Should be equal tlib#dictionary#Rev({1: '', 3: 4}, {'use_string': 1, 'use_eval': 1}), {'''''': 1, '4': 3}
|
||||||
|
Should be equal tlib#dictionary#Rev(tlib#dictionary#Rev({1: '', 3: 4}, {'use_string': 1}), {'use_eval': 1}), {1: '', 3: 4}
|
||||||
|
Should be equal tlib#dictionary#Rev({1: 4, 2: 4}, {'values_as_list': 1}), {'4': ['1', '2']}
|
||||||
|
Should be equal tlib#dictionary#Rev({1: 4, 2: 4}, {'values_as_list': 1, 'use_eval': 1}), {'4': [1, 2]}
|
||||||
|
|
||||||
|
|
||||||
|
let &cpo = s:save_cpo
|
||||||
|
unlet s:save_cpo
|
27
sources_non_forked/tlib/spec/tlib/eval.vim
Normal file
27
sources_non_forked/tlib/spec/tlib/eval.vim
Normal file
|
@ -0,0 +1,27 @@
|
||||||
|
" @Author: Tom Link (mailto:micathom AT gmail com?subject=[vim])
|
||||||
|
" @Website: https://github.com/tomtom
|
||||||
|
" @License: GPL (see http://www.gnu.org/licenses/gpl.txt)
|
||||||
|
" @Created: 2015-10-26.
|
||||||
|
" @Last Change: 2015-10-26.
|
||||||
|
|
||||||
|
let s:save_cpo = &cpo
|
||||||
|
set cpo&vim
|
||||||
|
|
||||||
|
|
||||||
|
SpecBegin 'title': 'tlib#eval'
|
||||||
|
|
||||||
|
|
||||||
|
let g:eval_a = {'foo': range(0, 5), 'd': {'a': range(0, 5)}}
|
||||||
|
let g:eval_b = {'foo': range(6, 10), 'd': {'a': range(6, 10), 'b': 2}, 'bar': range(5)}
|
||||||
|
let g:eval_a0 = deepcopy(g:eval_a)
|
||||||
|
let g:eval_b0 = deepcopy(g:eval_b)
|
||||||
|
let g:eval_c = {'foo': range(0, 10), 'd': {'a': range(0, 10), 'b': 2}, 'bar': range(5)}
|
||||||
|
|
||||||
|
|
||||||
|
Should be equal tlib#eval#Extend(copy(g:eval_a), g:eval_b), g:eval_c
|
||||||
|
Should be equal g:eval_a, g:eval_a0
|
||||||
|
Should be equal g:eval_b, g:eval_b0
|
||||||
|
|
||||||
|
|
||||||
|
let &cpo = s:save_cpo
|
||||||
|
unlet s:save_cpo
|
59
sources_non_forked/tlib/spec/tlib/file.vim
Normal file
59
sources_non_forked/tlib/spec/tlib/file.vim
Normal file
|
@ -0,0 +1,59 @@
|
||||||
|
" @Author: Thomas Link (micathom AT gmail com?subject=[vim])
|
||||||
|
" @Website: http://www.vim.org/account/profile.php?user_id=4037
|
||||||
|
" @GIT: http://github.com/tomtom/vimtlib/
|
||||||
|
" @License: GPL (see http://www.gnu.org/licenses/gpl.txt)
|
||||||
|
" @Created: 2009-02-25.
|
||||||
|
" @Last Change: 2010-04-03.
|
||||||
|
" @Revision: 13
|
||||||
|
|
||||||
|
let s:save_cpo = &cpo
|
||||||
|
set cpo&vim
|
||||||
|
|
||||||
|
|
||||||
|
SpecBegin 'title': 'tlib/file',
|
||||||
|
\ 'sfile': 'autoload/tlib/file.vim'
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
It should split filenames.
|
||||||
|
Should be equal tlib#file#Split('foo/bar/filename.txt'), ['foo', 'bar', 'filename.txt']
|
||||||
|
Should be equal tlib#file#Split('/foo/bar/filename.txt'), ['', 'foo', 'bar', 'filename.txt']
|
||||||
|
Should be equal tlib#file#Split('ftp://foo/bar/filename.txt'), ['ftp:/', 'foo', 'bar', 'filename.txt']
|
||||||
|
|
||||||
|
|
||||||
|
It should join filenames.
|
||||||
|
Should be#Equal tlib#file#Join(['foo', 'bar']), 'foo/bar'
|
||||||
|
Should be#Equal tlib#file#Join(['foo/', 'bar'], 1), 'foo/bar'
|
||||||
|
Should be#Equal tlib#file#Join(['', 'bar']), '/bar'
|
||||||
|
Should be#Equal tlib#file#Join(['/', 'bar'], 1), '/bar'
|
||||||
|
Should be#Equal tlib#file#Join(['foo', 'bar', 'filename.txt']), 'foo/bar/filename.txt'
|
||||||
|
Should be#Equal tlib#file#Join(['', 'foo', 'bar', 'filename.txt']), '/foo/bar/filename.txt'
|
||||||
|
Should be#Equal tlib#file#Join(['ftp:/', 'foo', 'bar', 'filename.txt']), 'ftp://foo/bar/filename.txt'
|
||||||
|
Should be#Equal tlib#file#Join(['ftp://', 'foo', 'bar', 'filename.txt'], 1), 'ftp://foo/bar/filename.txt'
|
||||||
|
|
||||||
|
Should be equal tlib#file#Join(['foo', 'bar', 'filename.txt']), 'foo/bar/filename.txt'
|
||||||
|
Should be equal tlib#file#Join(['', 'foo', 'bar', 'filename.txt']), '/foo/bar/filename.txt'
|
||||||
|
Should be equal tlib#file#Join(['ftp:/', 'foo', 'bar', 'filename.txt']), 'ftp://foo/bar/filename.txt'
|
||||||
|
|
||||||
|
|
||||||
|
It should construct relative path names.
|
||||||
|
Should be#Equal tlib#file#Relative('foo/bar/filename.txt', 'foo'), 'bar/filename.txt'
|
||||||
|
Should be#Equal tlib#file#Relative('foo/bar/filename.txt', 'foo/base'), '../bar/filename.txt'
|
||||||
|
Should be#Equal tlib#file#Relative('filename.txt', 'foo/base'), '../../filename.txt'
|
||||||
|
Should be#Equal tlib#file#Relative('/foo/bar/filename.txt', '/boo/base'), '../../foo/bar/filename.txt'
|
||||||
|
Should be#Equal tlib#file#Relative('/bar/filename.txt', '/boo/base'), '../../bar/filename.txt'
|
||||||
|
Should be#Equal tlib#file#Relative('/foo/bar/filename.txt', '/base'), '../foo/bar/filename.txt'
|
||||||
|
Should be#Equal tlib#file#Relative('c:/bar/filename.txt', 'x:/boo/base'), 'c:/bar/filename.txt'
|
||||||
|
|
||||||
|
|
||||||
|
Should be equal tlib#file#Relative('foo/bar/filename.txt', 'foo'), 'bar/filename.txt'
|
||||||
|
Should be equal tlib#file#Relative('foo/bar/filename.txt', 'foo/base'), '../bar/filename.txt'
|
||||||
|
Should be equal tlib#file#Relative('filename.txt', 'foo/base'), '../../filename.txt'
|
||||||
|
Should be equal tlib#file#Relative('/foo/bar/filename.txt', '/boo/base'), '../../foo/bar/filename.txt'
|
||||||
|
Should be equal tlib#file#Relative('/bar/filename.txt', '/boo/base'), '../../bar/filename.txt'
|
||||||
|
Should be equal tlib#file#Relative('/foo/bar/filename.txt', '/base'), '../foo/bar/filename.txt'
|
||||||
|
Should be equal tlib#file#Relative('c:/bar/filename.txt', 'x:/boo/base'), 'c:/bar/filename.txt'
|
||||||
|
|
||||||
|
|
||||||
|
let &cpo = s:save_cpo
|
||||||
|
unlet s:save_cpo
|
58
sources_non_forked/tlib/spec/tlib/hash.vim
Normal file
58
sources_non_forked/tlib/spec/tlib/hash.vim
Normal file
|
@ -0,0 +1,58 @@
|
||||||
|
" @Author: Tom Link (mailto: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: 31
|
||||||
|
|
||||||
|
|
||||||
|
SpecBegin 'title': 'tlib#hash'
|
||||||
|
|
||||||
|
|
||||||
|
It should calculate CRC32B checksums.
|
||||||
|
|
||||||
|
let g:tlib_hash_use_crc32 = g:tlib#hash#use_crc32
|
||||||
|
|
||||||
|
let g:tlib#hash#use_crc32 = 'ruby'
|
||||||
|
Should be equal tlib#hash#CRC32B('The quick brown fox jumps over the lazy dog'), '414FA339'
|
||||||
|
Should be equal tlib#hash#CRC32B('foo'), '8C736521'
|
||||||
|
Should be equal tlib#hash#CRC32B('f'), '76D32BE0'
|
||||||
|
|
||||||
|
let g:tlib#hash#use_crc32 = 'vim'
|
||||||
|
Should be equal tlib#hash#CRC32B('The quick brown fox jumps over the lazy dog'), '414FA339'
|
||||||
|
Should be equal tlib#hash#CRC32B('foo'), '8C736521'
|
||||||
|
Should be equal tlib#hash#CRC32B('f'), '76D32BE0'
|
||||||
|
|
||||||
|
|
||||||
|
function! s:CompareHash(text) "{{{3
|
||||||
|
if !empty(a:text)
|
||||||
|
exec 'It should calculate the crc32b checksum for:' a:text
|
||||||
|
let crc32ruby = tlib#hash#CRC32B_ruby(a:text)
|
||||||
|
let crc32vim = tlib#hash#CRC32B_vim(a:text)
|
||||||
|
exec 'Should be equal' string(crc32ruby) ',' string(crc32vim)
|
||||||
|
exec 'It should calculate the adler32 checksum for:' a:text
|
||||||
|
let adler32tlib = tlib#hash#Adler32_tlib(a:text)
|
||||||
|
let adler32vim = tlib#hash#Adler32_vim(a:text)
|
||||||
|
exec 'Should be equal' string(adler32tlib) ',' string(adler32vim)
|
||||||
|
endif
|
||||||
|
endf
|
||||||
|
|
||||||
|
redir => s:scriptnames
|
||||||
|
silent scriptnames
|
||||||
|
redir END
|
||||||
|
for s:script in split(s:scriptnames, '\n')
|
||||||
|
let s:scriptfile = matchstr(s:script, '^\s*\d\+:\s\+\zs.*$')
|
||||||
|
call s:CompareHash(s:scriptfile)
|
||||||
|
try
|
||||||
|
let s:scriptlines = readfile(s:scriptfile)
|
||||||
|
call s:CompareHash(join(s:scriptlines, "\n"))
|
||||||
|
for s:scriptline in s:scriptlines
|
||||||
|
call s:CompareHash(s:scriptline)
|
||||||
|
endfor
|
||||||
|
catch /^Vim\%((\a\+)\)\=:E484/
|
||||||
|
endtry
|
||||||
|
endfor
|
||||||
|
unlet s:scriptnames, :script, s:scriptfile, s:scriptlines, s:scriptline
|
||||||
|
delf s:CompareHash
|
||||||
|
|
||||||
|
|
||||||
|
let g:tlib#hash#use_crc32 = g:tlib_hash_use_crc32
|
||||||
|
|
127
sources_non_forked/tlib/spec/tlib/input.vim
Normal file
127
sources_non_forked/tlib/spec/tlib/input.vim
Normal file
|
@ -0,0 +1,127 @@
|
||||||
|
" @Author: Tom Link (micathom AT gmail com?subject=[vim])
|
||||||
|
" @Website: http://www.vim.org/account/profile.php?user_id=4037
|
||||||
|
" @GIT: http://github.com/tomtom/vimtlib/
|
||||||
|
" @License: GPL (see http://www.gnu.org/licenses/gpl.txt)
|
||||||
|
" @Created: 2009-02-28.
|
||||||
|
" @Last Change: 2009-03-14.
|
||||||
|
" @Revision: 73
|
||||||
|
|
||||||
|
let s:save_cpo = &cpo
|
||||||
|
set cpo&vim
|
||||||
|
|
||||||
|
|
||||||
|
SpecBegin 'title': 'tlib: Input', 'scratch': '%',
|
||||||
|
\ 'after': ':unlet! g:spec_lib_rv',
|
||||||
|
\ 'options': [
|
||||||
|
\ 'vim',
|
||||||
|
\ ]
|
||||||
|
|
||||||
|
|
||||||
|
let g:spec_tlib_list = [10, 20, 30, 40, 'a50', 'aa60', 'b70', 'ba80', 90]
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
It should return empty values when the user presses <escape>.
|
||||||
|
Replay :let g:spec_lib_rv = tlib#input#List('s', '', g:spec_tlib_list)\<cr>
|
||||||
|
\ \<Down>\<Down>\<esc>
|
||||||
|
Should be#Equal g:spec_lib_rv, ''
|
||||||
|
|
||||||
|
Replay :let g:spec_lib_rv = tlib#input#List('m', '', g:spec_tlib_list)\<cr>
|
||||||
|
\ \<Down>\<Down>\<esc>
|
||||||
|
Should be#Equal g:spec_lib_rv, []
|
||||||
|
|
||||||
|
Replay :let g:spec_lib_rv = tlib#input#List('si', '', g:spec_tlib_list)\<cr>
|
||||||
|
\ \<Down>\<Down>\<esc>
|
||||||
|
Should be#Equal g:spec_lib_rv, 0
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
It should pick an item from s-type list.
|
||||||
|
Replay :let g:spec_lib_rv = tlib#input#List('s', '', g:spec_tlib_list)\<cr>
|
||||||
|
\ \<Down>\<Down>\<cr>
|
||||||
|
Should be#Equal g:spec_lib_rv, 30
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
It should return an index from si-type list.
|
||||||
|
Replay :let g:spec_lib_rv = tlib#input#List('si', '', g:spec_tlib_list)\<cr>
|
||||||
|
\ \<Down>\<Down>\<cr>
|
||||||
|
Should be#Equal g:spec_lib_rv, 3
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
It should return a list from a m-type list.
|
||||||
|
Replay :let g:spec_lib_rv = tlib#input#List('m', '', g:spec_tlib_list)\<cr>
|
||||||
|
\ \<Down>#\<Down>\<Down>\<cr>
|
||||||
|
Should be#Equal sort(g:spec_lib_rv), [20, 40]
|
||||||
|
|
||||||
|
Replay :let g:spec_lib_rv = tlib#input#List('m', '', g:spec_tlib_list)\<cr>
|
||||||
|
\ \<Down>\<S-Down>\<cr>
|
||||||
|
Should be#Equal sort(g:spec_lib_rv), [20, 30]
|
||||||
|
|
||||||
|
Replay :let g:spec_lib_rv = tlib#input#List('m', '', g:spec_tlib_list)\<cr>
|
||||||
|
\ \<Down>\<Down>\<S-up>\<cr>
|
||||||
|
Should be#Equal sort(g:spec_lib_rv), [20, 30]
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
It should return a list of indices from a mi-type list.
|
||||||
|
Replay :let g:spec_lib_rv = tlib#input#List('mi', '', g:spec_tlib_list)\<cr>
|
||||||
|
\ \<Down>#\<Down>\<Down>\<cr>
|
||||||
|
Should be#Equal sort(g:spec_lib_rv), [2, 4]
|
||||||
|
|
||||||
|
Replay :let g:spec_lib_rv = tlib#input#List('mi', '', g:spec_tlib_list)\<cr>
|
||||||
|
\ \<Down>\<S-Down>\<cr>
|
||||||
|
Should be#Equal sort(g:spec_lib_rv), [2, 3]
|
||||||
|
|
||||||
|
Replay :let g:spec_lib_rv = tlib#input#List('mi', '', g:spec_tlib_list)\<cr>
|
||||||
|
\ \<Down>\<Down>\<S-up>\<cr>
|
||||||
|
Should be#Equal sort(g:spec_lib_rv), [2, 3]
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
It should filter items from a s-type list.
|
||||||
|
Replay :let g:spec_lib_rv = tlib#input#List('s', '', g:spec_tlib_list)\<cr>
|
||||||
|
\ \<Down>a\<Down>\<cr>
|
||||||
|
Should be#Equal g:spec_lib_rv, 'aa60'
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
It should filter items from a si-type list.
|
||||||
|
Replay :let g:spec_lib_rv = tlib#input#List('si', '', g:spec_tlib_list)\<cr>
|
||||||
|
\ \<Down>a\<Down>\<cr>
|
||||||
|
Should be#Equal g:spec_lib_rv, 6
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
It should filter items from a m-type list.
|
||||||
|
Replay :let g:spec_lib_rv = tlib#input#List('m', '', g:spec_tlib_list)\<cr>
|
||||||
|
\ a\<Down>#\<Down>\<cr>
|
||||||
|
Should be#Equal sort(g:spec_lib_rv), ['aa60', 'ba80']
|
||||||
|
|
||||||
|
Replay :let g:spec_lib_rv = tlib#input#List('m', '', g:spec_tlib_list)\<cr>
|
||||||
|
\ a\<Down>\<S-Down>\<cr>
|
||||||
|
Should be#Equal sort(g:spec_lib_rv), ['aa60', 'ba80']
|
||||||
|
|
||||||
|
Replay :let g:spec_lib_rv = tlib#input#List('m', '', g:spec_tlib_list)\<cr>
|
||||||
|
\ a\<Down>\<Down>\<S-up>\<cr>
|
||||||
|
Should be#Equal sort(g:spec_lib_rv), ['aa60', 'ba80']
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
It should filter items from a mi-type list.
|
||||||
|
Replay :let g:spec_lib_rv = tlib#input#List('mi', '', g:spec_tlib_list)\<cr>
|
||||||
|
\ a\<Down>#\<Down>\<cr>
|
||||||
|
Should be#Equal sort(g:spec_lib_rv), [6, 8]
|
||||||
|
|
||||||
|
Replay :let g:spec_lib_rv = tlib#input#List('mi', '', g:spec_tlib_list)\<cr>
|
||||||
|
\ a\<Down>\<S-Down>\<cr>
|
||||||
|
Should be#Equal sort(g:spec_lib_rv), [6, 8]
|
||||||
|
|
||||||
|
Replay :let g:spec_lib_rv = tlib#input#List('mi', '', g:spec_tlib_list)\<cr>
|
||||||
|
\ a\<Down>\<Down>\<S-up>\<cr>
|
||||||
|
Should be#Equal sort(g:spec_lib_rv), [6, 8]
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
let &cpo = s:save_cpo
|
67
sources_non_forked/tlib/spec/tlib/list.vim
Normal file
67
sources_non_forked/tlib/spec/tlib/list.vim
Normal file
|
@ -0,0 +1,67 @@
|
||||||
|
" @Author: Tom Link (mailto: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)
|
||||||
|
" @Created: 2010-04-03.
|
||||||
|
" @Last Change: 2010-04-03.
|
||||||
|
" @Revision: 4
|
||||||
|
|
||||||
|
let s:save_cpo = &cpo
|
||||||
|
set cpo&vim
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
SpecBegin 'title': 'tlib: List'
|
||||||
|
" \, 'options': [vim, <+SET+>]
|
||||||
|
" \, 'sfile': '<+SCRIPT CONTEXT+>'
|
||||||
|
" \, 'scratch': '<+SCRATCH FILE+>'
|
||||||
|
" \, 'before': '<+BEFORE EX COMMANDS+>'
|
||||||
|
" \, 'after': '<+AFTER EX COMMANDS+>'
|
||||||
|
" \, 'cleanup': ['<+FUNCTION+>()']
|
||||||
|
|
||||||
|
|
||||||
|
" List {{{2
|
||||||
|
fun! Add(a,b)
|
||||||
|
return a:a + a:b
|
||||||
|
endf
|
||||||
|
|
||||||
|
Should be equal tlib#list#Inject([], 0, function('Add')), 0
|
||||||
|
Should be equal tlib#list#Inject([1,2,3], 0, function('Add')), 6
|
||||||
|
|
||||||
|
Should be equal tlib#list#Compact([]), []
|
||||||
|
Should be equal tlib#list#Compact([0,1,2,3,[], {}, ""]), [1,2,3]
|
||||||
|
|
||||||
|
Should be equal tlib#list#Flatten([]), []
|
||||||
|
Should be equal tlib#list#Flatten([1,2,3]), [1,2,3]
|
||||||
|
Should be equal tlib#list#Flatten([1,2, [1,2,3], 3]), [1,2,1,2,3,3]
|
||||||
|
Should be equal tlib#list#Flatten([0,[1,2,[3,""]]]), [0,1,2,3,""]
|
||||||
|
|
||||||
|
Should be equal tlib#list#FindAll([1,2,3], 'v:val >= 2'), [2,3]
|
||||||
|
Should be equal tlib#list#FindAll([1,2,3], 'v:val >= 2', 'v:val * 10'), [20,30]
|
||||||
|
|
||||||
|
Should be equal tlib#list#Find([1,2,3], 'v:val >= 2'), 2
|
||||||
|
Should be equal tlib#list#Find([1,2,3], 'v:val >= 2', 0, 'v:val * 10'), 20
|
||||||
|
Should be equal tlib#list#Find([1,2,3], 'v:val >= 5', 10), 10
|
||||||
|
|
||||||
|
Should be equal tlib#list#Any([1,2,3], 'v:val >= 2'), 1
|
||||||
|
Should be equal tlib#list#Any([1,2,3], 'v:val >= 5'), 0
|
||||||
|
|
||||||
|
Should be equal tlib#list#All([1,2,3], 'v:val < 5'), 1
|
||||||
|
Should be equal tlib#list#All([1,2,3], 'v:val >= 2'), 0
|
||||||
|
|
||||||
|
Should be equal tlib#list#Remove([1,2,1,2], 2), [1,1,2]
|
||||||
|
Should be equal tlib#list#RemoveAll([1,2,1,2], 2), [1,1]
|
||||||
|
|
||||||
|
Should be equal tlib#list#Zip([[1,2,3], [4,5,6]]), [[1,4], [2,5], [3,6]]
|
||||||
|
Should be equal tlib#list#Zip([[1,2,3], [4,5,6,7]]), [[1,4], [2,5], [3,6], ['', 7]]
|
||||||
|
Should be equal tlib#list#Zip([[1,2,3], [4,5,6,7]], -1), [[1,4], [2,5], [3,6], [-1,7]]
|
||||||
|
Should be equal tlib#list#Zip([[1,2,3,7], [4,5,6]], -1), [[1,4], [2,5], [3,6], [7,-1]]
|
||||||
|
|
||||||
|
|
||||||
|
Should be equal tlib#list#Uniq([]), []
|
||||||
|
Should be equal tlib#list#Uniq([1,1]), [1]
|
||||||
|
Should be equal tlib#list#Uniq([1,2,2,3,2,3,4,2,1,7,2,3,2,3,7]), [1,2,3,4,7]
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
let &cpo = s:save_cpo
|
||||||
|
unlet s:save_cpo
|
27
sources_non_forked/tlib/spec/tlib/rx.vim
Normal file
27
sources_non_forked/tlib/spec/tlib/rx.vim
Normal file
|
@ -0,0 +1,27 @@
|
||||||
|
" @Author: Tom Link (mailto: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)
|
||||||
|
" @Created: 2010-04-03.
|
||||||
|
" @Last Change: 2010-04-03.
|
||||||
|
" @Revision: 2
|
||||||
|
|
||||||
|
let s:save_cpo = &cpo
|
||||||
|
set cpo&vim
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
SpecBegin 'title': 'tlib#rx'
|
||||||
|
|
||||||
|
|
||||||
|
for c in split('^$.*+\()|{}[]~', '\zs')
|
||||||
|
let s = printf('%sfoo%sbar%s', c, c, c)
|
||||||
|
Should be like s, '\m^'. tlib#rx#Escape(s, 'm') .'$'
|
||||||
|
Should be like s, '\M^'. tlib#rx#Escape(s, 'M') .'$'
|
||||||
|
Should be like s, '\v^'. tlib#rx#Escape(s, 'v') .'$'
|
||||||
|
Should be like s, '\V\^'. tlib#rx#Escape(s, 'V') .'\$'
|
||||||
|
endfor
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
let &cpo = s:save_cpo
|
||||||
|
unlet s:save_cpo
|
29
sources_non_forked/tlib/spec/tlib/string.vim
Normal file
29
sources_non_forked/tlib/spec/tlib/string.vim
Normal file
|
@ -0,0 +1,29 @@
|
||||||
|
" @Author: Tom Link (mailto: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)
|
||||||
|
" @Created: 2010-04-03.
|
||||||
|
" @Last Change: 2010-04-03.
|
||||||
|
" @Revision: 4
|
||||||
|
|
||||||
|
let s:save_cpo = &cpo
|
||||||
|
set cpo&vim
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
SpecBegin 'title': 'tlib#string'
|
||||||
|
|
||||||
|
Should be equal tlib#string#RemoveBackslashes('foo bar'), 'foo bar'
|
||||||
|
Should be equal tlib#string#RemoveBackslashes('foo\ bar'), 'foo bar'
|
||||||
|
Should be equal tlib#string#RemoveBackslashes('foo\ \\bar'), 'foo \\bar'
|
||||||
|
Should be equal tlib#string#RemoveBackslashes('foo\ \\bar', '\ '), 'foo \bar'
|
||||||
|
|
||||||
|
|
||||||
|
Should be equal tlib#string#Count("fooo", "o"), 3
|
||||||
|
Should be equal tlib#string#Count("***", "\\*"), 3
|
||||||
|
Should be equal tlib#string#Count("***foo", "\\*"), 3
|
||||||
|
Should be equal tlib#string#Count("foo***", "\\*"), 3
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
let &cpo = s:save_cpo
|
||||||
|
unlet s:save_cpo
|
23
sources_non_forked/tlib/spec/tlib/url.vim
Normal file
23
sources_non_forked/tlib/spec/tlib/url.vim
Normal file
|
@ -0,0 +1,23 @@
|
||||||
|
" @Author: Tom Link (mailto: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)
|
||||||
|
" @Created: 2010-04-03.
|
||||||
|
" @Last Change: 2010-04-03.
|
||||||
|
" @Revision: 2
|
||||||
|
|
||||||
|
let s:save_cpo = &cpo
|
||||||
|
set cpo&vim
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
SpecBegin 'title': 'tlib#url'
|
||||||
|
|
||||||
|
Should be equal tlib#url#Decode('http://example.com/foo+bar%25bar'), 'http://example.com/foo bar%bar'
|
||||||
|
Should be equal tlib#url#Decode('Hello%20World.%20%20Good%2c%20bye.'), 'Hello World. Good, bye.'
|
||||||
|
|
||||||
|
Should be equal tlib#url#Encode('foo bar%bar'), 'foo+bar%%bar'
|
||||||
|
Should be equal tlib#url#Encode('Hello World. Good, bye.'), 'Hello+World.+Good%2c+bye.'
|
||||||
|
|
||||||
|
|
||||||
|
let &cpo = s:save_cpo
|
||||||
|
unlet s:save_cpo
|
37
sources_non_forked/tlib/spec/tlib/var.vim
Normal file
37
sources_non_forked/tlib/spec/tlib/var.vim
Normal file
|
@ -0,0 +1,37 @@
|
||||||
|
" @Author: Tom Link (mailto: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)
|
||||||
|
" @Created: 2010-04-03.
|
||||||
|
" @Last Change: 2010-04-03.
|
||||||
|
" @Revision: 2
|
||||||
|
|
||||||
|
let s:save_cpo = &cpo
|
||||||
|
set cpo&vim
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
SpecBegin 'title': 'tlib#var'
|
||||||
|
|
||||||
|
|
||||||
|
let g:foo = 1
|
||||||
|
let g:bar = 2
|
||||||
|
let b:bar = 3
|
||||||
|
let s:bar = 4
|
||||||
|
|
||||||
|
Should be equal tlib#var#Get('bar', 'bg'), 3
|
||||||
|
Should be equal tlib#var#Get('bar', 'g'), 2
|
||||||
|
Should be equal tlib#var#Get('foo', 'bg'), 1
|
||||||
|
Should be equal tlib#var#Get('foo', 'g'), 1
|
||||||
|
Should be equal tlib#var#Get('none', 'l'), ''
|
||||||
|
|
||||||
|
Should be equal eval(tlib#var#EGet('bar', 'bg')), 3
|
||||||
|
Should be equal eval(tlib#var#EGet('bar', 'g')), 2
|
||||||
|
" Should be equal eval(tlib#var#EGet('bar', 'sg')), 4
|
||||||
|
Should be equal eval(tlib#var#EGet('foo', 'bg')), 1
|
||||||
|
Should be equal eval(tlib#var#EGet('foo', 'g')), 1
|
||||||
|
Should be equal eval(tlib#var#EGet('none', 'l')), ''
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
let &cpo = s:save_cpo
|
||||||
|
unlet s:save_cpo
|
|
@ -2369,7 +2369,7 @@ function! fugitive#FileReadCmd(...) abort
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! fugitive#FileWriteCmd(...) abort
|
function! fugitive#FileWriteCmd(...) abort
|
||||||
let tmp = tempname()
|
let temp = tempname()
|
||||||
let amatch = a:0 ? a:1 : expand('<amatch>')
|
let amatch = a:0 ? a:1 : expand('<amatch>')
|
||||||
let autype = a:0 > 1 ? 'Buf' : 'File'
|
let autype = a:0 > 1 ? 'Buf' : 'File'
|
||||||
if exists('#' . autype . 'WritePre')
|
if exists('#' . autype . 'WritePre')
|
||||||
|
@ -2380,17 +2380,13 @@ function! fugitive#FileWriteCmd(...) abort
|
||||||
if commit !~# '^[0-3]$' || !v:cmdbang && (line("'[") != 1 || line("']") != line('$'))
|
if commit !~# '^[0-3]$' || !v:cmdbang && (line("'[") != 1 || line("']") != line('$'))
|
||||||
return "noautocmd '[,']write" . (v:cmdbang ? '!' : '') . ' ' . s:fnameescape(amatch)
|
return "noautocmd '[,']write" . (v:cmdbang ? '!' : '') . ' ' . s:fnameescape(amatch)
|
||||||
endif
|
endif
|
||||||
if exists('+guioptions') && &guioptions =~# '!'
|
silent execute "noautocmd keepalt '[,']write ".temp
|
||||||
let guioptions = &guioptions
|
let hash = s:TreeChomp([dir, 'hash-object', '-w', '--', temp])
|
||||||
set guioptions-=!
|
|
||||||
endif
|
|
||||||
silent execute "'[,']write !".fugitive#Prepare(dir, 'hash-object', '-w', '--stdin', '--').' > '.tmp
|
|
||||||
let sha1 = readfile(tmp)[0]
|
|
||||||
let old_mode = matchstr(s:ChompError(['ls-files', '--stage', '.' . file], dir)[0], '^\d\+')
|
let old_mode = matchstr(s:ChompError(['ls-files', '--stage', '.' . file], dir)[0], '^\d\+')
|
||||||
if empty(old_mode)
|
if empty(old_mode)
|
||||||
let old_mode = executable(s:Tree(dir) . file) ? '100755' : '100644'
|
let old_mode = executable(s:Tree(dir) . file) ? '100755' : '100644'
|
||||||
endif
|
endif
|
||||||
let error = s:UpdateIndex(dir, [old_mode, sha1, commit, file[1:-1]])
|
let error = s:UpdateIndex(dir, [old_mode, hash, commit, file[1:-1]])
|
||||||
if empty(error)
|
if empty(error)
|
||||||
setlocal nomodified
|
setlocal nomodified
|
||||||
if exists('#' . autype . 'WritePost')
|
if exists('#' . autype . 'WritePost')
|
||||||
|
@ -2400,11 +2396,10 @@ function! fugitive#FileWriteCmd(...) abort
|
||||||
else
|
else
|
||||||
return 'echoerr '.string('fugitive: '.error)
|
return 'echoerr '.string('fugitive: '.error)
|
||||||
endif
|
endif
|
||||||
|
catch /^fugitive:/
|
||||||
|
return 'echoerr ' . string(v:exception)
|
||||||
finally
|
finally
|
||||||
if exists('guioptions')
|
call delete(temp)
|
||||||
let &guioptions = guioptions
|
|
||||||
endif
|
|
||||||
call delete(tmp)
|
|
||||||
endtry
|
endtry
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
|
|
|
@ -13,7 +13,8 @@ let s:bad_git_dir = '/$\|^fugitive:'
|
||||||
" FugitiveGitDir() returns the detected Git dir for the given buffer number,
|
" FugitiveGitDir() returns the detected Git dir for the given buffer number,
|
||||||
" or the current buffer if no argument is passed. This will be an empty
|
" or the current buffer if no argument is passed. This will be an empty
|
||||||
" string if no Git dir was found. Use !empty(FugitiveGitDir()) to check if
|
" string if no Git dir was found. Use !empty(FugitiveGitDir()) to check if
|
||||||
" Fugitive is active in the current buffer.
|
" Fugitive is active in the current buffer. Do not rely on this for direct
|
||||||
|
" filesystem access; use FugitiveFind('.git/whatever') instead.
|
||||||
function! FugitiveGitDir(...) abort
|
function! FugitiveGitDir(...) abort
|
||||||
if v:version < 704
|
if v:version < 704
|
||||||
return ''
|
return ''
|
||||||
|
|
Loading…
Reference in a new issue