# Created by thomasba prompt_tba_help () { cat < [ []]] The default colors are white cyan. This theme works best with a dark background. EOH } prompt_tba_setup () { local text_col=${1:-'white'} local parens_col=${2:-'cyan'} local time_col=${3:-'yellow'} local text="%b%F{$text_col}" local parens="%b%F{$parens_col}" local punct="%B%F{black}" local reset="%b%f" local lpar="$parens($text" local rpar="$parens)$text" local time_color="%b%F{$time_col}" local hostname="%B%F{green}" local user_color="%b%F{green}" if [[ "$(id -u)" = "0" ]] ; then user_color="%B%F{red}" fi 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----0000-00-00 00:00----}} 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 2> /dev/null)" 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 40 ]]; then PR_BATTERY=" ${PR_BOLD_YELLOW}B:${BATTPRCNT}%%" else PR_BATTERY=" B:${BATTPRCNT}%%" fi fi IS_SSH_CONN="" if [ -n "$SSH_CONNECTION" ] ; then IS_SSH_CONN=" ${PR_RED}⚡$PR_NO_COLOR " 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 PS1="$parens┌─[ $user_color%n$text@$hostname%m$reset $parens]─($reset$time_color%D{%Y-%m-%d %H:%M}$reset$parens)─→ \ $reset$time_color%\${PR_PWDLEN}<...<%~%<<\ $reset\ $parens├─($reset\${IS_SSH_CONN}$text\${PR_BATTERY}\${SCREEN}\${JOBS}%(?.. ${PR_RED}E:%?$reset)\ \${GITBRANCH} $parens)$reset\ $parens└─[%(!.#.$)]${text} " PS2="$parens└─[$reset $parens%_$reset $parens]──→$reset " PS3="$parens╶─[$text?#$parens]──→$reset " PS4="$parens├──→$reset " prompt_opts=(cr subst percent) } prompt_tba_preview () { local color colors colors=(red yellow green blue magenta) if (( ! $#* )); then for (( i = 1; i <= $#colors; i++ )); do color=$colors[$i] prompt_preview_theme tba $color (( i < $#colors )) && print done else prompt_preview_theme tba "$@" fi } prompt_tba_setup "$@" # Vim: set ft=zsh :