3 prompt arrows <right|2line> <normal> <prompt> <ssh> <urgent> <comment> <dir> <unwritable>
5 The first parameter determines whether or not to use right-aligned status
6 text, or to put it above the command line.
8 All other parameters are Zsh PROMPT_SUBST color values wrapped in '%F{}'.
10 If 'prompt' or 'ssh' are 'random', their respective value will be
11 procedurally generated using the machine hostname as a seed; if the
12 machine is connected to SSH, the 'prompt' value will be replaced with
16 Defaults are white, green, random, red, blue, yellow, and darkyellow
22 local prompt_arrows_vimode=
24 function prompt_arrows_setup() {
25 prompt_opts=( cr sp percent subst )
28 # XXX: no checks for color terminal or if escapes work, except for echotc
32 n=${2:-white} # Normal
33 p=${3:-green} # Prompt
34 s=${4:-random} # Ssh prompt
36 c=${6:-blue} # Comment
38 u=${8:-darkyellow} # Unwritable
41 # concatenate the numerical values of each letter of the hostname,
42 # moduloing by the number of possible colors.
45 local generated=$(uname -n | od -An -td1 | awk -F' ' \
46 "{for (i=1; i<=NF; i++) {sum+=1; sum*=\$i; sum%=$(echotc Co)} print sum}")
47 [[ $p = random ]] && p=$generated
48 [[ $s = random ]] && s=$generated
50 # use ssh color if connected
51 [[ -v SSH_CLIENT ]] && p=$s
53 local clock="%F{$n}%T%f" dirvcs="%F{$d}"'${vcs_info_msg_0_:-%~}'"%f"
55 local battery=/sys/class/power_supply/BAT0/capacity
56 [[ -e "$battery" ]] && clock+=' $(cat "'"$battery"'")%%'
57 local vicol='%F{${${prompt_arrows_vimode:+'"$r"'}:-'"$c"'}}'
61 PROMPT="%f $hist $clock $dirvcs"$'\n'"%F{$c}>>> "
65 RPROMPT="$dirvcs $clock"
66 PROMPT="%F{$c}>>> $hist"
69 echo "Unknown prompt mode $m"
73 PROMPT="$PROMPT%(1j,%F{$c}%j,)$vicol%#%F{$p}%n%F{$n}@%F{$p}%2m%(?..%F{$n}/%F{$r}\$?)%F{$n}: "
74 POSTEDIT="$(print -P "%F{$n}%f")"
76 zstyle ':vcs_info:git*' formats "%c%u%%F{$p}%r/%b%%F{$n}/%%F{$d}%S%%f"
77 zstyle ':vcs_info:git*' actionformats "%%F{$r}(%a)%f %c%u%%F{$p}%r/%b%f/%%F{$d}%S%f"
78 zstyle ':vcs_info:git*' stagedstr "%F{$c}+"
79 zstyle ':vcs_info:git*' unstagedstr "%F{$r}*"
81 # add-zsh-hook should have already been autoloaded by promptinit
82 add-zsh-hook precmd prompt_arrows_precmd
83 add-zsh-hook preexec prompt_arrows_preexec
84 autoload -Uz add-zle-hook-widget
85 add-zle-hook-widget line-init prompt_arrows_keymap_select
86 add-zle-hook-widget keymap-select prompt_arrows_keymap_select
89 # change color based on zle vi mode
90 function prompt_arrows_keymap_select {
91 prompt_arrows_vimode="${KEYMAP:/(main|viins)/}"
95 function prompt_arrows_precmd {
99 function prompt_arrows_preexec {
100 print -Pn "%F{red}<<<%f "
103 function prompt_arrows_preview {
105 prompt_preview_theme arrows 2line
107 prompt_preview_theme arrows right
110 prompt_preview_theme arrows "$@"
115 prompt_arrows_setup "$@"
116 # vim: set et fenc=utf-8 ft=zsh sts=4 sw=4 ts=8 tw=0 :