#! /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}[ %1v ]${C_NO}
-)$(true)"
-
-_action="%(3v,%3v%,)"
-_path='${C_GREEN}%(5v,%20<..<%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}@${__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
+
+
+ echo ${_username}@${_machine}:${_path}
+}
#
# Now, the prompt itself
#
-#PROMPT="${_exitcode}${_hour} ${_username}@${_machine}:${_vcs}${_path}$ "
-PROMPT="${_exitcode}${_username}@${_machine}:${_vcs}${_path}$ "
-
+PROMPT='$($get_exitcode)$(setprompt)$ '
+RPROMPT='$(battery_level)'