diff --git a/lib/cli.zsh b/lib/cli.zsh index aed86e758..49e8d72aa 100644 --- a/lib/cli.zsh +++ b/lib/cli.zsh @@ -41,6 +41,7 @@ function _omz { refs=("${(@f)$(builtin cd -q "$ZSH"; command git for-each-ref --format="%(refname:short):%(subject)" refs/heads refs/tags)}") _describe 'command' refs ;; plugin) subcmds=( + 'cat:Show plugin source' 'disable:Disable plugin(s)' 'enable:Enable plugin(s)' 'info:Get plugin information' @@ -203,6 +204,7 @@ Usage: ${(j: :)${(s.::.)0#_}} [options] Available commands: + cat Show the source of a plugin disable Disable plugin(s) enable Enable plugin(s) info Get information of a plugin @@ -219,6 +221,42 @@ EOF $0::$command "$@" } +function _omz::plugin::cat { + if [[ -z "$1" ]]; then + echo >&2 "Usage: ${(j: :)${(s.::.)0#_}} " + return 1 + fi + + local plugin_source + for plugin_source in "$ZSH_CUSTOM/plugins/$1/$1.plugin.zsh" "$ZSH/plugins/$1/$1.plugin.zsh"; do + if [[ -f "$plugin_source" ]]; then + # If being piped, just cat the source + if [[ ! -t 1 ]]; then + cat "$plugin_source" + return $? + fi + + # Enrich the source display depending on the tools we have + # - glow: https://github.com/charmbracelet/glow + # - bat: https://github.com/sharkdp/bat + # - less: typical pager command + case 1 in + ${+commands[glow]}) glow -p "$plugin_source" ;; + ${+commands[bat]}) bat -l zsh --style plain "$plugin_source" ;; + ${+commands[less]}) less "$plugin_source" ;; + *) cat "$readme" ;; + esac + return $? + fi + done + + if [[ ! -d "$ZSH_CUSTOM/plugins/$1" && ! -d "$ZSH/plugins/$1" ]]; then + _omz::log error "'$1' plugin not found" + fi + + return 1 +} + function _omz::plugin::disable { if [[ -z "$1" ]]; then echo >&2 "Usage: ${(j: :)${(s.::.)0#_}} [...]"