From 1a53a4ba1d9581271adb09841baee5423df55ad9 Mon Sep 17 00:00:00 2001 From: Hugues Hiegel Date: Thu, 20 Mar 2008 09:42:36 +0100 Subject: Colors defs moved from Prompts.zsh to Colors.zsh --- 11_Colors.zsh | 82 +++++++++++++++++++ 11_Prompts.zsh | 244 --------------------------------------------------------- 12_Prompts.zsh | 176 +++++++++++++++++++++++++++++++++++++++++ 3 files changed, 258 insertions(+), 244 deletions(-) create mode 100644 11_Colors.zsh delete mode 100644 11_Prompts.zsh create mode 100644 12_Prompts.zsh diff --git a/11_Colors.zsh b/11_Colors.zsh new file mode 100644 index 0000000..fa1522c --- /dev/null +++ b/11_Colors.zsh @@ -0,0 +1,82 @@ +## +## Part of configuration files for Zsh 4 +## by Hugues Hiegel +## +## NO WARRANTY PROVIDED, USE AT YOUR OWN RISKS +## +## You are encouraged to use, modify, and redistribute +## these files with or without this notice. +## + +c_=[ +_c=m +C_="%{$c_" +_C="$_c%}" + +typeset -A prompt_colors git_colors mail_colors + +# I hate kik00l0l colorized prompts, so I'm using a way to +# give a dominant color for each part of the prompt, each of +# these remain still configurable one by one. +# Take a look to set_prompt_colors for these colorizations. +# +# To set the dominant color I'm using this : +# +# - PS1_ROOT when we are root +# - PS1_USER for normal usage +# - PS1_USER_SSH when we are connected through SSH +# +# I'm storing the resulting dominant color in $prompt_colors[generic] + +PS1_ROOT=${PS1_ROOT:-$color[red]} +PS1_USER=${PS1_USER:-$color[blue]} +PS1_USER_SSH=${PS1_USER_SSH:-$color[magenta]} +prompt_colors[generic]=`print -Pn "%(! $PS1_ROOT $PS1_USER)"` + +normal_user && if ( [ "$SSH_TTY" != "" ] ) +then + # This allows us to easily distinguish shells + # which really are on the local machine or not. + # That's so good, use it ! :-) + prompt_colors[generic]=${PS1_USER_SSH:-$prompt_colors[generic]} +fi + +# +# This func is intended to give a quick way to set the colors for the +# prompt inside a running zsh-session +# +set_prompt_colors () +{ + prompt_colors[generic]=${1:-$prompt_colors[generic]} + + prompt_colors[path]="$color[none];$prompt_colors[generic];$color[bold]" # pwd + #prompt_colors[term]="$color[none];$prompt_colors[generic]" # tty + prompt_colors[user]="$color[none];$prompt_colors[generic]" # login + prompt_colors[host]="$color[none];$prompt_colors[generic]" # hostname + #prompt_colors[hist]="$color[none]" # history number + prompt_colors[arob]="$color[none];$color[bold];$prompt_colors[generic]" # @ + prompt_colors[dies]="$color[none];$prompt_colors[generic]" # the bottom-end of the prompt + prompt_colors[doubledot]="$color[none];" # separates pwd from git-branch + #prompt_colors[paren]="$color[none];$color[cyan]" # parenthesis (around tty) + prompt_colors[bar]="$color[none];$prompt_colors[generic];$color[bold]" # horizontal bar + prompt_colors[braces]=$prompt_colors[bar] # braces (around date) + prompt_colors[error]="$color[bold];$color[yellow]" # error code + prompt_colors[date]="$color[none];$prompt_colors[generic]" # full date + + prompt_colors[cmd]="$color[none]" # command prompt + prompt_colors[exec]="$color[none]" # command output + + mail_colors[unread]="$color[none];$color[yellow];$color[bold]" # mail received + mail_colors[listes]="$color[none];$color[red];$color[bold]" # less important mail received + + prompt_colors[up_to_date]="$color[none];$prompt_colors[generic]" # up-to-date + prompt_colors[not_up_to_date]="$color[none];$color[green];$color[bold]" # not up to date + prompt_colors[to_be_commited]="$color[none];$color[yellow];$color[bold]" # changes in cache + + git_colors[managment_folder]="$color[none];$color[red];$color[bold]" # .git/... folder browsing + git_colors[cached]="$prompt_colors[to_be_commited]" # git changes in cache + git_colors[not_up_to_date]="$prompt_colors[not_up_to_date]" # git changes in working tree + git_colors[up_to_date]="$prompt_colors[up_to_date]" # git up-to-date +} + +set_prompt_colors diff --git a/11_Prompts.zsh b/11_Prompts.zsh deleted file mode 100644 index 3c490fe..0000000 --- a/11_Prompts.zsh +++ /dev/null @@ -1,244 +0,0 @@ -## -## Part of configuration files for Zsh 4 -## by Hugues Hiegel -## -## NO WARRANTY PROVIDED, USE AT YOUR OWN RISKS -## -## You are encouraged to use, modify, and redistribute -## these files with or without this notice. -## - -# I hate kik00l0l colorized prompts, so I'm using a way to -# give a dominant color for each part of the prompt, each of -# these remain still configurable one by one. -# Take a look to set_prompt_colors for these colorizations. -# -# To set the dominant color I'm using this : -# -# - PS1_ROOT when we are root -# - PS1_USER for normal usage -# - PS1_USER_SSH when we are connected through SSH -# -# I'm storing the resulting dominant color in $GENERIC - -typeset -A prompt_colors git_colors mail_colors - -PS1_ROOT=${PS1_ROOT:-$color[red]} -PS1_USER=${PS1_USER:-$color[blue]} -PS1_USER_SSH=${PS1_USER_SSH:-$color[magenta]} -prompt_colors[generic]=`print -Pn "%(! $PS1_ROOT $PS1_USER)"` - -normal_user && if ( [ "$SSH_TTY" != "" ] ) -then - # This allows us to easily distinguish shells - # which really are on the local machine or not. - # That's so good, use it ! :-) - prompt_colors[generic]=${PS1_USER_SSH:-$prompt_colors[generic]} -fi - -c_=[ -_c=m -C_="%{$c_" -_C="$_c%}" - -set_prompt_colors () -{ - prompt_colors[generic]=${1:-$prompt_colors[generic]} - - ## Les couleurs !! ## - prompt_colors[path]="$color[none];$prompt_colors[generic];$color[bold]" # pwd - #prompt_colors[term]="$color[none];$prompt_colors[generic]" # tty - prompt_colors[user]="$color[none];$prompt_colors[generic]" # login - prompt_colors[host]="$color[none];$prompt_colors[generic]" # hostname - #prompt_colors[hist]="$color[none]" # history number - prompt_colors[arob]="$color[none];$color[bold];$prompt_colors[generic]" # @ - prompt_colors[dies]="$color[none];$prompt_colors[generic]" # the bottom-end of the prompt - prompt_colors[doubledot]="$color[none];" # separates pwd from git-branch - #prompt_colors[paren]="$color[none];$color[cyan]" # parenthesis (around tty) - prompt_colors[bar]="$color[none];$prompt_colors[generic];$color[bold]" # horizontal bar - prompt_colors[braces]=$prompt_colors[bar] # braces (around date) - prompt_colors[error]="$color[bold];$color[yellow]" # error code - prompt_colors[date]="$color[none];$prompt_colors[generic]" # full date - - prompt_colors[cmd]="$color[none]" # command prompt - prompt_colors[exec]="$color[none]" # command output - - mail_colors[unread]="$color[none];$color[yellow];$color[bold]" # mail received - mail_colors[listes]="$color[none];$color[red];$color[bold]" # less important mail received - - prompt_colors[up_to_date]="$color[none];$prompt_colors[generic]" # up-to-date - prompt_colors[not_up_to_date]="$color[none];$color[green];$color[bold]" # not up to date - prompt_colors[to_be_commited]="$color[none];$color[yellow];$color[bold]" # changes in cache - - git_colors[managment_folder]="$color[none];$color[red];$color[bold]" # .git/... folder browsing - git_colors[cached]="$prompt_colors[to_be_commited]" # git changes in cache - git_colors[not_up_to_date]="$prompt_colors[not_up_to_date]" # git changes in working tree - git_colors[up_to_date]="$prompt_colors[up_to_date]" # git up-to-date -} - -set_prompt_colors $prompt_colors[generic] - -## Prompts -# -# man zshmisc(1) -# - -## Automagic funcs -# -# chpwd : changement de répertoire -# preexec : avant d'exécuter une commande -# precmd : avant d'afficher le prompt -# - -preexec () -{ - term_title " ··· $(echo $1 | tr ' \n' ' ;' | sed 's/%/%%/g;s/\\/\\\\/g')" - print -Pn "$C_$prompt_colors[exec]$_C" -} - -expand_text() -{ - # strips the %{...%} - print -Pn -- "$(echo $@ | sed 's/%{[^(%})]*%}//g')" -} - -new_precmd() -{ - # - # Arrays - # [0] prompt-style string - # [1] total size - # [2] color - # [3] pre-string - # [4] post-string - # - typeset -A ERROR DATE MAILS LOGIN HOST CWD GITINFO SVNINFO PRECMD - ERROR[color] = $prompt_colors[error] - ERROR[string] = "%(?;;%?)" - ERROR[pre] = "-" - ERROR[post] = - ERROR[size] = ${#$(print -Pn $ERROR[pre]$ERROR[string]$ERROR[post])} -} - -old_precmd() -{ - # Error - error=$(print -Pn "%(?;;-%?)") - ERRORSIZE=${#error} - ERROR="%(?;;"$C_$prompt_colors[bar]$_C"-"$C_$prompt_colors[error]$_C"%?)" - - # Flush the term title - term_title - - # Date - DATE=$C_$prompt_colors[braces]$_C"[ "$C_$prompt_colors[date]$_C"%D{%a-%d-%b-%Y %H:%M:%S}"$C_$prompt_colors[braces]$_C" ]"$C_$prompt_colors[bar]$_C"-" - DATEEXPAND=$(expand_text "$DATE") - DATESIZE=${#DATEEXPAND} - - # Mailcheck - MAILSTAT=$(eval echo "`[ -s ~/.procmail/procmail.log ] && < ~/.procmail/procmail.log awk 'BEGIN {RS="From" ; HAM=-1 ; LISTES=0 } !/JUNK/ { HAM++ } /Listes|Newsletters|Notifications/ { LISTES++ } END { if ((HAM - LISTES) > 0) { print "$C_$prompt_colors[bar]$_C""-""$C_$mail_colors[unread]$_C""@" } else if (LISTES > 0) { print "$C_$prompt_colors[bar]$_C""-""$C_$mail_colors[listes]$_C""@" } }'`") - MAILSTATEXPAND=$(expand_text "$MAILSTAT") - MAILSTATSIZE=${#MAILSTATEXPAND} - - # First line of prompt, calculation of the remaining place - spaceleft=$((1 + $COLUMNS - $ERRORSIZE - $MAILSTATSIZE - $DATESIZE)) - - unset HBAR - for h in {1..$(($spaceleft - 1))} - do - HBAR=$HBAR- - done - - ## - ## Second line of prompt : don't let the path garbage the entire line - ## - - # get svn status - # - SVNREV=$(LC_ALL=C svn info 2>&- $PWD | awk '/^Revision: / {print $2}') - SVNREVSIZE=${#${SVNREV:+:r$SVNREV}} - if [ "$SVNREV" != "" ] - then - SVNSTATUS="$(svn status 2>&-)" - SVNSTATUS=${SVNSTATUS:+$prompt_colors[not_up_to_date]} - SVNSTATUS=${SVNSTATUS:-$prompt_colors[up_to_date]} - fi - SVNREV=${SVNREV:+$C_$prompt_colors[doubledot]$_C:$C_$SVNSTATUS$_C"r"$SVNREV} - - # get git status - # - GITBRANCH=$(get_git_branch) - GITBRANCHSIZE=${#GITBRANCH} - [ $GITBRANCHSIZE -gt 0 ] && GITBRANCHSIZE=$(($GITBRANCHSIZE)) - - MY_PATH="%(!.%d.%~)" - PATHSIZE=$(print -Pn $MY_PATH) - PATHSIZE=${#PATHSIZE} - spaceleft=`print -Pn "%n@%m $ ls -laCdtrux $(expand_text "$DATE")"` - spaceleft=$(($COLUMNS - ${#spaceleft})) - #minimalpathsize=`print -Pn "../%1~"` - #minimalpathsize=${#minimalpathsize} - minimalpathsize=10 - minimalgitsize=10 # git-abbrev-commit-ish... - if [ $GITBRANCHSIZE -gt 0 ] - then - if [ $spaceleft -lt $(( $PATHSIZE + $GITBRANCHSIZE )) ] - then - local unbreakablegittail - # reduce the git-branch until it is shrinked to $minimalgitsize characters max. - - if [ $GITBRANCH[-1] = ")" ] - then - unbreakablegittail=${${(M)GITBRANCH%\~*}} - [ "$unbreakablegittail" = "" -a $GITBRANCHSIZE -gt $minimalgitsize ] && unbreakablegittail=")" - fi - if [ $GITBRANCHSIZE -gt $minimalgitsize ] - then - GITBRANCHSIZE=$(( $spaceleft - $PATHSIZE )) - [ $GITBRANCHSIZE -lt $minimalgitsize ] && GITBRANCHSIZE=$minimalgitsize - fi - GITBRANCH=`print -Pn "%"$(($GITBRANCHSIZE - ${#unbreakablegittail}))">..>"${GITBRANCH%\~*}${unbreakablegittail:+"%"${#unbreakablegittail}"<<"$GITBRANCH}` - fi - fi - # then we reduce the path until it reaches the last path element, - spaceleft=$(($spaceleft - $GITBRANCHSIZE)) - [ $spaceleft -lt $minimalpathsize ] && spaceleft=$minimalpathsize - GITBRANCH=${GITBRANCH:+$C_$prompt_colors[doubledot]$_C:$C_"$(get_git_status)"$_C$GITBRANCH} - CURDIR="$C_$prompt_colors[path]$_C%`echo $spaceleft`<..<"$MY_PATH"%<<$C_$color[none]$_C" - -## Le prompt le plus magnifique du monde, et c'est le mien ! -# Affiche l'user, l'host, le tty et le pwd. Rien que ça... -# Note que pour le pwd, on n'affiche que les 4 derniers dossiers pour éviter -# de pourrir le fenêtre de terminal avec un prompt à rallonge. - PS1="$MAILSTAT""$ERROR"$C_$prompt_colors[bar]$_C"$HBAR""$DATE -"$C_$prompt_colors[user]$_C"%n"$C_$prompt_colors[arob]$_C"@"$C_$prompt_colors[host]$_C"%m $CURDIR$SVNREV$GITBRANCH "$C_$prompt_colors[dies]$_C"%#"$C_$prompt_colors[cmd]$_C" " - - -} - -precmd() -{ - old_precmd -} - -chpwd() -{ - which todo > /dev/null 2>&1 && todo -} - - -# Prompt level 2 -PS2="$C_$color[yellow];$color[bold]$_C%_$C_$color[none];$color[cyan];$color[bold]$_C>$C_$color[none]$_C " - -# Prompt level 3 -PS3="?# " - -# Prompt level 4 -PS4="+%N:%i> " - -# Prompt de droite, pour l'heure et le code d'erreur de la dernière commande -#RPS1="%(?;;"$C_$prompt_colors[error]$_C"%?"$C_$color[none]$_C")" - -# Ultime : prompt de correction :-) -SPROMPT="zsh: $C_$color[blue]$_C%B'%R'%b$C_$color[none]$_C ? Vous ne vouliez pas plutôt $C_$color[magenta]$_C%B'%r'%b$C_$color[none]$_C ? [%BN%byae] " - diff --git a/12_Prompts.zsh b/12_Prompts.zsh new file mode 100644 index 0000000..d9ae9fa --- /dev/null +++ b/12_Prompts.zsh @@ -0,0 +1,176 @@ +## +## Part of configuration files for Zsh 4 +## by Hugues Hiegel +## +## NO WARRANTY PROVIDED, USE AT YOUR OWN RISKS +## +## You are encouraged to use, modify, and redistribute +## these files with or without this notice. +## + +set_prompt_colors $prompt_colors[generic] + +## Prompts +# +# man zshmisc(1) +# + +## Automagic funcs +# +# chpwd : changement de répertoire +# preexec : avant d'exécuter une commande +# precmd : avant d'afficher le prompt +# + +preexec () +{ + term_title " ··· $(echo $1 | tr ' \n' ' ;' | sed 's/%/%%/g;s/\\/\\\\/g')" + print -Pn "$C_$prompt_colors[exec]$_C" +} + +expand_text() +{ + # strips the %{...%} + print -Pn -- "$(echo $@ | sed 's/%{[^(%})]*%}//g')" +} + +new_precmd() +{ + # + # Arrays + # [0] prompt-style string + # [1] total size + # [2] color + # [3] pre-string + # [4] post-string + # + typeset -A ERROR DATE MAILS LOGIN HOST CWD GITINFO SVNINFO PRECMD + ERROR[color] = $prompt_colors[error] + ERROR[string] = "%(?;;%?)" + ERROR[pre] = "-" + ERROR[post] = + ERROR[size] = ${#$(print -Pn $ERROR[pre]$ERROR[string]$ERROR[post])} +} + +old_precmd() +{ + # Error + error=$(print -Pn "%(?;;-%?)") + ERRORSIZE=${#error} + ERROR="%(?;;"$C_$prompt_colors[bar]$_C"-"$C_$prompt_colors[error]$_C"%?)" + + # Flush the term title + term_title + + # Date + DATE=$C_$prompt_colors[braces]$_C"[ "$C_$prompt_colors[date]$_C"%D{%a-%d-%b-%Y %H:%M:%S}"$C_$prompt_colors[braces]$_C" ]"$C_$prompt_colors[bar]$_C"-" + DATEEXPAND=$(expand_text "$DATE") + DATESIZE=${#DATEEXPAND} + + # Mailcheck + MAILSTAT=$(eval echo "`[ -s ~/.procmail/procmail.log ] && < ~/.procmail/procmail.log awk 'BEGIN {RS="From" ; HAM=-1 ; LISTES=0 } !/JUNK/ { HAM++ } /Listes|Newsletters|Notifications/ { LISTES++ } END { if ((HAM - LISTES) > 0) { print "$C_$prompt_colors[bar]$_C""-""$C_$mail_colors[unread]$_C""@" } else if (LISTES > 0) { print "$C_$prompt_colors[bar]$_C""-""$C_$mail_colors[listes]$_C""@" } }'`") + MAILSTATEXPAND=$(expand_text "$MAILSTAT") + MAILSTATSIZE=${#MAILSTATEXPAND} + + # First line of prompt, calculation of the remaining place + spaceleft=$((1 + $COLUMNS - $ERRORSIZE - $MAILSTATSIZE - $DATESIZE)) + + unset HBAR + for h in {1..$(($spaceleft - 1))} + do + HBAR=$HBAR- + done + + ## + ## Second line of prompt : don't let the path garbage the entire line + ## + + # get svn status + # + SVNREV=$(LC_ALL=C svn info 2>&- $PWD | awk '/^Revision: / {print $2}') + SVNREVSIZE=${#${SVNREV:+:r$SVNREV}} + if [ "$SVNREV" != "" ] + then + SVNSTATUS="$(svn status 2>&-)" + SVNSTATUS=${SVNSTATUS:+$prompt_colors[not_up_to_date]} + SVNSTATUS=${SVNSTATUS:-$prompt_colors[up_to_date]} + fi + SVNREV=${SVNREV:+$C_$prompt_colors[doubledot]$_C:$C_$SVNSTATUS$_C"r"$SVNREV} + + # get git status + # + GITBRANCH=$(get_git_branch) + GITBRANCHSIZE=${#GITBRANCH} + [ $GITBRANCHSIZE -gt 0 ] && GITBRANCHSIZE=$(($GITBRANCHSIZE)) + + MY_PATH="%(!.%d.%~)" + PATHSIZE=$(print -Pn $MY_PATH) + PATHSIZE=${#PATHSIZE} + spaceleft=`print -Pn "%n@%m $ ls -laCdtrux $(expand_text "$DATE")"` + spaceleft=$(($COLUMNS - ${#spaceleft})) + #minimalpathsize=`print -Pn "../%1~"` + #minimalpathsize=${#minimalpathsize} + minimalpathsize=10 + minimalgitsize=10 # git-abbrev-commit-ish... + if [ $GITBRANCHSIZE -gt 0 ] + then + if [ $spaceleft -lt $(( $PATHSIZE + $GITBRANCHSIZE )) ] + then + local unbreakablegittail + # reduce the git-branch until it is shrinked to $minimalgitsize characters max. + + if [ $GITBRANCH[-1] = ")" ] + then + unbreakablegittail=${${(M)GITBRANCH%\~*}} + [ "$unbreakablegittail" = "" -a $GITBRANCHSIZE -gt $minimalgitsize ] && unbreakablegittail=")" + fi + if [ $GITBRANCHSIZE -gt $minimalgitsize ] + then + GITBRANCHSIZE=$(( $spaceleft - $PATHSIZE )) + [ $GITBRANCHSIZE -lt $minimalgitsize ] && GITBRANCHSIZE=$minimalgitsize + fi + GITBRANCH=`print -Pn "%"$(($GITBRANCHSIZE - ${#unbreakablegittail}))">..>"${GITBRANCH%\~*}${unbreakablegittail:+"%"${#unbreakablegittail}"<<"$GITBRANCH}` + fi + fi + # then we reduce the path until it reaches the last path element, + spaceleft=$(($spaceleft - $GITBRANCHSIZE)) + [ $spaceleft -lt $minimalpathsize ] && spaceleft=$minimalpathsize + GITBRANCH=${GITBRANCH:+$C_$prompt_colors[doubledot]$_C:$C_"$(get_git_status)"$_C$GITBRANCH} + CURDIR="$C_$prompt_colors[path]$_C%`echo $spaceleft`<..<"$MY_PATH"%<<$C_$color[none]$_C" + +## Le prompt le plus magnifique du monde, et c'est le mien ! +# Affiche l'user, l'host, le tty et le pwd. Rien que ça... +# Note que pour le pwd, on n'affiche que les 4 derniers dossiers pour éviter +# de pourrir le fenêtre de terminal avec un prompt à rallonge. + PS1="$MAILSTAT""$ERROR"$C_$prompt_colors[bar]$_C"$HBAR""$DATE +"$C_$prompt_colors[user]$_C"%n"$C_$prompt_colors[arob]$_C"@"$C_$prompt_colors[host]$_C"%m $CURDIR$SVNREV$GITBRANCH "$C_$prompt_colors[dies]$_C"%#"$C_$prompt_colors[cmd]$_C" " + + +} + +precmd() +{ + old_precmd +} + +chpwd() +{ + which todo > /dev/null 2>&1 && todo +} + + +# Prompt level 2 +PS2="$C_$color[yellow];$color[bold]$_C%_$C_$color[none];$color[cyan];$color[bold]$_C>$C_$color[none]$_C " + +# Prompt level 3 +PS3="?# " + +# Prompt level 4 +PS4="+%N:%i> " + +# Prompt de droite, pour l'heure et le code d'erreur de la dernière commande +#RPS1="%(?;;"$C_$prompt_colors[error]$_C"%?"$C_$color[none]$_C")" + +# Ultime : prompt de correction :-) +SPROMPT="zsh: $C_$color[blue]$_C%B'%R'%b$C_$color[none]$_C ? Vous ne vouliez pas plutôt $C_$color[magenta]$_C%B'%r'%b$C_$color[none]$_C ? [%BN%byae] " + -- cgit v1.2.3