mirror of
https://github.com/jorgebucaran/fisher
synced 2024-11-01 21:40:18 +00:00
5dc1eea953
+ Add the ability to install plugins from Gists. You can distribute a very simple, one-single function plugin in the form of a Gist. Your users can install it using fisher install url and Fisherman will query the Gist using the GitHub API to get a list of the Gist files and use the name of the first identified *.fish file to name the plugin in your system. Since there is no formal way to name a Gist, and you may prefer to keep the "description" field for the actual description and not a name, Fisherman supports only one fish file per Gist. Closes #75. + Use command(1) when calling non-builtins. Thanks @daenney. Closes #79. + Add __fisher_plugin_can_enable to detect installing a prompt that is not the current one. Closes #78. + Remove the ability to install a plugin in a parent directory using .. or ../ or even worse, ../../ as well as other combinations that navigate to a parent directory. I find the use case odd at best, and more dangerous that useful. If you want to install a local plugin use the full path or a relative path, always top down. fisher install . or fisher install my/plugin or fisher install /Users/$USER/path/to/plugin. Closes #81.
43 lines
1.3 KiB
Fish
43 lines
1.3 KiB
Fish
function __fisher_plugin_validate -a plugin
|
|
switch "$plugin"
|
|
case ..\*
|
|
return 1
|
|
|
|
case . /\* ./\*
|
|
if test ! -e $plugin
|
|
return 1
|
|
end
|
|
|
|
switch "$plugin"
|
|
case /\*
|
|
printf "%s\n" $plugin
|
|
|
|
case \*
|
|
|
|
printf "$PWD/%s/%s" (dirname $plugin) (basename $plugin)
|
|
|
|
end | sed -E 's|[./]*$||; s|/([\./])/+|/|g'
|
|
|
|
case \*
|
|
set -l id "[A-Za-z0-9._-]"
|
|
|
|
if not printf "%s\n" $plugin | grep -qE "^(($id+)[:/]*)*\$"
|
|
printf "%s\n" $plugin
|
|
return 1
|
|
end
|
|
|
|
printf "%s\n" $plugin \
|
|
| sed -E "
|
|
s|^gh[:/]+|https://github.com/|
|
|
s|^gl[:/]+|https://gitlab.com/|
|
|
s|^bb[:/]+|https://bitbucket.org/|
|
|
s|^omf[:/]+|https://github.com/oh-my-fish/|
|
|
s|^($id+)/($id+)\$|https://github.com/\1/\2|
|
|
s|^(gist\.github\.com.*)|https://\1|
|
|
s|^http(s?)[:/]*|http\1://|
|
|
s|https://github((.com)?/)?|https://github.com/|
|
|
s|/*(\.git/*)*\$||g" \
|
|
| tr "[A-Z]" "[a-z]"
|
|
end
|
|
end
|