From 9cabfbd1d09b41b7b78ebf57a42957ba87ff136f Mon Sep 17 00:00:00 2001
From: Bart Kroon <bart@tarmack.eu>
Date: Wed, 7 Sep 2011 22:22:05 +0200
Subject: Made list#unique about 5 times faster using filter().

---
 list.vim | 15 +++------------
 1 file changed, 3 insertions(+), 12 deletions(-)

diff --git a/list.vim b/list.vim
index 44d6b20..ee243d4 100644
--- a/list.vim
+++ b/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).
-- 
cgit v1.2.3


From 362ec9c9391decf5440b1a14e8a84a71168158cd Mon Sep 17 00:00:00 2001
From: Peter Odding <peter@peterodding.com>
Date: Mon, 26 Sep 2011 01:46:25 +0200
Subject: New xolox#misc#path#which() function to search the $PATH

---
 path.vim | 25 ++++++++++++++++++++++++-
 1 file changed, 24 insertions(+), 1 deletion(-)

diff --git a/path.vim b/path.vim
index ee0f2e2..efb6340 100644
--- a/path.vim
+++ b/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)
-- 
cgit v1.2.3