diff --git a/functions/backup_function.fish b/functions/backup_function.fish deleted file mode 100644 index 57bd948..0000000 --- a/functions/backup_function.fish +++ /dev/null @@ -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 diff --git a/functions/redefine_function.fish b/functions/redefine_function.fish new file mode 100644 index 0000000..50d3bfa --- /dev/null +++ b/functions/redefine_function.fish @@ -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