]> git.alrj.org Git - zsh.d.git/blobdiff - S90_prompt
Add a wrapper for mc to stay in current directory upon exit
[zsh.d.git] / S90_prompt
index e95bc9ee418ad62e7e7f0d219fe541d13d079b4d..4ecb0799dca2cce41815b789e269ec63afcc1db2 100644 (file)
@@ -1,37 +1,60 @@
 #! /usr/bin/zsh
 
-#
-# Prepare colors, ignoring length
-#
-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
+# Exit code.
 #
-_username="${C_BYELLOW}%n${C_NO}"
-_machine="${C_BRED}%m${C_NO}"
-_hour="${C_BCYAN}[%D{%H:%M}]${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}
+}
 
-_exitcode="%(?::${C_BRED}[ %1v ]${C_NO}
-)$(true)"
-
-_action="%(5v,%5v%,)"
-_path='${C_GREEN}%(7v,%20<..<%7v%<<${C_NO}${C_MAGENTA}@%6v%5v${C_BYELLOW}%9v${C_NO}${C_GREEN}/%15<..<%8v%<<,%25<..<%~%<<)${C_NO}'
-
-
-_batt='%{${fg_bold[$psvar[3]]}%}%2v%{$reset_color%} '
 
 #
 # Now, the prompt itself
 #
-#PROMPT="${_exitcode}${_hour} ${_username}@${_machine}:${_vcs}${_path}$ "
-PROMPT="${_exitcode}${_username}@${_machine}:${_vcs}${_path}$ "
-
-RPROMPT="${_batt}"
\ No newline at end of file
+PROMPT='$($get_exitcode)$(setprompt)$ '
+# RPROMPT='$(battery_level)'