From 80fbf9030738cbfea38bdd6a049ea828882328dd Mon Sep 17 00:00:00 2001 From: Hugues Hiegel Date: Wed, 6 Jun 2012 10:52:49 +0200 Subject: [Prompt] FANTASTIC STUFF : extensible prompt with TASKBAR and EXTRA_INFO --- 12_Prompts.zsh | 91 ++++++++++++++++++++++++++++++++------------------- net:foret/Colors.zsh | 2 ++ net:foret/Prompts.zsh | 37 +++++++++++++-------- 3 files changed, 82 insertions(+), 48 deletions(-) diff --git a/12_Prompts.zsh b/12_Prompts.zsh index 6c0b54d..4e70f66 100644 --- a/12_Prompts.zsh +++ b/12_Prompts.zsh @@ -26,6 +26,9 @@ __set_prompt_colors # man zshmisc(1) # +PS1_TASKBAR=() +PS1_EXTRA_INFO=() + ## Automagic funcs # # chpwd : changement de répertoire @@ -114,39 +117,47 @@ __set_prompt_date() end=${${1:+$_tm_}:-$_tl_} # Date - [ "$DEBUG" = "yes" ] && echo -n " Date..." + [ "$DEBUG" = "yes" ] && echo -n " Date..." >&2 DATE=$C_$_prompt_colors[braces]$_C$T_"${begin}"$_T" "$C_$_prompt_colors[date]$_C"%D{%a-%d-%b-%Y %H:%M:%S}"$C_$_prompt_colors[braces]$_C" "$C_$_prompt_colors[bar]$_C$T_"${end}$_tq_"$_T DATEEXPAND=$(__expand_text "$DATE") DATESIZE=${#DATEEXPAND} - [ "$DEBUG" = "yes" ] && echo + [ "$DEBUG" = "yes" ] && echo >&2 } __update_prompt_elements() { - # Error - [ "$DEBUG" = "yes" ] && echo -n " Error code..." - ERRORSIZE=${#ERROR} - ERROR=${ERROR:+$C_$_prompt_colors[error]$_C$ERROR} - [ "$DEBUG" = "yes" ] && echo - [ "$DEBUG" = "yes" ] && echo -n " Term title..." + [ "$DEBUG" = "yes" ] && echo -n " Term title..." >&2 # Flush the term title __term_title - [ "$DEBUG" = "yes" ] && echo + [ "$DEBUG" = "yes" ] && echo >&2 __set_prompt_date - [ "$DEBUG" = "yes" ] && echo -n " Horizontal bar..." + [ "$DEBUG" = "yes" ] && echo -n " Horizontal bar..." >&2 __hbar - [ "$DEBUG" = "yes" ] && echo + [ "$DEBUG" = "yes" ] && echo >&2 + __vcsbranch +} - [ "$DEBUG" = "yes" ] && echo -n " Agents..." +__error_code () +{ + # Error + [ "$DEBUG" = "yes" ] && echo -n " Error code..." >&2 + echo ${ERROR:+$C_$_prompt_colors[error]$_C$ERROR} + [ "$DEBUG" = "yes" ] && echo >&2 +} +PS1_TASKBAR+=(__error_code) + +__ssh_gpg_agents () +{ + [ "$DEBUG" = "yes" ] && echo -n " Agents..." >&2 # GPG/SSH agents AGENTS="" - [ "$DEBUG" = "yes" ] && echo && echo -n " ......SSH" + [ "$DEBUG" = "yes" ] && echo && echo -n " ......SSH" >&2 # Check ssh-agent only if the env socket has been set and is accessible if [ -S "$SSH_AUTH_SOCK" ] then @@ -182,7 +193,7 @@ __update_prompt_elements() fi fi - [ "$DEBUG" = "yes" ] && echo && echo -n " ......GPG" + [ "$DEBUG" = "yes" ] && echo >&2 && echo -n " ......GPG" >&2 GPG_AGENT_PID="$(echo $GPG_AGENT_INFO | cut -d: -f2)" if [ "$GPG_AGENT_PID" != "" -a -e /proc/$GPG_AGENT_PID/cmdline ] then @@ -192,20 +203,19 @@ __update_prompt_elements() AGENTS=$AGENTS$C_$_agent_colors[$AGENTCOLOR]$_C${GPG_AGENT_RUNNING:-⚡} fi fi - [ "$DEBUG" = "yes" ] && echo - + [ "$DEBUG" = "yes" ] && echo >&2 - ## - ## Second line of prompt : don't let the path garbage the entire line - ## + echo $AGENTS +} +PS1_TASKBAR+=(__ssh_gpg_agents) - unset COMPILATION - __compilation 2>&- +__vcsbranch () +{ # get cvs tag # CVSTAG="" - [ "$DEBUG" = "yes" ] && echo -n " CVS status..." + [ "$DEBUG" = "yes" ] && echo -n " CVS status..." >&2 if [ -d CVS ] then CVSTAG=$(test -e CVS/Tag && cat CVS/Tag || basename $(cat CVS/Root 2>&- || echo "HEAD") ) @@ -216,7 +226,7 @@ __update_prompt_elements() then # get svn status # - [ "$DEBUG" = "yes" ] && echo -n " SVN status..." + [ "$DEBUG" = "yes" ] && echo -n " SVN status..." >&2 SVNREV=$(LC_ALL=C svn info 2>&- $PWD | awk '/^Revision: / {print $2}') SVNREVSIZE=${#${SVNREV:+ r$SVNREV}} if [ "$SVNREV" != "" ] @@ -228,29 +238,29 @@ __update_prompt_elements() fi fi SVNREV=${SVNREV:+$C_$_prompt_colors[doubledot]$_C $C_$SVNSTATUS$_C"r"$SVNREV} - [ "$DEBUG" = "yes" ] && echo + [ "$DEBUG" = "yes" ] && echo >&2 fi # get hg status - [ "$DEBUG" = "yes" ] && echo -n " HG status..." + [ "$DEBUG" = "yes" ] && echo -n " HG status..." >&2 HGBRANCH=$(__get_gcl_branch hg) [ ! -z "$HGBRANCH" ] && HGBRANCH=" "$HGBRANCH - [ "$DEBUG" = "yes" ] && echo + [ "$DEBUG" = "yes" ] && echo >&2 # get git status # - [ "$DEBUG" = "yes" ] && echo -n " GIT status..." + [ "$DEBUG" = "yes" ] && echo -n " GIT status..." >&2 GITBRANCH=$(__get_gcl_branch git) GITBRANCHSIZE=${#GITBRANCH} [ $GITBRANCHSIZE -gt 0 ] && GITBRANCHSIZE=$(($GITBRANCHSIZE)) - [ "$DEBUG" = "yes" ] && echo + [ "$DEBUG" = "yes" ] && echo >&2 - [ "$DEBUG" = "yes" ] && echo -n " Path..." + [ "$DEBUG" = "yes" ] && echo -n " Path..." >&2 MY_PATH="%(!.%d.%~)" PATHSIZE=$(print -Pn $MY_PATH) PATHSIZE=${#PATHSIZE} - [ "$DEBUG" = "yes" ] && echo - [ "$DEBUG" = "yes" ] && echo -n " Resize path / gitbranch..." + [ "$DEBUG" = "yes" ] && echo >&2 + [ "$DEBUG" = "yes" ] && echo -n " Resize path / gitbranch..." >&2 spaceleft=`__expand_text "%n@%m${DISPLAY:+($DISPLAY)}$COMPILATION $ ls -laCdtrux $DATE"` spaceleft=$(($COLUMNS - ${#spaceleft})) #minimalpathsize=`print -Pn "../%1~"` @@ -282,7 +292,7 @@ __update_prompt_elements() GITBRANCH=$C_$_prompt_colors[soft_generic]$_C${${GITBRANCH/→/$C_"$(__get_git_status)"$_C}/←/$C_$_prompt_colors[soft_generic]$_C}"$(__get_guilt_series)$C_$color[none]$_C" fi CURDIR="$C_$_prompt_colors[path]$_C%`echo $spaceleft`<..<"$MY_PATH"%<<$C_$color[none]$_C" - [ "$DEBUG" = "yes" ] && echo + [ "$DEBUG" = "yes" ] && echo >&2 VCSBRANCH=$CVSTAG$SVNREV$GITBRANCH$HGBRANCH @@ -310,8 +320,21 @@ __two_lines_prompt () ## 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... # - PS1=$HBAR$(print -Pn "\r" ; tput cuf 1)${AGENTS}$C_$_prompt_colors[bar]$_C${MAKEFLAGS:+$(tput cuf 1)$MAKEFLAGS}$(tput cuf 1)${ERROR}$C_$_prompt_colors[bar]$_C$(tput cub $COLUMNS ; tput cuf $(($COLUMNS - $DATESIZE)))$C_$_prompt_colors[bar]$_C$DATE" -"$C_$prompt_color[default]$_C$C_$_prompt_colors[user]$_C"%n"$C_$_prompt_colors[arob]$_C"@"$C_$_prompt_colors[host]$_C"%M"$C_$_prompt_colors[display]$_C"${DISPLAY:+($DISPLAY)} "$CURDIR$VCSBRANCH" "$C_$_prompt_colors[soft_generic]$_C${COMPILATION}$C_$_prompt_colors[dies]$_C"%#"$C_$_prompt_colors[cmd]$_C" " + PS1=$HBAR$(print -Pn "\r") + for trigger in $PS1_TASKBAR + do + result=$($trigger) + [ -n "$result" ] && PS1+=$(tput cuf 1)${result}$C_$_prompt_colors[bar]$_C + done + PS1+=$(tput cub $COLUMNS ; tput cuf $(($COLUMNS - $DATESIZE)))$C_$_prompt_colors[bar]$_C$DATE + PS1+=" +"$C_$prompt_color[default]$_C$C_$_prompt_colors[user]$_C"%n"$C_$_prompt_colors[arob]$_C"@"$C_$_prompt_colors[host]$_C"%M"$C_$_prompt_colors[display]$_C"${DISPLAY:+($DISPLAY)} "$CURDIR$VCSBRANCH + for trigger in $PS1_EXTRA_INFO + do + result=$($trigger) + [ -n "$result" ] && PS1+=" "${result} + done + PS1+=" "$C_$_prompt_colors[dies]$_C"%#"$C_$_prompt_colors[cmd]$_C" " } diff --git a/net:foret/Colors.zsh b/net:foret/Colors.zsh index 100c30e..ffe5758 100644 --- a/net:foret/Colors.zsh +++ b/net:foret/Colors.zsh @@ -4,4 +4,6 @@ typeset -A _make_colors _make_colors[target]="31;1" _make_colors[verbose]="33;1" _make_colors[nproc]="33;1" +_make_colors[static]="32;1" +_make_colors[dynamic]="33;1" diff --git a/net:foret/Prompts.zsh b/net:foret/Prompts.zsh index 817330f..3524614 100644 --- a/net:foret/Prompts.zsh +++ b/net:foret/Prompts.zsh @@ -10,29 +10,38 @@ _prompt_colors[target]="1;31" -__compilation () +__static_dynamic () { - unset COMPILATION - if [ -n "$TARGET" -o -n "$STATIC" -o -n "$DYNAMIC" -o $(( ${V:-0} + ${NPROC:-0} )) -gt 0 ] - then - COMPILATION="[" - [ $(( ${STATIC:-$(( 1 ^ ${DYNAMIC:-0} ))} + ${DYNAMIC:-$(( 1 ^ ${STATIC:-0} ))} )) -lt 2 ] && \ case "${STATIC:-$(( 1 ^ ${DYNAMIC:-0} ))}${DYNAMIC:-$((1 ^ ${STATIC:-0}))}" in "10") - COMPILATION+=$C_$_make_colors[dynamic]$_C"static"$C_$_prompt_colors[soft_generic]$_C ;; + echo $C_$_make_colors[static]$_C"static" ;; "01") - COMPILATION+=$C_$_make_colors[target]$_C"dynamic"$C_$_prompt_colors[soft_generic]$_C ;; + echo $C_$_make_colors[dynamic]$_C"dynamic" ;; esac +} - COMPILATION+=$C_$_make_colors[target]$_C$TARGET$C_$_prompt_colors[soft_generic]$_C +__compilation_target () +{ + [ -n "$TARGET" ] && echo $C_$_make_colors[target]$_C$TARGET +} +__verbose_compilation () +{ [ -n "$V" -a "$V" -gt 0 ] && \ - COMPILATION+=$C_$_make_colors[verbose]$_C$(for i in {1..$V} ; echo -n "V")$C_$_prompt_colors[soft_generic]$_C + echo $C_$_make_colors[verbose]$_C$(for i in {1..$V} ; echo -n "V") +} +__nproc_compilation () +{ [ -n "$NPROC" -a "$NPROC" -gt 0 ] && \ - COMPILATION+=$C_$_make_colors[nproc]$_C$(for i in {1..$NPROC} ; echo -n "|")$C_$_prompt_colors[soft_generic]$_C - - COMPILATION+="] " - fi + echo $C_$_make_colors[nproc]$_C$(for i in {1..$NPROC} ; echo -n "|") +} +__makeflags () +{ + echo $MAKEFLAGS } + +PS1_TASKBAR+=(__makeflags __verbose_compilation __nproc_compilation) +PS1_EXTRA_INFO+=(__static_dynamic __compilation_target) + -- cgit v1.2.3