X-Git-Url: https://git.alrj.org/?p=zsh.d.git;a=blobdiff_plain;f=S90_prompt;h=4ecb0799dca2cce41815b789e269ec63afcc1db2;hp=adc68c2a9279daf2a04b1cd09568d50d658d71d9;hb=HEAD;hpb=e808d77ed363e89fbf07e57e8cfd8608b5bfa2ef diff --git a/S90_prompt b/S90_prompt index adc68c2..4ecb079 100644 --- a/S90_prompt +++ b/S90_prompt @@ -1,37 +1,60 @@ #! /usr/bin/zsh -autoload -U colors -colors -setopt prompt_subst # -# Prepare colors, ignoring length +# Exit code. # -C_NO="%{$reset_color%}" -C_BYELLOW="%{${fg_bold[yellow]}%}" -C_BRED="%{${fg_bold[red]}%}" -C_BCYAN="%{${fg_bold[cyan]}%}" -C_GREEN="%{${fg[green]}%}" -C_MAGENTA="%{${fg_bold[magenta]}%}" - - - -# -# Prompt parts -# -_username="${C_BYELLOW}%n${C_NO}" -_machine="${C_BRED}%m${C_NO}" -_hour="${C_BCYAN}[%D{%H:%M}]${C_NO}" - -_exitcode="%(?::${C_BRED}[ %? ]${C_NO} -)$(true)" - -_action="%(3v,%3v%,)" -_path='${C_GREEN}%(5v,%15<..<%5v%<<${C_NO}${C_MAGENTA}@%4v%3v${C_NO}${C_GREEN}/%15<..<%6v%<<,%25<..<%~%<<)${C_NO}' +# Hide exit code after a blank line. +# Inspired from https://github.com/robbyrussell/oh-my-zsh/blob/66b7fe1b27637feba61a4b47e113b18b69432bf2/themes/dieter.zsh-theme +# The difference is that $get_exitcode is set to a command name which should be +# called. There's a layer of indirection. + +get_exitcode=true + +function accept-line-or-clear-warning () { + if [[ -z $BUFFER ]]; then + get_exitcode=true + else + get_exitcode=parse_exitcode + fi + zle accept-line +} +zle -N accept-line-or-clear-warning +bindkey '^M' accept-line-or-clear-warning + + +setprompt() +{ + # This function sets the entire prompt. + # It requires that prompt_subst is set. + + _username="${C_BYELLOW}%n${C_NO}" + _machine="${C_BRED}%m${C_NO}" + + # Git status in the pwd, if applicable + if [[ -n ${__ZSH_GIT_BASEDIR} ]]; then + _basedir="${C_GREEN}%20<..<${__ZSH_GIT_BASEDIR}%<<${C_NO}" + _branch="${C_MAGENTA}@%20>..>${__ZSH_GIT_BRANCH}%>>${__ZSH_GIT_ACTION}${C_NO}" + _status="${__ZSH_GIT_STATUS}" + _subdir="${C_GREEN}/%15<..<${__ZSH_GIT_SUBDIR}%<<${C_NO}" + _path="${_basedir}${_branch}${_status}${_subdir}" + else + _path="${C_GREEN}%25<..<%~%<<${C_NO}" + fi + + # Virtualenv activated ? + if [[ -n ${__ZSH_VIRTUAL_ENV_NAME} ]]; then + _venvname="${C_BCYAN}(${__ZSH_VIRTUAL_ENV_NAME})${C_NO}" + else + _venvname="" + fi + + echo ${_venvname}${_username}@${_machine}:${_path} +} # # Now, the prompt itself # -PROMPT="${_exitcode}${_hour} ${_username}@${_machine}:${_vcs}${_path}$ " - +PROMPT='$($get_exitcode)$(setprompt)$ ' +# RPROMPT='$(battery_level)'