Refactor zsh prompt

This commit is contained in:
Henrik Lissner 2017-07-17 20:59:25 +02:00
parent bfa44821dd
commit 482785780c
No known key found for this signature in database
GPG key ID: 5F6C0EA160557395

View file

@ -15,7 +15,6 @@ prompt_git_dirty() {
# check if it's dirty # check if it's dirty
command test -n "$(git status --porcelain --ignore-submodules -unormal)" || return command test -n "$(git status --porcelain --ignore-submodules -unormal)" || return
echo -n "%F{red}[+]"
local r=$(command git rev-list --right-only --count HEAD...@'{u}' 2>/dev/null) local r=$(command git rev-list --right-only --count HEAD...@'{u}' 2>/dev/null)
local l=$(command git rev-list --left-only --count HEAD...@'{u}' 2>/dev/null) local l=$(command git rev-list --left-only --count HEAD...@'{u}' 2>/dev/null)
@ -26,19 +25,16 @@ prompt_git_dirty() {
## Hooks ############################### ## Hooks ###############################
prompt_hook_precmd() { prompt_hook_precmd() {
print -Pn '\e]0;%~\a' # full path in the title
vcs_info # get git info vcs_info # get git info
# Newline before prompt, excpet on init # Newline before prompt, except on init
[[ -n "$_DONE" ]] && print ""; _DONE=1 [[ -n "$_DONE" ]] && print ""; _DONE=1
} }
## Initialization ###################### ## Initialization ######################
prompt_init() { prompt_init() {
# prevent percentage showing up if output doesn't end with a newline ZLE_RPROMPT_INDENT=0 # prevent the extra space in the rprompt
export PROMPT_EOL_MARK=''
prompt_opts=(cr subst percent)
# prompt_opts=(cr subst percent)
setopt PROMPTSUBST setopt PROMPTSUBST
autoload -Uz add-zsh-hook autoload -Uz add-zsh-hook
autoload -Uz vcs_info autoload -Uz vcs_info
@ -47,8 +43,8 @@ prompt_init() {
# Updates cursor shape and prompt symbol based on vim mode # Updates cursor shape and prompt symbol based on vim mode
zle-keymap-select() { zle-keymap-select() {
case $KEYMAP in case $KEYMAP in
vicmd) PROMPT_SYMBOL=$N_MODE ;; vicmd) PROMPT_SYMBOL="%F{magenta}## " ;;
main|viins) PROMPT_SYMBOL=$I_MODE ;; main|viins) PROMPT_SYMBOL="%(?.%F{blue}.%F{red})λ " ;;
esac esac
zle reset-prompt zle reset-prompt
zle -R zle -R
@ -64,19 +60,10 @@ prompt_init() {
# show username@host if logged in through SSH # show username@host if logged in through SSH
prompt_username= prompt_username=
is-ssh && prompt_username='%F{magenta}%n%F{244}@%m ' [[ $SSH_CONNECTION ]] && prompt_username='%F{magenta}%n%F{244}@%m '
## Vim cursors RPROMPT='%F{cyan}%~ %F{magenta}${vcs_info_msg_0_}$(prompt_git_dirty)%f'
if [[ "$SSH_CONNECTION" ]]; then PROMPT='${prompt_username}${PROMPT_SYMBOL:-$ }'
N_MODE="%F{red}### "
I_MODE="%(?.%F{magenta}.%F{red})λ "
else
N_MODE="%F{magenta}## "
I_MODE="%(?.%F{blue}.%F{red})λ "
fi
RPROMPT='%F{cyan}${vcs_info_msg_0_}$(prompt_git_dirty)%f'
PROMPT='${prompt_username}%F{cyan}%~ %f${PROMPT_SYMBOL:-$ }%f'
} }
prompt_init "$@" prompt_init "$@"