diff options
Diffstat (limited to 'plugins')
-rw-r--r-- | plugins/shrink-path/README.md | 87 | ||||
-rw-r--r-- | plugins/shrink-path/shrink-path.plugin.zsh | 12 |
2 files changed, 73 insertions, 26 deletions
diff --git a/plugins/shrink-path/README.md b/plugins/shrink-path/README.md index 33dc3f8ae..71a242b2c 100644 --- a/plugins/shrink-path/README.md +++ b/plugins/shrink-path/README.md @@ -1,43 +1,50 @@ -# A plugin to shrink directory paths for brevity and pretty-printing +# shrink-path +A plugin to shrink directory paths for brevity and pretty-printing. + +To use it, add `shrink-path` to the plugins array in your zshrc file: + +```zsh +plugins=(... shrink-path) +``` ## Examples For this directory tree: ``` - /home/ - me/ - f o o/ # The prefix f is ambiguous between "f o o" and "f i g". - bar/ - quux/ - biz/ # The prefix b is ambiguous between bar and biz. - f i g/ - baz/ +/home/ + me/ + f o o/ # The prefix f is ambiguous between "f o o" and "f i g". + bar/ + quux/ + biz/ # The prefix b is ambiguous between bar and biz. + f i g/ + baz/ ``` here are the results of calling `shrink_path <option> /home/me/foo/bar/quux`: ``` - Option Result - <none> /h/m/f o/ba/q - -l|--last /h/m/f o/ba/q - -s|--short /h/m/f/b/q - -t|--tilde ~/f o/ba/q - -f|--fish ~/f/b/quux - -g|--glob /h*/m*/f o*/ba*/q* - -3 /hom/me/f o/bar/quu - -e '$' -3 /hom$/me/f o$/bar/quu$ - -q /h/m/f\ o/ba/q - -g -q /h*/m*/f\ o*/ba*/q* +Option Result +<none> /h/m/f o/ba/q +-l|--last /h/m/f o/ba/q +-s|--short /h/m/f/b/q +-t|--tilde ~/f o/ba/q +-f|--fish ~/f/b/quux +-g|--glob /h*/m*/f o*/ba*/q* +-3 /hom/me/f o/bar/quu +-e '$' -3 /hom$/me/f o$/bar/quu$ +-q /h/m/f\ o/ba/q +-g -q /h*/m*/f\ o*/ba*/q* +-x /home/me/foo/bar/quux ``` - ## Usage For a fish-style working directory in your command prompt, add the following to your theme or zshrc: -``` - setopt prompt_subst - PS1='%n@%m $(shrink_path -f)>' +```zsh +setopt prompt_subst +PS1='%n@%m $(shrink_path -f)>' ``` The following options are available: @@ -54,17 +61,45 @@ The following options are available: ellipsis character(s) (defaulting to 1). -e SYMBOL Postfix symbol(s) to indicate that a directory name had been truncated. -q, --quote Quote special characters in the shrunk path + -x, --expand Print the full path. This takes precedence over the other options ``` The long options can also be set via zstyle, like -``` - zstyle :prompt:shrink_path fish yes +```zsh +zstyle :prompt:shrink_path fish yes ``` Note: Directory names containing two or more consecutive spaces are not yet supported. +## Trick: toggle shrinking with a keyboard shortcut + +You can use the `expand` option to disable the path shrinking. You can combine that +with a key binding widget to toggle path shrinking on and off. + +```zsh +# Toggle off path shrinking +zstyle ':prompt:shrink_path' expand true +# Toggle on path shrinking +zstyle -d ':prompt:shrink_path' expand +``` + +Combined with a widget: + +```zsh +# Widget definition +shrink-path-toggle() { + zstyle -t ':prompt:shrink_path' expand \ + && zstyle -d ':prompt:shrink_path' expand \ + || zstyle ':prompt:shrink_path' expand true + zle reset-prompt +} +zle -N shrink-path-toggle +# Key binding to ALT+SHIFT+S +bindkey "^[S" shrink-path-toggle +``` + ## License Copyright (C) 2008 by Daniel Friesel <derf@xxxxxxxxxxxxxxxxxx> diff --git a/plugins/shrink-path/shrink-path.plugin.zsh b/plugins/shrink-path/shrink-path.plugin.zsh index f0ed65138..373fd5b05 100644 --- a/plugins/shrink-path/shrink-path.plugin.zsh +++ b/plugins/shrink-path/shrink-path.plugin.zsh @@ -45,6 +45,7 @@ shrink_path () { typeset -i length=1 typeset ellipsis="" typeset -i quote=0 + typeset -i expand=0 if zstyle -t ':prompt:shrink_path' fish; then lastfull=1 @@ -60,6 +61,7 @@ shrink_path () { zstyle -t ':prompt:shrink_path' tilde && tilde=1 zstyle -t ':prompt:shrink_path' glob && ellipsis='*' zstyle -t ':prompt:shrink_path' quote && quote=1 + zstyle -t ':prompt:shrink_path' expand && expand=1 while [[ $1 == -* ]]; do case $1 in @@ -85,6 +87,8 @@ shrink_path () { print ' ellipsis character(s) (defaulting to 1).' print ' -e SYMBOL Postfix symbol(s) to indicate that a directory name had been truncated.' print ' -q, --quote Quote special characters in the shrunk path' + print ' -x, --expand Print the full path. This takes precedence over the other options' + print '' print 'The long options can also be set via zstyle, like' print ' zstyle :prompt:shrink_path fish yes' return 0 @@ -109,6 +113,9 @@ shrink_path () { -q|--quote) quote=1 ;; + -x|--expand) + expand=1 + ;; esac shift done @@ -120,6 +127,11 @@ shrink_path () { [[ -d $dir ]] || return 0 + if (( expand )) { + echo "$dir" + return 0 + } + if (( named )) { for part in ${(k)nameddirs}; { [[ $dir == ${nameddirs[$part]}(/*|) ]] && dir=${dir/#${nameddirs[$part]}/\~$part} |