aboutsummaryrefslogtreecommitdiffhomepage
path: root/init/functions/type.fish
diff options
context:
space:
mode:
Diffstat (limited to 'init/functions/type.fish')
-rw-r--r--init/functions/type.fish134
1 files changed, 134 insertions, 0 deletions
diff --git a/init/functions/type.fish b/init/functions/type.fish
new file mode 100644
index 00000000..af7e0faa
--- /dev/null
+++ b/init/functions/type.fish
@@ -0,0 +1,134 @@
+
+function type -d "Print the type of a command"
+
+ # Initialize
+ set -l status 1
+ set -l mode normal
+ set -l selection all
+
+ #
+ # Get options
+ #
+ set -l shortopt -o tpPafh
+ set -l longopt
+ if not getopt -T >/dev/null
+ set longopt -l type,path,force-path,all,no-functions,help
+ end
+
+ if not getopt -n type -Q $shortopt $longopt -- $argv
+ return 1
+ end
+
+ set -l tmp (getopt $shortopt $longopt -- $argv)
+
+ set -l opt
+ eval set opt $tmp
+
+ for i in $opt
+ switch $i
+ case -t --type
+ set mode type
+
+ case -p --path
+ set mode path
+
+ case -P --force-path
+ set mode path
+ set selection files
+
+ case -a --all
+ set selection multi
+
+ case -f --no-functions
+ set selection files
+
+ case -h --help
+ help type
+ return 0
+
+ case --
+ break
+
+ end
+ end
+
+ # Check all possible types for the remaining arguments
+ for i in $argv
+
+ switch $i
+ case '-*'
+ continue
+ end
+
+ # Found will be set to 1 if a match is found
+ set found 0
+
+ if test $selection != files
+
+ if contains -- $i (functions -na)
+ set status 0
+ set found 1
+ switch $mode
+ case normal
+ printf (_ '%s is a function with definition\n') $i
+ functions $i
+
+ case type
+ printf (_ 'function\n')
+
+ case path
+ echo
+
+ end
+ if test $selection != multi
+ continue
+ end
+ end
+
+ if contains -- $i (builtin -n)
+ set status 0
+ set found 1
+ switch $mode
+ case normal
+ printf (_ '%s is a builtin\n') $i
+
+ case type
+ printf (_ 'builtin\n')
+
+ case path
+ echo
+ end
+ if test $selection != multi
+ continue
+ end
+ end
+
+ end
+
+ if which $i ^/dev/null >/dev/null
+ set status 0
+ set found 1
+ switch $mode
+ case normal
+ printf (_ '%s is %s\n') $i (which $i)
+
+ case type
+ printf (_ 'file\n')
+
+ case path
+ which $i
+ end
+ if test $selection != multi
+ continue
+ end
+ end
+
+ if test $found = 0
+ printf (_ "%s: Could not find '%s'") type $i
+ end
+
+ end
+
+ return $status
+end
+