]> git.sev.monster Git - dotfiles.git/blame - etc/zsh/functions/Prompts/prompt_arrows_setup
Revert "replace modeline with editorconfig; small fixes"
[dotfiles.git] / etc / zsh / functions / Prompts / prompt_arrows_setup
CommitLineData
e69caf64 1#!/bin/zsh
2
4f471013 3prompt_arrows_help() {
fab483dd 4 cat << EOF
4f471013 5prompt arrows <right|2line> <normal> <prompt> <ssh> <urgent> <comment> <dir> <unwritable>
fab483dd 6
7The first parameter determines whether or not to use right-aligned status
8text, or to put it above the command line.
9
325a74cd 10All other parameters are Zsh PROMPT_SUBST color values wrapped in '%F{}'.
11
fab483dd 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
fab483dd 17
18Defaults are white, green, random, red, blue, yellow, and darkyellow
19respectively.
20
21EOF
22}
23
4f471013 24local prompt_arrows_vimode=
fab483dd 25
4f471013 26function prompt_arrows_setup() {
79d4a356 27 prompt_opts=( cr sp percent subst )
28
29
833b2af3 30 # XXX: no checks for color terminal or if escapes work, except for echotc
79d4a356 31 local m n p s r c d u
8d4a98e1 32 #TODO: remove n?
79d4a356 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
fab483dd 41
42 # [AC]CURSED COMMAND
43 # concatenate the numerical values of each letter of the hostname,
44 # moduloing by the number of possible colors.
833b2af3 45 x=$(echotc Co)
46 [[ -z $x ]] && x=8
79d4a356 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
fab483dd 51
52 # use ssh color if connected
79d4a356 53 [[ -v SSH_CLIENT ]] && p=$s
fab483dd 54
55 local clock="%F{$n}%T%f" dirvcs="%F{$d}"'${vcs_info_msg_0_:-%~}'"%f"
973a2767 56 # XXX: linux only
fab483dd 57 local battery=/sys/class/power_supply/BAT0/capacity
8b2d206d 58 [[ -e "$battery" ]] && clock+=' $(cat "'"$battery"'")%%'
4f471013 59 local vicol='%F{${${prompt_arrows_vimode:+'"$r"'}:-'"$c"'}}'
973a2767 60 local hist="%F{$n}%h"
fab483dd 61 case "$m" {
62 2line)
973a2767 63 PROMPT="%f $hist $clock $dirvcs"$'\n'"%F{$c}>>> "
fab483dd 64 unset RPROMPT
65 ;;
66 right)
67 RPROMPT="$dirvcs $clock"
973a2767 68 PROMPT="%F{$c}>>> $hist"
fab483dd 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}: "
79d4a356 76 POSTEDIT="$(print -P "%F{$n}%f")"
8eb81f95 77 autoload -Uz vcs_info
fab483dd 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
d569f3f7 83 # add-zsh-hook should have already been autoloaded by promptinit
4f471013 84 add-zsh-hook precmd prompt_arrows_precmd
d569f3f7 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
fab483dd 88}
89
90# change color based on zle vi mode
d569f3f7 91function prompt_arrows_keymap_select {
4f471013 92 prompt_arrows_vimode="${KEYMAP:/(main|viins)/}"
fab483dd 93 zle reset-prompt
94}
95
4f471013 96function prompt_arrows_precmd {
fab483dd 97 vcs_info
98}
99
79d4a356 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
4f471013 112prompt_arrows_setup "$@"
This page took 0.060037 seconds and 4 git commands to generate.