local prompt_arrows_vimode=
function prompt_arrows_setup() {
- # TODO: check for color terminal. never will use B&W term but still a XXX
- local n p _p s r c d u
+ prompt_opts=( cr sp percent subst )
+
+
+ # XXX: no checks for color terminal or if escapes work, except for echotc
+ local m n p s r c d u
#TODO remove n?
- m="${1:-2line}" # Mode
- n="${2:-white}" # Normal
- p="${3:-green}" # Prompt
- s="${4:-random}" # Ssh prompt
- r="${5:-red}" # uRgent
- c="${6:-blue}" # Comment
- d="${7:-yellow}" # Dir
- u="${8:-darkyellow}" # Unwritable
+ m=${1:-2line} # Mode
+ n=${2:-white} # Normal
+ p=${3:-green} # Prompt
+ s=${4:-random} # Ssh prompt
+ r=${5:-red} # uRgent
+ c=${6:-blue} # Comment
+ d=${7:-yellow} # Dir
+ u=${8:-darkyellow} # Unwritable
# [AC]CURSED COMMAND
# concatenate the numerical values of each letter of the hostname,
# moduloing by the number of possible colors.
- generated=$(uname -n | od -An -td1 | awk -F' ' \
- "{for (i=1; i<=NF; i++) {sum+=1; sum*=\$i; sum%=`echotc Co`} print sum}")
- [[ "$p" = 'random' ]] && p=$generated
- [[ "$s" = 'random' ]] && s=$generated
+ x=$(echotc Co)
+ [[ -z $x ]] && x=8
+ local generated=$(uname -n | od -An -td1 | awk -F' ' \
+ "{for (i=1; i<=NF; i++) {sum+=1; sum*=\$i; sum%=$(echotc Co)} print sum}")
+ [[ $p = random ]] && p=$generated
+ [[ $s = random ]] && s=$generated
# use ssh color if connected
- p="${${SSH_CLIENT+$s}:-$p}"
+ [[ -v SSH_CLIENT ]] && p=$s
local clock="%F{$n}%T%f" dirvcs="%F{$d}"'${vcs_info_msg_0_:-%~}'"%f"
+ # XXX: linux only
local battery=/sys/class/power_supply/BAT0/capacity
- [[ -e "$battery" ]] && clock+=" `cat $battery`%%"
+ [[ -e "$battery" ]] && clock+=' $(cat $battery)%%'
local vicol='%F{${${prompt_arrows_vimode:+'"$r"'}:-'"$c"'}}'
+ local hist="%F{$n}%h"
case "$m" {
2line)
- PROMPT="%f $clock $dirvcs"$'\n'"%F{$c}>>> "
+ PROMPT="%f $hist $clock $dirvcs"$'\n'"%F{$c}>>> "
unset RPROMPT
;;
right)
RPROMPT="$dirvcs $clock"
- PROMPT="%F{$c}>>> "
+ PROMPT="%F{$c}>>> $hist"
;;
*)
echo "Unknown prompt mode $m"
;;
}
PROMPT="$PROMPT%(1j,%F{$c}%j,)$vicol%#%F{$p}%n%F{$n}@%F{$p}%2m%(?..%F{$n}/%F{$r}\$?)%F{$n}: "
- POSTEDIT="`print -P "%F{$n}%f"`"
+ POSTEDIT="$(print -P "%F{$n}%f")"
autoload -Uz vcs_info
zstyle ':vcs_info:git*' formats "%c%u%%F{$p}%r/%b%%F{$n}/%%F{$d}%S%%f"
zstyle ':vcs_info:git*' actionformats "%%F{$r}(%a)%f %c%u%%F{$p}%r/%b%f/%%F{$d}%S%f"
zstyle ':vcs_info:git*' stagedstr "%F{$c}+"
zstyle ':vcs_info:git*' unstagedstr "%F{$r}*"
+ # add-zsh-hook should have already been autoloaded by promptinit
add-zsh-hook precmd prompt_arrows_precmd
add-zsh-hook preexec prompt_arrows_preexec
- zle -N zle-line-init
- zle -A zle-line-init zle-keymap-select
+ autoload -Uz add-zle-hook-widget
+ add-zle-hook-widget line-init prompt_arrows_keymap_select
+ add-zle-hook-widget keymap-select prompt_arrows_keymap_select
}
# change color based on zle vi mode
-function zle-line-init {
+function prompt_arrows_keymap_select {
prompt_arrows_vimode="${KEYMAP:/(main|viins)/}"
zle reset-prompt
}
print -Pn "%F{red}<<<%f "
}
+function prompt_arrows_preview {
+ if (( ! $#* )); then
+ prompt_preview_theme arrows 2line
+ print '\n'
+ prompt_preview_theme arrows right
+ print
+ else
+ prompt_preview_theme arrows "$@"
+ print
+ fi
+}
+
prompt_arrows_setup "$@"
# vim: set et fenc=utf-8 ft=zsh sts=4 sw=4 ts=8 tw=0 :