2006-11-07 20:55:39 +00:00
2007-01-16 01:29:18 +00:00
function alias --description "Legacy function for creating shellscript functions using an alias-like syntax"
2006-11-17 16:24:38 +00:00
if count $argv > /dev/null
switch $argv [ 1 ]
case -h --h --he --hel --help
__fish_print_help alias
return 0
end
end
2006-11-07 20:55:39 +00:00
set -l name
set -l body
2013-01-01 21:56:08 +00:00
set -l prefix
2006-11-07 20:55:39 +00:00
switch ( count $argv )
2012-06-12 18:59:05 +00:00
case 0
echo "Fish implements aliases using functions. Use 'functions' builtin to see list of functions and 'functions function_name' to see function definition, type 'help alias' for more information."
return 1
2006-11-07 20:55:39 +00:00
case 1
2012-06-17 11:06:06 +00:00
# Some seds (e.g. on Mac OS X), don't support \n in the RHS
# Use a literal newline instead
# http://sed.sourceforge.net/sedfaq4.html#s4.1
set -l tmp ( echo $argv | sed -e " s/\([^=]\)=/\1\\
/" )
2006-11-07 20:55:39 +00:00
set name $tmp [ 1 ]
set body $tmp [ 2 ]
case 2
set name $argv [ 1 ]
set body $argv [ 2 ]
case \*
2007-04-12 11:52:21 +00:00
printf ( _ "%s: Expected one or two arguments, got %d\n" ) alias ( count $argv )
2006-11-07 20:55:39 +00:00
return 1
end
2013-02-05 19:43:40 +00:00
2013-02-19 21:58:55 +00:00
# Prevent the alias from immediately running into an infinite recursion if
# $body starts with the same command as $name.
2013-02-05 19:43:40 +00:00
switch $body
case $name $name \ \* $name \t \*
if contains $name ( builtin --names )
set prefix builtin
2013-02-19 21:58:55 +00:00
else
2013-02-05 19:43:40 +00:00
set prefix command
end
2013-01-01 21:56:08 +00:00
end
eval " function $name ; $prefix $body \$argv; end "
2006-11-07 20:55:39 +00:00
end