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