prompt_arrows_help() { cat << EOF prompt arrows The first parameter determines whether or not to use right-aligned status text, or to put it above the command line. All other parameters are Zsh PROMPT_SUBST color values wrapped in '%F{}'. If 'prompt' or 'ssh' are 'random', their respective value will be procedurally generated using the machine hostname as a seed; if the machine is connected to SSH, the 'prompt' value will be replaced with the 'ssh' value. Defaults are white, green, random, red, blue, yellow, and darkyellow respectively. EOF } 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 #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 # [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 # use ssh color if connected p="${${SSH_CLIENT+$s}:-$p}" local clock="%F{$n}%T%f" dirvcs="%F{$d}"'${vcs_info_msg_0_:-%~}'"%f" local battery=/sys/class/power_supply/BAT0/capacity [[ -e "$battery" ]] && clock+=" `cat $battery`%%" local vicol='%F{${${prompt_arrows_vimode:+'"$r"'}:-'"$c"'}}' case "$m" { 2line) PROMPT="%f $clock $dirvcs"$'\n'"%F{$c}>>> " unset RPROMPT ;; right) RPROMPT="$dirvcs $clock" PROMPT="%F{$c}>>> " ;; *) echo "Unknown prompt mode $m" return ;; } 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"`" 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 precmd prompt_arrows_precmd add-zsh-hook preexec prompt_arrows_preexec zle -N zle-line-init zle -A zle-line-init zle-keymap-select } # change color based on zle vi mode function zle-line-init { prompt_arrows_vimode="${KEYMAP:/(main|viins)/}" zle reset-prompt } function prompt_arrows_precmd { vcs_info } function prompt_arrows_preexec { print -Pn "%F{red}<<<%f " } prompt_arrows_setup "$@" # vim: set et fenc=utf-8 ft=zsh sts=4 sw=4 ts=8 tw=0 :