Compare commits

..

No commits in common. 'main' and '4.2.0' have entirely different histories.
main ... 4.2.0

@ -7,7 +7,7 @@ jobs:
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- uses: actions/checkout@v3 - uses: actions/checkout@v2
- name: Install Fish - name: Install Fish
run: | run: |
sudo apt-add-repository -yn ppa:fish-shell/release-3 sudo apt-add-repository -yn ppa:fish-shell/release-3

@ -1,63 +1,61 @@
# Fisher # Fisher
> A plugin manager for [Fish](https://fishshell.com)—your friendly interactive shell. [Snag fresh plugins!](https://github.com/jorgebucaran/awsm.fish#readme) > A plugin manager for [Fish](https://fishshell.com)—the friendly interactive shell.
Take control of functions, completions, bindings, and snippets from the command line. Unleash your shell's true potential, perfect your prompt, and craft repeatable configurations across different systems effortlessly. Fisher's zero impact on shell startup keeps your shell zippy and responsive. No gimmicks, just smooth sailing! Manage functions, completions, bindings, and snippets from the command line. Extend your shell capabilities, change the look of your prompt and create repeatable configurations across different systems effortlessly.
- Fisher is 100% pure-Fish, making it easy to contribute or modify - Zero configuration out of the box. Need to tweak a thing? [You can do that too](#using-your-fish_plugins-file).
- Scorching fast concurrent plugin downloads that'll make you question reality - 100% _pure_-Fish—easy to contribute to or modify.
- Zero configuration needed—we're not kidding! - Blazing fast concurrent plugin downloads.
- Oh My Fish! plugins supported too - Oh My Fish! plugin support.
> #### ☝️ [Upgrading from Fisher `3.x` or older? Strap in and read this!](https://github.com/jorgebucaran/fisher/issues/652) Looking for plugins? Browse [git.io/awsm.fish](https://git.io/awesome.fish) or [search](https://github.com/topics/fish-plugins) [on](https://github.com/topics/fish-package) [GitHub](https://github.com/topics/fish-plugin).
## Installation ## Installation
```console ```console
curl -sL https://raw.githubusercontent.com/jorgebucaran/fisher/main/functions/fisher.fish | source && fisher install jorgebucaran/fisher curl -sL https://git.io/fisher | source && fisher install jorgebucaran/fisher
``` ```
## Quickstart ## Quickstart
Fisher lets you install, update, and remove plugins like a boss. Revel in Fish's [tab completion](https://fishshell.com/docs/current/index.html#completion) and rich syntax highlighting while you're at it. You can install, update, and remove plugins interactively with Fisher, taking advantage of Fish [tab completion](https://fishshell.com/docs/current/index.html#completion) and rich syntax highlighting.
### Installing plugins ### Installing plugins
To install plugins, use the `install` command and point it to the GitHub repository. Install plugins using the `install` command followed by the path to the repository on GitHub.
```console ```console
fisher install jorgebucaran/nvm.fish fisher install ilancosman/tide
``` ```
> Wanna install from GitLab? No problemo—just prepend `gitlab.com/` to the plugin path. To get a specific version of a plugin add an `@` symbol after the plugin name followed by a tag, branch, or [commit](https://git-scm.com/docs/gitglossary#Documentation/gitglossary.txt-aiddefcommit-ishacommit-ishalsocommittish).
You can also snag a specific version of a plugin by adding an `@` symbol after the plugin name, followed by a tag, branch, or [commit](https://git-scm.com/docs/gitglossary#Documentation/gitglossary.txt-aiddefcommit-ishacommit-ishalsocommittish).
```console ```console
fisher install IlanCosman/tide@v5 fisher install jorgebucaran/nvm.fish@2.1.0
``` ```
And hey, you can install plugins from a local directory too! You can install plugins from a local directory too.
```console ```console
fisher install ~/path/to/plugin fisher install ~/path/to/plugin
``` ```
> Heads up! Fisher expands plugins into your Fish configuration directory by default, overwriting existing files. If that's not your jam, set `$fisher_path` to your preferred location and put it in your function path ([#640](https://github.com/jorgebucaran/fisher/issues/640)). > Fisher expands plugins into your Fish configuration directory by default, overwriting existing files. If you wish to change this behavior, set `$fisher_path` to your preferred location and put it in your function path (#640).
### Listing plugins ### Listing plugins
Use the `list` command to see all your shiny installed plugins. List all the plugins that are currently installed using the `list` command.
```console ```console
$ fisher list $ fisher list
jorgebucaran/fisher jorgebucaran/fisher
ilancosman/tide@v5 ilancosman/tide
jorgebucaran/nvm.fish jorgebucaran/nvm.fish@2.1.0
/home/jb/path/to/plugin /home/jb/path/to/plugin
``` ```
The `list` command also plays nice with regular expressions for filtering the output. The `list` command also accepts a regular expression to filter the output.
```console ```console
$ fisher list \^/ $ fisher list \^/
@ -66,23 +64,23 @@ $ fisher list \^/
### Updating plugins ### Updating plugins
`update` command to the rescue! It updates one or more plugins to their latest and greatest version. The `update` command updates one or more plugins to their latest version.
```console ```console
fisher update jorgebucaran/fisher fisher update jorgebucaran/fisher
``` ```
> Just type `fisher update` to update everything in one fell swoop. > Use just `fisher update` to update everything.
### Removing plugins ### Removing plugins
Say goodbye to installed plugins with the `remove` command. Remove installed plugins using the `remove` command.
```console ```console
fisher remove jorgebucaran/nvm.fish fisher remove jorgebucaran/nvm.fish@2.1.0
``` ```
Feeling destructive? Wipe out everything, including Fisher itself. You may want to remove everything, including Fisher.
```console ```console
fisher list | fisher remove fisher list | fisher remove
@ -90,18 +88,18 @@ fisher list | fisher remove
## Using your `fish_plugins` file ## Using your `fish_plugins` file
Whenever you install or remove a plugin from the command line, Fisher jots down all the installed plugins in `$__fish_config_dir/fish_plugins`. Add this file to your dotfiles or version control to easily share your configuration across different systems. Whenever you install or remove a plugin from the command line, Fisher will write down all the installed plugins plugins to `$__fish_config_dir/fish_plugins`. Adding this file to your dotfiles or version control is the easiest way to share your configuration across different systems.
You can also edit this file and run `fisher update` to commit changes like a pro: You can also edit this file and run `fisher update` to commit changes. Here's an example:
```console ```console
$EDITOR $__fish_config_dir/fish_plugins nano $__fish_config_dir/fish_plugins
``` ```
```diff ```diff
jorgebucaran/fisher jorgebucaran/fisher
ilancosman/tide@v5 ilancosman/tide
jorgebucaran/nvm.fish jorgebucaran/nvm.fish@2.1.0
+ PatrickF1/fzf.fish + PatrickF1/fzf.fish
- /home/jb/path/to/plugin - /home/jb/path/to/plugin
``` ```
@ -110,84 +108,46 @@ jorgebucaran/nvm.fish
fisher update fisher update
``` ```
This will install **PatrickF1**/**fzf.fish**, remove /**home**/**jb**/**path**/**to**/**plugin**, and update everything else. That will install **PatrickF1**/**fzf.fish**, remove /**home**/**jb**/**path**/**to**/**plugin**, and update everything else.
## Creating a plugin ## Creating a plugin
Plugins can include any number of files in `functions`, `conf.d`, and `completions` directories. Most plugins are just a single function or a [configuration snippet](https://fishshell.com/docs/current/index.html#configuration). Behold the anatomy of a typical plugin: A plugin can be any number of files in a `functions`, `conf.d`, and `completions` directory. Most plugins consist of a single function, or [configuration snippet](https://fishshell.com/docs/current/#initialization-files). This is what a typical plugin looks like.
<pre> <pre>
<b>flipper</b> <b>ponyo</b>
├── <b>completions</b> ├── <b>completions</b>
│ └── flipper.fish │ └── ponyo.fish
├── <b>conf.d</b> ├── <b>conf.d</b>
│ └── flipper.fish │ └── ponyo.fish
└── <b>functions</b> └── <b>functions</b>
└── flipper.fish └── ponyo.fish
</pre> </pre>
Non `.fish` files and directories inside these locations will be copied to `$fisher_path` under `functions`, `conf.d`, or `completions` respectively. Non `.fish` files as well as directories inside those locations will be copied to `$fisher_path` under `functions`, `conf.d`, or `completions` respectively.
### Event system ### Event system
Fish [events](https://fishshell.com/docs/current/cmds/emit.html) notify plugins when they're being installed, updated, or removed. Plugins are notified as they are being installed, updated, or removed via Fish [events](https://fishshell.com/docs/current/cmds/emit.html).
> Keep in mind, `--on-event` functions must be loaded when their event is emitted. So, place your event handlers in the `conf.d` directory. > `--on-event` functions must already be loaded when their event is emitted. Thus, you should put your event handlers in the `conf.d` directory.
```fish ```fish
# Defined in flipper/conf.d/flipper.fish # Defined in ponyo/conf.d/ponyo.fish
function _flipper_install --on-event flipper_install function _ponyo_install --on-event ponyo_install
# Set universal variables, create bindings, and other initialization logic. # Set universal variables, create bindings, and other initialization logic.
end end
function _flipper_update --on-event flipper_update function _ponyo_update --on-event ponyo_update
# Migrate resources, print warnings, and other update logic. # Migrate resources, print warnings, and other update logic.
end end
function _flipper_uninstall --on-event flipper_uninstall function _ponyo_uninstall --on-event ponyo_uninstall
# Erase "private" functions, variables, bindings, and other uninstall logic. # Erase "private" functions, variables, bindings, and other uninstall logic.
end end
``` ```
## Creating a theme
A theme is like any other Fish plugin, but with a `.theme` file in the `themes` directory. Themes were introduced in [Fish `3.4`](https://github.com/fish-shell/fish-shell/releases/tag/3.4.0) and work with the `fish_config` builtin. A theme can also have files in `functions`, `conf.d`, or `completions` if necessary. Check out what a typical theme plugin looks like:
<pre>
<b>gills</b>
├── <b>conf.d</b>
│ └── gills.fish
└── <b>themes</b>
└── gills.theme
</pre>
### Using `$fisher_path` with themes
If you customize `$fisher_path` to use a directory other than `$__fish_config_dir`, your themes won't be available via `fish_config`. That's because Fish expects your themes to be in `$__fish_config_dir/themes`, not `$fisher_path/themes`. This isn't configurable in Fish yet, but there's [a request to add that feature](https://github.com/fish-shell/fish-shell/issues/9456).
Fear not! You can easily solve this by symlinking Fisher's `themes` directory into your Fish config. First, backup any existing themes directory.
```console
mv $__fish_config_dir/themes $__fish_config_dir/themes.bak
```
Next, create a symlink for Fisher's themes directory.
```console
ln -s $fisher_path/themes $__fish_config_dir/themes
```
Want to use theme plugins and maintain your own local themes? You can do that too ([#708](https://github.com/jorgebucaran/fisher/issues/708)).
## Discoverability
While Fisher doesn't rely on a central plugin repository, discovering new plugins doesn't have to feel like navigating uncharted waters. To boost your plugin's visibility and make it easier for users to find, [add relevant topics to your repository](https://docs.github.com/en/repositories/managing-your-repositorys-settings-and-features/customizing-your-repository/classifying-your-repository-with-topics#adding-topics-to-your-repository) using [`fish-plugin`](https://github.com/topics/fish-plugin). By doing so, you're not only contributing to the Fisher community but also enabling users to explore new plugins and enhance their Fish shell experience. Don't let plugin discovery be a fishy business, tag your plugins today!
## Acknowledgments
Fisher started its journey in 2016 by [@jorgebucaran](https://github.com/jorgebucaran) as a shell configuration manager for Fish. Along the way, many helped shape it into what it is today. [Oh My Fish](https://github.com/oh-my-fish/oh-my-fish) paved the way as the first popular Fish framework. [@jethrokuan](https://github.com/jethrokuan) provided crucial support during the early years. [@PatrickF1](https://github.com/PatrickF1)'s candid feedback proved invaluable time and again. Bootstrapping Fisher was originally [@IlanCosman](https://github.com/IlanCosman)'s brilliant idea. Thank you to all our contributors! <3
## License ## License
[MIT](LICENSE.md) [MIT](LICENSE.md)

@ -1,6 +1,6 @@
function fisher --argument-names cmd --description "A plugin manager for Fish" function fisher --argument-names cmd --description "A plugin manager for Fish"
set --query fisher_path || set --local fisher_path $__fish_config_dir set --query fisher_path || set --local fisher_path $__fish_config_dir
set --local fisher_version 4.4.5 set --local fisher_version 4.2.0
set --local fish_plugins $__fish_config_dir/fish_plugins set --local fish_plugins $__fish_config_dir/fish_plugins
switch "$cmd" switch "$cmd"
@ -13,10 +13,8 @@ function fisher --argument-names cmd --description "A plugin manager for Fish"
echo " fisher update Update all installed plugins" echo " fisher update Update all installed plugins"
echo " fisher list [<regex>] List installed plugins matching regex" echo " fisher list [<regex>] List installed plugins matching regex"
echo "Options:" echo "Options:"
echo " -v, --version Print version" echo " -v or --version Print version"
echo " -h, --help Print this help message" echo " -h or --help Print this help message"
echo "Variables:"
echo " \$fisher_path Plugin installation path. Default: $__fish_config_dir" | string replace --regex -- $HOME \~
case ls list case ls list
string match --entire --regex -- "$argv[2]" $_fisher_plugins string match --entire --regex -- "$argv[2]" $_fisher_plugins
case install update remove case install update remove
@ -29,19 +27,17 @@ function fisher --argument-names cmd --description "A plugin manager for Fish"
set --local old_plugins $_fisher_plugins set --local old_plugins $_fisher_plugins
set --local new_plugins set --local new_plugins
test -e $fish_plugins && set --local file_plugins (string match --regex -- '^[^\s]+$' <$fish_plugins | string replace -- \~ ~)
if ! set --query argv[2] if ! set --query argv[2]
if test "$cmd" != update if test "$cmd" != update
echo "fisher: Not enough arguments for command: \"$cmd\"" >&2 && return 1 echo "fisher: Not enough arguments for command: \"$cmd\"" >&2 && return 1
else if ! set --query file_plugins else if test ! -e $fish_plugins
echo "fisher: \"$fish_plugins\" file not found: \"$cmd\"" >&2 && return 1 echo "fisher: \"$fish_plugins\" file not found: \"$cmd\"" >&2 && return 1
end end
set arg_plugins $file_plugins set arg_plugins (string match --regex -- '^[^\s]+$' <$fish_plugins)
end end
for plugin in $arg_plugins for plugin in $arg_plugins
set plugin (test -e "$plugin" && realpath $plugin || string lower -- $plugin) test -e "$plugin" && set plugin (realpath $plugin)
contains -- "$plugin" $new_plugins || set --append new_plugins $plugin contains -- "$plugin" $new_plugins || set --append new_plugins $plugin
end end
@ -72,43 +68,37 @@ function fisher --argument-names cmd --description "A plugin manager for Fish"
set --local pid_list set --local pid_list
set --local source_plugins set --local source_plugins
set --local fetch_plugins $update_plugins $install_plugins set --local fetch_plugins $update_plugins $install_plugins
set --local fish_path (status fish-path)
echo (set_color --bold)fisher $cmd version $fisher_version(set_color normal) echo (set_color --bold)fisher $cmd version $fisher_version(set_color normal)
for plugin in $fetch_plugins for plugin in $fetch_plugins
set --local source (command mktemp -d) set --local source (command mktemp -d)
set --append source_plugins $source set --append source_plugins $source
command mkdir -p $source/{completions,conf.d,themes,functions} command mkdir -p $source/{completions,conf.d,functions}
$fish_path --command " fish --command "
if test -e $plugin if test -e $plugin
command cp -Rf $plugin/* $source command cp -Rf $plugin/* $source
else else
set temp (command mktemp -d) set temp (command mktemp -d)
set repo (string split -- \@ $plugin) || set repo[2] HEAD set name (string split \@ $plugin) || set name[2] HEAD
set url https://codeload.github.com/\$name[1]/tar.gz/\$name[2]
if set path (string replace --regex -- '^(https://)?gitlab.com/' '' \$repo[1])
set name (string split -- / \$path)[-1]
set url https://gitlab.com/\$path/-/archive/\$repo[2]/\$name-\$repo[2].tar.gz
else
set url https://api.github.com/repos/\$repo[1]/tarball/\$repo[2]
end
echo Fetching (set_color --underline)\$url(set_color normal) echo Fetching (set_color --underline)\$url(set_color normal)
if command curl -q --silent -L \$url | command tar -xzC \$temp -f - 2>/dev/null if curl --silent \$url | tar --extract --gzip --directory \$temp --file - 2>/dev/null
command cp -Rf \$temp/*/* $source command cp -Rf \$temp/*/* $source
else else
echo fisher: Invalid plugin name or host unavailable: \\\"$plugin\\\" >&2 echo fisher: Invalid plugin name or host unavailable: \\\"$plugin\\\" >&2
command rm -rf $source command rm -rf $source
end end
command rm -rf \$temp command rm -rf \$temp
end end
set files $source/* && string match --quiet --regex -- .+\.fish\\\$ \$files set files $source/* && string match --quiet --regex -- .+\.fish\\\$ \$files || exit
echo \"fisher: Plugin not supported: \\\"$plugin\\\"\" >&2
echo (set_color --bold red)\"Support for .fish files outside a functions directory is deprecated\" (set_color --underline)https://github.com/jorgebucaran/fisher/issues/651(set_color normal) >&2
" & " &
set --append pid_list (jobs --last --pid) set --append pid_list (jobs --last --pid)
@ -134,32 +124,31 @@ function fisher --argument-names cmd --description "A plugin manager for Fish"
for name in (string replace --filter --regex -- '.+/conf\.d/([^/]+)\.fish$' '$1' $$plugin_files_var) for name in (string replace --filter --regex -- '.+/conf\.d/([^/]+)\.fish$' '$1' $$plugin_files_var)
emit {$name}_uninstall emit {$name}_uninstall
end end
printf "%s\n" Removing\ (set_color red --bold)$plugin(set_color normal) " "$$plugin_files_var | string replace -- \~ ~ printf "%s\n" Removing\ (set_color red --bold)$plugin(set_color normal) " "$$plugin_files_var
set --erase _fisher_plugins[$index]
end end
command rm -rf (string replace -- \~ ~ $$plugin_files_var) command rm -rf $$plugin_files_var
functions --erase (string replace --filter --regex -- '.+/functions/([^/]+)\.fish$' '$1' $$plugin_files_var) functions --erase (string replace --filter --regex -- '.+/functions/([^/]+)\.fish$' '$1' $$plugin_files_var)
for name in (string replace --filter --regex -- '.+/completions/([^/]+)\.fish$' '$1' $$plugin_files_var) for name in (string replace --filter --regex -- '.+/completions/([^/]+)\.fish$' '$1' $$plugin_files_var)
complete --erase --command $name complete --erase --command $name
end end
set --erase _fisher_plugins[$index]
set --erase $plugin_files_var set --erase $plugin_files_var
end end
end end
if set --query update_plugins[1] || set --query install_plugins[1] if set --query update_plugins[1] || set --query install_plugins[1]
command mkdir -p $fisher_path/{functions,themes,conf.d,completions} command mkdir -p $fisher_path/{functions,conf.d,completions}
end end
for plugin in $update_plugins $install_plugins for plugin in $update_plugins $install_plugins
set --local source $source_plugins[(contains --index -- "$plugin" $fetch_plugins)] set --local source $source_plugins[(contains --index -- "$plugin" $fetch_plugins)]
set --local files $source/{functions,themes,conf.d,completions}/* set --local files $source/{functions,conf.d,completions}/*
if set --local index (contains --index -- $plugin $install_plugins) if set --local index (contains --index -- $plugin $install_plugins)
set --local user_files $fisher_path/{functions,themes,conf.d,completions}/* set --local user_files $fisher_path/{functions,conf.d,completions}/*
set --local conflict_files set --local conflict_files
for file in (string replace -- $source/ $fisher_path/ $files) for file in (string replace -- $source/ $fisher_path/ $files)
@ -173,19 +162,18 @@ function fisher --argument-names cmd --description "A plugin manager for Fish"
end end
for file in (string replace -- $source/ "" $files) for file in (string replace -- $source/ "" $files)
command cp -RLf $source/$file $fisher_path/$file command cp -Rf $source/$file $fisher_path/$file
end end
set --local plugin_files_var _fisher_(string escape --style=var -- $plugin)_files set --local plugin_files_var _fisher_(string escape --style=var -- $plugin)_files
set --query files[1] && set --universal $plugin_files_var (string replace -- $source $fisher_path $files)
set --query files[1] && set --universal $plugin_files_var (string replace -- $source $fisher_path $files | string replace -- ~ \~)
contains -- $plugin $_fisher_plugins || set --universal --append _fisher_plugins $plugin contains -- $plugin $_fisher_plugins || set --universal --append _fisher_plugins $plugin
contains -- $plugin $install_plugins && set --local event install || set --local event update contains -- $plugin $install_plugins && set --local event install || set --local event update
printf "%s\n" Installing\ (set_color --bold)$plugin(set_color normal) " "$$plugin_files_var | string replace -- \~ ~ printf "%s\n" Installing\ (set_color --bold)$plugin(set_color normal) " "$$plugin_files_var
for file in (string match --regex -- '.+/[^/]+\.fish$' $$plugin_files_var | string replace -- \~ ~) for file in (string match --regex -- '.+/[^/]+\.fish$' $$plugin_files_var)
source $file source $file
if set --local name (string replace --regex -- '.+conf\.d/([^/]+)\.fish$' '$1' $file) if set --local name (string replace --regex -- '.+conf\.d/([^/]+)\.fish$' '$1' $file)
emit {$name}_$event emit {$name}_$event
@ -195,25 +183,12 @@ function fisher --argument-names cmd --description "A plugin manager for Fish"
command rm -rf $source_plugins command rm -rf $source_plugins
if set --query _fisher_plugins[1] set --query _fisher_plugins[1] || set --erase _fisher_plugins
set --local commit_plugins set --query _fisher_plugins &&
printf "%s\n" $_fisher_plugins >$fish_plugins ||
for plugin in $file_plugins
contains -- (string lower -- $plugin) (string lower -- $_fisher_plugins) && set --append commit_plugins $plugin
end
for plugin in $_fisher_plugins
contains -- (string lower -- $plugin) (string lower -- $commit_plugins) || set --append commit_plugins $plugin
end
string replace --regex -- $HOME \~ $commit_plugins >$fish_plugins
else
set --erase _fisher_plugins
command rm -f $fish_plugins command rm -f $fish_plugins
end
set --local total (count $install_plugins) (count $update_plugins) (count $remove_plugins) set --local total (count $install_plugins) (count $update_plugins) (count $remove_plugins)
test "$total" != "0 0 0" && echo (string join ", " ( test "$total" != "0 0 0" && echo (string join ", " (
test $total[1] = 0 || echo "Installed $total[1]") ( test $total[1] = 0 || echo "Installed $total[1]") (
test $total[2] = 0 || echo "Updated $total[2]") ( test $total[2] = 0 || echo "Updated $total[2]") (
@ -224,17 +199,14 @@ function fisher --argument-names cmd --description "A plugin manager for Fish"
end end
end end
if ! set --query _fisher_upgraded_to_4_4 ## Migrations ##
set --universal _fisher_upgraded_to_4_4 function _fisher_fish_postexec --on-event fish_postexec
if functions --query _fisher_list if functions --query _fisher_list
set --query XDG_DATA_HOME[1] || set --local XDG_DATA_HOME ~/.local/share
command rm -rf $XDG_DATA_HOME/fisher
functions --erase _fisher_{list,plugin_parse}
fisher update >/dev/null 2>/dev/null fisher update >/dev/null 2>/dev/null
else set --query XDG_DATA_HOME || set --local XDG_DATA_HOME ~/.local/share
for var in (set --names | string match --entire --regex '^_fisher_.+_files$') test -e $XDG_DATA_HOME/fisher && command rm -rf $XDG_DATA_HOME/fisher
set $var (string replace -- ~ \~ $$var) functions --erase _fisher_list _fisher_plugin_parse
end set --erase fisher_data
functions --erase _fisher_fish_postexec
end end
functions --erase _fisher_fish_postexec
end end

@ -20,10 +20,6 @@ set --local BASENAME --regex -- '[^/]+$'
fisher update tests/ponyo >/dev/null fisher update tests/ponyo >/dev/null
) "$ponyo" = "pyon pyon pyon" ) "$ponyo" = "pyon pyon pyon"
@test fish_plugins (
string match --regex -- "[^/]+\$" <$__fish_config_dir/fish_plugins | string join " "
) = "fisher fishtape ponyo"
@test "fisher remove" ( @test "fisher remove" (
fisher remove tests/ponyo >/dev/null fisher remove tests/ponyo >/dev/null
) "$ponyo" = "" ) "$ponyo" = ""
@ -31,3 +27,7 @@ set --local BASENAME --regex -- '[^/]+$'
@test "has state" -n ( @test "has state" -n (
set --names | string match \*fisher\* | string collect set --names | string match \*fisher\* | string collect
) )
@test fish_plugins (
fisher list | string collect
) = (read --null <$__fish_config_dir/fish_plugins | string collect)

Loading…
Cancel
Save