X-Git-Url: http://git.grml.org/?a=blobdiff_plain;f=etc%2Fzsh%2Fzshrc;h=7eb4e769d6cdca5b8b1982f5f5d503c5dc0f7df5;hb=5ef5260128becce09ba1f6ddcc5395892cba3ff2;hp=355a944fbb02f68880ee9d52be2a60415863f3ac;hpb=6cc9bb0088991a133c43bf0ff77e12536b160ca3;p=grml-etc-core.git diff --git a/etc/zsh/zshrc b/etc/zsh/zshrc index 355a944..7eb4e76 100644 --- a/etc/zsh/zshrc +++ b/etc/zsh/zshrc @@ -985,6 +985,17 @@ for rh in run-help{,-git,-svk,-svn}; do zrcautoload $rh done; unset rh +# command not found handling + +(( ${COMMAND_NOT_FOUND} == 1 )) && +function command_not_found_handler() { + emulate -L zsh + if [[ -x ${GRML_ZSH_CNF_HANDLER} ]] ; then + ${GRML_ZSH_CNF_HANDLER} $1 + fi + return 1 +} + # completion system if zrcautoload compinit ; then compinit || print 'Notice: no compinit available :(' @@ -1240,8 +1251,6 @@ PS4='+%N:%i:%_> ' # - battery status # - debian_chroot # - vcs_info setup and version specific fixes -# - command-not-found handling -# (TODO: This has nothing to do with prompts: move!) # display battery status on right side of prompt via running 'BATTERY=1 zsh' if [[ $BATTERY -gt 0 ]] ; then @@ -1307,17 +1316,6 @@ else zstyle ':vcs_info:(sv[nk]|bzr):*' branchformat "%b${RED}:${YELLOW}%r" fi -# command not found handling - -(( ${COMMAND_NOT_FOUND} == 1 )) && -function command_not_found_handler() { - emulate -L zsh - if [[ -x ${GRML_ZSH_CNF_HANDLER} ]] ; then - ${GRML_ZSH_CNF_HANDLER} $1 - fi - return 1 -} - # Now for the fun part: The grml prompt themes in `promptsys' mode of operation # This actually defines three prompts: @@ -1350,8 +1348,9 @@ function prompt_grml_help () { - The attributes used with the items are customisable via strings used before and after the actual item. - The available items are: rc, rc-always, change-root, user, at, host, path, - vcs, percent, sad-smiley, battery. + The available items are: at, battery, change-root, date, grml-chroot, + history, host, jobs, newline, path, percent, rc, rc-always, sad-smiley, + shell-level, time, user, vcs The actual configuration is done via zsh's \`zstyle' mechanism. The context, that is used while looking up styles is: @@ -1370,7 +1369,8 @@ function prompt_grml_help () { - items (list): The list of items used in the prompt. If \`vcs' is present in the list, the theme's code invokes \`vcs_info' - accordingly. Default: rc user change-root at host path vcs precent + accordingly. Default (left): rc change-root user at host path vcs + percent; Default (right): sad-smiley Available styles in 'items:' are: pre, post. These are strings that are inserted before (pre) and after (post) the item in question. Thus, the @@ -1385,6 +1385,37 @@ function prompt_grml_help () { __EOF0__ } +function prompt_grml-chroot_help () { + cat <<__EOF0__ + prompt grml-chroot + + This is a variation of the grml prompt, see: prompt -h grml + + The main difference is the default value of the \`items' style. The rest + behaves exactly the same. Here are the defaults for \`grml-chroot': + + - left: grml-chroot user at host path percent + - right: (empty list) +__EOF0__ +} + +function prompt_grml-large_help () { + cat <<__EOF0__ + prompt grml-large + + This is a variation of the grml prompt, see: prompt -h grml + + The main difference is the default value of the \`items' style. In + particular, this theme uses _two_ lines instead of one with the plain + \`grml' theme. The rest behaves exactly the same. Here are the defaults + for \`grml-chroot': + + - left: rc jobs history shell-level change-root time date newline user + at host path vcs percent + - right: sad-smiley +__EOF0__ +} + function grml_prompt_setup () { emulate -L zsh autoload -Uz vcs_info @@ -1412,66 +1443,66 @@ typeset -gA grml_prompt_pre_default \ grml_prompt_token_default grml_prompt_pre_default=( - rc '%F{red}' - rc-always '' - change-root '' - user '%B%F{blue}' at '' + battery ' ' + change-root '' + date '%F{blue}' + grml-chroot '%F{red}' + history '%F{green}' host '' - path '%b' - vcs '' + jobs '%F{cyan}' + newline '' + path '%B' percent '' + rc '%F{red}' + rc-always '' sad-smiley '' - battery ' ' - newline '' - jobs '%F{cyan}' - history '%F{green}' - date '%F{blue}' - time '%F{blue}' shell-level '%F{red}' - grml-chroot '%F{red}' + time '%F{blue}' + user '%B%F{blue}' + vcs '' ) grml_prompt_post_default=( - rc '%f' - rc-always '' - change-root '' - user '%f%b' at '' + battery '' + change-root '' + date '%f' + grml-chroot '%f ' + history '%f' host '' - path '%B' - vcs '' + jobs '%f' + newline '' + path '%b' percent '' + rc '%f' + rc-always '' sad-smiley '' - battery '' - newline '' - jobs '%f' - history '%f' - date '%f' - time '%f' shell-level '%f' - grml-chroot '%f ' + time '%f' + user '%f%b' + vcs '' ) grml_prompt_token_default=( - rc '%(?..%? )' - rc-always '%?' - change-root 'debian_chroot' - user '%n' at '@' + battery 'PERCENT' + change-root 'debian_chroot' + date '%D{%Y-%m-%d}' + grml-chroot 'GRML_CHROOT' + history '{history#%!} ' host '%m ' + jobs '[%j running job(s)] ' + newline $'\n' path '%40<..<%~%<< ' - vcs '0' - percent '%% ' + percent '% # ' + rc '%(?..%? )' + rc-always '%?' sad-smiley '%(?..:()' - battery 'PERCENT' - newline $'\n' - jobs '[%j running job(s)] ' - history '{history#%!} ' - date '%D{%Y-%m-%d}' - time '%D{%H:%M:%S} ' shell-level '%(3L.+ .)' - grml-chroot 'GRML_CHROOT' + time '%D{%H:%M:%S} ' + user '%n' + vcs '0' ) function grml_typeset_and_wrap () { @@ -1673,29 +1704,23 @@ function grml_vcs_to_screen_title () { 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 - -# preexec() => a function running before every command -is4 && [[ $NOPRECMD -eq 0 ]] && \ -preexec () { - [[ $NOPRECMD -gt 0 ]] && return 0 -# set hostname if not running on host with name 'grml' +function grml_maintain_name () { + # set hostname if not running on host with name 'grml' if [[ -n "$HOSTNAME" ]] && [[ "$HOSTNAME" != $(hostname) ]] ; then NAME="@$HOSTNAME" fi -# get the name of the program currently running and hostname of local machine -# set screen window title if running in a screen +} + +function grml_cmd_to_screen_title () { + # get the name of the program currently running and hostname of local + # machine set screen window title if running in a screen if [[ "$TERM" == screen* ]] ; then - # local CMD=${1[(wr)^(*=*|sudo|ssh|-*)]} # don't use hostname - local CMD="${1[(wr)^(*=*|sudo|ssh|-*)]}$NAME" # use hostname + local CMD="${1[(wr)^(*=*|sudo|ssh|-*)]}$NAME" ESC_print ${CMD} fi -# adjust title of xterm - [[ ${NOTITLE} -gt 0 ]] && return 0 +} + +function grml_control_xterm_title () { case $TERM in (xterm*|rxvt*) set_title "${(%):-"%n@%m:"}" "$1" @@ -1703,6 +1728,17 @@ preexec () { esac } +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 + add-zsh-hook preexec grml_maintain_name + add-zsh-hook preexec grml_cmd_to_screen_title + if [[ $NOTITLE -eq 0 ]]; then + add-zsh-hook preexec grml_control_xterm_title + fi +fi + # 'hash' some often used directories #d# start hash -d deb=/var/cache/apt/archives