1081 lines
43 KiB
Text
1081 lines
43 KiB
Text
|
||
########################################################################
|
||
# 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 [0–255].
|
||
# 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]}"
|
||
}
|
||
|