Lots of clean up for loquacious prompt
- Move zle keymap select code to prompt module - Use vcs_info to get repo information - Reduce number of functions required to generate prompt - Set $PS1 once in setup to a bunch of $PS1_* variables. These variables are set before each prompt. Doing this lets me change prompt themes more easily.
This commit is contained in:
parent
66438f666c
commit
d3b8abce8e
2 changed files with 69 additions and 100 deletions
|
@ -3,7 +3,6 @@
|
||||||
# Eryn Wells <eryn@erynwells.me>
|
# Eryn Wells <eryn@erynwells.me>
|
||||||
|
|
||||||
|
|
||||||
autoload -U prompt_colorize
|
|
||||||
|
|
||||||
|
|
||||||
#
|
#
|
||||||
|
@ -31,19 +30,25 @@ function prompt_loquacious_setup
|
||||||
typeset -ga precmd_functions
|
typeset -ga precmd_functions
|
||||||
typeset -ga preexec_functions
|
typeset -ga preexec_functions
|
||||||
|
|
||||||
# preexec_newline is here so there are blank lines on either end of the
|
autoload -U prompt_colorize
|
||||||
# command output
|
|
||||||
precmd_functions=(preexec_newline \
|
|
||||||
precmd_xterm_title \
|
|
||||||
precmd_prompt \
|
|
||||||
precmd_info \
|
|
||||||
precmd_git_branch \
|
|
||||||
precmd_flags_rprompt \
|
|
||||||
precmd_assemble_prompt)
|
|
||||||
|
|
||||||
preexec_functions=(preexec_newline)
|
precmd_functions=(set_xterm_title \
|
||||||
|
print_newline \
|
||||||
|
set_prompt_info \
|
||||||
|
set_zle_mode_info)
|
||||||
|
preexec_functions=(prompt_print_newline)
|
||||||
|
|
||||||
prompt_opts=(cr subst percent)
|
prompt_opts=(cr subst percent)
|
||||||
|
|
||||||
|
# Set up vcs_info
|
||||||
|
zstyle ':vcs_info:git:loquacious:*' formats \
|
||||||
|
'%B%F{green}%r%f%%b:%B%F{blue}%S%f%%b' \
|
||||||
|
'%B%F{magenta}%b%f%%b'
|
||||||
|
|
||||||
|
PS1='${PS1_NAME}${PS1_HOST}${PS1_CWD}${PS1_REPO}${PS1_REPO_BRANCH}${PS1_ZLE_MODE}
|
||||||
|
$PS1_LINE'
|
||||||
|
|
||||||
|
zle -N zle-keymap-select on_keymap_select
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -54,74 +59,13 @@ function prompt_loquacious_preview
|
||||||
|
|
||||||
|
|
||||||
#
|
#
|
||||||
# PRECMD FUNCTIONS
|
# HELPER FUNCTIONS
|
||||||
#
|
|
||||||
|
|
||||||
|
|
||||||
function precmd_xterm_title
|
|
||||||
{
|
|
||||||
# Set xterm and screen titles
|
|
||||||
[[ -n "$DISPLAY" ]] && print -Pn "\e]2;%n@%m\a"
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
function precmd_assemble_prompt
|
|
||||||
{
|
|
||||||
local p="$PS1_NAME "
|
|
||||||
[[ -n "$SSH_CONNECTION" ]] && p+="at $PS1_HOST "
|
|
||||||
p+="in $PS1_CWD"
|
|
||||||
if [[ -n "$PS1_REPO" ]]; then
|
|
||||||
p+=" on $PS1_REPO"
|
|
||||||
fi
|
|
||||||
PS1="$p
|
|
||||||
$PS1_LINE"
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
function precmd_flags_rprompt
|
|
||||||
{
|
|
||||||
# background jobs
|
|
||||||
RPS1="%(1j.[`prompt_colorize -b -f 'magenta' '%j'`].)"
|
|
||||||
# exit status
|
|
||||||
RPS1+="%(0?..[`prompt_colorize -b -f 'red' '%?'`])"
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
function precmd_info
|
|
||||||
{
|
|
||||||
PS1_NAME=`prompt_colorize -b -f 'magenta' '%n'`
|
|
||||||
PS1_HOST=`prompt_colorize -b -f 'red' '%m'`
|
|
||||||
PS1_CWD=`prompt_colorize -b -f 'green' '%~'`
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
function precmd_prompt
|
|
||||||
{
|
|
||||||
PS1_LINE="%(!.`prompt_colorize -b -f 'red' '%#'`.%#) "
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
function precmd_git_branch
|
|
||||||
{
|
|
||||||
local git_branch_output
|
|
||||||
git_branch_output=`git branch 2>/dev/null`
|
|
||||||
if [[ $? -eq 0 ]]; then
|
|
||||||
export gitbranch=`echo $git_branch_output | grep '^\*' | cut -d' ' -f2`
|
|
||||||
PS1_REPO=`prompt_colorize -b -f 'cyan' $gitbranch`
|
|
||||||
else
|
|
||||||
PS1_REPO=''
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
#
|
|
||||||
# PREEXEC FUNCTIONS
|
|
||||||
#
|
#
|
||||||
|
|
||||||
# First prompt flag. See precmd_newline.
|
# First prompt flag. See precmd_newline.
|
||||||
is_first_prompt=1
|
is_first_prompt=1
|
||||||
|
|
||||||
function preexec_newline
|
function print_newline
|
||||||
{
|
{
|
||||||
# Don't print newlines the first time the prompt is displayed.
|
# Don't print newlines the first time the prompt is displayed.
|
||||||
if [[ -n $is_first_prompt ]]; then
|
if [[ -n $is_first_prompt ]]; then
|
||||||
|
@ -132,5 +76,52 @@ function preexec_newline
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
function set_prompt_info
|
||||||
|
{
|
||||||
|
PS1_NAME="`prompt_colorize -b -f 'magenta' '%n'` "
|
||||||
|
PS1_HOST="at `prompt_colorize -b -f 'red' '%m'` "
|
||||||
|
PS1_CWD="in `prompt_colorize -b -f 'green' '%~'` "
|
||||||
|
|
||||||
|
vcs_info loquacious
|
||||||
|
[[ -n "$vcs_info_msg_0_" ]] && PS1_REPO="in $vcs_info_msg_0_ "
|
||||||
|
[[ -n "$vcs_info_msg_1_" ]] && PS1_REPO_BRANCH="on $vcs_info_msg_1_ "
|
||||||
|
|
||||||
|
# don't show CWD when in a repository
|
||||||
|
[[ -n $PS1_REPO ]] && PS1_CWD=''
|
||||||
|
|
||||||
|
PS1_LINE='%# '
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
function set_xterm_title
|
||||||
|
{
|
||||||
|
# Set xterm and screen titles
|
||||||
|
[[ -n "$DISPLAY" ]] && print -Pn "\e]2;%n@%m\a"
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
function set_zle_mode_info
|
||||||
|
{
|
||||||
|
if [[ -z "$1" || "$1" == 'viins' || "$1" == 'main' ]]; then
|
||||||
|
PS1_ZLE_MODE=`prompt_colorize -b -f 'black' '<INS>'`
|
||||||
|
elif [[ "$1" == 'vicmd' ]]; then
|
||||||
|
PS1_ZLE_MODE=`prompt_colorize -b -f 'black' '<CMD>'`
|
||||||
|
else
|
||||||
|
PS1_ZLE_MODE=''
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
function on_keymap_select
|
||||||
|
{
|
||||||
|
# Regenerate the prompt with the new mode
|
||||||
|
set_zle_mode_info $KEYMAP
|
||||||
|
set_prompt_info
|
||||||
|
|
||||||
|
# Redraw the prompt
|
||||||
|
zle reset-prompt
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
# Finally, run setup to get everything going
|
# Finally, run setup to get everything going
|
||||||
prompt_loquacious_setup "$@"
|
prompt_loquacious_setup "$@"
|
||||||
|
|
30
zshrc
30
zshrc
|
@ -23,6 +23,10 @@ function {
|
||||||
fpath=($myfpath/makers $myfpath $fpath)
|
fpath=($myfpath/makers $myfpath $fpath)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
print_info_sub_noisy 2 "Loading vcs_info module"
|
||||||
|
autoload -Uz vcs_info
|
||||||
|
zstyle ':vcs_info:*' enable git
|
||||||
|
|
||||||
|
|
||||||
print_info_sub_noisy 2 "Configuring prompt: $PROMPT_THEME"
|
print_info_sub_noisy 2 "Configuring prompt: $PROMPT_THEME"
|
||||||
autoload -U promptinit
|
autoload -U promptinit
|
||||||
|
@ -153,29 +157,3 @@ if [ -e $HOME/.zshrc.local ]; then
|
||||||
print_info_noisy 3 "Sourcing local Z Shell settings"
|
print_info_noisy 3 "Sourcing local Z Shell settings"
|
||||||
source $HOME/.zshrc.local
|
source $HOME/.zshrc.local
|
||||||
fi
|
fi
|
||||||
|
|
||||||
function zle_get_mode {
|
|
||||||
case "$KEYMAP" in
|
|
||||||
main|viins)
|
|
||||||
echo "vi-ins"
|
|
||||||
;;
|
|
||||||
vicmd)
|
|
||||||
echo "vi-cmd"
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
}
|
|
||||||
|
|
||||||
function zle_keymap_select {
|
|
||||||
local mode=`zle_get_mode`
|
|
||||||
case "$mode" in
|
|
||||||
vi-ins)
|
|
||||||
RPS1="INSERT"
|
|
||||||
;;
|
|
||||||
vi-cmd)
|
|
||||||
RPS1="COMMAND"
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
zle reset-prompt
|
|
||||||
}
|
|
||||||
|
|
||||||
zle -N zle-keymap-select zle_keymap_select
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue