summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPhilip Hofstetter <phofstetter@sensational.ch>2011-12-28 15:54:47 +0100
committerPhilip Hofstetter <phofstetter@sensational.ch>2011-12-28 15:58:24 +0100
commit77045230f4e2c80f4f312fbbeeb8583a41aa5a92 (patch)
tree356f8b4d57fa773232cb5362157b0fe5a7006c3c
parent3e9493fb301b7d34bb6861787d97067ec9365268 (diff)
downloadzsh-77045230f4e2c80f4f312fbbeeb8583a41aa5a92.tar.gz
zsh-77045230f4e2c80f4f312fbbeeb8583a41aa5a92.tar.bz2
zsh-77045230f4e2c80f4f312fbbeeb8583a41aa5a92.zip
make pygmalion theme use two lines when needed
if the length of the prompt (excluding color escapes) exceeds 40 characters, emit the arrow prompt on its own line This helps a lot on smaller terminals
-rw-r--r--themes/pygmalion.zsh-theme35
1 files changed, 30 insertions, 5 deletions
diff --git a/themes/pygmalion.zsh-theme b/themes/pygmalion.zsh-theme
index cf3bb908f..435c05830 100644
--- a/themes/pygmalion.zsh-theme
+++ b/themes/pygmalion.zsh-theme
@@ -1,9 +1,34 @@
# Yay! High voltage and arrows!
-ZSH_THEME_GIT_PROMPT_PREFIX="%{$reset_color%}%{$fg[green]%}"
-ZSH_THEME_GIT_PROMPT_SUFFIX="%{$reset_color%} "
-ZSH_THEME_GIT_PROMPT_DIRTY="%{$fg[yellow]%}⚡%{$reset_color%}"
-ZSH_THEME_GIT_PROMPT_CLEAN=""
+prompt_setup_pygmalion(){
+ ZSH_THEME_GIT_PROMPT_PREFIX="%{$reset_color%}%{$fg[green]%}"
+ ZSH_THEME_GIT_PROMPT_SUFFIX="%{$reset_color%} "
+ ZSH_THEME_GIT_PROMPT_DIRTY="%{$fg[yellow]%}⚡%{$reset_color%}"
+ ZSH_THEME_GIT_PROMPT_CLEAN=""
+
+ base_prompt='%{$fg[magenta]%}%n%{$reset_color%}%{$fg[cyan]%}@%{$reset_color%}%{$fg[yellow]%}%m%{$reset_color%}%{$fg[red]%}:%{$reset_color%}%{$fg[cyan]%}%0~%{$reset_color%}%{$fg[red]%}|%{$reset_color%}'
+ post_prompt='%{$fg[cyan]%}⇒%{$reset_color%} '
+
+ base_prompt_nocolor=$(echo "$base_prompt" | perl -pe "s/%\{[^}]+\}//g")
+ post_prompt_nocolor=$(echo "$post_prompt" | perl -pe "s/%\{[^}]+\}//g")
+
+ add-zsh-hook precmd prompt_pygmalion_precmd
+}
+
+prompt_pygmalion_precmd(){
+ local gitinfo=$(git_prompt_info)
+ local gitinfo_nocolor=$(echo "$gitinfo" | perl -pe "s/%\{[^}]+\}//g")
+ local exp_nocolor=$(print -P "$base_prompt_nocolor$gitinfo_nocolor$post_prompt_nocolor")
+ local prompt_length=${#exp_nocolor}
+
+ local nl=""
+
+ if [[ $prompt_length -gt 40 ]]; then
+ nl=$'\n%{\r%}';
+ fi
+ PROMPT="$base_prompt$gitinfo$nl$post_prompt"
+}
+
+prompt_setup_pygmalion
-PROMPT='%{$fg[magenta]%}%n%{$reset_color%}%{$fg[cyan]%}@%{$reset_color%}%{$fg[yellow]%}%m%{$reset_color%}%{$fg[red]%}:%{$reset_color%}%{$fg[cyan]%}%0~%{$reset_color%}%{$fg[red]%}|%{$reset_color%}$(git_prompt_info)%{$fg[cyan]%}⇒%{$reset_color%} '