lp-jolly/dotmatrix.theme

1081 lines
43 KiB
Text
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

########################################################################
# API
########################################################################
_lp_dotmatrix_theme_activate() {
LP_ENABLE_VCS_DIFFSTATS=${LP_ENABLE_UNCOMMITED:-0}
DOTMATRIX_DISPLAY_TEXT=${DOTMATRIX_DISPLAY_TEXT:-"T"}
DOTMATRIX_DISPLAY_X11=${DOTMATRIX_DISPLAY_X11:-"X"}
DOTMATRIX_HOST_LOCAL=${DOTMATRIX_HOST_LOCAL:-"⌂"}
DOTMATRIX_MARK_STASH=${DOTMATRIX_MARK_STASH:-"✝"}
DOTMATRIX_MARK_UNTRACKED=${DOTMATRIX_MARK_UNTRACKED:-"?"} # ⛶
DOTMATRIX_DIFF=${DOTMATRIX_DIFF:-"≠"}
DOTMATRIX_ENABLE_GRADIENT_LINE=${DOTMATRIX_ENABLE_GRADIENT_LINE:-0}
# Sets of characters
DOTMATRIX_VARIANT=${DOTMATRIX_VARIANT:-"dotmatrix"}
if [[ "${DOTMATRIX_VARIANT}" == "dotmatrix" ]] ; then
DOTMATRIX_SPACED=${DOTMATRIX_SPACED:-1}
# Dotmatrix theme
DOTMATRIX_HOST_LOCAL=${DOTMATRIX_HOST_LOCAL:-"⌂"}
DOTMATRIX_USER_LOCAL=${DOTMATRIX_USER_LOCAL:-"♟"}
DOTMATRIX_VCS=${DOTMATRIX_VCS:-"╟┘"}
DOTMATRIX_MARK=${DOTMATRIX_MARK:-"■"}
DOTMATRIX_LINE=${DOTMATRIX_LINE:-"━"}
DOTMATRIX_PLUG=${DOTMATRIX_PLUG:-"▛"}
DOTMATRIX_SOFT=${DOTMATRIX_SOFT:-""}
DOTMATRIX_MEAN=${DOTMATRIX_MEAN:-"▞"}
# Separator arrays (left center right
DOTMATRIX_LINK=( ${DOTMATRIX_LINK[@]+"${DOTMATRIX_LINK[@]}"} )
[[ ${#DOTMATRIX_LINK[@]} == 0 ]] && DOTMATRIX_LINK=("▙" " " "▜")
DOTMATRIX_OPEN=( ${DOTMATRIX_OPEN[@]+"${DOTMATRIX_OPEN[@]}"} )
[[ ${#DOTMATRIX_OPEN[@]} == 0 ]] && DOTMATRIX_OPEN=("▙" " ▚ " "▜")
DOTMATRIX_DANG=( ${DOTMATRIX_DANG[@]+"${DOTMATRIX_DANG[@]}"} )
[[ ${#DOTMATRIX_DANG[@]} == 0 ]] && DOTMATRIX_DANG=("▙" " □ " "▜")
DOTMATRIX_ENDS=( ${DOTMATRIX_ENDS[@]+"${DOTMATRIX_ENDS[@]}"} )
[[ ${#DOTMATRIX_ENDS[@]} == 0 ]] && DOTMATRIX_ENDS=("▛" "▞▗ ▝" "▖ ▘▞▟")
DOTMATRIX_ITEMS=( ${DOTMATRIX_ITEMS[@]+"${DOTMATRIX_ITEMS[@]}"} )
[[ ${#DOTMATRIX_ITEMS[@]} == 0 ]] && DOTMATRIX_ITEMS=("┫" "┃" "┣")
elif [[ "${DOTMATRIX_VARIANT}" == "text" ]] ; then
DOTMATRIX_SPACED=${DOTMATRIX_SPACED:-0}
# Dotmatrix theme
DOTMATRIX_HOST_LOCAL=${DOTMATRIX_HOST_LOCAL:-"lcl"}
DOTMATRIX_USER_LOCAL=${DOTMATRIX_USER_LOCAL:-"me"}
DOTMATRIX_VCS=${DOTMATRIX_VCS:-"VCS"}
DOTMATRIX_MARK=${DOTMATRIX_MARK:-">"}
DOTMATRIX_LINE=${DOTMATRIX_LINE:-"━"}
DOTMATRIX_PLUG=${DOTMATRIX_PLUG:-"▌"}
DOTMATRIX_SOFT=${DOTMATRIX_SOFT:-""}
DOTMATRIX_MEAN=${DOTMATRIX_MEAN:-"┃"}
# Separator arrays (left center right
DOTMATRIX_LINK=( ${DOTMATRIX_LINK[@]+"${DOTMATRIX_LINK[@]}"} )
[[ ${#DOTMATRIX_LINK[@]} == 0 ]] && DOTMATRIX_LINK=("▌" "<" "▐")
DOTMATRIX_OPEN=( ${DOTMATRIX_OPEN[@]+"${DOTMATRIX_OPEN[@]}"} )
[[ ${#DOTMATRIX_OPEN[@]} == 0 ]] && DOTMATRIX_OPEN=("▌" "<<" "▐")
DOTMATRIX_DANG=( ${DOTMATRIX_DANG[@]+"${DOTMATRIX_DANG[@]}"} )
[[ ${#DOTMATRIX_DANG[@]} == 0 ]] && DOTMATRIX_DANG=("▌" "<<<" "▐")
DOTMATRIX_ENDS=( ${DOTMATRIX_ENDS[@]+"${DOTMATRIX_ENDS[@]}"} )
[[ ${#DOTMATRIX_ENDS[@]} == 0 ]] && DOTMATRIX_ENDS=("▌" "···" "···▐")
DOTMATRIX_ITEMS=( ${DOTMATRIX_ITEMS[@]+"${DOTMATRIX_ITEMS[@]}"} )
[[ ${#DOTMATRIX_ITEMS[@]} == 0 ]] && DOTMATRIX_ITEMS=("┫" "┃" "┣")
elif [[ "${DOTMATRIX_VARIANT}" == "chevron" ]] ; then
DOTMATRIX_SPACED=${DOTMATRIX_SPACED:-1}
# Powerline chevron theme
DOTMATRIX_HOST_LOCAL=${DOTMATRIX_HOST_LOCAL:-""}
DOTMATRIX_USER_LOCAL=${DOTMATRIX_USER_LOCAL:-""}
DOTMATRIX_VCS=${DOTMATRIX_VCS:-""}
DOTMATRIX_MARK=${DOTMATRIX_MARK:-""}
DOTMATRIX_LINE=${DOTMATRIX_LINE:-"━"}
DOTMATRIX_PLUG=${DOTMATRIX_PLUG:-""}
DOTMATRIX_SOFT=${DOTMATRIX_SOFT:-""}
DOTMATRIX_MEAN=${DOTMATRIX_MEAN:-""}
DOTMATRIX_LINK=( ${DOTMATRIX_LINK[@]+"${DOTMATRIX_LINK[@]}"} )
[[ ${#DOTMATRIX_LINK[@]} == 0 ]] && DOTMATRIX_LINK=("" "" "")
DOTMATRIX_OPEN=( ${DOTMATRIX_OPEN[@]+"${DOTMATRIX_OPEN[@]}"} )
[[ ${#DOTMATRIX_OPEN[@]} == 0 ]] && DOTMATRIX_OPEN=("" "" "")
DOTMATRIX_DANG=( ${DOTMATRIX_DANG[@]+"${DOTMATRIX_DANG[@]}"} )
[[ ${#DOTMATRIX_DANG[@]} == 0 ]] && DOTMATRIX_DANG=("" "" "")
DOTMATRIX_ENDS=( ${DOTMATRIX_ENDS[@]+"${DOTMATRIX_ENDS[@]}"} )
[[ ${#DOTMATRIX_ENDS[@]} == 0 ]] && DOTMATRIX_ENDS=("" "" "")
DOTMATRIX_ITEMS=( ${DOTMATRIX_ITEMS[@]+"${DOTMATRIX_ITEMS[@]}"} )
[[ ${#DOTMATRIX_ITEMS[@]} == 0 ]] && DOTMATRIX_ITEMS=("" "┃" "")
elif [[ "${DOTMATRIX_VARIANT}" == "round" ]] ; then
DOTMATRIX_SPACED=${DOTMATRIX_SPACED:-1}
# Powerline round theme
DOTMATRIX_HOST_LOCAL=${DOTMATRIX_HOST_LOCAL:-""}
DOTMATRIX_USER_LOCAL=${DOTMATRIX_USER_LOCAL:-""}
DOTMATRIX_VCS=${DOTMATRIX_VCS:-""}
DOTMATRIX_MARK=${DOTMATRIX_MARK:-""}
DOTMATRIX_LINE=${DOTMATRIX_LINE:-"━"}
DOTMATRIX_PLUG=${DOTMATRIX_PLUG:-""}
DOTMATRIX_SOFT=${DOTMATRIX_SOFT:-""}
DOTMATRIX_MEAN=${DOTMATRIX_MEAN:-""}
DOTMATRIX_LINK=( ${DOTMATRIX_LINK[@]+"${DOTMATRIX_LINK[@]}"} )
[[ ${#DOTMATRIX_LINK[@]} == 0 ]] && DOTMATRIX_LINK=("█" "" "")
DOTMATRIX_OPEN=( ${DOTMATRIX_OPEN[@]+"${DOTMATRIX_OPEN[@]}"} )
[[ ${#DOTMATRIX_OPEN[@]} == 0 ]] && DOTMATRIX_OPEN=("█" "" "")
DOTMATRIX_DANG=( ${DOTMATRIX_DANG[@]+"${DOTMATRIX_DANG[@]}"} )
[[ ${#DOTMATRIX_DANG[@]} == 0 ]] && DOTMATRIX_DANG=("█" "" "")
DOTMATRIX_ENDS=( ${DOTMATRIX_ENDS[@]+"${DOTMATRIX_ENDS[@]}"} )
[[ ${#DOTMATRIX_ENDS[@]} == 0 ]] && DOTMATRIX_ENDS=("" "" "")
DOTMATRIX_ITEMS=( ${DOTMATRIX_ITEMS[@]+"${DOTMATRIX_ITEMS[@]}"} )
[[ ${#DOTMATRIX_ITEMS[@]} == 0 ]] && DOTMATRIX_ITEMS=("" "┃" "")
elif [[ "${DOTMATRIX_VARIANT}" == "slant" ]] ; then
DOTMATRIX_SPACED=${DOTMATRIX_SPACED:-1}
# Powerline slanted theme
DOTMATRIX_HOST_LOCAL=${DOTMATRIX_HOST_LOCAL:-""}
DOTMATRIX_USER_LOCAL=${DOTMATRIX_USER_LOCAL:-""}
DOTMATRIX_VCS=${DOTMATRIX_VCS:-""}
DOTMATRIX_MARK=${DOTMATRIX_MARK:-""}
DOTMATRIX_LINE=${DOTMATRIX_LINE:-"━"}
DOTMATRIX_PLUG=${DOTMATRIX_PLUG:-""}
DOTMATRIX_SOFT=${DOTMATRIX_SOFT:-""}
DOTMATRIX_MEAN=${DOTMATRIX_MEAN:-""}
DOTMATRIX_LINK=( ${DOTMATRIX_LINK[@]+"${DOTMATRIX_LINK[@]}"} )
[[ ${#DOTMATRIX_LINK[@]} == 0 ]] && DOTMATRIX_LINK=("" "" "")
DOTMATRIX_OPEN=( ${DOTMATRIX_OPEN[@]+"${DOTMATRIX_OPEN[@]}"} )
[[ ${#DOTMATRIX_OPEN[@]} == 0 ]] && DOTMATRIX_OPEN=("" "" "")
DOTMATRIX_DANG=( ${DOTMATRIX_DANG[@]+"${DOTMATRIX_DANG[@]}"} )
[[ ${#DOTMATRIX_DANG[@]} == 0 ]] && DOTMATRIX_DANG=("" "" "")
DOTMATRIX_ENDS=( ${DOTMATRIX_ENDS[@]+"${DOTMATRIX_ENDS[@]}"} )
[[ ${#DOTMATRIX_ENDS[@]} == 0 ]] && DOTMATRIX_ENDS=("" "/" "")
DOTMATRIX_ITEMS=( ${DOTMATRIX_ITEMS[@]+"${DOTMATRIX_ITEMS[@]}"} )
[[ ${#DOTMATRIX_ITEMS[@]} == 0 ]] && DOTMATRIX_ITEMS=("" "┃" "")
fi
# Number of spaces to add
if [[ ${DOTMATRIX_SPACED} == 0 ]] ; then
DOTMATRIX_SPACE_VOID=""
DOTMATRIX_SPACE_FILL=""
DOTMATRIX_SPACE_PATH=${DOTMATRIX_SPACE_PATH:-""}
DOTMATRIX_SPACE_FIELD=${DOTMATRIX_SPACE_FIELD:-""}
DOTMATRIX_SPACE_LINE=${DOTMATRIX_SPACE_LINE:-""}
elif [[ ${DOTMATRIX_SPACED} == 1 ]] ; then
DOTMATRIX_SPACE_VOID=" "
DOTMATRIX_SPACE_FILL="█"
DOTMATRIX_SPACE_PATH=${DOTMATRIX_SPACE_PATH:-" "}
DOTMATRIX_SPACE_FIELD=${DOTMATRIX_SPACE_FIELD:-""}
DOTMATRIX_SPACE_LINE=${DOTMATRIX_SPACE_LINE:-" "}
else
local n="${DOTMATRIX_SPACED:-1}"
[[ $n -lt 0 ]] && n=1
local i
DOTMATRIX_SPACE_VOID=""
DOTMATRIX_SPACE_FILL=""
for ((i=0; i < n; i++)); do
DOTMATRIX_SPACE_VOID+=" " # Regular space
DOTMATRIX_SPACE_FILL+="█" # Inverted space
done
DOTMATRIX_SPACE_PATH=${DOTMATRIX_SPACE_PATH:-"${DOTMATRIX_SPACE_VOID}"}
DOTMATRIX_SPACE_FIELD=${DOTMATRIX_SPACE_FIELD:-""}
DOTMATRIX_SPACE_LINE=${DOTMATRIX_SPACE_LINE:-""}
fi
# Color arrays defaults fg bg b u ffg fbg
DOTMATRIX_COLOR_DARK=( ${DOTMATRIX_COLOR_DARK[@]+"${DOTMATRIX_COLOR_DARK[@]}"} )
[[ ${#DOTMATRIX_COLOR_DARK[@]} == 0 ]] && DOTMATRIX_COLOR_DARK=(252 239 0 0 15 0)
DOTMATRIX_COLOR_LITE=( ${DOTMATRIX_COLOR_LITE[@]+"${DOTMATRIX_COLOR_LITE[@]}"} )
[[ ${#DOTMATRIX_COLOR_LITE[@]} == 0 ]] && DOTMATRIX_COLOR_LITE=(239 252 0 0 0 15)
DOTMATRIX_COLOR_GLOW=( ${DOTMATRIX_COLOR_GLOW[@]+"${DOTMATRIX_COLOR_GLOW[@]}"} )
[[ ${#DOTMATRIX_COLOR_GLOW[@]} == 0 ]] && DOTMATRIX_COLOR_GLOW=( 0 252 1 0 0 15)
DOTMATRIX_COLOR_NOTE=( ${DOTMATRIX_COLOR_NOTE[@]+"${DOTMATRIX_COLOR_NOTE[@]}"} )
[[ ${#DOTMATRIX_COLOR_NOTE[@]} == 0 ]] && DOTMATRIX_COLOR_NOTE=( 15 33 0 0 15 12)
DOTMATRIX_COLOR_WARN=( ${DOTMATRIX_COLOR_WARN[@]+"${DOTMATRIX_COLOR_WARN[@]}"} )
[[ ${#DOTMATRIX_COLOR_WARN[@]} == 0 ]] && DOTMATRIX_COLOR_WARN=(196 220 1 0 0 11)
DOTMATRIX_COLOR_FAIR=( ${DOTMATRIX_COLOR_FAIR[@]+"${DOTMATRIX_COLOR_FAIR[@]}"} )
[[ ${#DOTMATRIX_COLOR_FAIR[@]} == 0 ]] && DOTMATRIX_COLOR_FAIR=( 0 244 0 0 0 8)
DOTMATRIX_COLOR_PATH_SHORT=( ${DOTMATRIX_COLOR_PATH_SHORT[@]+"${DOTMATRIX_COLOR_PATH_SHORT[@]}"} )
[[ ${#DOTMATRIX_COLOR_PATH_SHORT[@]} == 0 ]] && DOTMATRIX_COLOR_PATH_SHORT=(252 239 0 0 0 15)
DOTMATRIX_COLOR_PATH_VCS=( ${DOTMATRIX_COLOR_PATH_VCS[@]+"${DOTMATRIX_COLOR_PATH_VCS[@]}"} )
[[ ${#DOTMATRIX_COLOR_PATH_VCS[@]} == 0 ]] && DOTMATRIX_COLOR_PATH_VCS=(252 239 0 1 0 15)
DOTMATRIX_COLOR_PATH_LAST=( ${DOTMATRIX_COLOR_PATH_LAST[@]+"${DOTMATRIX_COLOR_PATH_LAST[@]}"} )
[[ ${#DOTMATRIX_COLOR_PATH_LAST[@]} == 0 ]] && DOTMATRIX_COLOR_PATH_LAST=(15 239 1 0 0 15)
DOTMATRIX_COLOR_LINE=( ${DOTMATRIX_COLOR_LINE[@]+"${DOTMATRIX_COLOR_LINE[@]}"} )
[[ ${#DOTMATRIX_COLOR_LINE[@]} == 0 ]] && DOTMATRIX_COLOR_LINE=(244 -1 0 0 15 -1)
DOTMATRIX_COLOR_LINE_START=( ${DOTMATRIX_COLOR_LINE_START[@]+"${DOTMATRIX_COLOR_LINE_START[@]}"} )
[[ ${#DOTMATRIX_COLOR_LINE_START[@]} == 0 ]] && DOTMATRIX_COLOR_LINE_START=(255 -1 1 0 15 -1)
DOTMATRIX_COLOR_LINE_END=( ${DOTMATRIX_COLOR_LINE_END[@]+"${DOTMATRIX_COLOR_LINE_END[@]}"} )
[[ ${#DOTMATRIX_COLOR_LINE_END[@]} == 0 ]] && DOTMATRIX_COLOR_LINE_END=(232 -1 1 0 15 -1)
DOTMATRIX_COLOR_MARK=( ${DOTMATRIX_COLOR_MARK[@]+"${DOTMATRIX_COLOR_MARK[@]}"} )
[[ ${#DOTMATRIX_COLOR_MARK[@]} == 0 ]] && DOTMATRIX_COLOR_MARK=(15 -1 0 0 15 -1)
DOTMATRIX_COLOR_SEP_DARK=( ${DOTMATRIX_COLOR_SEP_DARK[@]+"${DOTMATRIX_COLOR_SEP_DARK[@]}"} )
[[ ${#DOTMATRIX_COLOR_SEP_DARK[@]} == 0 ]] && DOTMATRIX_COLOR_SEP_DARK=( 0 -2 0 0 0 -2)
DOTMATRIX_COLOR_SEP_FAIR=( ${DOTMATRIX_COLOR_SEP_FAIR[@]+"${DOTMATRIX_COLOR_SEP_FAIR[@]}"} )
[[ ${#DOTMATRIX_COLOR_SEP_FAIR[@]} == 0 ]] && DOTMATRIX_COLOR_SEP_FAIR=(244 -2 0 0 0 -2)
DOTMATRIX_COLOR_SEP_LITE=( ${DOTMATRIX_COLOR_SEP_LITE[@]+"${DOTMATRIX_COLOR_SEP_LITE[@]}"} )
[[ ${#DOTMATRIX_COLOR_SEP_LITE[@]} == 0 ]] && DOTMATRIX_COLOR_SEP_LITE=( 15 -2 0 0 15 -2)
__dotmatrix_activate_display
__dotmatrix_activate_connection
__dotmatrix_activate_user
__dotmatrix_activate_multiplexer
__dotmatrix_activate_hostname
}
_lp_dotmatrix_theme_directory() {
lp_terminal_format ${DOTMATRIX_COLOR_LITE[@]+"${DOTMATRIX_COLOR_LITE[@]}"}
__dotmatrix_directory_FS
__dotmatrix_directory_path
}
_lp_dotmatrix_theme_prompt() {
local header inline prompt
# Arguments: fg, bg, bold, underline, fallback_fg, fallback_bg
# Color codes can be any integer in 256 XTerm's system colors in [0255].
# Special color codes:
# -1 : no color
# -2 : previously set color
# -3 : swap fg and bg
local lp_terminal_format
####################################################################
# HEADER (LEFT)
####################################################################
header=""
header+="${_DOTMATRIX_DISPLAY}"
header+="${_DOTMATRIX_CONNECTION}"
header+="${_DOTMATRIX_USER}"
header+="${_DOTMATRIX_MULTIPLEXER}"
header+="${_DOTMATRIX_HOSTNAME}"
header+="${_DOTMATRIX_FS}"
header+="${_DOTMATRIX_PATH} "
if _lp_dirstack; then
__dotmatrix_make_sep_plug ${DOTMATRIX_COLOR_LITE[@]+"${DOTMATRIX_COLOR_LITE[@]}"}
header+="${dotmatrix_sep}"
__dotmatrix_make_field "$lp_dirstack" ${DOTMATRIX_COLOR_LITE[@]+"${DOTMATRIX_COLOR_LITE[@]}"}
header+="${dotmatrix_field}"
else
# Recall a dark format to correctly reset sections history
# to match the path's section colors.
lp_terminal_format ${DOTMATRIX_COLOR_DARK[@]+"${DOTMATRIX_COLOR_DARK[@]}"}
fi
####################################################################
# HEADER SIDE (RIGHT)
####################################################################
local has_notes=0
__dotmatrix_make_sep_side ""
side="${dotmatrix_sep}"
# battery / load / temperature
__dotmatrix_make_sep_plug ${DOTMATRIX_COLOR_DARK[@]+"${DOTMATRIX_COLOR_DARK[@]}"}
local blt_plug="${dotmatrix_sep}"
local battery=
if _lp_battery ; then
__dotmatrix_make_field "$lp_battery" ${DOTMATRIX_COLOR_DARK[@]+"${DOTMATRIX_COLOR_DARK[@]}"}
battery="${dotmatrix_field}${LP_MARK_BATTERY}"
has_notes=$((has_notes+1))
fi
local load=
if _lp_load ; then
__dotmatrix_make_field "$lp_load" ${DOTMATRIX_COLOR_DARK[@]+"${DOTMATRIX_COLOR_DARK[@]}"}
load="${dotmatrix_field}${LP_MARK_LOAD}"
has_notes=$((has_notes+1))
fi
local temperature=
if _lp_temperature ; then
__dotmatrix_make_field "$lp_temperature" ${DOTMATRIX_COLOR_DARK[@]+"${DOTMATRIX_COLOR_DARK[@]}"}
temperature="${dotmatrix_field}${LP_MARK_TEMP}"
has_notes=$((has_notes+1))
fi
__dotmatrix_make_sep_soft ${DOTMATRIX_COLOR_SEP_DARK[@]+"${DOTMATRIX_COLOR_SEP_DARK[@]}"}
declare -a blt=($battery $load $temperature)
if [[ ${#blt[@]} -gt 0 ]] ; then
_lp_join "$dotmatrix_sep" ${blt[@]}
if [[ -n "$lp_join" ]] ; then
side+="${blt_plug}${lp_join}"
fi
else
lp_terminal_format ${DOTMATRIX_COLOR_FAIR[@]+"${DOTMATRIX_COLOR_FAIR[@]}"}
side+="${lp_terminal_format}"
fi
# jobs: detached / running / stopped
__dotmatrix_make_sep_plug ${DOTMATRIX_COLOR_NOTE[@]+"${DOTMATRIX_COLOR_NOTE[@]}"}
local djc_plug="${dotmatrix_sep}"
local detached_sessions=
if _lp_detached_sessions ; then
if [[ -n "${lp_detached_sessions}" && "${lp_detached_sessions}" -gt 0 ]] ; then
__dotmatrix_make_field "${lp_detached_sessions}d" ${DOTMATRIX_COLOR_NOTE[@]+"${DOTMATRIX_COLOR_NOTE[@]}"}
detached_sessions="${dotmatrix_field}"
has_notes=$((has_notes+1))
fi
fi
local running_jobs=
local stopped_jobs=
if _lp_jobcount ; then
if [[ -n "${lp_running_jobs}" && "${lp_running_jobs}" -gt 0 ]] ; then
__dotmatrix_make_field "${lp_running_jobs}&" ${DOTMATRIX_COLOR_NOTE[@]+"${DOTMATRIX_COLOR_NOTE[@]}"}
running_jobs="${dotmatrix_field}"
has_notes=$((has_notes+1))
fi
if [[ -n "${lp_stopped_jobs}" && "${lp_stopped_jobs}" -gt 0 ]] ; then
__dotmatrix_make_field "${lp_stopped_jobs}z" ${DOTMATRIX_COLOR_NOTE[@]+"${DOTMATRIX_COLOR_NOTE[@]}"}
stopped_jobs="${dotmatrix_field}"
has_notes=$((has_notes+1))
fi
fi
__dotmatrix_make_sep_soft ${DOTMATRIX_COLOR_SEP_LITE[@]+"${DOTMATRIX_COLOR_SEP_LITE[@]}"}
declare -a drs=($detached_sessions $running_jobs $stopped_jobs)
if [[ ${#drs[@]} -gt 0 ]] ; then
_lp_join "$dotmatrix_sep" ${drs[@]}
if [[ -n "$lp_join" ]] ; then
side+="${djc_plug}${lp_join}"
fi
else
lp_terminal_format ${DOTMATRIX_COLOR_FAIR[@]+"${DOTMATRIX_COLOR_FAIR[@]}"}
side+="${lp_terminal_format}"
fi
# clock
if _lp_time ; then
__dotmatrix_make_sep_plug ${DOTMATRIX_COLOR_DARK[@]+"${DOTMATRIX_COLOR_DARK[@]}"}
side+="${dotmatrix_sep}"
if _lp_analog_time ; then
__dotmatrix_make_field "$lp_analog_time" ${DOTMATRIX_COLOR_DARK[@]+"${DOTMATRIX_COLOR_DARK[@]}"}
side+="$dotmatrix_field"
else
__dotmatrix_make_field "$lp_time" ${DOTMATRIX_COLOR_DARK[@]+"${DOTMATRIX_COLOR_DARK[@]}"}
side+="$dotmatrix_field"
fi
fi
# Final assembling
__dotmatrix_make_sep_last "$has_notes"
header+="$dotmatrix_sep"
# Right-align the $side with spaces.
_lp_fill "$header" "$side" " "
header="$lp_fill${NO_COL}"
####################################################################
# IN LINE
####################################################################
lp_terminal_format ${DOTMATRIX_COLOR_LINE[@]+"${DOTMATRIX_COLOR_LINE[@]}"}
inline="${NO_COL}$LP_PS1_PREFIX${lp_terminal_format}"
local ista="$_LP_FIRST_INDEX"
local imid=$((_LP_FIRST_INDEX+1))
local iend=$((_LP_FIRST_INDEX+2))
local d="${DOTMATRIX_ITEMS[ista]}${DOTMATRIX_SPACE_LINE}"
local I="${DOTMATRIX_SPACE_LINE}${DOTMATRIX_ITEMS[imid]}${DOTMATRIX_SPACE_LINE}"
local b="${DOTMATRIX_SPACE_LINE}${DOTMATRIX_ITEMS[iend]}"
if _lp_software_collections ; then
inline+="$d${lp_software_collections}$b"
fi
if _lp_python_env ; then
inline+="$d${lp_python_env}$b"
fi
if _lp_node_env ; then
inline+="$d${lp_node_env}$b"
fi
if _lp_ruby_env ; then
inline+="$d${lp_ruby_env}$b"
fi
if _lp_container ; then
inline+="$d${lp_container}$b"
fi
if _lp_kubernetes_context ; then
inline+="$d${lp_kubernetes_context}$b"
fi
if _lp_terraform_env ; then
inline+="$d${lp_terraform_env}$b"
fi
if _lp_aws_profile ; then
inline+="$d${lp_aws_profile}$b"
fi
if _lp_cmake ; then
inline+="$d${lp_cmake_compiler}$I${lp_cmake_generator}$I${lp_cmake_buildtype}$b"
fi
# FIXME use _lp_fill-like function to handle multi-character line?
if ((DOTMATRIX_ENABLE_GRADIENT_LINE)); then
# Fill up the center section with a line colored as a gradient.
local ret
__lp_strip_escapes "$inline"
local left_as_text="$ret"
local line_width=$((${COLUMNS:-80}-${#left_as_text}))
local line="$inline"
local i c f a b j
for ((i=0; i < line_width; i++)); do # For each character in the line.
local dash_colors=()
for ((c=_LP_FIRST_INDEX; c < 6+_LP_FIRST_INDEX; c++)); do # For each color parameter.
a="${DOTMATRIX_COLOR_LINE_START[c]}"
b="${DOTMATRIX_COLOR_LINE_END[c]}"
j=$((a+(b-a)*i/line_width))
dash_colors+=("$j")
done
lp_terminal_format "${dash_colors[@]}"
line+="${lp_terminal_format}${DOTMATRIX_LINE}"
# line+="${lp_terminal_format}${i}(${dash_colors[@]}) "
done
inline="${line}${NO_COL}"
else
# Fill up the remaining space with a fixed-color line.
_lp_fill "$inline" "" "$DOTMATRIX_LINE"
# Format here is DOTMATRIX_COLOR_LINE.
inline="${lp_terminal_format}${lp_fill}${NO_COL}"
fi
####################################################################
# PROMPT LINE
####################################################################
prompt=""
lp_terminal_format ${DOTMATRIX_COLOR_DARK[@]+"${DOTMATRIX_COLOR_DARK[@]}"}
if (( LP_ENABLE_WIFI_STRENGTH )) ; then
if _lp_wifi_signal_strength ; then
lp_terminal_format ${DOTMATRIX_COLOR_WARN[@]+"${DOTMATRIX_COLOR_WARN[@]}"}
prompt+="${lp_terminal_format}${LP_MARK_WIFI}"
else
prompt+="${lp_terminal_format}${LP_MARK_WIFI}"
fi
else
prompt+="${lp_terminal_format}·"
fi
if _lp_http_proxy ; then
__dotmatrix_make_sep_link ${DOTMATRIX_COLOR_LITE[@]+"${DOTMATRIX_COLOR_LITE[@]}"}
prompt+="${dotmatrix_sep}"
else
__dotmatrix_make_sep_plug ${DOTMATRIX_COLOR_LITE[@]+"${DOTMATRIX_COLOR_LITE[@]}"}
prompt+="${dotmatrix_sep}"
fi
__dotmatrix_prompt_vcs
prompt+="${_DOTMATRIX_VCS}"
if _lp_runtime_format ; then
__dotmatrix_make_sep_plug ${DOTMATRIX_COLOR_NOTE[@]+"${DOTMATRIX_COLOR_NOTE[@]}"}
__dotmatrix_make_field "${lp_runtime_format}" ${DOTMATRIX_COLOR_NOTE[@]+"${DOTMATRIX_COLOR_NOTE[@]}"}
prompt+="${dotmatrix_sep}${dotmatrix_field}"
fi
if _lp_error ; then
__dotmatrix_make_sep_link ${DOTMATRIX_COLOR_WARN[@]+"${DOTMATRIX_COLOR_WARN[@]}"}
__dotmatrix_make_field "${lp_error}" ${DOTMATRIX_COLOR_WARN[@]+"${DOTMATRIX_COLOR_WARN[@]}"}
prompt+="${dotmatrix_sep}${dotmatrix_field}"
fi
__dotmatrix_make_sep_plug ${DOTMATRIX_COLOR_MARK[@]+"${DOTMATRIX_COLOR_MARK[@]}"}
prompt+="${dotmatrix_sep}"
lp_terminal_format ${DOTMATRIX_COLOR_MARK[@]+"${DOTMATRIX_COLOR_MARK[@]}"}
local mark_color="$lp_terminal_format"
# No need to check LP_ENABLE_SHLVL, _lp_shell_level does it.
if _lp_shell_level ; then
local i
for ((i=0; i < lp_shell_level-1; i++)); do
prompt+="${mark_color}${DOTMATRIX_MARK}"
done
fi
# Warning prompt mark if either root or sudo.
_lp_user
user="$?"
# No need to check LP_ENABLE_SUDO, _lp_sudo_active does it.
_lp_sudo_active
sudo="$?"
if [[ "$sudo" == 0 || "$user" == 2 ]] ; then
local dcwfg="${DOTMATRIX_COLOR_WARN[_LP_FIRST_INDEX+1]}"
[[ -z $dcwfg ]] && dcwfg=-1
lp_terminal_format $dcwfg
prompt+="${lp_terminal_format}${DOTMATRIX_MARK}"
else
prompt+="${mark_color}${DOTMATRIX_MARK}"
fi
prompt+="${NO_COL}"
# Assemble and setup
local n=$'\n'
PS1="${n}${header}${n}${inline}${n}${prompt} "
}
########################################################################
# Functions called at "activate" stage.
########################################################################
__dotmatrix_activate_display() {
if _lp_connected_display ; then
__dotmatrix_make_field "$DOTMATRIX_DISPLAY_X11" ${DOTMATRIX_COLOR_LITE[@]+"${DOTMATRIX_COLOR_LITE[@]}"}
_DOTMATRIX_DISPLAY="$dotmatrix_field"
else
__dotmatrix_make_field "$DOTMATRIX_DISPLAY_TEXT" ${DOTMATRIX_COLOR_DARK[@]+"${DOTMATRIX_COLOR_DARK[@]}"}
_DOTMATRIX_DISPLAY="$dotmatrix_field"
fi
}
__dotmatrix_activate_connection() {
_lp_user
user_type="$?"
local user_color
case "$user_type" in
0) # logged-in user
user_color=(${DOTMATRIX_COLOR_DARK[@]+"${DOTMATRIX_COLOR_DARK[@]}"})
;;
1) # other user
user_color=(${DOTMATRIX_COLOR_NOTE[@]+"${DOTMATRIX_COLOR_NOTE[@]}"})
;;
2) # root
user_color=(${DOTMATRIX_COLOR_WARN[@]+"${DOTMATRIX_COLOR_WARN[@]}"})
;;
esac
local connection
_lp_connection
case "$lp_connection" in
lcl)
__dotmatrix_make_sep_plug "${user_color[@]}"
connection="${dotmatrix_sep}"
;;
su)
__dotmatrix_make_sep_link "${user_color[@]}"
connection="${dotmatrix_sep}"
;;
ssh)
__dotmatrix_make_sep_open "${user_color[@]}"
connection="${dotmatrix_sep}"
;;
tel)
__dotmatrix_make_sep_dang "${user_color[@]}"
connection="${dotmatrix_sep}"
;;
*)
__dotmatrix_make_sep_plug "${user_color[@]}"
connection="${dotmatrix_sep}"
;;
esac
_DOTMATRIX_CONNECTION="${connection}"
}
__dotmatrix_activate_user() {
_lp_user
user_type="$?"
case "$user_type" in
0) # logged-in user
if [[ -z $lp_username ]] ; then # Honors LP_USER_ALWAYS
__dotmatrix_make_field "$DOTMATRIX_USER_LOCAL" ${DOTMATRIX_COLOR_DARK[@]+"${DOTMATRIX_COLOR_DARK[@]}"}
_DOTMATRIX_USER="$dotmatrix_field"
else
__dotmatrix_make_field "$lp_username" ${DOTMATRIX_COLOR_DARK[@]+"${DOTMATRIX_COLOR_DARK[@]}"}
_DOTMATRIX_USER="$dotmatrix_field"
fi
;;
1) # other user
_lp_username_color
__dotmatrix_make_field "$lp_username_color" ${DOTMATRIX_COLOR_NOTE[@]+"${DOTMATRIX_COLOR_NOTE[@]}"}
_DOTMATRIX_USER="$dotmatrix_field"
;;
2) # root
_lp_username
__dotmatrix_make_field "$lp_username" ${DOTMATRIX_COLOR_WARN[@]+"${DOTMATRIX_COLOR_WARN[@]}"}
_DOTMATRIX_USER="$dotmatrix_field"
;;
esac
return $user_type
}
__dotmatrix_activate_hostname() {
local hostname
if _lp_hostname; then
case "$lp_connection" in
ssh)
(( LP_ENABLE_SSH_COLORS )) && LP_COLOR_SSH="$LP_COLOR_HOST_HASH"
hostname="${LP_COLOR_SSH}${lp_hostname}"
;;
tel)
hostname="${lp_hostname}"
;;
*)
hostname+="${DOTMATRIX_HOST_LOCAL}"
;;
esac
else
hostname="${DOTMATRIX_HOST_LOCAL}"
fi
__dotmatrix_make_field "$hostname" ${DOTMATRIX_COLOR_LITE[@]+"${DOTMATRIX_COLOR_LITE[@]}"}
_DOTMATRIX_HOSTNAME="${dotmatrix_field}"
}
__dotmatrix_activate_multiplexer() {
local lp_multiplexer multiplexer
if _lp_multiplexer ; then
case "$lp_multiplexer" in
tmux)
__dotmatrix_make_sep_link ${DOTMATRIX_COLOR_LITE[@]+"${DOTMATRIX_COLOR_LITE[@]}"}
multiplexer="${dotmatrix_sep}"
;;
screen)
__dotmatrix_make_sep_link ${DOTMATRIX_COLOR_LITE[@]+"${DOTMATRIX_COLOR_LITE[@]}"}
multiplexer="${dotmatrix_sep}"
;;
*)
__dotmatrix_make_sep_link ${DOTMATRIX_COLOR_LITE[@]+"${DOTMATRIX_COLOR_LITE[@]}"}
multiplexer="${dotmatrix_sep}"
;;
esac
else
__dotmatrix_make_sep_plug ${DOTMATRIX_COLOR_LITE[@]+"${DOTMATRIX_COLOR_LITE[@]}"}
multiplexer="${dotmatrix_sep}"
fi
_DOTMATRIX_MULTIPLEXER="${multiplexer}"
}
########################################################################
# Functions called at directory change.
########################################################################
__dotmatrix_directory_FS() {
local fs=
if (( LP_ENABLE_PERM )); then
if _lp_chroot ; then
if [[ -w "$PWD" ]]; then
__dotmatrix_make_sep_open ${DOTMATRIX_COLOR_DARK[@]+"${DOTMATRIX_COLOR_DARK[@]}"}
fs="$dotmatrix_sep"
else
__dotmatrix_make_sep_dang ${DOTMATRIX_COLOR_DARK[@]+"${DOTMATRIX_COLOR_DARK[@]}"}
fs="$dotmatrix_sep"
fi
else
if [[ -w "$PWD" ]]; then
__dotmatrix_make_sep_plug ${DOTMATRIX_COLOR_DARK[@]+"${DOTMATRIX_COLOR_DARK[@]}"}
fs="$dotmatrix_sep"
else
__dotmatrix_make_sep_link ${DOTMATRIX_COLOR_DARK[@]+"${DOTMATRIX_COLOR_DARK[@]}"}
fs="$dotmatrix_sep"
fi
fi
fi
_DOTMATRIX_FS="$fs"
}
__dotmatrix_directory_path() {
local lp_terminal_format
lp_terminal_format ${DOTMATRIX_COLOR_DARK[@]+"${DOTMATRIX_COLOR_DARK[@]}"}
local path_format="${lp_terminal_format}"
lp_terminal_format ${DOTMATRIX_COLOR_SEP_DARK[@]+"${DOTMATRIX_COLOR_SEP_DARK[@]}"}
local separator_format=$lp_terminal_format
lp_terminal_format ${DOTMATRIX_COLOR_PATH_SHORT[@]+"${DOTMATRIX_COLOR_PATH_SHORT[@]}"}
local shortened_format=$lp_terminal_format
lp_terminal_format ${DOTMATRIX_COLOR_PATH_VCS[@]+"${DOTMATRIX_COLOR_PATH_VCS[@]}"}
local vcs_format=$lp_terminal_format
lp_terminal_format ${DOTMATRIX_COLOR_PATH_LAST[@]+"${DOTMATRIX_COLOR_PATH_LAST[@]}"}
local last_dir_format=$lp_terminal_format
local lp_path_format
_lp_path_format "$path_format" "$last_dir_format" "$vcs_format" "$shortened_format" \
"${DOTMATRIX_SPACE_PATH}${DOTMATRIX_SOFT}${DOTMATRIX_SPACE_PATH}" "$separator_format"
_DOTMATRIX_PATH=${lp_path_format}
}
########################################################################
# Functions called at prompt update.
########################################################################
__dotmatrix_prompt_vcs() {
if _lp_find_vcs ; then
local lp_vcs_details_color
_lp_smart_mark
_DOTMATRIX_VCS=""
# Mark & commits off remote
if _lp_vcs_commits_off_remote; then # There is remote-space-[local].
# Remote segment.
if [[ "$lp_vcs_commit_behind" -ne "0" ]]; then # NOTE remote segment.
if (( LP_ENABLE_VCS_DIFFSTATS )) ; then
__dotmatrix_make_field "${DOTMATRIX_VCS}${lp_smart_mark} +${lp_vcs_commit_behind}" ${DOTMATRIX_COLOR_NOTE[@]+"${DOTMATRIX_COLOR_NOTE[@]}"}
_DOTMATRIX_VCS+="$dotmatrix_field"
else
__dotmatrix_make_field "${DOTMATRIX_VCS}${lp_smart_mark} ${DOTMATRIX_DIFF}" ${DOTMATRIX_COLOR_NOTE[@]+"${DOTMATRIX_COLOR_NOTE[@]}"}
_DOTMATRIX_VCS+="$dotmatrix_field"
fi
else # LITE remote segment.
__dotmatrix_make_field "${DOTMATRIX_VCS}${lp_smart_mark}" ${DOTMATRIX_COLOR_LITE[@]+"${DOTMATRIX_COLOR_LITE[@]}"}
_DOTMATRIX_VCS+="$dotmatrix_field"
fi
__dotmatrix_make_sep_link ${DOTMATRIX_COLOR_NOTE[@]+"${DOTMATRIX_COLOR_NOTE[@]}"}
_DOTMATRIX_VCS+="$dotmatrix_sep"
# Local segment.
if [[ "$lp_vcs_commit_ahead" -ne "0" ]]; then # NOTE local segment.
if (( LP_ENABLE_VCS_DIFFSTATS )) ; then
__dotmatrix_make_field "+$lp_vcs_commit_ahead" ${DOTMATRIX_COLOR_NOTE[@]+"${DOTMATRIX_COLOR_NOTE[@]}"}
_DOTMATRIX_VCS+="$dotmatrix_field"
else
__dotmatrix_make_field "$DOTMATRIX_DIFF" ${DOTMATRIX_COLOR_NOTE[@]+"${DOTMATRIX_COLOR_NOTE[@]}"}
_DOTMATRIX_VCS+="$dotmatrix_field"
fi
__dotmatrix_make_sep_plug ${DOTMATRIX_COLOR_LITE[@]+"${DOTMATRIX_COLOR_LITE[@]}"}
_DOTMATRIX_VCS+="$dotmatrix_sep"
else # LITE local segment.
__dotmatrix_make_sep_plug ${DOTMATRIX_COLOR_LITE[@]+"${DOTMATRIX_COLOR_LITE[@]}"}
_DOTMATRIX_VCS+="$dotmatrix_sep"
fi
else # There is no space between remote and branch.
__dotmatrix_make_field "${DOTMATRIX_VCS}${lp_smart_mark}" ${DOTMATRIX_COLOR_LITE[@]+"${DOTMATRIX_COLOR_LITE[@]}"}
_DOTMATRIX_VCS+="$dotmatrix_field"
__dotmatrix_make_sep_mid ${DOTMATRIX_COLOR_LITE[@]+"${DOTMATRIX_COLOR_LITE[@]}"}
_DOTMATRIX_VCS+="$dotmatrix_sep"
# No local commit segment.
fi
# Branch:bookmark/tag
if _lp_vcs_branch; then
__dotmatrix_make_field "$lp_vcs_branch" ${DOTMATRIX_COLOR_GLOW[@]+"${DOTMATRIX_COLOR_GLOW[@]}"}
_DOTMATRIX_VCS+="$dotmatrix_field"
if _lp_vcs_bookmark; then
__dotmatrix_make_field ":${lp_vcs_bookmark}" ${DOTMATRIX_COLOR_LITE[@]+"${DOTMATRIX_COLOR_LITE[@]}"}
_DOTMATRIX_VCS+="$dotmatrix_field"
fi
if _lp_vcs_tag; then
__dotmatrix_make_sep_soft ${DOTMATRIX_COLOR_SEP_LITE[@]+"${DOTMATRIX_COLOR_SEP_LITE[@]}"}
__dotmatrix_make_field "$lp_vcs_tag" ${DOTMATRIX_COLOR_LITE[@]+"${DOTMATRIX_COLOR_LITE[@]}"}
_DOTMATRIX_VCS+="${dotmatrix_sep}${dotmatrix_field}"
fi
elif _lp_vcs_bookmark; then
__dotmatrix_make_field "$lp_vcs_bookmark" ${DOTMATRIX_COLOR_GLOW[@]+"${DOTMATRIX_COLOR_GLOW[@]}"}
_DOTMATRIX_VCS+="$dotmatrix_field"
elif _lp_vcs_tag; then
__dotmatrix_make_field "$lp_vcs_tag" ${DOTMATRIX_COLOR_GLOW[@]+"${DOTMATRIX_COLOR_GLOW[@]}"}
_DOTMATRIX_VCS+="$dotmatrix_field"
else
_lp_vcs_commit_id
branch="${lp_vcs_commit_id:0:7}"
__dotmatrix_make_field "${lp_vcs_commit_id:0:7}" ${DOTMATRIX_COLOR_GLOW[@]+"${DOTMATRIX_COLOR_GLOW[@]}"}
_DOTMATRIX_VCS+="$dotmatrix_field"
fi # vcs branch
# Diff stats
local ret has_lines=
if _lp_vcs_uncommitted_files; then
__dotmatrix_make_sep_link ${DOTMATRIX_COLOR_NOTE[@]+"${DOTMATRIX_COLOR_NOTE[@]}"}
_DOTMATRIX_VCS+="$dotmatrix_sep"
_lp_vcs_unstaged_lines; ret=$?
# Only show unstaged changes if the VCS supports staging, otherwise
# show uncommitted changes
if (( ret == 0 )); then
if [[ "$lp_vcs_unstaged_i_lines" == "$lp_vcs_unstaged_d_lines" ]] ; then
# If same number of lines inserted and deleted: display a single number.
__dotmatrix_make_field "±$lp_vcs_unstaged_i_lines" ${DOTMATRIX_COLOR_NOTE[@]+"${DOTMATRIX_COLOR_NOTE[@]}"}
has_lines="$dotmatrix_field"
else
__dotmatrix_make_field "+$lp_vcs_unstaged_i_lines" ${DOTMATRIX_COLOR_NOTE[@]+"${DOTMATRIX_COLOR_NOTE[@]}"}
has_lines="$dotmatrix_field"
__dotmatrix_make_sep_soft ${DOTMATRIX_COLOR_SEP_LITE[@]+"${DOTMATRIX_COLOR_SEP_LITE[@]}"}
has_lines+="$dotmatrix_sep"
__dotmatrix_make_field "-$lp_vcs_unstaged_d_lines" ${DOTMATRIX_COLOR_NOTE[@]+"${DOTMATRIX_COLOR_NOTE[@]}"}
has_lines+="$dotmatrix_field"
fi
elif (( ret == 1 )); then
__dotmatrix_make_field "±0" ${DOTMATRIX_COLOR_DARK[@]+"${DOTMATRIX_COLOR_DARK[@]}"}
has_lines="+${dotmatrix_field}"
else
_lp_vcs_uncommitted_lines
if [[ "$lp_vcs_uncommitted_i_lines" == "$lp_vcs_uncommitted_d_lines" ]] ; then
__dotmatrix_make_field "±$lp_vcs_uncommitted_i_lines" ${DOTMATRIX_COLOR_NOTE[@]+"${DOTMATRIX_COLOR_NOTE[@]}"}
has_lines="$dotmatrix_field"
else
__dotmatrix_make_field "+$lp_vcs_uncommitted_i_lines" ${DOTMATRIX_COLOR_NOTE[@]+"${DOTMATRIX_COLOR_NOTE[@]}"}
has_lines="$dotmatrix_field"
__dotmatrix_make_sep_soft ${DOTMATRIX_COLOR_SEP_LITE[@]+"${DOTMATRIX_COLOR_SEP_LITE[@]}"}
has_lines+="$dotmatrix_sep"
__dotmatrix_make_field "-$lp_vcs_uncommitted_d_lines" ${DOTMATRIX_COLOR_NOTE[@]+"${DOTMATRIX_COLOR_NOTE[@]}"}
has_lines+="$dotmatrix_field"
fi
fi
if (( LP_ENABLE_VCS_DIFFSTATS )) ; then
_DOTMATRIX_VCS+="$has_lines"
else
__dotmatrix_make_field "$DOTMATRIX_DIFF" ${DOTMATRIX_COLOR_NOTE[@]+"${DOTMATRIX_COLOR_NOTE[@]}"}
_DOTMATRIX_VCS+="$dotmatrix_field"
fi # LP_ENABLE_VCS_DIFFSTATS
fi # uncommitted files
# Stash / untracked / head
local stash="" untracked="" head=""
if _lp_vcs_stash_count; then
stash="$DOTMATRIX_MARK_STASH"
fi
if _lp_vcs_untracked_files; then
untracked="$DOTMATRIX_MARK_UNTRACKED"
fi
if _lp_vcs_head_status; then
head="$lp_vcs_head_status"
# if [[ -n "${lp_vcs_head_details-}" ]]; then
# pass
# fi
fi
if [[ -n "$stash" || -n "$untracked" || -n "$head" ]] ; then
if [[ -z $has_lines ]] ; then
__dotmatrix_make_sep_mid ${DOTMATRIX_COLOR_SEP_FAIR[@]+"${DOTMATRIX_COLOR_SEP_FAIR[@]}"}
_DOTMATRIX_VCS+=" ${dotmatrix_sep} "
else
__dotmatrix_make_sep_plug ${DOTMATRIX_COLOR_LITE[@]+"${DOTMATRIX_COLOR_LITE[@]}"}
_DOTMATRIX_VCS+="$dotmatrix_sep"
fi
fi
if [[ -n "$stash" ]] ; then
__dotmatrix_make_field "$stash" ${DOTMATRIX_COLOR_LITE[@]+"${DOTMATRIX_COLOR_LITE[@]}"}
_DOTMATRIX_VCS+="$dotmatrix_field"
if [[ -n "$untracked" ]] ; then
__dotmatrix_make_field "$untracked" ${DOTMATRIX_COLOR_LITE[@]+"${DOTMATRIX_COLOR_LITE[@]}"}
__dotmatrix_make_sep_soft ${DOTMATRIX_COLOR_SEP_LITE[@]+"${DOTMATRIX_COLOR_SEP_LITE[@]}"}
_DOTMATRIX_VCS+="${dotmatrix_sep}${dotmatrix_field}"
fi
if [[ -n "$head" ]] ; then
__dotmatrix_make_field "$head" ${DOTMATRIX_COLOR_LITE[@]+"${DOTMATRIX_COLOR_LITE[@]}"}
__dotmatrix_make_sep_soft ${DOTMATRIX_COLOR_SEP_LITE[@]+"${DOTMATRIX_COLOR_SEP_LITE[@]}"}
_DOTMATRIX_VCS+="${dotmatrix_sep}${dotmatrix_field}"
fi
else # no stash
if [[ -n "$untracked" ]] ; then
__dotmatrix_make_field "$untracked" ${DOTMATRIX_COLOR_LITE[@]+"${DOTMATRIX_COLOR_LITE[@]}"}
_DOTMATRIX_VCS+="$dotmatrix_field"
if [[ -n "$head" ]] ; then
__dotmatrix_make_field "$head" ${DOTMATRIX_COLOR_LITE[@]+"${DOTMATRIX_COLOR_LITE[@]}"}
__dotmatrix_make_sep_soft ${DOTMATRIX_COLOR_SEP_LITE[@]+"${DOTMATRIX_COLOR_SEP_LITE[@]}"}
_DOTMATRIX_VCS+="${dotmatrix_sep}${dotmatrix_field}"
fi
else # no untracked
if [[ -n "$head" ]] ; then
__dotmatrix_make_field "$head" ${DOTMATRIX_COLOR_LITE[@]+"${DOTMATRIX_COLOR_LITE[@]}"}
_DOTMATRIX_VCS+="$dotmatrix_field"
fi
fi
fi # stash
return 1
else
_DOTMATRIX_VCS=""
return 0
fi # find_vcs
}
########################################################################
# Helper functions
########################################################################
__dotmatrix_join_fields() {
dotmatrix_join_fields=""
local sep="${1-}"
shift
if [[ -n "$*" ]] ; then
local first_field="${1-}"
shift
dotmatrix_join_fields="${first_field}"
for f in "$@"; do
[[ -z $f ]] && continue
dotmatrix_join_fields+="${sep}${f}"
done
fi
}
__dotmatrix_make_field() { # string, color_array
local lp_terminal_format string="${1-}"
[[ -z $string ]] && return 1
shift
lp_terminal_format "$@"
dotmatrix_field="${lp_terminal_format}${DOTMATRIX_SPACE_FIELD}${string}${DOTMATRIX_SPACE_FIELD}"
}
__dotmatrix_make_sep_plug() { # color
# fg, bg, bold, underline, fallback_fg, fallback_bg
# 0 = set last color to current color
# -1 = set color to last color
# -2 = keep last color
# -3 = set last fg to last bg (and conversely)
local lp_terminal_format sep
local bg="${2-}"
[[ -z $bg ]] && bg=-1
local fbg="${6-}"
[[ -z $fbg ]] && fbg=-1
sep="${DOTMATRIX_PLUG}"
if [[ "${_lp_last_ab_color-}" == "$bg" ]] ; then
sep="${DOTMATRIX_MEAN}"
fi
lp_terminal_format -3 "$bg" 0 0 -1 "$fbg"
dotmatrix_sep="${DOTMATRIX_SPACE_VOID}${lp_terminal_format}${sep}${DOTMATRIX_SPACE_VOID}"
}
__dotmatrix_make_sep_link() { # color
local lp_terminal_format
dotmatrix_sep=""
local fg="${2-}"
[[ -z $fg ]] && fg=-1
local fbg="${6-}"
[[ -z $fbg ]] && fbg=-1
lp_terminal_format -3 -1 0 0 -1 "$fbg"
dotmatrix_sep+="${DOTMATRIX_SPACE_VOID}${lp_terminal_format}${DOTMATRIX_LINK[_LP_FIRST_INDEX]}"
local dsfg="${DOTMATRIX_COLOR_SEP_FAIR[_LP_FIRST_INDEX]}"
[[ -z $dsfg ]] && dsfg=-1
lp_terminal_format "$dsfg" -1 0 0 -1 "$fbg"
dotmatrix_sep+="${lp_terminal_format}${DOTMATRIX_LINK[_LP_FIRST_INDEX+1]}"
lp_terminal_format "$fg" -1 0 0 -1 "$fbg"
dotmatrix_sep+="${lp_terminal_format}${DOTMATRIX_LINK[_LP_FIRST_INDEX+2]}${DOTMATRIX_SPACE_FILL}"
}
__dotmatrix_make_sep_open() { # color
local lp_terminal_format
local fg="${2-}"
[[ -z $fg ]] && fg=-1
local fbg="${6-}"
[[ -z $fbg ]] && fbg=-1
lp_terminal_format -3 -1 0 0 -1 "$fbg"
dotmatrix_sep+="${DOTMATRIX_SPACE_VOID}${lp_terminal_format}${DOTMATRIX_OPEN[_LP_FIRST_INDEX]}"
local dsfg="${DOTMATRIX_COLOR_SEP_FAIR[_LP_FIRST_INDEX]}"
[[ -z $dsfg ]] && dsfg=-1
lp_terminal_format "$dsfg" -1 0 0 -1 "$fbg"
dotmatrix_sep+="${lp_terminal_format}${DOTMATRIX_OPEN[_LP_FIRST_INDEX+1]}"
lp_terminal_format "$fg" -1 0 0 -1 "$fbg"
dotmatrix_sep+="${lp_terminal_format}${DOTMATRIX_OPEN[_LP_FIRST_INDEX+2]}${DOTMATRIX_SPACE_FILL}"
}
__dotmatrix_make_sep_dang() { # color
local lp_terminal_format
local fg="${2-}"
[[ -z $fg ]] && fg=-1
local fbg="${6-}"
[[ -z $fbg ]] && fbg=-1
lp_terminal_format -3 -1 0 0 -1 "$fbg"
dotmatrix_sep+="${DOTMATRIX_SPACE_VOID}${lp_terminal_format}${DOTMATRIX_DANG[_LP_FIRST_INDEX]}"
local dcwfg="${DOTMATRIX_COLOR_WARN[_LP_FIRST_INDEX+1]}"
[[ -z $dcwfg ]] && dcwfg=-1
lp_terminal_format "$dcwfg" -1 0 0 -1 "$fbg"
dotmatrix_sep+="${lp_terminal_format}${DOTMATRIX_DANG[_LP_FIRST_INDEX+1]}"
lp_terminal_format "$fg" -1 0 0 -1 "$fbg"
dotmatrix_sep+="${lp_terminal_format}${DOTMATRIX_DANG[_LP_FIRST_INDEX+2]}${DOTMATRIX_SPACE_FILL}"
}
__dotmatrix_make_sep_soft() { # color
local lp_terminal_format
local fg="${1-}"
[[ -z $fg ]] && fg=-1
local fbg="${5-}"
[[ -z $fbg ]] && fbg=-1
lp_terminal_format "$fg" -2 0 0 "$fbg"
dotmatrix_sep="${lp_terminal_format}${DOTMATRIX_SOFT}"
}
__dotmatrix_make_sep_mid() { # color
local lp_terminal_format
local fg="${1-}"
[[ -z $fg ]] && fg=-1
local fbg="${5-}"
[[ -z $fbg ]] && fbg=-1
lp_terminal_format "$fg" -2 0 0 "$fbg"
dotmatrix_sep="${lp_terminal_format}${DOTMATRIX_SPACE_VOID}${DOTMATRIX_MEAN}${DOTMATRIX_SPACE_VOID}"
}
__dotmatrix_make_sep_last() { # no arg
local lp_terminal_format
local has_notes="${1:-0}"
if [[ $has_notes -gt 0 ]] ; then
lp_terminal_format -3 -1 0 0 -3 -1
dotmatrix_sep="${lp_terminal_format}${DOTMATRIX_ENDS[_LP_FIRST_INDEX+0]}${NO_COL}"
# Use the background of COLOR_NOTE as a foreground here.
lp_terminal_format ${DOTMATRIX_COLOR_NOTE[1]}
dotmatrix_sep+="${lp_terminal_format}${DOTMATRIX_ENDS[_LP_FIRST_INDEX+1]}${NO_COL}"
else
lp_terminal_format -3 -1 0 0 -3 -1
dotmatrix_sep="${lp_terminal_format}${DOTMATRIX_ENDS[_LP_FIRST_INDEX+0]}${DOTMATRIX_ENDS[_LP_FIRST_INDEX+1]}${NO_COL}"
fi
}
__dotmatrix_make_sep_side() { # no arg
local lp_terminal_format
lp_terminal_format -3 -1 0 0 -3 -1 # Reset to no background.
local dsf=(${DOTMATRIX_COLOR_SEP_FAIR[@]+"${DOTMATRIX_COLOR_SEP_FAIR[@]}"})
[[ -z "${dsf[*]}" ]] && dsf=(-1)
lp_terminal_format "${dsf[@]}"
dotmatrix_sep="${lp_terminal_format}${DOTMATRIX_ENDS[_LP_FIRST_INDEX+2]}"
}