cat <<__EOF0__
prompt grml
- This is the prompt as used by the grml-live system <http://grml.org>.
- It is a rather simple one-line prompt, that by default looks like this:
+ This is the prompt as used by the grml-live system <http://grml.org>. It is
+ a rather simple one-line prompt, that by default looks something like this:
<user>@<host> <current-working-directory>[ <vcs_info-data>]%
The actual configuration is done via zsh's \`zstyle' mechanism. The
context, that is used while looking up styles is:
- ':prompt:grml:<sub-context>'
+ ':prompt:grml:<left-or-right>:<subcontext>'
- Here <sub-context> is either 'items:<item>' or 'setup'. The available
- styles in the \`setup' context are: use-rprompt, items. For example,
- default \`items' style could be configured like this:
-
- zstyle ':prompt:grml:setup' items user at host path \\
- vcs percent
+ Here <left-or-right> is either \`left' or \`right', signifying whether the
+ style should affect the left or the right prompt. <subcontext> is either
+ \`setup' or 'items:<item>', where \`<item>' is one of the available items.
The styles:
- use-rprompt (boolean): If \`true' (the default), print a sad smiley
- in $RPROMPT if the last command a returned non-successful error
- code.
+ in $RPROMPT if the last command a returned non-successful error code.
+ (This in only valid if <left-or-right> is "right"; ignored otherwise)
- items (list): The list of items used in the prompt. If \`vcs' is
present in the list, the theme's code invokes \`vcs_info'
following would cause the user name to be printed in red instead of the
default blue:
- zstyle ':prompt:grml:items:user' pre '%F{red}'
+ zstyle ':prompt:grml:*:items:user' pre '%F{red}'
Note, that the \`post' style may remain at its default value, because its
default value is '%f', which turns the foreground text attribute off (which
}
function prompt_grml_setup () {
+ emulate -L zsh
+ autoload -Uz vcs_info
+ autoload -Uz add-zsh-hook
+ add-zsh-hook precmd prompt_grml_precmd
+}
+
+typeset -gA grml_prompt_pre_default \
+ grml_prompt_post_default \
+ grml_prompt_token_default
+
+grml_prompt_pre_default=(
+ rc '%F{red}'
+ rc-always ''
+ change-root ''
+ user '%B%F{blue}'
+ at ''
+ host ''
+ path '%b'
+ vcs ''
+ percent ''
+ sad-smiley ''
+)
+
+grml_prompt_post_default=(
+ rc '%f'
+ rc-always ''
+ change-root ''
+ user '%f%b'
+ at ''
+ host ' '
+ path ' %B'
+ vcs ''
+ percent ' '
+ sad-smiley ''
+)
+
+grml_prompt_token_default=(
+ rc '%(?..%? )'
+ rc-always '%?'
+ change-root 'debian_chroot'
+ user '%n'
+ at '@'
+ host '%m'
+ path '%40<..<%~%<<'
+ vcs '0'
+ percent '%%'
+ sad-smiley '%(?..:()'
+)
+
+function grml_prompt_addto () {
+ emulate -L zsh
+ local target="$1"
+ local lr it apre apost new v
+ local -a items
+ shift
+
+ [[ $target == PS1 ]] && lr=left || lr=right
+ zstyle -a ":prompt:${grmltheme}:${lr}:setup" items items || items=( "$@" )
+ typeset -g "${target}="
+ for it in "${items[@]}"; do
+ zstyle -s ":prompt:${grmltheme}:${lr}:items:$it" pre apre \
+ || apre=${grml_prompt_pre_default[$it]}
+ zstyle -s ":prompt:grml:${grmltheme}:${lr}:$it" post apost \
+ || apost=${grml_prompt_post_default[$it]}
+ zstyle -s ":prompt:${grmltheme}:${lr}:items:$it" token new \
+ || new=${grml_prompt_token_default[$it]}
+ typeset -g "${target}=${(P)target}${apre}"
+ case $it in
+ change-root)
+ if (( ${+parameters[$new]} )); then
+ typeset -g "${target}=${(P)target}${(P)new}"
+ fi
+ ;;
+ vcs)
+ v="vcs_info_msg_${new}_"
+ if (( ! vcscalled )); then
+ vcs_info
+ vcscalled=1
+ fi
+ if (( ${+parameters[$v]} )) && [[ -n "${(P)v}" ]]; then
+ typeset -g "${target}=${(P)target}${(P)v}"
+ fi
+ ;;
+ *) typeset -g "${target}=${(P)target}${new}" ;;
+ esac
+ typeset -g "${target}=${(P)target}${apost}"
+ done
}
function prompt_grml_precmd () {
+ emulate -L zsh
+ local -i vcscalled=0
+ local grmltheme=grml
+
+ grml_prompt_addto PS1 rc change-root user at host path vcs percent
+ if zstyle -T ":prompt:${grmltheme}:right:setup" use-rprompt; then
+ grml_prompt_addto RPS1 sad-smiley
+ fi
}
# set prompt
printf '%s' "${esc_end}"
}
-# TODO: revise all these NO* variables and especially their documentation
-# in zsh-help() below.
-is4 && [[ $NOPRECMD -eq 0 ]] && precmd () {
- [[ $NOPRECMD -gt 0 ]] && return 0
- # update VCS information
- (( ${+functions[vcs_info]} )) && vcs_info
+function grml_reset_screen_title () {
+ # adjust title of xterm
+ # see http://www.faqs.org/docs/Linux-mini/Xterm-Title.html
+ [[ ${NOTITLE:-} -gt 0 ]] && return 0
+ case $TERM in
+ (xterm*|rxvt*)
+ set_title ${(%):-"%n@%m: %~"}
+ ;;
+ esac
+}
+function grml_vcs_to_screen_title () {
if [[ $TERM == screen* ]] ; then
if [[ -n ${vcs_info_msg_1_} ]] ; then
ESC_print ${vcs_info_msg_1_}
ESC_print "zsh"
fi
fi
+}
+
+zrcautoload add-zsh-hook || add-zsh-hook () { :; }
+if [[ $NOPRECMD -gt 0 ]]; then
+ add-zsh-hook precmd grml_reset_screen_title
+ add-zsh-hook precmd grml_vcs_to_screen_title
+fi
+
+# TODO: revise all these NO* variables and especially their documentation
+# in zsh-help() below.
+is4 && [[ $NOPRECMD -eq 0 ]] && precmd () {
# just use DONTSETRPROMPT=1 to be able to overwrite RPROMPT
if [[ ${DONTSETRPROMPT:-} -eq 0 ]] ; then
if [[ $BATTERY -gt 0 ]] ; then
RPROMPT="%(?..:() "
fi
fi
- # adjust title of xterm
- # see http://www.faqs.org/docs/Linux-mini/Xterm-Title.html
- [[ ${NOTITLE:-} -gt 0 ]] && return 0
- case $TERM in
- (xterm*|rxvt*)
- set_title ${(%):-"%n@%m: %~"}
- ;;
- esac
}
# preexec() => a function running before every command