diff --git a/extra/tools/which/authors.txt b/extra/tools/which/authors.txt new file mode 100644 index 0000000000..e091bb8164 --- /dev/null +++ b/extra/tools/which/authors.txt @@ -0,0 +1 @@ +John Benediktsson diff --git a/extra/tools/which/which.factor b/extra/tools/which/which.factor new file mode 100644 index 0000000000..68c734b1dd --- /dev/null +++ b/extra/tools/which/which.factor @@ -0,0 +1,52 @@ +! Copyright (C) 2012 John Benediktsson +! See http://factorcode.org/license.txt for BSD license + +USING: arrays assocs combinators combinators.short-circuit +environment io.backend io.files io.files.info io.pathnames +kernel sequences sets splitting system unicode.case ; + +IN: tools.which + +lower ] bi@ tail? ] with any? + [ drop 1array ] [ [ append ] with map ] if + ] [ 1array ] if* ; + +: ((which)) ( commands paths -- file/f ) + [ normalize-path ] map members + cartesian-product flip concat + [ prepend-path ] { } assoc>map + [ executable? ] find nip ; + +: (which) ( command paths -- file/f ) + split-path os windows? [ + [ path-extensions ] [ "." prefix ] bi* + ] [ [ 1array ] dip ] if ((which)) ; + +PRIVATE> + +: which ( command -- file/f ) + current-path (which) ;