Merge pull request #99 from derekstavis/remove-from-autoload

Implement `autoload -e` option to remove from autoload paths
This commit is contained in:
Bruno 2015-10-05 02:06:13 +01:00
commit beca6512e1
2 changed files with 63 additions and 17 deletions

View File

@ -8,15 +8,25 @@
## Basic Functions ## Basic Functions
#### `autoload` _`<path [path...]>`_ #### `autoload` _`[-e] <path>...`_
Autoload a function or completion path. Add the specified list of directories to `$fish_function_path`.
Any `completions` directories are correctly added to the `$fish_complete_path`. Manipulate [autoloading](http://fishshell.com/docs/current/index.html#syntax-function-autoloading) path components.
All paths ending with `completions` are correctly added to or erased from
`$fish_complete_path`.
To add paths to autoload:
```fish ```fish
autoload $mypath $mypath/completions autoload $mypath $mypath/completions
``` ```
To erase paths from autoload:
```fish
autoload -e $mypath $mypath/completions
```
#### `available` _`<name>`_ #### `available` _`<name>`_
Check if a program is available to run. Sets `$status` to `0` if the program is available. Check if a program is available to run. Sets `$status` to `0` if the program is available.

View File

@ -1,28 +1,64 @@
# SYNOPSIS # SYNOPSIS
# autoload <path>... # autoload <path>...
# autoload -e <path>...
# #
# OVERVIEW # OVERVIEW
# Autoload a function or completion path. Add the specified list of # Manipulate autoloading path components.
# directories to $fish_function_path. Any `completions` directories
# are correctly added to the $fish_complete_path.
# #
# Returns 0 if one of the paths exist. # If called without options, the paths passed as arguments are added to
# Returns != 0 if all paths are missing. # $fish_function_path. All paths ending with `completions` are correctly
# added to $fish_complete_path. Returns 0 if one or more paths exist. If all
# paths are missing, returns != 0.
#
# When called with -e, the paths passed as arguments are removed from
# $fish_function_path. All arguments ending with `completions` are correctly
# removed from $fish_complete_path. Returns 0 if one or more paths erased. If
# no paths were erased, returns != 0.
function autoload -d "Manipulate autoloading path components"
set -l paths $argv
switch "$argv[1]"
case '-e' '--erase'
set erase
if test (count $argv) -ge 2
set paths $argv[2..-1]
else
echo "usage: autoload $argv[1] <path>..." 1>&2
return 1
end
case "-*" "--*"
echo "autoload: invalid option $argv[1]"
return 1
end
for path in $paths
not test -d "$path"; and continue
function autoload -d "autoload a function or completion path"
for path in $argv
set -l dest fish_function_path set -l dest fish_function_path
if test -d "$path"
set path_exist
if test (basename "$path") = completions if test (basename "$path") = completions
set dest fish_complete_path set dest fish_complete_path
end end
contains "$path" $$dest; or set $dest "$path" $$dest if set -q erase
not contains -- "$path" $$dest; and continue
# Make a copy of function path selected above
set -l function_path $$dest
set -l index (contains -i -- $path $function_path)
set -e function_path[$index]
# Set function path to modified copy
set $dest $function_path
set return_success
else
set return_success
contains -- "$path" $$dest; and continue
set $dest "$path" $$dest
end end
end end
set -q path_exist set -q return_success
end end