Function 'redefine_function' that allows a function to be redefined

This commit is contained in:
Bruno Pinto 2012-07-24 23:48:02 -03:00
parent 82cd7867b0
commit e9962924c3
2 changed files with 41 additions and 33 deletions

View File

@ -1,33 +0,0 @@
function backup_function
set -l funcname $argv[1]
if functions -q -- $funcname
_create_tmpname
functions -- $funcname | sed -e s/^function\ $funcname/function\ old_$funcname/ > $tmpname
_source_old_function
else
_print_function_not_found $argv
remove_backup_function $argv
return 1
end
end
function _create_tmpname
set -l tmpdir /tmp
set -g tmpname (printf "$tmpdir/fish_funced_%d_%d.fish" %self (random))
while test -f $tmpname
set -g tmpname (printf "$tmpdir/fish_funced_%d_%d.fish" %self (random))
end
end
function _print_function_not_found
set_color red
_ "Function '$argv' not found.
"
set_color normal
end
function _source_old_function
. $tmpname
end

View File

@ -0,0 +1,41 @@
function redefine_function -d "Redefine a function and backup the old using the prefix 'old_'"
if not set -q argv[1]; _print_error 'Missing function name argument.'; return 1; end
if not set -q argv[2]; _print_error 'Missing original function file argument.'; return 1; end
if not set -q argv[3]; _print_error 'Missing function code argument.'; return 1; end
_backup_old_function $argv
_load_new_function $argv
end
function _backup_old_function
set -l funcname $argv[1]
set -l funcfile $argv[2]
if test -f $funcfile
. $funcfile
functions -c $funcname old_$funcname
else
_print_error "File '$funcfile' not found"
return 1
end
end
function _load_new_function
set -l func $argv[3]
set -q TMPDIR; or set -l TMPDIR /tmp
set -l tmpname (printf "$TMPDIR/fish_funced_%d_%d.fish" %self (random))
while test -f $tmpname
set tmpname (printf "$TMPDIR/fish_funced_%d_%d.fish" %self (random))
end
echo $func > $tmpname
. $tmpname
rm $tmpname >/dev/null
end
function _print_error
set_color red
echo $argv
set_color normal
end