zsh-sticky-prompt/zsh-sticky-prompt.zshrc
2020-07-29 10:57:04 -05:00

52 lines
1.5 KiB
Bash

ZLE_STICKY_PROMPT_LEFT=""
ZLE_STICKY_PROMPT_RIGHT=""
sticky-prompt-zle-line-init() {
LBUFFER="$ZLE_STICKY_PROMPT_LEFT"
RBUFFER="$ZLE_STICKY_PROMPT_RIGHT"
zle _zle-line-init
}
sticky-prompt-set() {
if [[ -z "$BUFFER" ]]; then
if [[ -z "$ZLE_STICKY_PROMPT_LEFT" ]]; then
zle -M "No sticky prompt set."
else
ZLE_STICKY_PROMPT_LEFT=""
ZLE_STICKY_PROMPT_RIGHT=""
zle -M "Removed sticky prompt."
fi
return
fi
local ZLE_STICKY_PROMPT_PREV_LEFT="$ZLE_STICKY_PROMPT_LEFT"
local ZLE_STICKY_PROMPT_PREV_RIGHT="$ZLE_STICKY_PROMPT_RIGHT"
ZLE_STICKY_PROMPT_LEFT="$LBUFFER"
ZLE_STICKY_PROMPT_RIGHT="$RBUFFER"
if { [[ -n "$ZLE_STICKY_PROMPT_LEFT" ]] && [[ "$ZLE_STICKY_PROMPT_PREV_LEFT" != "$ZLE_STICKY_PROMPT_LEFT" ]]; } ||
{ [[ -n "$ZLE_STICKY_PROMPT_RIGHT" ]] && [[ "$ZLE_STICKY_PROMPT_PREV_RIGHT" != "$ZLE_STICKY_PROMPT_RIGHT" ]]; }; then
zle -M "Sticky prompt $ZLE_STICKY_PROMPT_LEFT|$ZLE_STICKY_PROMPT_RIGHT"
else
ZLE_STICKY_PROMPT_LEFT=""
ZLE_STICKY_PROMPT_RIGHT=""
BUFFER=""
zle -M "Removed sticky prompt."
fi
}
sticky-prompt-accept-line() {
if [[ -z "$BUFFER" ]] && [[ -n "$ZLE_STICKY_PROMPT_LEFT" ]]; then
ZLE_STICKY_PROMPT_LEFT=""
ZLE_STICKY_PROMPT_RIGHT=""
zle -M "Removed sticky prompt."
fi
zle .accept-line
}
functions[_zle-line-init]="${functions[zle-line-init]}"
zle -N _zle-line-init
zle -N zle-line-init sticky-prompt-zle-line-init
zle -N sticky-prompt-set
zle -N accept-line sticky-prompt-accept-line
bindkey '^S' sticky-prompt-set