[ADD] conf for archlinux, <init>
[arrow.git] / archlinux_conf / home / .vim / autoload / tlib / arg.vim
blob341aea8ba03f83cbfe69be928da12c133c0d6ac3
1 " arg.vim
2 " @Author:      Thomas Link (micathom AT gmail com?subject=[vim])
3 " @Website:     http://www.vim.org/account/profile.php?user_id=4037
4 " @License:     GPL (see http://www.gnu.org/licenses/gpl.txt)
5 " @Created:     2007-06-30.
6 " @Last Change: 2008-06-15.
7 " @Revision:    0.0.49
9 if &cp || exists("loaded_tlib_arg_autoload")
10     finish
11 endif
12 let loaded_tlib_arg_autoload = 1
15 " :def: function! tlib#arg#Get(n, var, ?default="", ?test='')
16 " Set a positional argument from a variable argument list.
17 " See tlib#string#RemoveBackslashes() for an example.
18 function! tlib#arg#Get(n, var, ...) "{{{3
19     let default = a:0 >= 1 ? a:1 : ''
20     let atest   = a:0 >= 2 ? a:2 : ''
21     " TLogVAR default, atest
22     if !empty(atest)
23         let atest = ' && (a:'. a:n .' '. atest .')'
24     endif
25     let test = printf('a:0 >= %d', a:n) . atest
26     return printf('let %s = %s ? a:%d : %s', a:var, test, a:n, string(default))
27 endf
30 " :def: function! tlib#arg#Let(list, ?default='')
31 " Set a positional arguments from a variable argument list.
32 " See tlib#input#List() for an example.
33 function! tlib#arg#Let(list, ...) "{{{3
34     let default = a:0 >= 1 ? a:1 : ''
35     let list = map(copy(a:list), 'type(v:val) == 3 ? v:val : [v:val, default]')
36     let args = map(range(1, len(list)), 'call("tlib#arg#Get", [v:val] + list[v:val - 1])')
37     return join(args, ' | ')
38 endf
41 " :def: function! tlib#arg#Key(dict, list, ?default='')
42 " See |:TKeyArg|.
43 function! tlib#arg#Key(list, ...) "{{{3
44     let default = a:0 >= 1 ? a:1 : ''
45     let dict = a:list[0]
46     let list = map(copy(a:list[1:-1]), 'type(v:val) == 3 ? v:val : [v:val, default]')
47     let args = map(list, '"let ". v:val[0] ." = ". string(get(dict, v:val[0], v:val[1]))')
48     " TLogVAR dict, list, args
49     return join(args, ' | ')
50 endf
53 " :def: function! tlib#arg#StringAsKeyArgs(string, ?keys=[], ?evaluate=0)
54 function! tlib#arg#StringAsKeyArgs(string, ...) "{{{1
55     TVarArg ['keys', {}], ['evaluate', 0]
56     let keyargs = {}
57     let args = split(a:string, '\\\@<! ')
58     let arglist = map(args, 'matchlist(v:val, ''^\(\w\+\):\(.*\)$'')')
59     " TLogVAR a:string, args, arglist
60     for matchlist in arglist
61         if len(matchlist) < 3
62             throw 'Malformed key arguments: '. string(matchlist) .' in '. a:string
63         endif
64         let [match, key, val; rest] = matchlist
65         if empty(keys) || has_key(keys, key)
66             let val = substitute(val, '\\\\', '\\', 'g')
67             if evaluate
68                 let val = eval(val)
69             endif
70             let keyargs[key] = val
71         else
72             echom 'Unknown key: '. key .'='. val
73         endif
74     endfor
75     return keyargs
76 endf
80 """ Command line {{{1
82 " :def: function! tlib#arg#Ex(arg, ?chars='%#! ')
83 " Escape some characters in a string.
85 " Use |fnamescape()| if available.
87 " EXAMPLES: >
88 "   exec 'edit '. tlib#arg#Ex('foo%#bar.txt')
89 function! tlib#arg#Ex(arg, ...) "{{{3
90     if exists('*fnameescape') && a:0 == 0
91         return fnameescape(a:arg)
92     else
93         " let chars = '%# \'
94         let chars = '%#! '
95         if a:0 >= 1
96             let chars .= a:1
97         endif
98         return escape(a:arg, chars)
99     endif
100 endf