Skip to content

Commit

Permalink
Merge branch 'master' of https://github.com/xolox/vim-misc
Browse files Browse the repository at this point in the history
  • Loading branch information
xolox committed Aug 31, 2011
2 parents 93d504a + 571abe3 commit 96e63ff
Show file tree
Hide file tree
Showing 3 changed files with 76 additions and 3 deletions.
37 changes: 36 additions & 1 deletion autoload/xolox/misc/list.vim
@@ -1,6 +1,6 @@
" Vim auto-load script
" Author: Peter Odding <peter@peterodding.com>
" Last Change: March 15, 2011
" Last Change: August 31, 2011
" URL: http://peterodding.com/code/vim/misc/

" Remove duplicate values from {list} in-place (preserves order).
Expand All @@ -20,4 +20,39 @@ function! xolox#misc#list#unique(list)
return a:list
endfunction

" Binary insertion (more efficient than calling sort() after each insertion).

function! xolox#misc#list#binsert(list, value, ...)
let idx = s:binsert_r(a:list, 0, len(a:list), a:value, exists('a:1') && a:1)
return insert(a:list, a:value, idx)
endfunction

function! s:binsert_r(list, low, high, value, ignorecase)
let mid = a:low + (a:high - a:low) / 2
if a:low == a:high
return a:low
elseif a:ignorecase ? a:value >? a:list[mid] : a:value > a:list[mid]
return s:binsert_r(a:list, mid + 1, a:high, a:value, a:ignorecase)
elseif a:ignorecase ? a:value <? a:list[mid] : a:value < a:list[mid]
return s:binsert_r(a:list, a:low, mid, a:value, a:ignorecase)
else
return mid
endif
endfunction

if 0
" Tests for xolox#misc#list#binsert().
let s:list = ['a', 'B', 'e']
function! s:test(value, expected)
call xolox#misc#list#binsert(s:list, a:value, 1)
if s:list != a:expected
call xolox#misc#msg#warn("list.vim: Test failed! Expected %s, got %s",
\ string(a:expected), string(s:list))
endif
endfunction
call s:test('c', ['a', 'B', 'c', 'e'])
call s:test('D', ['a', 'B', 'c', 'D', 'e'])
call s:test('f', ['a', 'B', 'c', 'D', 'e', 'f'])
endif

" vim: ts=2 sw=2 et
27 changes: 26 additions & 1 deletion autoload/xolox/misc/option.vim
@@ -1,6 +1,6 @@
" Vim auto-load script
" Author: Peter Odding <peter@peterodding.com>
" Last Change: June 27, 2011
" Last Change: August 31, 2011
" URL: http://peterodding.com/code/vim/misc/

function! xolox#misc#option#get(name, ...)
Expand Down Expand Up @@ -56,4 +56,29 @@ function! s:escape_tags(s)
return escape(a:s, ', ')
endfunction

function! xolox#misc#option#eval_tags(value, ...)
let pathnames = []
let first_only = exists('a:1') && a:1
for pattern in xolox#misc#option#split_tags(a:value)
" Make buffer relative pathnames absolute.
if pattern =~ '^\./'
let directory = xolox#misc#escape#substitute(expand('%:p:h'))
let pattern = substitute(pattern, '^.\ze/', directory, '')
endif
" Make working directory relative pathnames absolute.
if xolox#misc#path#is_relative(pattern)
let pattern = xolox#misc#path#merge(getcwd(), pattern)
endif
" Ignore the trailing `;' for recursive upwards searching because we
" always want the most specific pathname available.
let pattern = substitute(pattern, ';$', '', '')
" Expand the pattern.
call extend(pathnames, split(expand(pattern), "\n"))
if first_only && !empty(pathnames)
return pathnames[0]
endif
endfor
return firstonly ? '' : pathnames
endfunction

" vim: ts=2 sw=2 et
15 changes: 14 additions & 1 deletion autoload/xolox/misc/path.vim
@@ -1,6 +1,6 @@
" Vim auto-load script
" Author: Peter Odding <peter@peterodding.com>
" Last Change: March 15, 2011
" Last Change: August 31, 2011
" URL: http://peterodding.com/code/vim/misc/

let s:windows_compatible = has('win32') || has('win64')
Expand Down Expand Up @@ -69,6 +69,7 @@ endfunction
" Join a directory and filename into a single pathname.

function! xolox#misc#path#merge(parent, child, ...)
" TODO Use isabs()!
if type(a:parent) == type('') && type(a:child) == type('')
if s:windows_compatible
let parent = substitute(a:parent, '[\\/]\+$', '', '')
Expand Down Expand Up @@ -127,6 +128,18 @@ else
endfunction
endif

" Check whether a path is relative.

function! xolox#misc#path#is_relative(path)
if a:path =~ '^\w\+://'
return 0
elseif s:windows_compatible
return a:path !~ '^\(\w:\|[\\/]\)'
else
return a:path !~ '^/'
endif
endfunction

" Create a temporary directory and return the path.

function! xolox#misc#path#tempdir()
Expand Down

0 comments on commit 96e63ff

Please sign in to comment.