]> git.sev.monster Git - dotfiles.git/blame_incremental - base/.zsh/functions/Prompts/prompt_arrows_setup
in development
[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 prompt_opts=( cr sp percent subst )
26
27
28 # TODO: check for color terminal. never will use B&W term but still a XXX
29 local m n p s r c d u
30 #TODO remove n?
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
39
40 # [AC]CURSED COMMAND
41 # concatenate the numerical values of each letter of the hostname,
42 # moduloing by the number of possible colors.
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
47
48 # use ssh color if connected
49 [[ -v SSH_CLIENT ]] && p=$s
50
51 local clock="%F{$n}%T%f" dirvcs="%F{$d}"'${vcs_info_msg_0_:-%~}'"%f"
52 # XXX: linux only
53 local battery=/sys/class/power_supply/BAT0/capacity
54 [[ -e "$battery" ]] && clock+=' $(cat $battery)%%'
55 local vicol='%F{${${prompt_arrows_vimode:+'"$r"'}:-'"$c"'}}'
56 local hist="%F{$n}%h"
57 case "$m" {
58 2line)
59 PROMPT="%f $hist $clock $dirvcs"$'\n'"%F{$c}>>> "
60 unset RPROMPT
61 ;;
62 right)
63 RPROMPT="$dirvcs $clock"
64 PROMPT="%F{$c}>>> $hist"
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}: "
72 POSTEDIT="$(print -P "%F{$n}%f")"
73 autoload -Uz vcs_info
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
79 # add-zsh-hook should have already been autoloaded by promptinit
80 add-zsh-hook precmd prompt_arrows_precmd
81 add-zsh-hook preexec prompt_arrows_preexec
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
85}
86
87# change color based on zle vi mode
88function prompt_arrows_keymap_select {
89 prompt_arrows_vimode="${KEYMAP:/(main|viins)/}"
90 zle reset-prompt
91}
92
93function prompt_arrows_precmd {
94 vcs_info
95}
96
97function prompt_arrows_preexec {
98 print -Pn "%F{red}<<<%f "
99}
100
101function prompt_arrows_preview {
102 if (( ! $#* )); then
103 prompt_preview_theme arrows 2line
104 print '\n'
105 prompt_preview_theme arrows right
106 print
107 else
108 prompt_preview_theme arrows "$@"
109 print
110 fi
111}
112
113prompt_arrows_setup "$@"
114# vim: set et fenc=utf-8 ft=zsh sts=4 sw=4 ts=8 tw=0 :
This page took 0.031427 seconds and 4 git commands to generate.