utils 0.0.10 → 0.0.12
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/.rvmrc +3 -0
- data/Rakefile +2 -2
- data/VERSION +1 -1
- data/bin/chroot-libs +1 -1
- data/bin/discover +10 -95
- data/bin/edit +53 -38
- data/bin/search +10 -156
- data/bin/strip_spaces +17 -5
- data/bin/xmp +1 -1
- data/lib/utils.rb +3 -0
- data/lib/utils/config/gdb/ruby +1 -15
- data/lib/utils/config/irbrc +5 -3
- data/lib/utils/config/vim/autoload/Align.vim +6 -6
- data/lib/utils/config/vim/autoload/rails.vim +16 -16
- data/lib/utils/config/vim/autoload/sqlcomplete.vim +48 -48
- data/lib/utils/config/vim/autoload/vimball.vim +7 -7
- data/lib/utils/config/vim/ftplugin/xml.vim +26 -26
- data/lib/utils/config/vim/indent/IndentAnything_html.vim +1 -1
- data/lib/utils/config/vim/indent/javascript.vim +4 -4
- data/lib/utils/config/vim/plugin/Decho.vim +14 -14
- data/lib/utils/config/vim/plugin/IndentAnything.vim +26 -26
- data/lib/utils/config/vim/plugin/bufexplorer.vim +16 -16
- data/lib/utils/config/vim/plugin/cecutil.vim +16 -16
- data/lib/utils/config/vim/plugin/rubyextra.vim +11 -11
- data/lib/utils/config/vim/plugin/taglist.vim +4 -4
- data/lib/utils/config/vim/plugin/test/IndentAnything/test.js +2 -2
- data/lib/utils/config/vim/syntax/javascript.vim +2 -2
- data/lib/utils/config/vim/syntax/ragel.vim +3 -3
- data/lib/utils/config/vimrc +1 -1
- data/lib/utils/editor.rb +138 -0
- data/lib/utils/finder.rb +92 -0
- data/lib/utils/grepper.rb +156 -0
- data/lib/utils/version.rb +1 -1
- data/utils.gemspec +15 -15
- metadata +67 -93
- data/lib/utils/edit.rb +0 -33
@@ -142,20 +142,20 @@ function! s:BEAddBuffer()
|
|
142
142
|
if !exists('s:raw_buffer_listing') || empty(s:raw_buffer_listing)
|
143
143
|
silent let s:raw_buffer_listing = s:BEGetBufferInfo(0)
|
144
144
|
else
|
145
|
-
" We cannot use :buffers! or :ls! to gather information
|
145
|
+
" We cannot use :buffers! or :ls! to gather information
|
146
146
|
" about this buffer since it was only just added.
|
147
|
-
" Any changes to the buffer (setlocal buftype, ...)
|
147
|
+
" Any changes to the buffer (setlocal buftype, ...)
|
148
148
|
" happens after this event fires.
|
149
149
|
"
|
150
150
|
" So we will indicate the :buffers! command must be re-run.
|
151
151
|
" This should help with the performance of the plugin.
|
152
152
|
|
153
|
-
" There are some checks which can be performed
|
153
|
+
" There are some checks which can be performed
|
154
154
|
" before deciding to refresh the buffer list.
|
155
155
|
let bufnr = expand('<abuf>') + 0
|
156
156
|
|
157
157
|
if s:BEIgnoreBuffer(bufnr) == 1
|
158
|
-
return
|
158
|
+
return
|
159
159
|
else
|
160
160
|
let s:refreshBufferList = 1
|
161
161
|
endif
|
@@ -174,7 +174,7 @@ function! s:BEActivateBuffer()
|
|
174
174
|
endif
|
175
175
|
|
176
176
|
if !empty(l) && l[0] == '-1'
|
177
|
-
" The first time we add a tab Vim uses the current
|
177
|
+
" The first time we add a tab Vim uses the current
|
178
178
|
" buffer as it's starting page, even though we are about
|
179
179
|
" to edit a new page (BufEnter triggers after), so
|
180
180
|
" remove the -1 entry indicating we have covered this case.
|
@@ -214,7 +214,7 @@ function! s:BEActivateBuffer()
|
|
214
214
|
let shortlist = filter(copy(s:raw_buffer_listing), "v:val.attributes =~ '".'^\s*'.b.'u\>'."'")
|
215
215
|
|
216
216
|
if !empty(shortlist)
|
217
|
-
" If it is unlisted (ie deleted), but now we editing it again
|
217
|
+
" If it is unlisted (ie deleted), but now we editing it again
|
218
218
|
" rebuild the buffer list.
|
219
219
|
let s:refreshBufferList = 1
|
220
220
|
endif
|
@@ -279,7 +279,7 @@ function! s:BEInitialize()
|
|
279
279
|
let s:running = 1
|
280
280
|
endfunction
|
281
281
|
|
282
|
-
" BEIgnoreBuffer
|
282
|
+
" BEIgnoreBuffer
|
283
283
|
function! s:BEIgnoreBuffer(buf)
|
284
284
|
" Check to see if this buffer should be ignore by BufExplorer.
|
285
285
|
|
@@ -307,7 +307,7 @@ function! s:BEIgnoreBuffer(buf)
|
|
307
307
|
return 1
|
308
308
|
end
|
309
309
|
|
310
|
-
return 0
|
310
|
+
return 0
|
311
311
|
endfunction
|
312
312
|
|
313
313
|
" BECleanup {{{1
|
@@ -358,7 +358,7 @@ function! StartBufExplorer(open)
|
|
358
358
|
let s:originBuffer = bufnr("%") + 0
|
359
359
|
|
360
360
|
" Create or rebuild the raw buffer list if necessary.
|
361
|
-
if !exists('s:raw_buffer_listing') ||
|
361
|
+
if !exists('s:raw_buffer_listing') ||
|
362
362
|
\ empty(s:raw_buffer_listing) ||
|
363
363
|
\ s:refreshBufferList == 1
|
364
364
|
silent let s:raw_buffer_listing = s:BEGetBufferInfo(0)
|
@@ -396,8 +396,8 @@ endfunction
|
|
396
396
|
|
397
397
|
" BEDisplayBufferList {{{1
|
398
398
|
function! s:BEDisplayBufferList()
|
399
|
-
" Do not set bufhidden since it wipes out
|
400
|
-
" the data if we switch away from the buffer
|
399
|
+
" Do not set bufhidden since it wipes out
|
400
|
+
" the data if we switch away from the buffer
|
401
401
|
" using CTRL-^
|
402
402
|
setlocal buftype=nofile
|
403
403
|
setlocal modifiable
|
@@ -584,7 +584,7 @@ function! s:BEGetBufferInfo(bufnr)
|
|
584
584
|
redir END
|
585
585
|
|
586
586
|
if (a:bufnr > 0)
|
587
|
-
" Since we are only interested in this specified buffer
|
587
|
+
" Since we are only interested in this specified buffer
|
588
588
|
" remove the other buffers listed
|
589
589
|
let bufoutput = substitute(bufoutput."\n", '^.*\n\(\s*'.a:bufnr.'\>.\{-}\)\n.*', '\1', '')
|
590
590
|
endif
|
@@ -601,7 +601,7 @@ function! s:BEGetBufferInfo(bufnr)
|
|
601
601
|
if len(bits) < 3
|
602
602
|
continue
|
603
603
|
endif
|
604
|
-
|
604
|
+
|
605
605
|
let b = {"attributes": bits[0], "line": substitute(bits[2], '\s*', '', '')}
|
606
606
|
|
607
607
|
for [key, val] in items(s:types)
|
@@ -657,7 +657,7 @@ function! s:BEBuildBufferList()
|
|
657
657
|
endif
|
658
658
|
endfor
|
659
659
|
|
660
|
-
if show_buffer == 0
|
660
|
+
if show_buffer == 0
|
661
661
|
continue
|
662
662
|
endif
|
663
663
|
endif
|
@@ -714,7 +714,7 @@ function! s:BESelectBuffer(...)
|
|
714
714
|
else
|
715
715
|
call WinManagerFileEdit(bufname, 0)
|
716
716
|
endif
|
717
|
-
|
717
|
+
|
718
718
|
return
|
719
719
|
endif
|
720
720
|
|
@@ -823,7 +823,7 @@ function! s:BERemoveBuffer(type, mode) range
|
|
823
823
|
if bufNbr !~ '^\d\+$' || getbufvar(bufNbr+0, '&modified') != 0
|
824
824
|
call s:BEError("Sorry, no write since last change for buffer ".bufNbr.", unable to delete")
|
825
825
|
else
|
826
|
-
let _bufNbrs = _bufNbrs . (_bufNbrs==''?'':' '). bufNbr
|
826
|
+
let _bufNbrs = _bufNbrs . (_bufNbrs==''?'':' '). bufNbr
|
827
827
|
endif
|
828
828
|
endif
|
829
829
|
endfor
|
@@ -345,22 +345,22 @@ endfun
|
|
345
345
|
|
346
346
|
" ---------------------------------------------------------------------
|
347
347
|
" ListWinPosn:
|
348
|
-
"fun! ListWinPosn() " Decho
|
349
|
-
" if !exists("b:cecutil_iwinposn") || b:cecutil_iwinposn == 0 " Decho
|
348
|
+
"fun! ListWinPosn() " Decho
|
349
|
+
" if !exists("b:cecutil_iwinposn") || b:cecutil_iwinposn == 0 " Decho
|
350
350
|
" call Decho("nothing on SWP stack") " Decho
|
351
351
|
" else " Decho
|
352
|
-
" let jwinposn= b:cecutil_iwinposn " Decho
|
353
|
-
" while jwinposn >= 1 " Decho
|
354
|
-
" if exists("b:cecutil_winposn{jwinposn}") " Decho
|
355
|
-
" call Decho("winposn{".jwinposn."}<".b:cecutil_winposn{jwinposn}.">") " Decho
|
356
|
-
" else " Decho
|
357
|
-
" call Decho("winposn{".jwinposn."} -- doesn't exist") " Decho
|
358
|
-
" endif " Decho
|
359
|
-
" let jwinposn= jwinposn - 1 " Decho
|
360
|
-
" endwhile " Decho
|
352
|
+
" let jwinposn= b:cecutil_iwinposn " Decho
|
353
|
+
" while jwinposn >= 1 " Decho
|
354
|
+
" if exists("b:cecutil_winposn{jwinposn}") " Decho
|
355
|
+
" call Decho("winposn{".jwinposn."}<".b:cecutil_winposn{jwinposn}.">") " Decho
|
356
|
+
" else " Decho
|
357
|
+
" call Decho("winposn{".jwinposn."} -- doesn't exist") " Decho
|
358
|
+
" endif " Decho
|
359
|
+
" let jwinposn= jwinposn - 1 " Decho
|
360
|
+
" endwhile " Decho
|
361
361
|
" endif " Decho
|
362
|
-
"endfun " Decho
|
363
|
-
"com! -nargs=0 LWP call ListWinPosn() " Decho
|
362
|
+
"endfun " Decho
|
363
|
+
"com! -nargs=0 LWP call ListWinPosn() " Decho
|
364
364
|
|
365
365
|
" ---------------------------------------------------------------------
|
366
366
|
" SaveUserMaps: this function sets up a script-variable (s:restoremap) {{{1
|
@@ -402,7 +402,7 @@ fun! SaveUserMaps(mapmode,maplead,mapchx,suffix)
|
|
402
402
|
let dounmap= 0
|
403
403
|
let mapmode= a:mapmode
|
404
404
|
endif
|
405
|
-
|
405
|
+
|
406
406
|
" save single map :...something...
|
407
407
|
if strpart(a:mapchx,0,1) == ':'
|
408
408
|
let amap= strpart(a:mapchx,1)
|
@@ -418,7 +418,7 @@ fun! SaveUserMaps(mapmode,maplead,mapchx,suffix)
|
|
418
418
|
if dounmap
|
419
419
|
exe "silent! ".mapmode."unmap ".amap
|
420
420
|
endif
|
421
|
-
|
421
|
+
|
422
422
|
" save single map <something>
|
423
423
|
elseif strpart(a:mapchx,0,1) == '<'
|
424
424
|
let amap = a:mapchx
|
@@ -433,7 +433,7 @@ fun! SaveUserMaps(mapmode,maplead,mapchx,suffix)
|
|
433
433
|
if dounmap
|
434
434
|
exe "silent! ".mapmode."unmap ".amap
|
435
435
|
endif
|
436
|
-
|
436
|
+
|
437
437
|
" save multiple maps
|
438
438
|
else
|
439
439
|
let i= 1
|
@@ -42,7 +42,7 @@ function! Foldsearch(search)
|
|
42
42
|
else
|
43
43
|
"Default value, suitable for Ruby scripts
|
44
44
|
"\(^\s*\(\(def\|class\|module\)\s\)\)\|^\s*[#%"0-9]\{0,4\}\s*{\({{\|!!\)
|
45
|
-
let searchre = '\v(^\s*(def|class|module|attr_reader|attr_accessor|alias_method)\s' .
|
45
|
+
let searchre = '\v(^\s*(def|class|module|attr_reader|attr_accessor|alias_method)\s' .
|
46
46
|
\ '|^\s*\w+attr_(reader|accessor)\s|^\s*[#%"0-9]{0,4}\s*\{(\{\{|!!))' .
|
47
47
|
\ '|^\s*[A-Z]\w+\s*\='
|
48
48
|
let b:foldsearchexpr = searchre
|
@@ -72,12 +72,12 @@ endfunction
|
|
72
72
|
command! -nargs=? -complete=command Fs call Foldsearch(<q-args>)
|
73
73
|
command! -nargs=? -complete=command Fold call Foldsearch(<q-args>)
|
74
74
|
"command! R Fs \(^\s*\(\(def\|class\|module\)\s\)\)\|^\s*[#%"0-9]\{0,4\}\s*{\({{\|!!\)
|
75
|
-
command! R Fs
|
75
|
+
command! R Fs
|
76
76
|
|
77
77
|
"{{{ Ruby block delimiter conversion: do end <=> { }
|
78
78
|
"Copyright © 2005 Mauricio Fernandez
|
79
79
|
"Subject to same licensing terms as Ruby.
|
80
|
-
" requires matchit and friends
|
80
|
+
" requires matchit and friends
|
81
81
|
" since it uses the % and = bindings
|
82
82
|
function! s:String_Strip(str)
|
83
83
|
let s = substitute(a:str, '\v^\s*', '', '')
|
@@ -97,24 +97,24 @@ function! s:RubyBlockBraceToDoEnd(lineno)
|
|
97
97
|
let nextline = substitute(orig, '\v[^{]*\v\s*\{\s*(\|[^|]*\|)?', '', '')
|
98
98
|
let nextline = substitute(nextline, '\}[^}]*$', '', '')
|
99
99
|
let numlines = 0
|
100
|
-
|
100
|
+
|
101
101
|
|
102
102
|
" uncomment one of the following:
|
103
|
-
|
103
|
+
|
104
104
|
" (1) just insert the body without splitting the lines on ;
|
105
105
|
"call append(a:lineno, nextline)
|
106
106
|
"call append(a:lineno+1, 'end' . suffix)
|
107
107
|
"
|
108
|
-
|
108
|
+
|
109
109
|
" (2) try to split on ; ...
|
110
110
|
call append(a:lineno, 'end' . suffix)
|
111
|
-
" this is what we would want to do:
|
111
|
+
" this is what we would want to do:
|
112
112
|
"let nextline = substitute(nextline, ';', "\n", 'g')
|
113
|
-
|
113
|
+
|
114
114
|
while stridx(nextline, ";") != -1
|
115
115
|
let eom = stridx(nextline, ";")
|
116
116
|
let line = s:String_Strip(strpart(nextline, 0, eom))
|
117
|
-
call append(a:lineno + numlines, line)
|
117
|
+
call append(a:lineno + numlines, line)
|
118
118
|
let numlines = numlines + 1
|
119
119
|
let nextline = strpart(nextline, eom+1, strlen(nextline) - eom - 1)
|
120
120
|
endwhile
|
@@ -152,7 +152,7 @@ function! s:RubyBlockDoEndToBrace(_firstline, _lastline)
|
|
152
152
|
let l = substitute(getline(a:_lastline), '\v^\s*end(\.|\s|$)@=', ' }', '')
|
153
153
|
let l = substitute(l, '\s*$', '', '')
|
154
154
|
let orig = orig . l
|
155
|
-
|
155
|
+
|
156
156
|
"echo orig
|
157
157
|
"input(orig)
|
158
158
|
let repl = substitute(orig, '\v\s*do\s*(\|[^|]*\|)?', ' { \1 ', '')
|
@@ -176,7 +176,7 @@ function! <SID>RubyBlockSwitchDelimiters() range
|
|
176
176
|
if braceidx != -1 && (doidx == -1 || braceidx < doidx)
|
177
177
|
call s:RubyBlockBraceToDoEnd(a:firstline)
|
178
178
|
elseif doidx != -1
|
179
|
-
execute 'normal /\<do\>' . "\n" . 'V%:call ' .
|
179
|
+
execute 'normal /\<do\>' . "\n" . 'V%:call ' .
|
180
180
|
\ s:sid . 'RubyBlockSwitchDelimiters()' . "\n"
|
181
181
|
else
|
182
182
|
echo "No block found"
|
@@ -212,7 +212,7 @@ if !exists('loaded_taglist')
|
|
212
212
|
if !exists('Tlist_Auto_Highlight_Tag')
|
213
213
|
let Tlist_Auto_Highlight_Tag = 1
|
214
214
|
endif
|
215
|
-
|
215
|
+
|
216
216
|
" Automatically highlight the current tag on entering a buffer
|
217
217
|
if !exists('Tlist_Highlight_Tag_On_BufEnter')
|
218
218
|
let Tlist_Highlight_Tag_On_BufEnter = 1
|
@@ -350,7 +350,7 @@ let loaded_taglist = 'available'
|
|
350
350
|
" Variable name format:
|
351
351
|
"
|
352
352
|
" s:tlist_def_{vim_ftype}_settings
|
353
|
-
"
|
353
|
+
"
|
354
354
|
" vim_ftype - Filetype detected by Vim
|
355
355
|
"
|
356
356
|
" Value format:
|
@@ -670,7 +670,7 @@ function! s:Tlist_Log_Msg(msg)
|
|
670
670
|
if len > 3000
|
671
671
|
let s:tlist_msg = strpart(s:tlist_msg, len - 3000)
|
672
672
|
endif
|
673
|
-
let s:tlist_msg = s:tlist_msg . strftime('%H:%M:%S') . ': ' .
|
673
|
+
let s:tlist_msg = s:tlist_msg . strftime('%H:%M:%S') . ': ' .
|
674
674
|
\ a:msg . "\n"
|
675
675
|
endif
|
676
676
|
endif
|
@@ -2419,7 +2419,7 @@ function! s:Tlist_Process_File(filename, ftype)
|
|
2419
2419
|
let s:tlist_{fidx}_tag_count = tidx
|
2420
2420
|
endif
|
2421
2421
|
|
2422
|
-
call s:Tlist_Log_Msg('Processed ' . s:tlist_{fidx}_tag_count .
|
2422
|
+
call s:Tlist_Log_Msg('Processed ' . s:tlist_{fidx}_tag_count .
|
2423
2423
|
\ ' tags in ' . a:filename)
|
2424
2424
|
|
2425
2425
|
return fidx
|
@@ -37,7 +37,7 @@ if (foo)
|
|
37
37
|
if (bar)
|
38
38
|
/*
|
39
39
|
* Comment on something. Comment on something. Comment on something.
|
40
|
-
* Comment on something. Comment on something.
|
40
|
+
* Comment on something. Comment on something.
|
41
41
|
*
|
42
42
|
*/
|
43
43
|
yo;
|
@@ -67,7 +67,7 @@ while (false) /* never do it */
|
|
67
67
|
;
|
68
68
|
|
69
69
|
|
70
|
-
/***
|
70
|
+
/***
|
71
71
|
*
|
72
72
|
* blah
|
73
73
|
*/
|
@@ -68,7 +68,7 @@ syntax keyword javaScriptPrototype prototype
|
|
68
68
|
|
69
69
|
"" Programm Keywords
|
70
70
|
syntax keyword javaScriptSource import export
|
71
|
-
syntax keyword javaScriptType const this undefined var void yield
|
71
|
+
syntax keyword javaScriptType const this undefined var void yield
|
72
72
|
syntax keyword javaScriptOperator delete new in instanceof let typeof
|
73
73
|
syntax keyword javaScriptBoolean true false
|
74
74
|
syntax keyword javaScriptNull null
|
@@ -138,7 +138,7 @@ endif "DOM/HTML/CSS
|
|
138
138
|
syntax cluster javaScriptAll contains=javaScriptComment,javaScriptLineComment,javaScriptDocComment,javaScriptStringD,javaScriptStringS,javaScriptRegexpString,javaScriptNumber,javaScriptFloat,javaScriptLabel,javaScriptSource,javaScriptType,javaScriptOperator,javaScriptBoolean,javaScriptNull,javaScriptFunction,javaScriptConditional,javaScriptRepeat,javaScriptBranch,javaScriptStatement,javaScriptGlobalObjects,javaScriptExceptions,javaScriptFutureKeys,javaScriptDomErrNo,javaScriptDomNodeConsts,javaScriptHtmlEvents,javaScriptDotNotation
|
139
139
|
syntax region javaScriptBracket matchgroup=javaScriptBracket transparent start="\[" end="\]" contains=@javaScriptAll,javaScriptParensErrB,javaScriptParensErrC,javaScriptBracket,javaScriptParen,javaScriptBlock,@htmlPreproc
|
140
140
|
syntax region javaScriptParen matchgroup=javaScriptParen transparent start="(" end=")" contains=@javaScriptAll,javaScriptParensErrA,javaScriptParensErrC,javaScriptParen,javaScriptBracket,javaScriptBlock,@htmlPreproc
|
141
|
-
syntax region javaScriptBlock matchgroup=javaScriptBlock transparent start="{" end="}" contains=@javaScriptAll,javaScriptParensErrA,javaScriptParensErrB,javaScriptParen,javaScriptBracket,javaScriptBlock,@htmlPreproc
|
141
|
+
syntax region javaScriptBlock matchgroup=javaScriptBlock transparent start="{" end="}" contains=@javaScriptAll,javaScriptParensErrA,javaScriptParensErrB,javaScriptParen,javaScriptBracket,javaScriptBlock,@htmlPreproc
|
142
142
|
|
143
143
|
"" catch errors caused by wrong parenthesis
|
144
144
|
syntax match javaScriptParensError ")\|}\|\]"
|
@@ -33,10 +33,10 @@ syntax keyword ocKeyword and bitor xor compl bitand and_eq or_eq xor_eq not not_
|
|
33
33
|
syntax keyword ocKeyword static_cast dynamic_cast
|
34
34
|
|
35
35
|
" D Keywords
|
36
|
-
syntax keyword ocType wchar dchar bit byte ubyte ushort uint ulong cent ucent
|
36
|
+
syntax keyword ocType wchar dchar bit byte ubyte ushort uint ulong cent ucent
|
37
37
|
syntax keyword ocType cfloat ifloat cdouble idouble real creal ireal
|
38
38
|
syntax keyword ocKeyword abstract alias align asm assert body cast debug delegate
|
39
|
-
syntax keyword ocKeyword deprecated export final finally foreach function import in inout
|
39
|
+
syntax keyword ocKeyword deprecated export final finally foreach function import in inout
|
40
40
|
syntax keyword ocKeyword interface invariant is mixin module out override package pragma
|
41
41
|
syntax keyword ocKeyword super synchronized typeof unittest version with
|
42
42
|
|
@@ -161,5 +161,5 @@ hi link fsmKeyword Keyword
|
|
161
161
|
hi link anyLabel Label
|
162
162
|
hi link caseLabelKeyword Keyword
|
163
163
|
hi link beginRL Type
|
164
|
-
|
164
|
+
|
165
165
|
let b:current_syntax = "ragel"
|
data/lib/utils/config/vimrc
CHANGED
@@ -255,7 +255,7 @@ if has("autocmd")
|
|
255
255
|
autocmd FileType tex map <buffer> <F6> <ESC><F1>:!acroread `echo %\|sed -e 's/tex/pdf/'`<CR><CR>
|
256
256
|
augroup END
|
257
257
|
|
258
|
-
augroup c
|
258
|
+
augroup c
|
259
259
|
autocmd!
|
260
260
|
autocmd FileType c setl sw=4 ts=4 cinoptions= formatoptions=cqrol cindent
|
261
261
|
autocmd FileType c map <buffer> <F1> <ESC>:make<CR>
|
data/lib/utils/editor.rb
ADDED
@@ -0,0 +1,138 @@
|
|
1
|
+
module Utils
|
2
|
+
class Editor
|
3
|
+
def initialize
|
4
|
+
self.wait = false
|
5
|
+
self.pause_duration = 1
|
6
|
+
self.servername = "G#{ENV['USER'].upcase}"
|
7
|
+
yield self if block_given?
|
8
|
+
end
|
9
|
+
|
10
|
+
attr_accessor :pause_duration
|
11
|
+
|
12
|
+
attr_accessor :wait
|
13
|
+
|
14
|
+
attr_accessor :servername
|
15
|
+
|
16
|
+
alias wait? wait
|
17
|
+
|
18
|
+
def vim
|
19
|
+
@vim ||= case `uname -s`
|
20
|
+
when /\Adarwin/i
|
21
|
+
if File.directory?('/Applications')
|
22
|
+
'/Applications/MacVim.app/Contents/MacOS/Vim'
|
23
|
+
else
|
24
|
+
'gvim'
|
25
|
+
end
|
26
|
+
else
|
27
|
+
'gvim'
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
def cmd(*parts)
|
32
|
+
command = parts.inject([]) do |a, p|
|
33
|
+
case
|
34
|
+
when p == nil, p == []
|
35
|
+
a
|
36
|
+
when p.respond_to?(:to_ary)
|
37
|
+
a.concat p.to_ary
|
38
|
+
else
|
39
|
+
a << p.to_s
|
40
|
+
end
|
41
|
+
end
|
42
|
+
$DEBUG and warn command * ' '
|
43
|
+
system *command
|
44
|
+
end
|
45
|
+
|
46
|
+
def fullscreen=(enabled)
|
47
|
+
started? or start
|
48
|
+
sleep pause_duration
|
49
|
+
if enabled
|
50
|
+
edit_remote_send '<ESC>:set fullscreen<CR>'
|
51
|
+
else
|
52
|
+
edit_remote_send '<ESC>:set nofullscreen<CR>'
|
53
|
+
end
|
54
|
+
activate
|
55
|
+
end
|
56
|
+
|
57
|
+
def file_linenumber?(filename)
|
58
|
+
filename.match(/^\s*([^:]+):(\d+)/)
|
59
|
+
end
|
60
|
+
|
61
|
+
def edit(*filenames)
|
62
|
+
if filenames.size == 1
|
63
|
+
filename = filenames.first
|
64
|
+
if m = file_linenumber?(filename)
|
65
|
+
edit_file_linenumber(*m.captures)
|
66
|
+
else
|
67
|
+
edit_file(filename)
|
68
|
+
end
|
69
|
+
else
|
70
|
+
edit_file(*filenames)
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
def edit_file(*filenames)
|
75
|
+
edit_remote_file(*filenames)
|
76
|
+
end
|
77
|
+
|
78
|
+
def edit_file_linenumber(filename, linenumber)
|
79
|
+
if wait?
|
80
|
+
edit_remote(filename)
|
81
|
+
sleep pause_duration
|
82
|
+
edit_remote_send("<ESC>:#{linenumber}<CR>")
|
83
|
+
edit_remote_wait(filename)
|
84
|
+
else
|
85
|
+
edit_remote(filename)
|
86
|
+
sleep pause_duration
|
87
|
+
edit_remote_send("<ESC>:#{linenumber}<CR>")
|
88
|
+
end
|
89
|
+
end
|
90
|
+
|
91
|
+
def ensure_running
|
92
|
+
started? ? activate : start
|
93
|
+
self
|
94
|
+
end
|
95
|
+
|
96
|
+
def start
|
97
|
+
cmd(vim, '-g', '--servername', servername)
|
98
|
+
end
|
99
|
+
|
100
|
+
def stop
|
101
|
+
started? and edit_remote_send('<ESC>:qa<CR>')
|
102
|
+
end
|
103
|
+
|
104
|
+
def activate
|
105
|
+
edit_remote("stupid_trick#{rand}")
|
106
|
+
sleep pause_duration
|
107
|
+
edit_remote_send('<ESC>:bw<CR>')
|
108
|
+
end
|
109
|
+
|
110
|
+
def serverlist
|
111
|
+
@serverlist ||= `#{vim} -g --serverlist`.split
|
112
|
+
end
|
113
|
+
|
114
|
+
def started?(name = servername)
|
115
|
+
serverlist.member?(name)
|
116
|
+
end
|
117
|
+
|
118
|
+
def edit_remote(*args)
|
119
|
+
cmd(vim, '-g', '--servername', servername, '--remote', *args)
|
120
|
+
end
|
121
|
+
|
122
|
+
def edit_remote_wait(*args)
|
123
|
+
cmd(vim, '-g', '--servername', servername, '--remote-wait', *args)
|
124
|
+
end
|
125
|
+
|
126
|
+
def edit_remote_send(*args)
|
127
|
+
cmd(vim, '-g', '--servername', servername, '--remote-send', *args)
|
128
|
+
end
|
129
|
+
|
130
|
+
def edit_remote_file(*filenames)
|
131
|
+
if wait?
|
132
|
+
edit_remote_wait(*filenames)
|
133
|
+
else
|
134
|
+
edit_remote(*filenames)
|
135
|
+
end
|
136
|
+
end
|
137
|
+
end
|
138
|
+
end
|