mirror of
https://github.com/oh-my-fish/oh-my-fish.git
synced 2024-11-22 20:13:30 +08:00
Function 'redefine_function' that allows a function to be redefined
This commit is contained in:
parent
82cd7867b0
commit
e9962924c3
|
@ -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
|
41
functions/redefine_function.fish
Normal file
41
functions/redefine_function.fish
Normal 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
|
Loading…
Reference in New Issue
Block a user