]> git.sev.monster Git - dotfiles.git/blob - base/.zsh/functions/Prompts/prompt_arrows_setup
08f364689082832902ed93eedd0a4e8b7c8bea3d
[dotfiles.git] / base / .zsh / functions / Prompts / prompt_arrows_setup
1 prompt_arrows_help() {
2     cat << EOF
3 prompt arrows <right|2line> <normal> <prompt> <ssh> <urgent> <comment> <dir> <unwritable>
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
8 All other parameters are Zsh PROMPT_SUBST color values wrapped in '%F{}'.
9
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
15
16 Defaults are white, green, random, red, blue, yellow, and darkyellow
17 respectively.
18
19 EOF
20 }
21
22 local prompt_arrows_vimode=
23
24 function 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     # XXX: linux only
50     local battery=/sys/class/power_supply/BAT0/capacity
51     [[ -e "$battery" ]] && clock+=" `cat $battery`%%"
52     local vicol='%F{${${prompt_arrows_vimode:+'"$r"'}:-'"$c"'}}'
53     local hist="%F{$n}%h"
54     case "$m" {
55         2line)
56             PROMPT="%f    $hist $clock $dirvcs"$'\n'"%F{$c}>>> "
57             unset RPROMPT
58             ;;
59         right)
60             RPROMPT="$dirvcs $clock"
61             PROMPT="%F{$c}>>> $hist"
62             ;;
63         *)
64             echo "Unknown prompt mode $m"
65             return
66             ;;
67     }
68     PROMPT="$PROMPT%(1j,%F{$c}%j,)$vicol%#%F{$p}%n%F{$n}@%F{$p}%2m%(?..%F{$n}/%F{$r}\$?)%F{$n}: "
69     POSTEDIT="`print -P "%F{$n}%f"`"
70     autoload -Uz vcs_info
71     zstyle ':vcs_info:git*' formats "%c%u%%F{$p}%r/%b%%F{$n}/%%F{$d}%S%%f"
72     zstyle ':vcs_info:git*' actionformats "%%F{$r}(%a)%f %c%u%%F{$p}%r/%b%f/%%F{$d}%S%f"
73     zstyle ':vcs_info:git*' stagedstr   "%F{$c}+"
74     zstyle ':vcs_info:git*' unstagedstr "%F{$r}*"
75
76     # add-zsh-hook should have already been autoloaded by promptinit
77     add-zsh-hook precmd prompt_arrows_precmd
78     add-zsh-hook preexec prompt_arrows_preexec
79     autoload -Uz add-zle-hook-widget
80     add-zle-hook-widget line-init prompt_arrows_keymap_select
81     add-zle-hook-widget keymap-select prompt_arrows_keymap_select
82 }
83
84 # change color based on zle vi mode
85 function prompt_arrows_keymap_select {
86     prompt_arrows_vimode="${KEYMAP:/(main|viins)/}"
87     zle reset-prompt
88 }
89
90 function prompt_arrows_precmd {
91     vcs_info
92 }
93
94 function prompt_arrows_preexec {
95     print -Pn "%F{red}<<<%f "
96 }
97
98 prompt_arrows_setup "$@"
99 # vim: set et fenc=utf-8 ft=zsh sts=4 sw=4 ts=8 tw=0 :
This page took 0.038109 seconds and 2 git commands to generate.