diff --git a/themes/amer.zsh-theme b/themes/amer.zsh-theme index b2f769693..c0f397574 100644 --- a/themes/amer.zsh-theme +++ b/themes/amer.zsh-theme @@ -3,7 +3,7 @@ MODE_INDICATOR="%{$fg_bold[red]%}❮%{$reset_color%}%{$fg[red]%}❮❮%{$reset_color%}" local return_status="%{$fg[red]%}%(?..⏎)%{$reset_color%}" -PROMPT='%{$fg[blue]%}[%n@%m%{$reset_color%}%{$fg_bold[white]%}:%{$reset_color%}%{$fg[cyan]%}%~]:%{$reset_color%}%{$fg[red]%}[$(git_prompt_short_sha)%{$reset_color|$(git_prompt_info)%{$fg[red]%}]%{$reset_color +PROMPT='%{$fg[blue]%}[%n@%m%{$reset_color%}%{$fg_bold[white]%}:%{$reset_color%}%{$fg[cyan]%}$(fish_like_pwd)]:%{$reset_color%}%{$fg[red]%}[$(git_prompt_short_sha)%{$reset_color|$(git_prompt_info)%{$fg[red]%}]%{$reset_color $(prompt_char) ' ZSH_THEME_GIT_PROMPT_PREFIX="%{$fg_bold[green]%}git%{$reset_color%}@%{$bg[white]%}%{$fg[black]%}" @@ -24,3 +24,106 @@ function prompt_char() { git branch >/dev/null 2>/dev/null && echo "%{$fg[green]%}±%{$reset_color%}" && return echo "%{$fg[cyan]%}◯ %{$reset_color%}" } + +function fish_like_pwd() { + ## vim:ft=zsh + ## reverse tabbing, useful in the prompt + ## Copyright (C) 2008 by Daniel Friesel + ## License: WTFPL + + ## CAVEAT: directory-names containing two or more consecutive spaces + ## are not yet supported + + setopt localoptions + setopt rc_quotes null_glob + + typeset -i lastfull=0 + typeset -i short=0 + typeset -i tilde=0 + typeset -i named=0 + + if zstyle -t ':prompt:rtab' fish; then + lastfull=1 + short=1 + tilde=1 + fi + if zstyle -t ':prompt:rtab' nameddirs; then + tilde=1 + named=1 + fi + zstyle -t ':prompt:rtab' last && lastfull=1 + zstyle -t ':prompt:rtab' short && short=1 + zstyle -t ':prompt:rtab' tilde && tilde=1 + + while [[ $1 == -* ]]; do + case $1 in + -f|--fish) + lastfull=1 + short=1 + tilde=1 + ;; + -h|--help) + print 'Usage: rtab [-f -l -s -t] [directory]' + print ' -f, --fish fish-simulation, like -l -s -t' + print ' -l, --last Print the last directory''s full name' + print ' -s, --short Truncate directory names to the first character' + print ' -t, --tilde Substitute ~ for the home directory' + print ' -T, --nameddirs Substitute named directories as well' + print 'The long options can also be set via zstyle, like' + print ' zstyle :prompt:rtab fish yes' + return 0 + ;; + -l|--last) lastfull=1 ;; + -s|--short) short=1 ;; + -t|--tilde) tilde=1 ;; + -T|--nameddirs) + tilde=1 + named=1 + ;; + esac + shift + done + + typeset -a tree expn + typeset result part dir=${1-$PWD} + typeset -i i + + [[ -d $dir ]] || return 0 + + if (( named )) { + for part in ${(k)nameddirs}; { + [[ $dir == ${nameddirs[$part]}(/*|) ]] && dir=${dir/${nameddirs[$part]}/\~$part} + } + } + (( tilde )) && dir=${dir/$HOME/\~} + tree=(${(s:/:)dir}) + ( + unfunction chpwd 2> /dev/null + if [[ $tree[1] == \~* ]] { + cd ${~tree[1]} + result=$tree[1] + shift tree + } else { + cd / + } + for dir in $tree; { + if (( lastfull && $#tree == 1 )) { + result+="/$tree" + break + } + expn=(a b) + part='' + i=0 + until [[ (( ${#expn} == 1 )) || $dir = $expn || $i -gt 99 ]] do + (( i++ )) + part+=$dir[$i] + expn=($(echo ${part}*(/))) + (( short )) && break + done + result+="/$part" + cd $dir + shift tree + } + echo ${result:-/} + ) +}