mirror of
https://github.com/oh-my-fish/oh-my-fish.git
synced 2024-11-29 03:59:48 +08:00
2c4471a78c
Refactor autoload: Split the big function into two smaller ones, doing only option parsing at main function. The algorithm is also rewritten, now in two steps for both path inclusion an exclusion functions: 1) use auxiliary lists to store valid function and completion paths, 2) bulk insert or remove just once in the variable. Now also respects path insertion policy, keeping user function path always in front of other paths, thus allowing precedence of user functions.
53 lines
1.6 KiB
Fish
53 lines
1.6 KiB
Fish
function autoload
|
|
switch "$argv[1]"
|
|
case '-e' '--erase'
|
|
test (count $argv) -ge 2
|
|
and __autoload_erase $argv[2..-1]
|
|
or echo "usage: autoload $argv[1] <path>..." 1>&2
|
|
case "-*" "--*"
|
|
echo "autoload: invalid option $argv[1]"
|
|
return 1
|
|
case '*'
|
|
test (count $argv) -ge 1
|
|
and __autoload_insert $argv
|
|
or echo "usage: autoload <path>..." 1>&2
|
|
end
|
|
end
|
|
function __autoload_insert
|
|
set -l function_path
|
|
set -l complete_path
|
|
for path in $argv
|
|
not test -d "$path"; and continue
|
|
set -l IFS '/'
|
|
echo $path | read -la components
|
|
if test "x$components[-1]" = xcompletions
|
|
contains -- $path $fish_complete_path
|
|
or set complete_path $complete_path $path
|
|
else
|
|
contains -- $path $fish_function_path
|
|
or set function_path $function_path $path
|
|
end;
|
|
end;
|
|
test -n "$function_path"
|
|
and set fish_function_path $fish_function_path[1] $function_path $fish_function_path[2..-1]
|
|
test -n "$complete_path"
|
|
and set fish_complete_path $fish_complete_path[1] $complete_path $fish_complete_path[2..-1]
|
|
return 0
|
|
end;
|
|
function __autoload_erase
|
|
set -l function_indexes
|
|
set -l complete_indexes
|
|
for path in $argv
|
|
set -l IFS '/'
|
|
echo $path | read -la components
|
|
test "x$components[-1]" = xcompletions
|
|
and set complete_indexes $complete_indexes (contains -i $path $fish_complete_path)
|
|
or set function_indexes $function_indexes (contains -i $path $fish_function_path)
|
|
end;
|
|
test -n "$function_indexes"
|
|
and set -e fish_function_path[$function_indexes]
|
|
test -n "$complete_indexes"
|
|
and set -e fish_complete_path[$complete_indexes]
|
|
return 0
|
|
end;
|