1
0
mirror of https://github.com/ohmyzsh/ohmyzsh.git synced 2026-01-01 20:17:50 +08:00

Compare commits

...

3 Commits

Author SHA1 Message Date
Marc Cornellà
2eb3e9d57c
lib: support konsole* $TERM in title function (#8035) 2020-03-05 17:26:16 +01:00
Marc Cornellà
1ef3d57739
aws: add support for AWS CLI v2 autocompletion (#8670)
Co-authored-by: Marc Cornellà <marc.cornella@live.com>
2020-03-05 17:13:46 +01:00
Marc Cornellà
2f345a3d0c
shrink-path: added glob and quote options (#7694)
* Added -g option to shrink-path plugin.

The new optins adds an asterix to the uniquely shortened name, such
that, if copy'n'pasted, zsh globbing will expand to the full path name
of the shortened path:

shrink-path -g:
"/net/software/modules/modulefiles" -> "/n*/s*/modules/m*"

shrink-path -l -g:
"/net/software/modules/modulefiles" -> "/n*/s*/modules/modulefiles"

* Updated also the README file with the new -g option.

* shrink-path: improved handling of special cases

This commits improves the handling of special cases in path strings:

- handling of white space in path names
- handling of single-letter path names

* Update plugins/shrink-path/README.md

Co-Authored-By: Jacob Tomaw <jacob.tomaw@gmail.com>

* Fix typo "Asterix" and replace with "asterisk"

* Add optional quoting support to shrink_path

Co-authored-by: Jacob Tomaw <jacob.tomaw@gmail.com>
2020-03-05 13:08:05 +01:00
4 changed files with 64 additions and 36 deletions

View File

@ -17,7 +17,7 @@ function title {
: ${2=$1} : ${2=$1}
case "$TERM" in case "$TERM" in
cygwin|xterm*|putty*|rxvt*|ansi) cygwin|xterm*|putty*|rxvt*|konsole*|ansi)
print -Pn "\e]2;$2:q\a" # set window name print -Pn "\e]2;$2:q\a" # set window name
print -Pn "\e]1;$1:q\a" # set tab name print -Pn "\e]1;$1:q\a" # set tab name
;; ;;

View File

@ -62,7 +62,12 @@ fi
# Load awscli completions # Load awscli completions
function _awscli-homebrew-installed() { # AWS CLI v2 comes with its own autocompletion. Check if that is there, otherwise fall back
if [[ -x /usr/local/bin/aws_completer ]]; then
autoload -Uz bashcompinit && bashcompinit
complete -C aws_completer aws
else
function _awscli-homebrew-installed() {
# check if Homebrew is installed # check if Homebrew is installed
(( $+commands[brew] )) || return 1 (( $+commands[brew] )) || return 1
@ -74,13 +79,13 @@ function _awscli-homebrew-installed() {
# this call to brew is expensive (about 400 ms), so at least let's make it only once # this call to brew is expensive (about 400 ms), so at least let's make it only once
_brew_prefix=$(brew --prefix awscli) _brew_prefix=$(brew --prefix awscli)
fi fi
} }
# get aws_zsh_completer.sh location from $PATH # get aws_zsh_completer.sh location from $PATH
_aws_zsh_completer_path="$commands[aws_zsh_completer.sh]" _aws_zsh_completer_path="$commands[aws_zsh_completer.sh]"
# otherwise check common locations # otherwise check common locations
if [[ -z $_aws_zsh_completer_path ]]; then if [[ -z $_aws_zsh_completer_path ]]; then
# Homebrew # Homebrew
if _awscli-homebrew-installed; then if _awscli-homebrew-installed; then
_aws_zsh_completer_path=$_brew_prefix/libexec/bin/aws_zsh_completer.sh _aws_zsh_completer_path=$_brew_prefix/libexec/bin/aws_zsh_completer.sh
@ -91,7 +96,8 @@ if [[ -z $_aws_zsh_completer_path ]]; then
else else
_aws_zsh_completer_path=/usr/share/zsh/site-functions/aws_zsh_completer.sh _aws_zsh_completer_path=/usr/share/zsh/site-functions/aws_zsh_completer.sh
fi fi
fi fi
[[ -r $_aws_zsh_completer_path ]] && source $_aws_zsh_completer_path [[ -r $_aws_zsh_completer_path ]] && source $_aws_zsh_completer_path
unset _aws_zsh_completer_path _brew_prefix unset _aws_zsh_completer_path _brew_prefix
fi

View File

@ -7,21 +7,26 @@ For this directory tree:
``` ```
/home/ /home/
me/ me/
foo/ f o o/ # The prefix f is ambiguous between "f o o" and "f i g".
bar/ bar/
quux/ quux/
biz/ # The prefix b is ambiguous between bar and biz. 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`: here are the results of calling `shrink_path <option> /home/me/foo/bar/quux`:
``` ```
Option Result Option Result
<none> /h/m/f/ba/q <none> /h/m/f o/ba/q
-l|--last /h/m/f/ba/quux -l|--last /h/m/f o/ba/q
-s|--short /h/m/f/b/q -s|--short /h/m/f/b/q
-t|--tilde ~/f/ba/q -t|--tilde ~/f o/ba/q
-f|--fish ~/f/b/quux -f|--fish ~/f/b/quux
-3 /hom/me/foo/bar/quu -g|--glob /h*/m*/f o*/ba*/q*
-e '$' -3 /ho$/me/foo/bar/qu$ -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*
``` ```
@ -39,6 +44,7 @@ The following options are available:
``` ```
-f, --fish fish simulation, equivalent to -l -s -t. -f, --fish fish simulation, equivalent to -l -s -t.
-g, --glob Add asterisk to allow globbing of shrunk path (equivalent to -e "*")
-l, --last Print the last directory's full name. -l, --last Print the last directory's full name.
-s, --short Truncate directory names to the number of characters given by -. Without -s, --short Truncate directory names to the number of characters given by -. Without
-s, names are truncated without making them ambiguous. -s, names are truncated without making them ambiguous.
@ -47,6 +53,7 @@ The following options are available:
-# Truncate each directly to at least this many characters inclusive of the -# Truncate each directly to at least this many characters inclusive of the
ellipsis character(s) (defaulting to 1). ellipsis character(s) (defaulting to 1).
-e SYMBOL Postfix symbol(s) to indicate that a directory name had been truncated. -e SYMBOL Postfix symbol(s) to indicate that a directory name had been truncated.
-q, --quote Quote special characters in the shrunk path
``` ```
The long options can also be set via zstyle, like The long options can also be set via zstyle, like

View File

@ -9,6 +9,7 @@
# The following options are available: # The following options are available:
# #
# -f, --fish fish simulation, equivalent to -l -s -t. # -f, --fish fish simulation, equivalent to -l -s -t.
# -g, --glob Add asterisk to allow globbing of shrunk path (equivalent to -e "*")
# -l, --last Print the last directory's full name. # -l, --last Print the last directory's full name.
# -s, --short Truncate directory names to the number of characters given by -#. Without # -s, --short Truncate directory names to the number of characters given by -#. Without
# -s, names are truncated without making them ambiguous. # -s, names are truncated without making them ambiguous.
@ -17,6 +18,7 @@
# -# Truncate each directly to at least this many characters inclusive of the # -# Truncate each directly to at least this many characters inclusive of the
# ellipsis character(s) (defaulting to 1). # ellipsis character(s) (defaulting to 1).
# -e SYMBOL Postfix symbol(s) to indicate that a directory name had been truncated. # -e SYMBOL Postfix symbol(s) to indicate that a directory name had been truncated.
# -q, --quote Quote special characters in the shrunk path
# #
# The long options can also be set via zstyle, like # The long options can also be set via zstyle, like
# zstyle :prompt:shrink_path fish yes # zstyle :prompt:shrink_path fish yes
@ -42,6 +44,7 @@ shrink_path () {
typeset -i named=0 typeset -i named=0
typeset -i length=1 typeset -i length=1
typeset ellipsis="" typeset ellipsis=""
typeset -i quote=0
if zstyle -t ':prompt:shrink_path' fish; then if zstyle -t ':prompt:shrink_path' fish; then
lastfull=1 lastfull=1
@ -55,6 +58,8 @@ shrink_path () {
zstyle -t ':prompt:shrink_path' last && lastfull=1 zstyle -t ':prompt:shrink_path' last && lastfull=1
zstyle -t ':prompt:shrink_path' short && short=1 zstyle -t ':prompt:shrink_path' short && short=1
zstyle -t ':prompt:shrink_path' tilde && tilde=1 zstyle -t ':prompt:shrink_path' tilde && tilde=1
zstyle -t ':prompt:shrink_path' glob && ellipsis='*'
zstyle -t ':prompt:shrink_path' quote && quote=1
while [[ $1 == -* ]]; do while [[ $1 == -* ]]; do
case $1 in case $1 in
@ -70,6 +75,7 @@ shrink_path () {
-h|--help) -h|--help)
print 'Usage: shrink_path [-f -l -s -t] [directory]' print 'Usage: shrink_path [-f -l -s -t] [directory]'
print ' -f, --fish fish-simulation, like -l -s -t' print ' -f, --fish fish-simulation, like -l -s -t'
print ' -g, --glob Add asterisk to allow globbing of shrunk path (equivalent to -e "*")'
print ' -l, --last Print the last directory''s full name' print ' -l, --last Print the last directory''s full name'
print ' -s, --short Truncate directory names to the number of characters given by -#. Without' print ' -s, --short Truncate directory names to the number of characters given by -#. Without'
print ' -s, names are truncated without making them ambiguous.' print ' -s, names are truncated without making them ambiguous.'
@ -78,6 +84,7 @@ shrink_path () {
print ' -# Truncate each directly to at least this many characters inclusive of the' print ' -# Truncate each directly to at least this many characters inclusive of the'
print ' ellipsis character(s) (defaulting to 1).' print ' ellipsis character(s) (defaulting to 1).'
print ' -e SYMBOL Postfix symbol(s) to indicate that a directory name had been truncated.' 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 'The long options can also be set via zstyle, like' print 'The long options can also be set via zstyle, like'
print ' zstyle :prompt:shrink_path fish yes' print ' zstyle :prompt:shrink_path fish yes'
return 0 return 0
@ -96,6 +103,12 @@ shrink_path () {
shift shift
ellipsis="$1" ellipsis="$1"
;; ;;
-g|--glob)
ellipsis='*'
;;
-q|--quote)
quote=1
;;
esac esac
shift shift
done done
@ -140,9 +153,11 @@ shrink_path () {
typeset -i dif=$(( ${#dir} - ${#part} - ellen )) typeset -i dif=$(( ${#dir} - ${#part} - ellen ))
if [[ $dif -gt 0 ]] if [[ $dif -gt 0 ]]
then then
(( quote )) && part=${(q)part}
part+="$ellipsis" part+="$ellipsis"
else else
part="$dir" part="$dir"
(( quote )) && part=${(q)part}
fi fi
result+="/$part" result+="/$part"
cd -q $dir cd -q $dir