######################################################################## # 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:-"≠"} # Sets of characters DOTMATRIX_VARIANT=${DOTMATRIX_VARIANT:-"dotmatrix"} if [[ "${DOTMATRIX_VARIANT}" == "dotmatrix" ]] ; then DOTMATRIX_SPACED=${DOTMATRIX_SPACED:-0} # 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 # FIXME avoid subshells DOTMATRIX_SPACE_VOID=$(printf '%0.s ' $(seq 1 ${DOTMATRIX_SPACED})) # Regular space DOTMATRIX_SPACE_FILL=$(printf '%0.s█' $(seq 1 ${DOTMATRIX_SPACED})) # Inverted space 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 __dotmatrix_make_sep_last header+="${dotmatrix_sep}" #################################################################### # HEADER SIDE (RIGHT) #################################################################### __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}" fi local load="" if _lp_load ; then __dotmatrix_make_field "$lp_load" ${DOTMATRIX_COLOR_DARK[@]+"${DOTMATRIX_COLOR_DARK[@]}"} load="${dotmatrix_field}${LP_MARK_LOAD}" fi local temperature="" if _lp_temperature ; then __dotmatrix_make_field "$lp_temperature" ${DOTMATRIX_COLOR_DARK[@]+"${DOTMATRIX_COLOR_DARK[@]}"} temperature="${dotmatrix_field}${LP_MARK_TEMP}" fi __dotmatrix_make_sep_soft ${DOTMATRIX_COLOR_SEP_DARK[@]+"${DOTMATRIX_COLOR_SEP_DARK[@]}"} # Non-bracketed variables are intentionals, # so that if the variable is null, it does not count in the arguments array. __dotmatrix_join_fields "$dotmatrix_sep" "$battery" "$load" "$temperature" if [[ -n "$dotmatrix_join_fields" ]] ; then side+="${blt_plug}${dotmatrix_join_fields}" 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_LITE[@]+"${DOTMATRIX_COLOR_LITE[@]}"} local djc_plug="${dotmatrix_sep}" local detached_sessions="" if _lp_detached_sessions ; then if [[ -n "${lp_detached_sessions}" && "${lp_detached_sessions}" > 0 ]] ; then __dotmatrix_make_field "${lp_detached_sessions}d" ${DOTMATRIX_COLOR_LITE[@]+"${DOTMATRIX_COLOR_LITE[@]}"} detached_sessions="${dotmatrix_field}" fi fi local running_jobs="" local stopped_jobs="" if _lp_jobcount ; then if [[ -n "${lp_running_jobs}" && "${lp_running_jobs}" > 0 ]] ; then __dotmatrix_make_field "${lp_running_jobs}&" ${DOTMATRIX_COLOR_LITE[@]+"${DOTMATRIX_COLOR_LITE[@]}"} running_jobs="${dotmatrix_field}" fi if [[ -n "${lp_stopped_jobs}" && "${lp_stopped_jobs}" > 0 ]] ; then __dotmatrix_make_field "${lp_stopped_jobs}z" ${DOTMATRIX_COLOR_LITE[@]+"${DOTMATRIX_COLOR_LITE[@]}"} stopped_jobs="${dotmatrix_field}" fi fi __dotmatrix_make_sep_soft ${DOTMATRIX_COLOR_SEP_LITE[@]+"${DOTMATRIX_COLOR_SEP_LITE[@]}"} __dotmatrix_join_fields "$dotmatrix_sep" "$detached_sessions" "$running_jobs" "$stopped_jobs" if [[ -n "$dotmatrix_join_fields" ]] ; then side+="${djc_plug}${dotmatrix_join_fields}" 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 # Right-align the $side with spaces. _lp_fill "$header" "$side" " " header="$lp_fill" #################################################################### # IN LINE #################################################################### inline="$LP_PS1_PREFIX${NO_COL}" local lp_terminal_format lp_terminal_format ${DOTMATRIX_COLOR_LINE[@]+"${DOTMATRIX_COLOR_LINE[@]}"} local inline_width if _lp_software_collections ; then inline+="${inline}${DOTMATRIX_ITEMS[0]}${DOTMATRIX_SPACE_LINE}${lp_software_collections}${DOTMATRIX_SPACE_LINE}${DOTMATRIX_ITEMS[2]}" fi if _lp_python_env ; then inline+="${inline}${DOTMATRIX_ITEMS[0]}${DOTMATRIX_SPACE_LINE}${lp_python_env}${DOTMATRIX_SPACE_LINE}${DOTMATRIX_ITEMS[2]}" fi if _lp_node_env ; then inline+="${inline}${DOTMATRIX_ITEMS[0]}${DOTMATRIX_SPACE_LINE}${lp_node_env}${DOTMATRIX_SPACE_LINE}${DOTMATRIX_ITEMS[2]}" fi if _lp_ruby_env ; then inline+="${inline}${DOTMATRIX_ITEMS[0]}${DOTMATRIX_SPACE_LINE}${lp_ruby_env}${DOTMATRIX_SPACE_LINE}${DOTMATRIX_ITEMS[2]}" fi if _lp_container ; then inline+="${inline}${DOTMATRIX_ITEMS[0]}${DOTMATRIX_SPACE_LINE}${lp_container}${DOTMATRIX_SPACE_LINE}${DOTMATRIX_ITEMS[2]}" fi if _lp_kubernetes_context ; then inline+="${inline}${DOTMATRIX_ITEMS[0]}${DOTMATRIX_SPACE_LINE}${lp_kubernetes_context}${DOTMATRIX_SPACE_LINE}${DOTMATRIX_ITEMS[2]}" fi if _lp_terraform_env ; then inline+="${inline}${DOTMATRIX_ITEMS[0]}${DOTMATRIX_SPACE_LINE}${lp_terraform_env}${DOTMATRIX_SPACE_LINE}${DOTMATRIX_ITEMS[2]}" fi if _lp_aws_profile ; then inline+="${inline}${DOTMATRIX_ITEMS[0]}${DOTMATRIX_SPACE_LINE}${lp_aws_profile}${DOTMATRIX_SPACE_LINE}${DOTMATRIX_ITEMS[2]}" fi # Fill up the remaining space with a line. _lp_fill "$inline" "" "$DOTMATRIX_LINE" inline="${lp_terminal_format}${lp_fill}${NO_COL}" # FIXME retry this with avoiding subshells. # Gradient line: too slow (or not enough optimized? check COLUMNS change before recompute?) # for i in $(seq ${inline_width}) ; do # local dash_color=() # for c in $(seq 0 $(${#DOTMATRIX_COLOR_LINE_START[@]+"${DOTMATRIX_COLOR_LINE_START[@]}-}1)) ); do # f=$(bc -l <<< "$i / ${inline_width}") # a=${DOTMATRIX_COLOR_LINE_START[c]} # b=${DOTMATRIX_COLOR_LINE_END[c]} # j=$(LC_ALL=C;printf "%.*f" 0 "$(bc -l <<< "($a)+(($b)-($a))*($f)")") # dash_color+=($j) # done # # lp_terminal_format ${dash_color[@]+"${dash_color[@]}"} # inline+="${lp_terminal_format}${inline}" # done #################################################################### # 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 local net_sep_color=${DOTMATRIX_COLOR_LITE[@]+"${DOTMATRIX_COLOR_LITE[@]}"} if _lp_find_vcs && _lp_vcs_commits_off_remote ; then 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 else if _lp_http_proxy ; then __dotmatrix_make_sep_link ${DOTMATRIX_COLOR_DARK[@]+"${DOTMATRIX_COLOR_DARK[@]}"} prompt+="${dotmatrix_sep}" else __dotmatrix_make_sep_mid ${DOTMATRIX_COLOR_DARK[@]+"${DOTMATRIX_COLOR_DARK[@]}"} prompt+="${dotmatrix_sep}${DOTMATRIX_SPACE_VOID}" fi 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_plug ${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[@]}"} if (( LP_ENABLE_SHLVL )) ; then if _lp_shell_level ; then local i for ((i=0; i < lp_shell_level-1; i++)); do prompt+="${lp_terminal_format}${DOTMATRIX_MARK}" done fi fi if (( LP_ENABLE_SUDO )) ; then if _lp_sudo_active ; then local dcwfg="${DOTMATRIX_COLOR_WARN[1]}" [[ -z $dcwfg ]] && dcwfg=-1 lp_terminal_format $dcwfg prompt+="${lp_terminal_format}${DOTMATRIX_MARK}" else prompt+="${lp_terminal_format}${DOTMATRIX_MARK}" fi else prompt+="${lp_terminal_format}${DOTMATRIX_MARK}" fi prompt+="${NO_COL}" # Assemble and setup 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) hostname="${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 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 local diffs= if (( LP_ENABLE_VCS_DIFFSTATS )) ; then if [[ "$lp_vcs_commit_ahead" -ne "0" && "$lp_vcs_commit_behind" -ne "0" ]]; then __dotmatrix_make_field "+$lp_vcs_commit_ahead" ${DOTMATRIX_COLOR_NOTE[@]+"${DOTMATRIX_COLOR_NOTE[@]}"} has_commit+="$dotmatrix_field" __dotmatrix_make_sep_soft ${DOTMATRIX_COLOR_NOTE[@]+"${DOTMATRIX_COLOR_NOTE[@]}"} has_commit+="$dotmatrix_sep" __dotmatrix_make_field "-$lp_vcs_commit_behind" ${DOTMATRIX_COLOR_NOTE[@]+"${DOTMATRIX_COLOR_NOTE[@]}"} has_commit+="$dotmatrix_field" elif [[ "$lp_vcs_commit_ahead" -ne "0" ]]; then __dotmatrix_make_field "+$lp_vcs_commit_ahead" ${DOTMATRIX_COLOR_NOTE[@]+"${DOTMATRIX_COLOR_NOTE[@]}"} has_commit+="$dotmatrix_field" elif [[ "$lp_vcs_commit_behind" -ne "0" ]]; then __dotmatrix_make_field "-$lp_vcs_commit_behind" ${DOTMATRIX_COLOR_NOTE[@]+"${DOTMATRIX_COLOR_NOTE[@]}"} has_commit+="$dotmatrix_field" fi diffs+="$has_commit" else __dotmatrix_make_field "$DOTMATRIX_DIFF" ${DOTMATRIX_COLOR_LITE[@]+"${DOTMATRIX_COLOR_LITE[@]}"} diffs+="$dotmatrix_field" fi # LP_ENABLE_VCS_DIFFSTATS # Mark & commits off remote local has_commit= if _lp_vcs_commits_off_remote; then __dotmatrix_make_field "${DOTMATRIX_VCS}${lp_smart_mark}" ${DOTMATRIX_COLOR_NOTE[@]+"${DOTMATRIX_COLOR_NOTE[@]}"} _DOTMATRIX_VCS="$dotmatrix_field" __dotmatrix_make_sep_link ${DOTMATRIX_COLOR_NOTE[@]+"${DOTMATRIX_COLOR_NOTE[@]}"} _DOTMATRIX_VCS+="$dotmatrix_sep" _DOTMATRIX_VCS+="$diffs" if [[ "$lp_vcs_commit_ahead" -ne "0" && "$lp_vcs_commit_behind" -ne "0" ]]; then __dotmatrix_make_sep_plug ${DOTMATRIX_COLOR_NOTE[@]+"${DOTMATRIX_COLOR_NOTE[@]}"} _DOTMATRIX_VCS+="$dotmatrix_sep" else __dotmatrix_make_sep_plug ${DOTMATRIX_COLOR_LITE[@]+"${DOTMATRIX_COLOR_LITE[@]}"} _DOTMATRIX_VCS+="$dotmatrix_sep" fi else # No commit off remote __dotmatrix_make_field "${DOTMATRIX_VCS}${lp_smart_mark}" ${DOTMATRIX_COLOR_DARK[@]+"${DOTMATRIX_COLOR_DARK[@]}"} _DOTMATRIX_VCS="$dotmatrix_field" __dotmatrix_make_sep_plug ${DOTMATRIX_COLOR_LITE[@]+"${DOTMATRIX_COLOR_LITE[@]}"} _DOTMATRIX_VCS+="$dotmatrix_sep" fi # commits off remote # 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_NOTE[@]+"${DOTMATRIX_COLOR_SEP_NOTE[@]}"} 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_NOTE[@]+"${DOTMATRIX_COLOR_SEP_NOTE[@]}"} 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 local format="$@" if [[ -z $format ]] ; then lp_terminal_format -1 else lp_terminal_format $format fi 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[0]}" local dsfg="${DOTMATRIX_COLOR_SEP_FAIR[0]}" [[ -z $dsfg ]] && dsfg=-1 lp_terminal_format "$dsf" -1 0 0 -1 "$fbg" dotmatrix_sep+="${lp_terminal_format}${DOTMATRIX_LINK[1]}" lp_terminal_format "$fg" -1 0 0 -1 "$fbg" dotmatrix_sep+="${lp_terminal_format}${DOTMATRIX_LINK[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[0]}" local dsfg="${DOTMATRIX_COLOR_SEP_FAIR[0]}" [[ -z $dsfg ]] && dsfg=-1 lp_terminal_format "$dsfg" -1 0 0 -1 "$fbg" dotmatrix_sep+="${lp_terminal_format}${DOTMATRIX_OPEN[1]}" lp_terminal_format "$fg" -1 0 0 -1 "$fbg" dotmatrix_sep+="${lp_terminal_format}${DOTMATRIX_OPEN[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[0]}" local dcwfg="${DOTMATRIX_COLOR_WARN[1]}" [[ -z $dcwfg ]] && dcwfg=-1 lp_terminal_format "$dcwfg" -1 0 0 -1 "$fbg" dotmatrix_sep+="${lp_terminal_format}${DOTMATRIX_DANG[1]}" lp_terminal_format "$fg" -1 0 0 -1 "$fbg" dotmatrix_sep+="${lp_terminal_format}${DOTMATRIX_DANG[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_MEAN}" } __dotmatrix_make_sep_last() { # no arg local lp_terminal_format lp_terminal_format -3 -1 0 0 -3 -1 dotmatrix_sep="${lp_terminal_format}${DOTMATRIX_ENDS[0]}${NO_COL}" } __dotmatrix_make_sep_side() { # no arg local lp_terminal_format 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[1]}" }