diff --git a/CHANGELOG.md b/CHANGELOG.md index ea58c7a..458ba21 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,10 +10,23 @@ * Fisherman now recognizes the following aliases by default: *i* for install, *u* for update, *l* for list, *s* for search and *h* for help. -* Large documentation rewrite. Better, simpler, more concise and more consistent. +* Rewrite documentation to be simpler and more consistent. + +* Fisherman can install "functions" now. If you have created a function interactively, you can run fisher install `name of the function` and a directory will be created in `$PWD/name of the function` and installed as usual. + + ![](https://cloud.githubusercontent.com/assets/8317250/13421665/14e73e12-dfd3-11e5-98a5-88b269ebddd7.gif) * Fisherman now detects if users have modified their fish prompt using fish_config and if so, uninstalls $fisher_prompt. +* Search results now truncate plugin descriptions based in the width of the terminal screen. + + ![](https://cloud.githubusercontent.com/assets/8317250/13421733/8885c65e-dfd3-11e5-84f0-e70065b55f70.gif) + +* Install/Update/Uninstall CLI was retouched. + + ![cli](https://cloud.githubusercontent.com/assets/8317250/13421788/d3d873c2-dfd3-11e5-9a74-24483d29b6ff.gif) + + ## [0.9.0][v090] - 2016-02-25 * Welcome aboard @jethrokuan, the newest Fisherman organization member. diff --git a/README.md b/README.md index 237064a..30ae517 100644 --- a/README.md +++ b/README.md @@ -21,21 +21,21 @@ curl -sL get.fisherman.sh | fish **Fisherman** is a blazing fast, modern plugin manager for [fish].   ▸   **[Why?]**
-  ▸   **[Quickstart]**
+  ▸   **[Get Started]**
  ▸   **[Plugins]**
  ▸   **[Help]**
[travis-link]: https://travis-ci.org/fisherman/fisherman [travis-badge]: https://img.shields.io/travis/fisherman/fisherman.svg?style=flat-square -[version-badge]: https://img.shields.io/badge/latest-v0.9.0-00B9FF.svg?style=flat-square +[version-badge]: https://img.shields.io/badge/latest-v1.0.0-00B9FF.svg?style=flat-square [version-link]: https://github.com/fisherman/fisherman/releases [slack-link]: https://fisherman-wharf.herokuapp.com/ [slack-badge]: https://img.shields.io/badge/slack-join%20the%20chat-00B9FF.svg?style=flat-square [Why?]: https://github.com/fisherman/fisherman/issues/69#issuecomment-179661994 -[Quickstart]: https://github.com/fisherman/fisherman/wiki/Quickstart-Guide +[Get Started]: https://github.com/fisherman/fisherman/wiki/Quickstart-Guide [Plugins]: http://fisherman.sh/#search [Help]: https://github.com/fisherman/fisherman/wiki diff --git a/VERSION b/VERSION index ac39a10..3eefcb9 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -0.9.0 +1.0.0 diff --git a/functions/__fisher_deps_install.fish b/functions/__fisher_deps_install.fish index f07a0fe..4bc22a9 100644 --- a/functions/__fisher_deps_install.fish +++ b/functions/__fisher_deps_install.fish @@ -1,7 +1,7 @@ function __fisher_deps_install -a path for file in $path/{fishfile,bundle} if test -s $file - debug "Install dependencies %s" "$file" + debug "Install deps %s" "$file" fisher_install < $file | sed -En 's/^.+([0-9]+) plugin\/s.*/\1/p' end end | awk '{ n = n + $0 } END { print n ? n : 0 }' diff --git a/functions/__fisher_file.fish b/functions/__fisher_file.fish index 1872d92..0e62c8b 100644 --- a/functions/__fisher_file.fish +++ b/functions/__fisher_file.fish @@ -5,7 +5,7 @@ function __fisher_file } !/^[ \t]*(#.*)*$/ { - gsub("^[@*>]|#.*", "") + gsub("^[@*>]?[ \t]*?|#.*", "") if (! seen[$1]++) { printf("%s\n", $1) diff --git a/functions/__fisher_file_remove.fish b/functions/__fisher_file_remove.fish index 271dc5e..fe863a8 100644 --- a/functions/__fisher_file_remove.fish +++ b/functions/__fisher_file_remove.fish @@ -6,7 +6,7 @@ function __fisher_file_remove -a plugin file set pattern "/^$pattern\$/d" end - debug "Fishfile remove %s" "$plugin" + debug "File remove %s" "$plugin" sed -E "$pattern" < $file > $file.tmp diff --git a/functions/__fisher_function_to_plugin.fish b/functions/__fisher_function_to_plugin.fish new file mode 100644 index 0000000..aaba5ba --- /dev/null +++ b/functions/__fisher_function_to_plugin.fish @@ -0,0 +1,12 @@ +function __fisher_function_to_plugin -a name + if test -d "$name" + return 1 + end + + set -l path (pwd)/$name + mkdir -p "$path" + + functions -- $name | fish_indent > "$path/$name.fish" + + printf "%s\n" "$path" +end diff --git a/functions/__fisher_gist_to_name.fish b/functions/__fisher_gist_to_name.fish index c04bc89..54630d6 100644 --- a/functions/__fisher_gist_to_name.fish +++ b/functions/__fisher_gist_to_name.fish @@ -1,10 +1,8 @@ function __fisher_gist_to_name -a url set -l id (printf "%s\n" "$url" | sed 's|.*/||') - debug "Get Gist information '%s'" $url - set -l name ( - spin "curl -Ss https://api.github.com/gists/$id" | awk ' + spin "curl -Ss https://api.github.com/gists/$id" -f " @\r" | awk ' /"files": / { files++ } diff --git a/functions/__fisher_index_update.fish b/functions/__fisher_index_update.fish index be59550..fb7c682 100644 --- a/functions/__fisher_index_update.fish +++ b/functions/__fisher_index_update.fish @@ -8,6 +8,11 @@ function __fisher_index_update -a timeout end set -l url $fisher_index + + if test ! -d $fisher_cache + mkdir -p $fisher_cache + end + set -l index $fisher_cache/.index.tmp if test -z "$url" diff --git a/functions/__fisher_key_bindings_enable.fish b/functions/__fisher_key_bindings_enable.fish index fc20200..448d8cb 100644 --- a/functions/__fisher_key_bindings_enable.fish +++ b/functions/__fisher_key_bindings_enable.fish @@ -12,7 +12,7 @@ function __fisher_key_bindings_enable -a plugin user_key_bindings source $user_key_bindings end - debug "Add fisherman key bindings '%s'" "$user_key_bindings" + debug "Bind %s" "$user_key_bindings" functions fish_user_key_bindings \ | __fisher_key_bindings_update_user > $user_key_bindings diff --git a/functions/__fisher_path_make.fish b/functions/__fisher_path_make.fish index a152a5b..7f8045f 100644 --- a/functions/__fisher_path_make.fish +++ b/functions/__fisher_path_make.fish @@ -3,15 +3,14 @@ function __fisher_path_make -a path return end - debug "Makefile '%s'" "$path/Makefile" + debug "Make %s" "$path/Makefile" pushd $path set -e argv[1] if not make $argv - debug "Make fail '%s'" "$argv" - + debug "Make fail %s" "$argv" popd return 1 end diff --git a/functions/__fisher_path_update.fish b/functions/__fisher_path_update.fish index e60eecb..f57c493 100644 --- a/functions/__fisher_path_update.fish +++ b/functions/__fisher_path_update.fish @@ -7,12 +7,12 @@ function __fisher_path_update -a path return 1 end - git checkout master --quiet + git checkout master --quiet ^ /dev/null git stash --quiet ^ /dev/null if not git pull --rebase origin master --quiet ^ /dev/null - git rebase --abort + git rebase --abort --quiet git fetch origin master --quiet git reset --hard FETCH_HEAD --quiet git clean -d --force --quiet diff --git a/functions/__fisher_plugin_disable.fish b/functions/__fisher_plugin_disable.fish index 508af71..c4a9272 100644 --- a/functions/__fisher_plugin_disable.fish +++ b/functions/__fisher_plugin_disable.fish @@ -2,7 +2,7 @@ function __fisher_plugin_disable -a plugin path option __fisher_plugin_walk "$plugin" "$path" | while read -l class source target name switch "$class" case --bind - debug "Disable key bindings '%s'" $plugin + debug "Unbind %s" $plugin __fisher_key_bindings_disable $plugin (__fisher_xdg --config )/fish/functions/fish_user_key_bindings.fish @@ -20,7 +20,7 @@ function __fisher_plugin_disable -a plugin path option end if test -s $fisher_file - debug "Remove from fishfile %s" "$plugin" + debug "File remove %s" "$plugin" __fisher_file_remove ( if not fisher_search --name=$plugin --name --index=$fisher_cache/.index diff --git a/functions/__fisher_plugin_enable.fish b/functions/__fisher_plugin_enable.fish index 5564667..37696cb 100644 --- a/functions/__fisher_plugin_enable.fish +++ b/functions/__fisher_plugin_enable.fish @@ -1,18 +1,9 @@ function __fisher_plugin_enable -a plugin path - debug "Plugin enable %s" "$plugin" + debug "Enable %s" "$plugin" if __fisher_path_is_prompt $path if test ! -z "$fisher_prompt" - - debug "Disable current prompt to install '%s'" $plugin - - # Why do we need to disable a prompt before installing another? I thought - # one prompt would override the other? - - # While this is true for fish_prompt and fish_right_prompt, a prompt is no - # different from other plugins and may optionally include other functions, - # scripts, completions, documentation, etc., which need also be removed. - + debug "Enable prompt %s" $plugin __fisher_plugin_disable "$fisher_prompt" "$fisher_cache/$fisher_prompt" end @@ -22,22 +13,13 @@ function __fisher_plugin_enable -a plugin path set -l link -f if test -L $path - - # The path will be a soft link if the user tried to install a plugin from - # any directory in the local system, including plugins registered in the - # index. In this case we want to create soft links from (which is - # also a soft link) as we walk the plugin's directory. - - # The advantage of creating soft links from local projects is that it - # allows rapid prototyping / debugging of new or existing plugins. - set link -sfF end __fisher_plugin_walk "$plugin" "$path" | while read -l class source target __unused switch "$class" case --bind - debug "Enable key bindings %s" $source + debug "Bind %s" $source __fisher_key_bindings_enable $plugin (__fisher_xdg --config )/fish/functions/fish_user_key_bindings.fish < $source @@ -64,12 +46,12 @@ function __fisher_plugin_enable -a plugin path if test -s $fisher_file if __fisher_file_contains "$item" --quiet $fisher_file - debug "Fishfile skip %s" "$item" + debug "File skip %s" "$item" return end end - debug "Fishfile add %s" "$item" + debug "File add %s" "$item" printf "%s\n" $item >> $fisher_file end diff --git a/functions/__fisher_plugin_link.fish b/functions/__fisher_plugin_link.fish index 4ba532d..3b6cbfe 100644 --- a/functions/__fisher_plugin_link.fish +++ b/functions/__fisher_plugin_link.fish @@ -1,5 +1,4 @@ function __fisher_plugin_link -a options source target - debug "Link '%s'" $target - + debug "Link %s" $target command ln $options $source $target end diff --git a/functions/__fisher_plugin_source.fish b/functions/__fisher_plugin_source.fish index 04884de..9404663 100644 --- a/functions/__fisher_plugin_source.fish +++ b/functions/__fisher_plugin_source.fish @@ -1,5 +1,4 @@ function __fisher_plugin_source -a plugin file - debug "Source '%s'" $file - + debug "Source %s" $file source "$file" ^ /dev/null end diff --git a/functions/__fisher_prompt_reset.fish b/functions/__fisher_prompt_reset.fish index 1e2f498..272649a 100644 --- a/functions/__fisher_prompt_reset.fish +++ b/functions/__fisher_prompt_reset.fish @@ -1,6 +1,4 @@ function __fisher_prompt_reset - debug "Reset prompt '%s'" "$fisher_prompt" - set -U fisher_prompt # To reset the prompt, remove any data in fisher_prompt and source any existing @@ -12,7 +10,7 @@ function __fisher_prompt_reset for prompt in $argv/functions/fish_prompt.fish if test -s $prompt - debug "Default prompt '%s'" $prompt + debug "Reset prompt %s" $prompt source $prompt return diff --git a/functions/fish_config.fish b/functions/fish_config.fish index c3fdf17..a498f26 100644 --- a/functions/fish_config.fish +++ b/functions/fish_config.fish @@ -8,12 +8,8 @@ function fish_config -d "Launch fish's web based configuration" -a tab set -l file $config/fish/functions/fish_prompt.fish set -l sum_before (cksum $file ^ /dev/null | awk '{ print $1 + $2 }') - debug "fish_config start" - eval $__fish_datadir/tools/web_config/webconfig.py $tab - debug "fish_config end" - if test ! -z "$fisher_prompt" set -l sum_after (cksum $file ^ /dev/null | awk '{ print $1 + $2 }') diff --git a/functions/fisher_help.fish b/functions/fisher_help.fish index 779009a..eb31379 100644 --- a/functions/fisher_help.fish +++ b/functions/fisher_help.fish @@ -31,9 +31,9 @@ function fisher_help -d "Show help" case h printf "Usage: fisher help [] [--all] [--guides] [--help]\n\n" - printf " -a --all List all the documentation\n" - printf " -g --guides List available guides\n" - printf " -h --help Show usage help\n" + printf " -a --all List all the documentation\n" + printf " -g --guides List available guides\n" + printf " -h --help Show usage help\n" return case \* diff --git a/functions/fisher_install.fish b/functions/fisher_install.fish index 5757c1b..35f6414 100644 --- a/functions/fisher_install.fish +++ b/functions/fisher_install.fish @@ -12,15 +12,19 @@ function fisher_install -d "Install plugins" case f force set option force + if test ! -z "$2" + set plugins $plugins $2 + end + case q quiet set stdout /dev/null set stderr /dev/null case h printf "Usage: fisher install [] [--force] [--quiet] [--help]\n\n" - printf " -f --force Reinstall given plugin/s\n" - printf " -q --quiet Enable quiet mode\n" - printf " -h --help Show usage help\n" + printf " -f --force Reinstall given plugin/s\n" + printf " -q --quiet Enable quiet mode\n" + printf " -h --help Show usage help\n" return case \* @@ -36,6 +40,7 @@ function fisher_install -d "Install plugins" set -l index 1 set -l total (count $plugins) set -l skipped + set -l indicator "▸" set -l IFS \t @@ -53,11 +58,11 @@ function fisher_install -d "Install plugins" continue end - debug "Validate pass %s" $item + debug "Validate ok %s" $item switch "$item" case https://gist.github.com\* - debug "Install gist %s" $item + debug "Gist %s" $item if set -l name (__fisher_gist_to_name $item) printf "%s\t%s\n" $item $name @@ -67,29 +72,44 @@ function fisher_install -d "Install plugins" end case \*/\* - debug "Install URL %s" $item + debug "URL or path %s" $item printf "%s\t%s\n" "$item" (printf "%s\n" "$item" | __fisher_name) case \* - if set -l url (fisher_search --url --name=$item --index=$fisher_cache/.index) - debug "Install %s" $item - - printf "%s\t%s\n" $url $item - - else if test -d $fisher_cache/$item - debug "Install %s" \$fisher_cache/$item - + if test -d $fisher_cache/$item + debug "Cache %s" \$fisher_cache/$item printf "%s\t%s\n" (__fisher_url_from_path $fisher_cache/$item) $item else - set total (math $total - 1) - printf "fisher: '%s' not found or index out of date.\n" $item > $stderr + if functions -q "$item" + if set -l path (__fisher_function_to_plugin $item) + printf "%s\t%s" "$path" $item + continue + end + end + + if test ! -s $fisher_cache/.index + printf "$indicator Updating Index %s\n" $name > $stderr + + if spin "__fisher_index_update" --error=/dev/null -f " @\r" > /dev/null + debug "Update index ok" + else + debug "Update index fail" + end + end + + if set -l url (fisher_search --url --name=$item --index=$fisher_cache/.index) + debug "Index %s" $item + printf "%s\t%s\n" $url $item + else + set total (math $total - 1) + printf "fisher: '%s' not found or index out of date.\n" $item > $stderr + end end end end | while read -l url name - if contains -- $name (fisher_list $fisher_file) if test -z "$option" set total (math $total - 1) @@ -98,14 +118,14 @@ function fisher_install -d "Install plugins" end end - printf "Installing " > $stderr + printf "$indicator Installing " > $stderr switch $total case 0 1 - printf ">> %s\n" $name > $stderr + printf "%s\n" $name > $stderr case \* - printf "(%s of %s) >> %s\n" $index $total $name > $stderr + printf "(%s of %s) %s\n" $index $total $name > $stderr set index (math $index + 1) end @@ -119,9 +139,9 @@ function fisher_install -d "Install plugins" command ln -sfF $url $path else - debug "Download %s" $url + debug "Clone %s" $url - if not spin "__fisher_url_clone $url $path" --error=$stderr + if not spin "__fisher_url_clone $url $path" --error=$stderr -f " @\r" continue end end @@ -130,7 +150,7 @@ function fisher_install -d "Install plugins" set -l deps (__fisher_deps_install "$path") if test "$deps" -gt 0 - debug "Install dependencies success" + debug "Install deps ok" end if not __fisher_path_make "$path" --quiet @@ -146,9 +166,8 @@ function fisher_install -d "Install plugins" set time (math (date +%s) - $time) if test ! -z "$skipped" - printf "%s plugin/s skipped (%s)\n" (count $skipped) ( - printf "%s\n" $skipped | paste -sd ' ' - - ) > $stdout + printf "%s plugin/s skipped (%s)\n" ( + count $skipped) (printf "%s\n" $skipped | paste -sd ' ' -) > $stdout end if test "$count" -le 0 @@ -156,12 +175,12 @@ function fisher_install -d "Install plugins" return 1 end - debug "Pre-reset completions and key bindings" + debug "Reset completions and key bindings start" __fisher_complete_reset __fisher_key_bindings_reset - debug "Post-reset completions and key bindings" + debug "Reset completions and key bindings ok" - printf "Aye! %d plugin/s installed in %0.fs\n" $count $time > $stdout + printf "%d plugin/s installed in %0.fs\n" $count $time > $stdout end diff --git a/functions/fisher_list.fish b/functions/fisher_list.fish index 0ce50cb..fe12a39 100644 --- a/functions/fisher_list.fish +++ b/functions/fisher_list.fish @@ -54,11 +54,11 @@ function fisher_list -a key -d "List installed plugins" case -h printf "Usage: fisher list [] [--enabled] [--disabled] [--bare] [--link] \n\n" - printf " -b --bare List plugin without decorators\n" - printf " -l --link List plugins that are symbolic links\n" - printf " --enabled List plugins that are enabled\n" - printf " --disabled List plugins that are disabled\n" - printf " -h --help Show usage help\n" + printf " -b --bare List plugin without decorators\n" + printf " -l --link List plugins that are symbolic links\n" + printf " --enabled List plugins that are enabled\n" + printf " --disabled List plugins that are disabled\n" + printf " -h --help Show usage help\n" return case \* diff --git a/functions/fisher_search.fish b/functions/fisher_search.fish index d8ca955..534e81e 100644 --- a/functions/fisher_search.fish +++ b/functions/fisher_search.fish @@ -47,7 +47,7 @@ function fisher_search -d "Search plugin index" set query $query "$3 tags(\"$2\")" $join end - case long + case long longline set format long case full @@ -75,11 +75,11 @@ function fisher_search -d "Search plugin index" printf "Usage: fisher search [] [--long] [--full] [--no-color]\n" printf " [--quiet] [--help]\n\n" - printf " --long Display results in long format\n" - printf " --full Display results in full format\n" - printf " -C --no-color Turn off color display\n" - printf " -q --quiet Enable quiet mode\n" - printf " -h --help Show usage help\n" + printf " --long Display results in long format\n" + printf " --full Display results in full format\n" + printf " -C --no-color Turn off color display\n" + printf " -q --quiet Enable quiet mode\n" + printf " -h --help Show usage help\n" return case \* @@ -101,9 +101,8 @@ function fisher_search -d "Search plugin index" if test $fisher_last_update -gt $fisher_update_interval -o ! -f $index debug "Update index start" - if spin "__fisher_index_update" --error=/dev/null - debug "Update index success" - + if spin "__fisher_index_update" --error=/dev/null -f " @\r" > /dev/null + debug "Update index ok" __fisher_complete_reset else debug "Update index fail" @@ -129,25 +128,24 @@ function fisher_search -d "Search plugin index" end end - set -l name_color (set_color $fish_color_command) - set -l url_color (set_color $fish_color_cwd -u) - set -l tag_color (set_color $fish_color_cwd) - set -l weak_color (set_color white) - set -l author_color (set_color -u) - set -l normal (set_color $fish_color_normal) + set -l color_name (set_color $fish_color_command) + set -l color_url (set_color $fish_color_cwd -u) + set -l color_tag (set_color $fish_color_cwd) + set -l color_weak (set_color white) + set -l color_author (set_color -u) + set -l color_normal (set_color $fish_color_normal) if contains -- no-color $option - set name_color - set url_color - set tag_color - set weak_color - set author_color - set normal + set color_name + set color_url + set color_tag + set color_weak + set color_author + set color_normal end set legend set local (fisher_list | awk ' - !/^@/ { if (append) { printf("|") @@ -166,6 +164,7 @@ function fisher_search -d "Search plugin index" set fields ' legend="*" + len = length($3) if ($1 == "'"$fisher_prompt"'") { legend = ">" @@ -177,27 +176,27 @@ function fisher_search -d "Search plugin index" switch "$format" case default set fields $fields ' - printf("%s '"$weak_color"'%-18s'"$normal"' %s\n", legend, $1, $3) + printf("%s '"$color_weak"'%-18s'"$color_normal"' %s\n", legend, $1, normalize($3, len + 24)) } else { - printf("'"$legend$name_color"'%-18s'"$normal"' %s\n", $1, $3) + printf("'"$legend$color_name"'%-18s'"$color_normal"' %s\n", $1, normalize($3, len + 24)) } ' set options $options -v compact=1 case long set fields $fields ' - printf("%-40s %s '"$weak_color"'%-18s'"$normal"' %s\n", humanize_url($2), legend, $1, $3) + printf("%-40s %s '"$color_weak"'%-18s'"$color_normal"' %s\n", humanize_url($2), legend, $1, normalize($3, len + 66)) } else { - printf("'"$tag_color"'%-40s'"$normal"' '"$legend$name_color"'%-18s'"$normal"' %s\n", humanize_url($2), $1, $3) + printf("'"$color_tag"'%-40s'"$color_normal"' '"$legend$color_name"'%-18s'"$color_normal"' %s\n", humanize_url($2), $1, normalize($3, len + 66)) } ' set options $options -v compact=1 case full set fields $fields ' - printf("'"$weak_color"'%s %s by %s\n%s'"$normal"'\n%s\n", legend, $1, $5, $3, humanize_url($2)) + printf("'"$color_weak"'%s %s by %s\n%s'"$color_normal"'\n%s\n", legend, $1, $5, $3, humanize_url($2)) } else { - printf("'"$name_color"'%s'"$normal"' by '"$author_color"'%s'"$normal"'\n%s\n'"$url_color"'%s'"$normal"'\n", $1, $5, $3, humanize_url($2)) + printf("'"$color_name"'%s'"$color_normal"' by '"$color_author"'%s'"$color_normal"'\n%s\n'"$color_url"'%s'"$color_normal"'\n", $1, $5, $3, humanize_url($2)) } ' end @@ -209,8 +208,19 @@ function fisher_search -d "Search plugin index" set fields print $fields end + set -l cols (tput cols) + awk -v FS='\n' -v RS='' $options " + function normalize(s, len) { + x = len - $cols + if (len >= $cols) { + return substr(s, 1, length(s) - x)\"...\" + } else { + return s + } + } + function humanize_url(url) { gsub(\"(https?://)?(www.)?|/\$\", \"\", url) return url @@ -251,8 +261,8 @@ function fisher_search -d "Search plugin index" print \"\" } - if (!shit[\$5] || !unique) { - shit[\$5] = 1 + if (!unique_author[\$5] || !unique) { + unique_author[\$5] = 1 $fields } diff --git a/functions/fisher_uninstall.fish b/functions/fisher_uninstall.fish index 87b8b5a..bbb161e 100644 --- a/functions/fisher_uninstall.fish +++ b/functions/fisher_uninstall.fish @@ -12,15 +12,19 @@ function fisher_uninstall -d "Uninstall plugins" case f force set option force + if test ! -z "$2" + set plugins $plugins $2 + end + case q quiet set stdout /dev/null set stderr /dev/null case h printf "Usage: fisher uninstall [] [--force] [--quiet] [--help]\n\n" - printf " -f --force Delete copy from the cache\n" - printf " -q --quiet Enable quiet mode\n" - printf " -h --help Show usage help\n" + printf " -f --force Delete copy from the cache\n" + printf " -q --quiet Enable quiet mode\n" + printf " -h --help Show usage help\n" return case \* @@ -35,17 +39,17 @@ function fisher_uninstall -d "Uninstall plugins" set -l index 1 set -l total (count $plugins) set -l skipped - + set -l indicator "▸" + set -l IFS \t if set -q plugins[1] printf "%s\n" $plugins else __fisher_file - + end | while read -l item path debug "Validate %s" $item - debug "Shit %s" $path if not set item (__fisher_plugin_validate $item) debug "Validate fail %s" $item @@ -53,7 +57,7 @@ function fisher_uninstall -d "Uninstall plugins" continue end - debug "Validate pass %s" $item + debug "Validate ok %s" $item if not set path (__fisher_path_from_plugin $item) set total (math $total - 1) @@ -73,26 +77,26 @@ function fisher_uninstall -d "Uninstall plugins" end end - printf "Uninstalling " > $stderr + printf "$indicator Uninstalling " > $stderr switch $total case 0 1 - printf ">> %s\n" $name > $stderr + printf "%s\n" $name > $stderr case \* - printf "(%s of %s) >> %s\n" $index $total $name > $stderr + printf "(%s of %s) %s\n" $index $total $name > $stderr set index (math $index + 1) end if __fisher_plugin_can_enable "$name" "$path" - debug "Plugin disable %s w/ option %s" "$name" "$option" + debug "Disable %s[:%s]" "$name" "$option" __fisher_plugin_disable "$name" "$path" "$option" else - debug "Plugin can't dissable %s" "$name" + debug "Disable skip %s" "$name" end if test "$option" = force - debug "Remove path '%s'" "$path" + debug "Delete %s" "$path" command rm -rf $path end @@ -117,7 +121,7 @@ function fisher_uninstall -d "Uninstall plugins" __fisher_complete_reset __fisher_key_bindings_reset - debug "Reset completions and key bindings done" + debug "Reset completions and key bindings ok" - printf "Aye! %d plugin/s uninstalled in %0.fs\n" $count $time > $stdout + printf "%d plugin/s uninstalled in %0.fs\n" $count $time > $stdout end diff --git a/functions/fisher_update.fish b/functions/fisher_update.fish index ed9d8a4..3fbf419 100644 --- a/functions/fisher_update.fish +++ b/functions/fisher_update.fish @@ -13,14 +13,18 @@ function fisher_update -d "Update plugins" set plugins $plugins $2 end + case a all + set option all + case q quiet set stdout /dev/null set stderr /dev/null case h - printf "Usage: fisher update [] [--quiet] [--help]\n\n" - printf " -q --quiet Enable quiet mode\n" - printf " -h --help Show usage help\n" + printf "Usage: fisher update [] [--all] [--quiet] [--help]\n\n" + printf " -a --all Update everything\n" + printf " -q --quiet Enable quiet mode\n" + printf " -h --help Show usage help\n" return case \* @@ -30,29 +34,37 @@ function fisher_update -d "Update plugins" end end + set -l indicator "▸" + switch "$option" + case all + fisher_list --enabled | fisher_update - + fisher_update + case self set -l time (date +%s) - debug "Update Fisherman %s" $fisher_home - debug "Update Index %s" $fisher_index + debug "Update %s" $fisher_index + debug "Update %s" $fisher_home - printf "Updating >> Index\n" > $stderr + printf "$indicator Updating Index\n" > $stderr - if not spin "__fisher_index_update 0" --error=$stderr + if not spin "__fisher_index_update 0" --error=$stderr -f " @\r" debug "Update Index fail" - printf "fisher: I could not update the index. Trying to update Fisherman...\n" > $stderr + printf "fisher: I could not update the index.\n" > $stderr end - if not spin "__fisher_path_update $fisher_home" --error=$stderr + printf "$indicator Updating Fisherman\n" > $stderr + + if not spin "__fisher_path_update $fisher_home" --error=$stderr -f " @\r" debug "Update Fisherman fail" printf "fisher: Sorry, but I couldn't update Fisherman.\n\n" > $stderr return 1 end - debug "Update Fisherman success" + debug "Update Fisherman ok" printf "Aye! Fisherman up to date with version %s (%0.fs)\n" ( cat $fisher_home/VERSION) (math (date +%s) - $time) > $stderr @@ -70,16 +82,19 @@ function fisher_update -d "Update plugins" printf "%s\n" $plugins else __fisher_file - + end | while read -l item path - debug "Validate '%s'" $item + debug "Validate %s" $item if not set item (__fisher_plugin_validate $item) + debug "Validate fail %s" $item printf "fisher: '%s' is not a valid name, path or URL.\n" $item > $stderr continue end + debug "Validate ok %s" $item + if not set path (__fisher_path_from_plugin $item) set total (math $total - 1) printf "fisher: '%s' not found.\n" $item > $stderr @@ -88,30 +103,30 @@ function fisher_update -d "Update plugins" set -l name (printf "%s\n" $path | __fisher_name) - printf "Updating " > $stderr + printf "$indicator Updating " > $stderr switch $total case 0 1 - printf ">> %s\n" $name > $stderr + printf "%s\n" $name > $stderr case \* - printf "(%s of %s) >> %s\n" $index $total $name > $stderr + printf "(%s of %s) %s\n" $index $total $name > $stderr set index (math $index + 1) end if test ! -L $path - debug "Update plugin '%s' start" "$name" + debug "Update start %s" "$name" - if not spin "__fisher_path_update $path" --error=$stderr - debug "Update path fail '%s'" "$path" + if not spin "__fisher_path_update $path" --error=$stderr -f " @\r" + debug "Update fail %s" "$path" continue end end - debug "Update plugin success '%s'" "$name" + debug "Update ok %s" "$name" if __fisher_plugin_can_enable "$name" "$path" - debug "Enable plugin '%s'" "$name" + debug "Enable %s" "$name" fisher_install --quiet --force -- $name end @@ -126,6 +141,6 @@ function fisher_update -d "Update plugins" return 1 end - printf "Aye! %d plugin/s updated in %0.fs\n" $count $time > $stdout + printf "%d plugin/s updated in %0.fs\n" $count $time > $stdout end end diff --git a/man/man1/fisher.1 b/man/man1/fisher.1 index 5755a4e..ca23b4b 100644 --- a/man/man1/fisher.1 +++ b/man/man1/fisher.1 @@ -49,11 +49,11 @@ Fisherman knows the following aliases by default: \fIi\fR for install, \fIu\fR f .SH "OPTIONS" . .TP -\fB\-v \-\-version\fR -Show version information\. Fisherman follows \fBSemantic Versioning\fR and uses Git annotated tags to track releases\. +\-v, \-\-version +Show version information\. Fisherman follows Semantic Versioning and uses Git annotated tags to track releases\. . .TP -\fB\-h \-\-help\fR +\-h, \-\-help Show usage help\. . .SH "EXAMPLES" diff --git a/test/fixtures/help/usage.txt b/test/fixtures/help/usage.txt index f9b9299..e19c87a 100644 --- a/test/fixtures/help/usage.txt +++ b/test/fixtures/help/usage.txt @@ -1,34 +1,35 @@ -Usage: fisher update [] [--quiet] [--help] +Usage: fisher update [] [--all] [--quiet] [--help] - -q --quiet Enable quiet mode - -h --help Show usage help + -a --all Update everything + -q --quiet Enable quiet mode + -h --help Show usage help Usage: fisher uninstall [] [--force] [--quiet] [--help] - -f --force Delete copy from the cache - -q --quiet Enable quiet mode - -h --help Show usage help + -f --force Delete copy from the cache + -q --quiet Enable quiet mode + -h --help Show usage help Usage: fisher search [] [--long] [--full] [--no-color] [--quiet] [--help] - --long Display results in long format - --full Display results in full format - -C --no-color Turn off color display - -q --quiet Enable quiet mode - -h --help Show usage help + --long Display results in long format + --full Display results in full format + -C --no-color Turn off color display + -q --quiet Enable quiet mode + -h --help Show usage help Usage: fisher list [] [--enabled] [--disabled] [--bare] [--link] - -b --bare List plugin without decorators - -l --link List plugins that are symbolic links - --enabled List plugins that are enabled - --disabled List plugins that are disabled - -h --help Show usage help + -b --bare List plugin without decorators + -l --link List plugins that are symbolic links + --enabled List plugins that are enabled + --disabled List plugins that are disabled + -h --help Show usage help Usage: fisher install [] [--force] [--quiet] [--help] - -f --force Reinstall given plugin/s - -q --quiet Enable quiet mode - -h --help Show usage help + -f --force Reinstall given plugin/s + -q --quiet Enable quiet mode + -h --help Show usage help Usage: fisher help [] [--all] [--guides] [--help] - -a --all List all the documentation - -g --guides List available guides - -h --help Show usage help + -a --all List all the documentation + -g --guides List available guides + -h --help Show usage help diff --git a/test/function-to-plugin.fish b/test/function-to-plugin.fish new file mode 100644 index 0000000..2ba0c97 --- /dev/null +++ b/test/function-to-plugin.fish @@ -0,0 +1,31 @@ +set -l path $DIRNAME/.t-$TESTNAME-(random) + +function -S setup + mkdir -p $path + + function foobar + echo foobar + end +end + +function -S teardown + rm -rf $path + functions -e foobar +end + +test "$TESTNAME - Return the path where the plugin was created" + $path/foobar = ( + pushd $path + __fisher_function_to_plugin foobar + popd + ) +end + +test "$TESTNAME - Create a file with the contents of the given function" + (functions foobar | xargs) = ( + pushd $path + set -l plugin_path (__fisher_function_to_plugin foobar) + cat $plugin_path/foobar.fish | xargs + popd + ) +end