[prompt] steef: Update it to be customizable

and to have a help and a preview too.

Inspired by #192, and by having (few but) good prompt themes to serve as
starting points for the users to customize or implement their own.

Also removed the colors functions, since we don't need that. We're using
the newer '%F{red}color%f' code instead. (Actually all our themes are)

Closes #245
This commit is contained in:
Eric Nielsen 2018-01-12 16:03:42 -05:00
parent fd9274ea91
commit e9171405cf
1 changed files with 81 additions and 31 deletions

View File

@ -1,8 +1,39 @@
# prompt style and colors based on Steve Losh's Prose theme:
# http://github.com/sjl/oh-my-zsh/blob/master/themes/prose.zsh-theme
# vim:et sts=2 sw=2 ft=zsh
#
# A customizable version of the steeef theme from
# https://github.com/robbyrussell/oh-my-zsh/blob/master/themes/steeef.zsh-theme
#
# Requires the `git-info` zmodule to be included in the .zimrc file.
prompt_steeef_help () {
cat <<EOH
This prompt can be customized with:
prompt steeef [username_color] [hostname_color] [pwd_color] [branch_color]
[unindexed_color] [unindexed_indicator]
[indexed_color] [indexed_indicator]
[untracked_color] [untracked_indicator]
[stashed_color] [stashed_indicator]
The default values for each parameter, for 256-color terminals (or otherwise)
are the following:
1. username color: 135 (or magenta)
2. hostname color: 166 (or yellow)
3. current working directory color: 118 (or green)
4. git branch name color: 81 (or cyan)
5. git unindexed color: 166 (or yellow)
6. git unindexed indicator: ●
7. git indexed color: 118 (or green)
8. git indexed indicator: ●
9. git untracked color: 161 (or red)
10. git untracked indicator: ●
The git stashed color and indicator are not defined by default, and will not be
shown unless defined.
EOH
}
prompt_steeef_git() {
[[ -n ${git_info} ]] && print -n " ${(e)git_info[prompt]}"
}
@ -18,47 +49,66 @@ prompt_steeef_precmd() {
prompt_steeef_setup() {
[[ -n ${VIRTUAL_ENV} ]] && export VIRTUAL_ENV_DISABLE_PROMPT=1
local purple
local orange
local limegreen
local turquoise
local hotpink
local col_user
local col_host
local col_pwd
local col_brnch
local col_unidx
local col_idx
local col_untrk
# use extended color palette if available
if [[ -n ${terminfo[colors]} && ${terminfo[colors]} -ge 256 ]]; then
purple='%F{135}'
orange='%F{166}'
limegreen='%F{118}'
turquoise='%F{81}'
hotpink='%F{161}'
if (( terminfo[colors] >= 256 )); then
col_user="%F{${1:-135}}"
col_host="%F{${2:-166}}"
col_pwd="%F{${3:-118}}"
col_brnch="%F{${4:-81}}"
col_unidx="%F{${5:-166}}"
col_idx="%F{${7:-118}}"
col_untrk="%F{${9:-161}}"
else
purple='%F{magenta}'
orange='%F{yellow}'
limegreen='%F{green}'
turquoise='%F{cyan}'
hotpink='%F{red}'
col_user="%F{${1:-magenta}}"
col_host="%F{${2:-yellow}}"
col_pwd="%F{${3:-green}}"
col_brnch="%F{${4:-cyan}}"
col_unidx="%F{${5:-yellow}}"
col_idx="%F{${7:-green}}"
col_untrk="%F{${9:-red}}"
fi
local ind_unidx=${6:-●}
local ind_idx=${8:-●}
local ind_untrk=${10:-●}
local col_stash=${11:+%F{${11}}}
local ind_stash=${12}
autoload -Uz add-zsh-hook
autoload -Uz colors && colors
autoload -Uz add-zsh-hook && add-zsh-hook precmd prompt_steeef_precmd
prompt_opts=(cr percent sp subst)
add-zsh-hook precmd prompt_steeef_precmd
zstyle ':zim:git-info' verbose 'yes'
zstyle ':zim:git-info:branch' format '%b'
zstyle ':zim:git-info:commit' format '%c'
zstyle ':zim:git-info:action' format "(${limegreen}%s%f)"
zstyle ':zim:git-info:unindexed' format "${orange}●"
zstyle ':zim:git-info:indexed' format "${limegreen}●"
zstyle ':zim:git-info:untracked' format "${hotpink}●"
zstyle ':zim:git-info:action' format "(${col_idx}%s%f)"
zstyle ':zim:git-info:unindexed' format "${col_unidx}${ind_unidx}"
zstyle ':zim:git-info:indexed' format "${col_idx}${ind_idx}"
zstyle ':zim:git-info:untracked' format "${col_untrk}${ind_untrk}"
zstyle ':zim:git-info:stashed' format "${col_stash}${ind_stash}"
zstyle ':zim:git-info:keys' format \
'prompt' "(${turquoise}%b%c%I%i%u%f)%s"
'prompt' "(${col_brnch}%b%c%I%i%u%f%S%f)%s"
PROMPT="
${purple}%n%f at ${orange}%m%f in ${limegreen}%~%f\$(prompt_steeef_git)\$(prompt_steeef_virtualenv)
PS1="
${col_user}%n%f at ${col_host}%m%f in ${col_pwd}%~%f\$(prompt_steeef_git)\$(prompt_steeef_virtualenv)
%(!.#.$) "
RPROMPT=''
RPS1=''
}
prompt_steeef_setup "$@"
prompt_steeef_preview () {
if (( ${#} )); then
prompt_preview_theme steeef "${@}"
else
prompt_preview_theme steeef
print
prompt_preview_theme steeef magenta yellow green cyan magenta '!' green '+' red '?' yellow '$'
fi
}
prompt_steeef_setup "${@}"