You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
162 lines
5.1 KiB
162 lines
5.1 KiB
# prompts for zsh
|
|
|
|
setopt ALL_EXPORT
|
|
|
|
autoload colors zsh/terminfo
|
|
|
|
if [[ "$terminfo[colors]" -ge 8 ]]; then
|
|
colors
|
|
fi
|
|
|
|
PR_NO_COLOR="$terminfo[sgr0]"
|
|
|
|
for color in RED GREEN YELLOW BLUE MAGENTA CYAN WHITE BLACK; do
|
|
eval PR_$color='%{$terminfo[bold]$fg[${(L)color}]%}'
|
|
eval PR_LIGHT_$color='%{$fg[${(L)color}]%}'
|
|
eval BG_$color='%{$terminfo[bold]$bg[${(L)color}]%}'
|
|
eval BG_LIGHT_$color='%{$bg[${(L)color}]%}'
|
|
(( count = $count + 1 ))
|
|
done
|
|
PR_NO_COLOR="%{$terminfo[sgr0]%}"
|
|
|
|
PR_USER_COLOR=$PR_CYAN
|
|
if [[ "`whoami`" = "root" ]]; then
|
|
PR_USER_COLOR=$PR_RED
|
|
else
|
|
PR_USER_COLOR=$PR_LIGHT_GREEN
|
|
fi
|
|
|
|
function precmd {
|
|
# let's get the current get branch that we are under
|
|
# ripped from /etc/bash_completion.d/git from the git devs
|
|
git_ps1 () {
|
|
if which git > /dev/null; then
|
|
local g="$(git rev-parse --git-dir 2>/dev/null)"
|
|
if [ -n "$g" ]; then
|
|
local r
|
|
local b
|
|
local date=$(git log --pretty=format:%cd --date=short -n1)
|
|
local v=$(git describe --tags --always)
|
|
if [ -d "$g/rebase-apply" ]; then
|
|
if test -f "$g/rebase-apply/rebasing"; then
|
|
r="|REBASE"
|
|
elif test -f "$g/rebase-apply/applying"; then
|
|
r="|AM"
|
|
else
|
|
r="|AM/REBASE"
|
|
fi
|
|
b="$(git symbolic-ref HEAD 2>/dev/null)"
|
|
elif [ -f "$g/rebase-merge/interactive" ]; then
|
|
r="|REBASE-i"
|
|
b="$(cat "$g/rebase-merge/head-name")"
|
|
elif [ -d "$g/rebase-merge" ]; then
|
|
r="|REBASE-m"
|
|
b="$(cat "$g/rebase-merge/head-name")"
|
|
elif [ -f "$g/MERGE_HEAD" ]; then
|
|
r="|MERGING"
|
|
b="$(git symbolic-ref HEAD 2>/dev/null)"
|
|
else
|
|
if [ -f "$g/BISECT_LOG" ]; then
|
|
r="|BISECTING"
|
|
fi
|
|
if ! b="$(git symbolic-ref HEAD 2>/dev/null)"; then
|
|
if ! b="$(git describe --exact-match HEAD 2>/dev/null)"; then
|
|
b="$(cut -c1-7 "$g/HEAD")..."
|
|
fi
|
|
fi
|
|
fi
|
|
if [ -n "$1" ]; then
|
|
printf "$1·%s·%s" "${b##refs/heads/}$r" "$date" "$v"
|
|
else
|
|
printf "%s·%s·%s" "${b##refs/heads/}$r" "$date" "$v"
|
|
fi
|
|
fi
|
|
else
|
|
printf ""
|
|
fi
|
|
}
|
|
|
|
GITBRANCH="$(git_ps1)"
|
|
if [ -n "$GITBRANCH" ] ; then
|
|
GITBRANCH=" g:$GITBRANCH"
|
|
fi
|
|
|
|
# The following 9 lines of code comes directly from Phil!'s ZSH prompt
|
|
# http://aperiodic.net/phil/prompt/
|
|
local TERMWIDTH
|
|
(( TERMWIDTH = ${COLUMNS} - 1 ))
|
|
|
|
#local PROMPTSIZE=${#${(%):--- %D{%R.%S %a %b %d %Y}\! }}
|
|
local PROMPTSIZE=${#${(%):----%n-%m----%D{%Y-%m-%d %H:%M}----}}
|
|
|
|
local PWDSIZE=${#${(%):-%~}}
|
|
|
|
if [[ "$PROMPTSIZE + $PWDSIZE" -gt $TERMWIDTH ]]; then
|
|
(( PR_PWDLEN = $TERMWIDTH - $PROMPTSIZE ))
|
|
fi
|
|
|
|
# set a simple variable to show when in screen
|
|
if [[ -n "${WINDOW}" ]]; then
|
|
SCREEN=" S:${WINDOW}"
|
|
else
|
|
SCREEN=""
|
|
fi
|
|
|
|
# check if jobs are executing
|
|
if [[ $(jobs | wc -l) -gt 0 ]]; then
|
|
JOBS=" J:%j"
|
|
else
|
|
JOBS=""
|
|
fi
|
|
|
|
# I want to know my battery percentage when running on battery power
|
|
if which acpi &> /dev/null; then
|
|
local BATTSTATE="$(acpi -b)"
|
|
local BATTPRCNT="$(echo ${BATTSTATE[(w)4]}|sed -r 's/(^[0-9]+).*/\1/')"
|
|
if [[ -z "${BATTPRCNT}" ]]; then
|
|
PR_BATTERY=""
|
|
elif [[ "${BATTPRCNT}" -lt 20 ]]; then
|
|
PR_BATTERY="${PR_BOLD_RED}B:${BATTPRCNT}%%"
|
|
elif [[ "${BATTPRCNT}" -lt 50 ]]; then
|
|
PR_BATTERY="${PR_BOLD_YELLOW}B:${BATTPRCNT}%%"
|
|
else
|
|
PR_BATTERY="B:${BATTPRCNT}%%"
|
|
fi
|
|
fi
|
|
}
|
|
|
|
# If I am using vi keys, I want to know what mode I'm currently using.
|
|
# zle-keymap-select is executed every time KEYMAP changes.
|
|
# From http://zshwiki.org/home/examples/zlewidgets
|
|
zle-keymap-select() {
|
|
VIMODE="${${KEYMAP/vicmd/ vim:command}/(main|viins)}"
|
|
RPROMPT2="${PR_BOLD_BLUE}${VIMODE}"
|
|
zle reset-prompt
|
|
}
|
|
|
|
zle -N zle-keymap-select
|
|
|
|
|
|
function setprompt() {
|
|
setopt prompt_subst
|
|
IS_SSH_CONN=""
|
|
if [ -n "$SSH_CONNECTION" ] ; then
|
|
IS_SSH_CONN=" ${PR_RED}⚡$PR_NO_COLOR "
|
|
fi
|
|
PROMPT="$PR_LIGHT_CYAN┌─[ $PR_USER_COLOR%n$PR_WHITE@$PR_GREEN%m$PR_NO_COLOR $PR_LIGHT_CYAN]─($PR_NO_COLOR$PR_LIGHT_YELLOW%D{%Y-%m-%d %H:%M}$PR_NO_COLOR$PR_LIGHT_CYAN)─→ \
|
|
$PR_NO_COLOR$PR_LIGHT_YELLOW%\${PR_PWDLEN}<...<%~%<<\
|
|
$PR_NO_COLOR\
|
|
|
|
$PR_LIGHT_CYAN├─(\${IS_SSH_CONN}$PR_NO_COLOR\${PR_BATTERY}\${SCREEN}\${JOBS}%(?.. ${PR_RED}E:%?${PR_NO_COLOR} )\
|
|
\${GITBRANCH}$PR_LIGHT_CYAN)$PR_NO_COLOR\
|
|
|
|
${PR_LIGHT_CYAN}└─[%(!.#.$)]${PR_NO_COLOR} "
|
|
}
|
|
setprompt
|
|
PS2="$PR_LIGHT_CYAN└─[$PR_NO_COLOR $PR_WHITE%_$PR_NO_COLOR $PR_LIGHT_CYAN]──→$PR_NO_COLOR "
|
|
|
|
PS3="$PR_LIGHT_CYAN╶─[$PR_NO_COLOR?#$PR_LIGHT_CYAN]──→$PR_NO_COLOR "
|
|
PS4="$fg[${cyan}]├──→$terminfo[sgr0] "
|
|
|
|
# vim: ft=zsh :
|