]> git.sev.monster Git - dotfiles.git/blame_incremental - etc/zsh/functions/Prompts/prompt_arrows_setup
vimrc: enable modeline explicitly
[dotfiles.git] / etc / zsh / functions / Prompts / prompt_arrows_setup
... / ...
CommitLineData
1#!/bin/zsh
2
3prompt_arrows_help() {
4 cat << EOF
5prompt arrows <right|2line> <normal> <prompt> <ssh> <urgent> <comment> <dir> <unwritable>
6
7The first parameter determines whether or not to use right-aligned status
8text, or to put it above the command line.
9
10All other parameters are Zsh PROMPT_SUBST color values wrapped in '%F{}'.
11
12If 'prompt' or 'ssh' are 'random', their respective value will be
13procedurally generated using the machine hostname as a seed; if the
14machine is connected to SSH, the 'prompt' value will be replaced with
15the 'ssh' value.
16
17
18Defaults are white, green, random, red, blue, yellow, and darkyellow
19respectively.
20
21EOF
22}
23
24local prompt_arrows_vimode=
25
26function prompt_arrows_setup() {
27 prompt_opts=( cr sp percent subst )
28
29
30 # XXX: no checks for color terminal or if escapes work, except for echotc
31 local m n p s r c d u
32 #TODO: remove n?
33 m=${1:-2line} # Mode
34 n=${2:-white} # Normal
35 p=${3:-green} # Prompt
36 s=${4:-random} # Ssh prompt
37 r=${5:-red} # uRgent
38 c=${6:-blue} # Comment
39 d=${7:-yellow} # Dir
40 u=${8:-darkyellow} # Unwritable
41
42 # [AC]CURSED COMMAND
43 # concatenate the numerical values of each letter of the hostname,
44 # moduloing by the number of possible colors.
45 x=$(echotc Co)
46 [[ -z $x ]] && x=8
47 local generated=$(uname -n | od -An -td1 | awk -F' ' \
48 "{for (i=1; i<=NF; i++) {sum+=1; sum*=\$i; sum%=$(echotc Co)} print sum}")
49 [[ $p = random ]] && p=$generated
50 [[ $s = random ]] && s=$generated
51
52 # use ssh color if connected
53 [[ -v SSH_CLIENT ]] && p=$s
54
55 local clock="%F{$n}%T%f" dirvcs="%F{$d}"'${vcs_info_msg_0_:-%~}'"%f"
56 # XXX: linux only
57 local battery=/sys/class/power_supply/BAT0/capacity
58 [[ -e "$battery" ]] && clock+=' $(cat "'"$battery"'")%%'
59 local vicol='%F{${${prompt_arrows_vimode:+'"$r"'}:-'"$c"'}}'
60 local hist="%F{$n}%h"
61 case "$m" {
62 2line)
63 PROMPT="%f $hist $clock $dirvcs"$'\n'"%F{$c}>>> "
64 unset RPROMPT
65 ;;
66 right)
67 RPROMPT="$dirvcs $clock"
68 PROMPT="%F{$c}>>> $hist"
69 ;;
70 *)
71 echo -E "Unknown prompt mode $m"
72 return
73 ;;
74 }
75 PROMPT="$PROMPT%(1j,%F{$c}%j,)$vicol%#%F{$p}%n%F{$n}@%F{$p}%2m%(?..%F{$n}/%F{$r}%?)%F{$n}: "
76 POSTEDIT="$(print -P "%F{$n}%f")"
77 autoload -Uz vcs_info
78 zstyle ':vcs_info:git*' get-revision true
79 local gitformat="%c%u%F{$p}%r%F{$n} %F{$c}%7.7i%F{$n}:%F{$p}%b%F{$n} %F{$d}%S%f"
80 zstyle ':vcs_info:git*' formats $gitformat
81 zstyle ':vcs_info:git*' get-unapplied true
82 local patchformat=' %n/%a'
83 zstyle ':vcs_info:git*' patch-format $patchformat
84 zstyle ':vcs_info:git*' nopatch-format $patchformat
85 zstyle ':vcs_info:git*+post-backend:*' hooks prompt_arrows_revertfix
86 zstyle ':vcs_info:git*' actionformats "%F{$r}(%a%m)%f $gitformat"
87 zstyle ':vcs_info:git*' stagedstr "%F{$c}+"
88 zstyle ':vcs_info:git*' unstagedstr "%F{$r}!"
89
90 # add-zsh-hook should have already been autoloaded by promptinit
91 add-zsh-hook precmd prompt_arrows_precmd
92 autoload -Uz add-zle-hook-widget
93 add-zle-hook-widget line-init prompt_arrows_keymap_select
94 add-zle-hook-widget keymap-select prompt_arrows_keymap_select
95}
96
97# change color based on zle vi mode
98function prompt_arrows_keymap_select {
99 prompt_arrows_vimode="${KEYMAP:/(main|viins)/}"
100 zle reset-prompt
101}
102
103function prompt_arrows_precmd {
104 vcs_info
105}
106
107function prompt_arrows_preview {
108 if (( ! $#* )); then
109 prompt_preview_theme arrows 2line
110 print '\n'
111 prompt_preview_theme arrows right
112 print
113 else
114 prompt_preview_theme arrows "$@"
115 print
116 fi
117}
118
119function +vi-prompt_arrows_revertfix() {
120 [[ -f "$gitdir/REVERT_HEAD" ]] && hook_com[action]=revert
121}
122
123prompt_arrows_setup "$@"
This page took 0.030363 seconds and 4 git commands to generate.