]> git.sev.monster Git - dotfiles.git/blame_incremental - etc/zsh/functions/Prompts/prompt_arrows_setup
Revert "replace modeline with editorconfig; small fixes"
[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 "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*' formats "%c%u%%F{$p}%r/%b%%F{$n}/%%F{$d}%S%%f"
79 zstyle ':vcs_info:git*' actionformats "%%F{$r}(%a)%f %c%u%%F{$p}%r/%b%f/%%F{$d}%S%f"
80 zstyle ':vcs_info:git*' stagedstr "%F{$c}+"
81 zstyle ':vcs_info:git*' unstagedstr "%F{$r}*"
82
83 # add-zsh-hook should have already been autoloaded by promptinit
84 add-zsh-hook precmd prompt_arrows_precmd
85 autoload -Uz add-zle-hook-widget
86 add-zle-hook-widget line-init prompt_arrows_keymap_select
87 add-zle-hook-widget keymap-select prompt_arrows_keymap_select
88}
89
90# change color based on zle vi mode
91function prompt_arrows_keymap_select {
92 prompt_arrows_vimode="${KEYMAP:/(main|viins)/}"
93 zle reset-prompt
94}
95
96function prompt_arrows_precmd {
97 vcs_info
98}
99
100function prompt_arrows_preview {
101 if (( ! $#* )); then
102 prompt_preview_theme arrows 2line
103 print '\n'
104 prompt_preview_theme arrows right
105 print
106 else
107 prompt_preview_theme arrows "$@"
108 print
109 fi
110}
111
112prompt_arrows_setup "$@"
This page took 0.038976 seconds and 4 git commands to generate.