]>
Commit | Line | Data |
---|---|---|
4f471013 | 1 | prompt_arrows_help() { |
fab483dd | 2 | cat << EOF |
4f471013 | 3 | prompt arrows <right|2line> <normal> <prompt> <ssh> <urgent> <comment> <dir> <unwritable> |
fab483dd | 4 | |
5 | The first parameter determines whether or not to use right-aligned status | |
6 | text, or to put it above the command line. | |
7 | ||
325a74cd | 8 | All other parameters are Zsh PROMPT_SUBST color values wrapped in '%F{}'. |
9 | ||
fab483dd | 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 | |
13 | the 'ssh' value. | |
14 | ||
fab483dd | 15 | |
16 | Defaults are white, green, random, red, blue, yellow, and darkyellow | |
17 | respectively. | |
18 | ||
19 | EOF | |
20 | } | |
21 | ||
4f471013 | 22 | local prompt_arrows_vimode= |
fab483dd | 23 | |
4f471013 | 24 | function prompt_arrows_setup() { |
79d4a356 | 25 | prompt_opts=( cr sp percent subst ) |
26 | ||
27 | ||
fab483dd | 28 | # TODO: check for color terminal. never will use B&W term but still a XXX |
79d4a356 | 29 | local m n p s r c d u |
fab483dd | 30 | #TODO remove n? |
79d4a356 | 31 | m=${1:-2line} # Mode |
32 | n=${2:-white} # Normal | |
33 | p=${3:-green} # Prompt | |
34 | s=${4:-random} # Ssh prompt | |
35 | r=${5:-red} # uRgent | |
36 | c=${6:-blue} # Comment | |
37 | d=${7:-yellow} # Dir | |
38 | u=${8:-darkyellow} # Unwritable | |
fab483dd | 39 | |
40 | # [AC]CURSED COMMAND | |
41 | # concatenate the numerical values of each letter of the hostname, | |
42 | # moduloing by the number of possible colors. | |
79d4a356 | 43 | local generated=$(uname -n | od -An -td1 | awk -F' ' \ |
44 | "{for (i=1; i<=NF; i++) {sum+=1; sum*=\$i; sum%=$(echotc Co)} print sum}") | |
45 | [[ $p = random ]] && p=$generated | |
46 | [[ $s = random ]] && s=$generated | |
fab483dd | 47 | |
48 | # use ssh color if connected | |
79d4a356 | 49 | [[ -v SSH_CLIENT ]] && p=$s |
fab483dd | 50 | |
51 | local clock="%F{$n}%T%f" dirvcs="%F{$d}"'${vcs_info_msg_0_:-%~}'"%f" | |
973a2767 | 52 | # XXX: linux only |
fab483dd | 53 | local battery=/sys/class/power_supply/BAT0/capacity |
79d4a356 | 54 | [[ -e "$battery" ]] && clock+=' $(cat $battery)%%' |
4f471013 | 55 | local vicol='%F{${${prompt_arrows_vimode:+'"$r"'}:-'"$c"'}}' |
973a2767 | 56 | local hist="%F{$n}%h" |
fab483dd | 57 | case "$m" { |
58 | 2line) | |
973a2767 | 59 | PROMPT="%f $hist $clock $dirvcs"$'\n'"%F{$c}>>> " |
fab483dd | 60 | unset RPROMPT |
61 | ;; | |
62 | right) | |
63 | RPROMPT="$dirvcs $clock" | |
973a2767 | 64 | PROMPT="%F{$c}>>> $hist" |
fab483dd | 65 | ;; |
66 | *) | |
67 | echo "Unknown prompt mode $m" | |
68 | return | |
69 | ;; | |
70 | } | |
71 | PROMPT="$PROMPT%(1j,%F{$c}%j,)$vicol%#%F{$p}%n%F{$n}@%F{$p}%2m%(?..%F{$n}/%F{$r}\$?)%F{$n}: " | |
79d4a356 | 72 | POSTEDIT="$(print -P "%F{$n}%f")" |
8eb81f95 | 73 | autoload -Uz vcs_info |
fab483dd | 74 | zstyle ':vcs_info:git*' formats "%c%u%%F{$p}%r/%b%%F{$n}/%%F{$d}%S%%f" |
75 | zstyle ':vcs_info:git*' actionformats "%%F{$r}(%a)%f %c%u%%F{$p}%r/%b%f/%%F{$d}%S%f" | |
76 | zstyle ':vcs_info:git*' stagedstr "%F{$c}+" | |
77 | zstyle ':vcs_info:git*' unstagedstr "%F{$r}*" | |
78 | ||
d569f3f7 | 79 | # add-zsh-hook should have already been autoloaded by promptinit |
4f471013 | 80 | add-zsh-hook precmd prompt_arrows_precmd |
81 | add-zsh-hook preexec prompt_arrows_preexec | |
d569f3f7 | 82 | autoload -Uz add-zle-hook-widget |
83 | add-zle-hook-widget line-init prompt_arrows_keymap_select | |
84 | add-zle-hook-widget keymap-select prompt_arrows_keymap_select | |
fab483dd | 85 | } |
86 | ||
87 | # change color based on zle vi mode | |
d569f3f7 | 88 | function prompt_arrows_keymap_select { |
4f471013 | 89 | prompt_arrows_vimode="${KEYMAP:/(main|viins)/}" |
fab483dd | 90 | zle reset-prompt |
91 | } | |
92 | ||
4f471013 | 93 | function prompt_arrows_precmd { |
fab483dd | 94 | vcs_info |
95 | } | |
96 | ||
4f471013 | 97 | function prompt_arrows_preexec { |
116467fd | 98 | print -Pn "%F{red}<<<%f " |
99 | } | |
100 | ||
79d4a356 | 101 | function prompt_arrows_preview { |
102 | if (( ! $#* )); then | |
103 | prompt_preview_theme arrows 2line | |
104 | print '\n' | |
105 | prompt_preview_theme arrows right | |
106 | ||
107 | else | |
108 | prompt_preview_theme arrows "$@" | |
109 | ||
110 | fi | |
111 | } | |
112 | ||
4f471013 | 113 | prompt_arrows_setup "$@" |
8eb81f95 | 114 | # vim: set et fenc=utf-8 ft=zsh sts=4 sw=4 ts=8 tw=0 : |