]> git.sev.monster Git - dotfiles.git/blame_incremental - base/.zsh/functions/Prompts/prompt_arrows_setup
partially revert zsh refactor, fix zsh conf bugs
[dotfiles.git] / base / .zsh / functions / Prompts / prompt_arrows_setup
... / ...
CommitLineData
1prompt_arrows_help() {
2 cat << EOF
3prompt arrows <right|2line> <normal> <prompt> <ssh> <urgent> <comment> <dir> <unwritable>
4
5The first parameter determines whether or not to use right-aligned status
6text, or to put it above the command line.
7
8All other parameters are Zsh PROMPT_SUBST color values wrapped in '%F{}'.
9
10If 'prompt' or 'ssh' are 'random', their respective value will be
11procedurally generated using the machine hostname as a seed; if the
12machine is connected to SSH, the 'prompt' value will be replaced with
13the 'ssh' value.
14
15
16Defaults are white, green, random, red, blue, yellow, and darkyellow
17respectively.
18
19EOF
20}
21
22local prompt_arrows_vimode=
23
24function prompt_arrows_setup() {
25 # TODO: check for color terminal. never will use B&W term but still a XXX
26 local n p _p s r c d u
27 #TODO remove n?
28 m="${1:-2line}" # Mode
29 n="${2:-white}" # Normal
30 p="${3:-green}" # Prompt
31 s="${4:-random}" # Ssh prompt
32 r="${5:-red}" # uRgent
33 c="${6:-blue}" # Comment
34 d="${7:-yellow}" # Dir
35 u="${8:-darkyellow}" # Unwritable
36
37 # [AC]CURSED COMMAND
38 # concatenate the numerical values of each letter of the hostname,
39 # moduloing by the number of possible colors.
40 generated=$(uname -n | od -An -td1 | awk -F' ' \
41 "{for (i=1; i<=NF; i++) {sum+=1; sum*=\$i; sum%=`echotc Co`} print sum}")
42 [[ "$p" = 'random' ]] && p=$generated
43 [[ "$s" = 'random' ]] && s=$generated
44
45 # use ssh color if connected
46 p="${${SSH_CLIENT+$s}:-$p}"
47
48 local clock="%F{$n}%T%f" dirvcs="%F{$d}"'${vcs_info_msg_0_:-%~}'"%f"
49 local battery=/sys/class/power_supply/BAT0/capacity
50 [[ -e "$battery" ]] && clock+=" `cat $battery`%%"
51 local vicol='%F{${${prompt_arrows_vimode:+'"$r"'}:-'"$c"'}}'
52 case "$m" {
53 2line)
54 PROMPT="%f $clock $dirvcs"$'\n'"%F{$c}>>> "
55 unset RPROMPT
56 ;;
57 right)
58 RPROMPT="$dirvcs $clock"
59 PROMPT="%F{$c}>>> "
60 ;;
61 *)
62 echo "Unknown prompt mode $m"
63 return
64 ;;
65 }
66 PROMPT="$PROMPT%(1j,%F{$c}%j,)$vicol%#%F{$p}%n%F{$n}@%F{$p}%2m%(?..%F{$n}/%F{$r}\$?)%F{$n}: "
67 POSTEDIT="`print -P "%F{$n}%f"`"
68 autoload -Uz vcs_info
69 zstyle ':vcs_info:git*' formats "%c%u%%F{$p}%r/%b%%F{$n}/%%F{$d}%S%%f"
70 zstyle ':vcs_info:git*' actionformats "%%F{$r}(%a)%f %c%u%%F{$p}%r/%b%f/%%F{$d}%S%f"
71 zstyle ':vcs_info:git*' stagedstr "%F{$c}+"
72 zstyle ':vcs_info:git*' unstagedstr "%F{$r}*"
73
74 # add-zsh-hook should have already been autoloaded by promptinit
75 add-zsh-hook precmd prompt_arrows_precmd
76 add-zsh-hook preexec prompt_arrows_preexec
77 autoload -Uz add-zle-hook-widget
78 add-zle-hook-widget line-init prompt_arrows_keymap_select
79 add-zle-hook-widget keymap-select prompt_arrows_keymap_select
80}
81
82# change color based on zle vi mode
83function prompt_arrows_keymap_select {
84 prompt_arrows_vimode="${KEYMAP:/(main|viins)/}"
85 zle reset-prompt
86}
87
88function prompt_arrows_precmd {
89 vcs_info
90}
91
92function prompt_arrows_preexec {
93 print -Pn "%F{red}<<<%f "
94}
95
96prompt_arrows_setup "$@"
97# vim: set et fenc=utf-8 ft=zsh sts=4 sw=4 ts=8 tw=0 :
This page took 0.045401 seconds and 4 git commands to generate.