aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--autoload/xolox/misc/list.vim15
-rw-r--r--autoload/xolox/misc/path.vim25
2 files changed, 27 insertions, 13 deletions
diff --git a/autoload/xolox/misc/list.vim b/autoload/xolox/misc/list.vim
index 44d6b20..ee243d4 100644
--- a/autoload/xolox/misc/list.vim
+++ b/autoload/xolox/misc/list.vim
@@ -6,18 +6,9 @@
" Remove duplicate values from {list} in-place (preserves order).
function! xolox#misc#list#unique(list)
- let index = 0
- while index < len(a:list)
- let value = a:list[index]
- let match = index(a:list, value, index+1)
- if match >= 0
- call remove(a:list, match)
- else
- let index += 1
- endif
- unlet value
- endwhile
- return a:list
+ call reverse(a:list)
+ call filter(a:list, 'count(a:list, v:val) == 1')
+ return reverse(a:list)
endfunction
" Binary insertion (more efficient than calling sort() after each insertion).
diff --git a/autoload/xolox/misc/path.vim b/autoload/xolox/misc/path.vim
index ee0f2e2..efb6340 100644
--- a/autoload/xolox/misc/path.vim
+++ b/autoload/xolox/misc/path.vim
@@ -1,10 +1,33 @@
" Vim auto-load script
" Author: Peter Odding <peter@peterodding.com>
-" Last Change: August 31, 2011
+" Last Change: September 26, 2011
" URL: http://peterodding.com/code/vim/misc/
let s:windows_compatible = has('win32') || has('win64')
+function! xolox#misc#path#which(...)
+ let extensions = s:windows_compatible ? split($PATHEXT, ';') : ['']
+ let matches = []
+ let checked = {}
+ for directory in split($PATH, s:windows_compatible ? ';' : ':')
+ let directory = xolox#misc#path#absolute(directory)
+ if !has_key(checked, directory)
+ if isdirectory(directory)
+ for program in a:000
+ for extension in extensions
+ let path = xolox#misc#path#merge(directory, program . extension)
+ if executable(path)
+ call add(matches, path)
+ endif
+ endfor
+ endfor
+ endif
+ let checked[directory] = 1
+ endif
+ endfor
+ return matches
+endfunction
+
" Split a pathname into a list of path components.
function! xolox#misc#path#split(path)