Created
April 18, 2016 21:45
-
-
Save stormbeta/f2a5b6dd17e388c884e1719f4244c819 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# | |
# This shell prompt config file was created by promptline.vim | |
# | |
function __promptline_last_exit_code { | |
[[ $last_exit_code -gt 0 ]] || return 1; | |
printf "%s" "$last_exit_code" | |
} | |
function __promptline_ps1 { | |
local slice_prefix slice_empty_prefix slice_joiner slice_suffix is_prompt_empty=1 | |
# section "a" header | |
slice_prefix="${a_bg}${sep}${a_fg}${a_bg}${space}" slice_suffix="$space${a_sep_fg}" slice_joiner="${a_fg}${a_bg}${alt_sep}${space}" slice_empty_prefix="${a_fg}${a_bg}${space}" | |
[ $is_prompt_empty -eq 1 ] && slice_prefix="$slice_empty_prefix" | |
# section "a" slices | |
__promptline_wrapper "$(if [[ -n ${ZSH_VERSION-} ]]; then print %m; elif [[ -n ${FISH_VERSION-} ]]; then hostname -s; else printf "%s" \\h; fi )" "$slice_prefix" "$slice_suffix" && { slice_prefix="$slice_joiner"; is_prompt_empty=0; } | |
# section "b" header | |
slice_prefix="${b_bg}${sep}${b_fg}${b_bg}${space}" slice_suffix="$space${b_sep_fg}" slice_joiner="${b_fg}${b_bg}${alt_sep}${space}" slice_empty_prefix="${b_fg}${b_bg}${space}" | |
[ $is_prompt_empty -eq 1 ] && slice_prefix="$slice_empty_prefix" | |
# section "b" slices | |
__promptline_wrapper "$USER" "$slice_prefix" "$slice_suffix" && { slice_prefix="$slice_joiner"; is_prompt_empty=0; } | |
# section "c" header | |
slice_prefix="${c_bg}${sep}${c_fg}${c_bg}${space}" slice_suffix="$space${c_sep_fg}" slice_joiner="${c_fg}${c_bg}${alt_sep}${space}" slice_empty_prefix="${c_fg}${c_bg}${space}" | |
[ $is_prompt_empty -eq 1 ] && slice_prefix="$slice_empty_prefix" | |
# section "c" slices | |
__promptline_wrapper "$(__promptline_cwd)" "$slice_prefix" "$slice_suffix" && { slice_prefix="$slice_joiner"; is_prompt_empty=0; } | |
# section "y" header | |
slice_prefix="${y_bg}${sep}${y_fg}${y_bg}${space}" slice_suffix="$space${y_sep_fg}" slice_joiner="${y_fg}${y_bg}${alt_sep}${space}" slice_empty_prefix="${y_fg}${y_bg}${space}" | |
[ $is_prompt_empty -eq 1 ] && slice_prefix="$slice_empty_prefix" | |
# section "y" slices | |
__promptline_wrapper "$(__promptline_vcs_branch)" "$slice_prefix" "$slice_suffix" && { slice_prefix="$slice_joiner"; is_prompt_empty=0; } | |
# section "warn" header | |
slice_prefix="${warn_bg}${sep}${warn_fg}${warn_bg}${space}" slice_suffix="$space${warn_sep_fg}" slice_joiner="${warn_fg}${warn_bg}${alt_sep}${space}" slice_empty_prefix="${warn_fg}${warn_bg}${space}" | |
[ $is_prompt_empty -eq 1 ] && slice_prefix="$slice_empty_prefix" | |
# section "warn" slices | |
__promptline_wrapper "$(__promptline_last_exit_code)" "$slice_prefix" "$slice_suffix" && { slice_prefix="$slice_joiner"; is_prompt_empty=0; } | |
# close sections | |
printf "%s" "${reset_bg}${sep}$reset$space" | |
} | |
function __promptline_vcs_branch { | |
local branch | |
local branch_symbol=" " | |
# git | |
if hash git 2>/dev/null; then | |
if branch=$( { git symbolic-ref --quiet HEAD || git rev-parse --short HEAD; } 2>/dev/null ); then | |
branch=${branch##*/} | |
printf "%s" "${branch_symbol}${branch:-unknown}" | |
return | |
fi | |
fi | |
return 1 | |
} | |
function __promptline_cwd { | |
local dir_limit="3" | |
local truncation="⋯" | |
local first_char | |
local part_count=0 | |
local formatted_cwd="" | |
local dir_sep=" " | |
local tilde="~" | |
local cwd="${PWD/#$HOME/$tilde}" | |
# get first char of the path, i.e. tilde or slash | |
[[ -n ${ZSH_VERSION-} ]] && first_char=$cwd[1,1] || first_char=${cwd::1} | |
# remove leading tilde | |
cwd="${cwd#\~}" | |
while [[ "$cwd" == */* && "$cwd" != "/" ]]; do | |
# pop off last part of cwd | |
local part="${cwd##*/}" | |
cwd="${cwd%/*}" | |
formatted_cwd="$dir_sep$part$formatted_cwd" | |
part_count=$((part_count+1)) | |
[[ $part_count -eq $dir_limit ]] && first_char="$truncation" && break | |
done | |
printf "%s" "$first_char$formatted_cwd" | |
} | |
function __promptline_left_prompt { | |
local slice_prefix slice_empty_prefix slice_joiner slice_suffix is_prompt_empty=1 | |
# section "a" header | |
slice_prefix="${a_bg}${sep}${a_fg}${a_bg}${space}" slice_suffix="$space${a_sep_fg}" slice_joiner="${a_fg}${a_bg}${alt_sep}${space}" slice_empty_prefix="${a_fg}${a_bg}${space}" | |
[ $is_prompt_empty -eq 1 ] && slice_prefix="$slice_empty_prefix" | |
# section "a" slices | |
__promptline_wrapper "$(if [[ -n ${ZSH_VERSION-} ]]; then print %m; elif [[ -n ${FISH_VERSION-} ]]; then hostname -s; else printf "%s" \\h; fi )" "$slice_prefix" "$slice_suffix" && { slice_prefix="$slice_joiner"; is_prompt_empty=0; } | |
# section "b" header | |
slice_prefix="${b_bg}${sep}${b_fg}${b_bg}${space}" slice_suffix="$space${b_sep_fg}" slice_joiner="${b_fg}${b_bg}${alt_sep}${space}" slice_empty_prefix="${b_fg}${b_bg}${space}" | |
[ $is_prompt_empty -eq 1 ] && slice_prefix="$slice_empty_prefix" | |
# section "b" slices | |
__promptline_wrapper "$USER" "$slice_prefix" "$slice_suffix" && { slice_prefix="$slice_joiner"; is_prompt_empty=0; } | |
# section "c" header | |
slice_prefix="${c_bg}${sep}${c_fg}${c_bg}${space}" slice_suffix="$space${c_sep_fg}" slice_joiner="${c_fg}${c_bg}${alt_sep}${space}" slice_empty_prefix="${c_fg}${c_bg}${space}" | |
[ $is_prompt_empty -eq 1 ] && slice_prefix="$slice_empty_prefix" | |
# section "c" slices | |
__promptline_wrapper "$(__promptline_cwd)" "$slice_prefix" "$slice_suffix" && { slice_prefix="$slice_joiner"; is_prompt_empty=0; } | |
# close sections | |
printf "%s" "${reset_bg}${sep}$reset$space" | |
} | |
function __promptline_wrapper { | |
# wrap the text in $1 with $2 and $3, only if $1 is not empty | |
# $2 and $3 typically contain non-content-text, like color escape codes and separators | |
[[ -n "$1" ]] || return 1 | |
printf "%s" "${2}${1}${3}" | |
} | |
function __promptline_right_prompt { | |
local slice_prefix slice_empty_prefix slice_joiner slice_suffix | |
# section "warn" header | |
slice_prefix="${warn_sep_fg}${rsep}${warn_fg}${warn_bg}${space}" slice_suffix="$space${warn_sep_fg}" slice_joiner="${warn_fg}${warn_bg}${alt_rsep}${space}" slice_empty_prefix="" | |
# section "warn" slices | |
__promptline_wrapper "$(__promptline_last_exit_code)" "$slice_prefix" "$slice_suffix" && { slice_prefix="$slice_joiner"; } | |
# section "y" header | |
slice_prefix="${y_sep_fg}${rsep}${y_fg}${y_bg}${space}" slice_suffix="$space${y_sep_fg}" slice_joiner="${y_fg}${y_bg}${alt_rsep}${space}" slice_empty_prefix="" | |
# section "y" slices | |
__promptline_wrapper "$(__promptline_vcs_branch)" "$slice_prefix" "$slice_suffix" && { slice_prefix="$slice_joiner"; } | |
# close sections | |
printf "%s" "$reset" | |
} | |
function __promptline { | |
local last_exit_code="${PROMPTLINE_LAST_EXIT_CODE:-$?}" | |
local esc=$'[' end_esc=m | |
if [[ -n ${ZSH_VERSION-} ]]; then | |
local noprint='%{' end_noprint='%}' | |
elif [[ -n ${FISH_VERSION-} ]]; then | |
local noprint='' end_noprint='' | |
else | |
local noprint='\[' end_noprint='\]' | |
fi | |
local wrap="$noprint$esc" end_wrap="$end_esc$end_noprint" | |
local space=" " | |
local sep="" | |
local rsep="" | |
local alt_sep="" | |
local alt_rsep="" | |
local reset="${wrap}0${end_wrap}" | |
local reset_bg="${wrap}49${end_wrap}" | |
local a_fg="${wrap}38;5;15${end_wrap}" | |
local a_bg="${wrap}48;5;14${end_wrap}" | |
local a_sep_fg="${wrap}38;5;14${end_wrap}" | |
local b_fg="${wrap}38;5;7${end_wrap}" | |
local b_bg="${wrap}48;5;11${end_wrap}" | |
local b_sep_fg="${wrap}38;5;11${end_wrap}" | |
local c_fg="${wrap}38;5;10${end_wrap}" | |
local c_bg="${wrap}48;5;0${end_wrap}" | |
local c_sep_fg="${wrap}38;5;0${end_wrap}" | |
local warn_fg="${wrap}38;5;15${end_wrap}" | |
local warn_bg="${wrap}48;5;9${end_wrap}" | |
local warn_sep_fg="${wrap}38;5;9${end_wrap}" | |
local y_fg="${wrap}38;5;7${end_wrap}" | |
local y_bg="${wrap}48;5;11${end_wrap}" | |
local y_sep_fg="${wrap}38;5;11${end_wrap}" | |
if [[ -n ${ZSH_VERSION-} ]]; then | |
PROMPT="$(__promptline_left_prompt)" | |
RPROMPT="$(__promptline_right_prompt)" | |
elif [[ -n ${FISH_VERSION-} ]]; then | |
if [[ -n "$1" ]]; then | |
[[ "$1" = "left" ]] && __promptline_left_prompt || __promptline_right_prompt | |
else | |
__promptline_ps1 | |
fi | |
else | |
PS1="$(__promptline_ps1)\n" | |
fi | |
} | |
if [[ -n ${ZSH_VERSION-} ]]; then | |
if [[ ! ${precmd_functions[(r)__promptline]} == __promptline ]]; then | |
precmd_functions+=(__promptline) | |
fi | |
elif [[ -n ${FISH_VERSION-} ]]; then | |
__promptline "$1" | |
else | |
if [[ ! "$PROMPT_COMMAND" == *__promptline* ]]; then | |
PROMPT_COMMAND='__promptline;'$'\n'"$PROMPT_COMMAND" | |
fi | |
fi |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment