From c21e700e0345865883e126b92b52eac06d16c0aa Mon Sep 17 00:00:00 2001 From: nojhan Date: Sun, 15 Dec 2024 20:18:22 +0100 Subject: [PATCH] first working version --- boxed.theme | 252 +++++++++++++++++++++++----------------------------- 1 file changed, 109 insertions(+), 143 deletions(-) diff --git a/boxed.theme b/boxed.theme index 6a13ff8..e67615b 100644 --- a/boxed.theme +++ b/boxed.theme @@ -2,6 +2,19 @@ _lp_boxed_theme_activate() { LP_MARK_DEV_OPEN= LP_MARK_DEV_CLOSE= + LP_MARK_DEV_MID= + LP_MARK_MODULES_OPEN= + LP_MARK_MODULES_SEP= + LP_MARK_MODULES_CLOSE= + LP_MARK_ENV_VARS_OPEN= + LP_MARK_ENV_VARS_SEP= + LP_MARK_ENV_VARS_CLOSE= + + # BOXED_MULTIPLEXER= + # if _lp_multiplexer ; then + # BOXED_MULTIPLEXER="$lp_multiplexer" + # fi + _lp_default_theme_activate } @@ -17,34 +30,79 @@ _lp_boxed_theme_prompt() { _box() { local name="$1" name_len=${#name} + # printf "$name\n" local what="$2" __lp_strip_escapes "$what" local raw_data="$ret" local raw_data_len=${#raw_data} - box_top="" - box_mid="" - box_bot="" + local color="$3" + if [[ -n "$what" ]]; then local i - box_top="┬" + box_hyp+=" " + box_sup+=" " + box_top+="┬" + box_mid+="${color}│${NO_COL}$what" + box_bot+="┴" if (( name_len > raw_data_len )); then - name="${name:0:raw_data_len}" + # printf "On sup/hyp line\n" + local btlen=${#box_top} + local cursor="${box_sup:btlen:1}" + # printf "${btlen}«${cursor}»\n" + + # Fill in hyp if it's missing spaces. + if (( ${#box_hyp} < ${#box_top} )) ; then + for (( i=${#box_hyp}; i < ${#box_top}; i++ )) ; do + box_hyp+=" " + done + fi + + if [[ "$cursor" != " " && "$cursor" != "" ]] ; then + # printf "On hyp line\n" + box_hyp+="┌$name" + box_top+="┴" + else + # printf "On sup line\n" + box_sup+="┌$name" + box_top+="┴" + fi + else + # printf "On top line\n" + box_top+="$name" fi - box_top+="$name" - for (( i=0; i < raw_data_len-name_len; i++ )) ; do + + # Fill in missing spaces, using box_mid as reference. + __lp_strip_escapes "$box_mid" + local mid="$ret" + for (( i=${#box_hyp}; i < ${#mid}; i++ )) ; do + box_hyp+=" " + done + for (( i=${#box_sup}; i < ${#mid}; i++ )) ; do + box_sup+=" " + done + for (( i=${#box_top}; i < ${#mid}; i++ )) ; do box_top+="─" done - - box_mid="│$what" - - box_bot="┴" - for (( i=0; i < raw_data_len; i++ )) ; do + # printf "${#box_bot}->${#mid}" + for (( i=${#box_bot}; i < ${#mid}; i++ )) ; do box_bot+="─" done + fi + + # __lp_strip_escapes "$box_hyp" + # printf "$ret\n" + # __lp_strip_escapes "$box_sup" + # printf "$ret\n" + # __lp_strip_escapes "$box_top" + # printf "$ret\n" + # __lp_strip_escapes "$box_mid" + # printf "$ret\n" + # __lp_strip_escapes "$box_bot" + # printf "$ret\n" } @@ -55,150 +113,58 @@ _lp_boxed_theme_prompt_template() { fi if [[ -z "${LP_PS1-}" ]]; then - top="" - mid="" - bot="" + box_hyp="" + box_sup="" + box_top="" + box_mid="" + box_bot="" + + lp_terminal_format 243 + boxed_color="$lp_terminal_format" # Add title escape time, battery, load, temperature, RAM, disk, wifi, jobs. - _box "ps1_prefix" "${LP_PS1_PREFIX}" - top+="$box_top" - mid+="$box_mid" - bot+="$box_bot" - - _box "time" "${LP_TIME}" - top+="$box_top" - mid+="$box_mid" - bot+="$box_bot" - - _box "batt" "${LP_BATT}" - top+="$box_top" - mid+="$box_mid" - bot+="$box_bot" - - _box "load" "${LP_LOAD}" - top+="$box_top" - mid+="$box_mid" - bot+="$box_bot" - - _box "temp" "${LP_TEMP}" - top+="$box_top" - mid+="$box_mid" - bot+="$box_bot" - - _box "ram" "${LP_RAM}" - top+="$box_top" - mid+="$box_mid" - bot+="$box_bot" - - _box "disk" "${LP_DISK}" - top+="$box_top" - mid+="$box_mid" - bot+="$box_bot" - - _box "wifi" "${LP_WIFI}" - top+="$box_top" - mid+="$box_mid" - bot+="$box_bot" - - _box "jobs" "${LP_JOBS}" - top+="$box_top" - mid+="$box_mid" - bot+="$box_bot" - + _box "ps1_prefix" "${LP_PS1_PREFIX}" "$boxed_color" + _box "time" "${LP_TIME}" "$boxed_color" + _box "batt" "${LP_BATT}" "$boxed_color" + _box "load" "${LP_LOAD}" "$boxed_color" + _box "temp" "${LP_TEMP}" "$boxed_color" + _box "ram" "${LP_RAM}" "$boxed_color" + _box "disk" "${LP_DISK}" "$boxed_color" + _box "wifi" "${LP_WIFI}" "$boxed_color" + _box "jobs" "${LP_JOBS}" "$boxed_color" # Add multiplexer brackets, user, host, permissions colon, working directory, dirstack, proxy, watched environment variables and nested shell level. - _box "bracket_open" "${LP_BRACKET_OPEN}" - top+="$box_top" - mid+="$box_mid" - bot+="$box_bot" - - _box "bracket_close" "${LP_BRACKET_CLOSE}" - top+="$box_top" - mid+="$box_mid" - bot+="$box_bot" - - _box "user" "${LP_USER}" - top+="$box_top" - mid+="$box_mid" - bot+="$box_bot" - - _box "host" "${LP_HOST}" - top+="$box_top" - mid+="$box_mid" - bot+="$box_bot" - - _box "perm" "${LP_PERM}" - top+="$box_top" - mid+="$box_mid" - bot+="$box_bot" - - _box "pwd" "${LP_PWD}" - top+="$box_top" - mid+="$box_mid" - bot+="$box_bot" - - _box "dirstack" "${LP_DIRSTACK}" - top+="$box_top" - mid+="$box_mid" - bot+="$box_bot" - - _box "proxy" "${LP_PROXY}" - top+="$box_top" - mid+="$box_mid" - bot+="$box_bot" - - _box "envvars" "${LP_ENVVARS}" - top+="$box_top" - mid+="$box_mid" - bot+="$box_bot" - - _box "shlvl" "${LP_SHLVL}" - top+="$box_top" - mid+="$box_mid" - bot+="$box_bot" + # _box "multiplexer" "${BOXED_MULTIPLEXER}" "$boxed_color" + _box "bracket_open" "${LP_BRACKET_OPEN}" "$boxed_color" + _box "user" "${LP_USER}" "$boxed_color" + _box "host" "${LP_HOST}" "$boxed_color" + _box "perm" "${LP_PERM}" "$boxed_color" + _box "pwd" "${LP_PWD}" "$boxed_color" + _box "dirstack" "${LP_DIRSTACK}" "$boxed_color" + _box "bracket_close" "${LP_BRACKET_CLOSE}" "$boxed_color" + _box "proxy" "${LP_PROXY}" "$boxed_color" + _box "envvars" "${LP_ENVVARS}" "$boxed_color" + _box "shlvl" "${LP_SHLVL}" "$boxed_color" # Add the list of development environments/config/etc. - _box "dev_env" "${LP_DEV_ENV}" - top+="$box_top" - mid+="$box_mid" - bot+="$box_bot" - + _box "dev_env" "${LP_DEV_ENV}" "$boxed_color" # Add VCS infos # If root, the info has not been collected unless LP_ENABLE_VCS_ROOT # is set. - _box "vcs" "${LP_VCS}" - top+="$box_top" - mid+="$box_mid" - bot+="$box_bot" - + _box "vcs" "${LP_VCS}" "$boxed_color" # Add last runtime, return code & meaning, prompt mark and user-defined postfix. - _box "runtime" "${LP_RUNTIME}" - top+="$box_top" - mid+="$box_mid" - bot+="$box_bot" + _box "runtime" "${LP_RUNTIME}" "$boxed_color" + _box "err" "${LP_ERR}" "$boxed_color" + _box "err_meaning" "${LP_ERR_MEANING}" "$boxed_color" - _box "err" "${LP_ERR}" - top+="$box_top" - mid+="$box_mid" - bot+="$box_bot" + box_hyp+=" " + box_sup+=" " + box_top+="┐" + box_mid+="${boxed_color}│${NO_COL}" + box_bot+="┘" - _box "err_meaning" "${LP_ERR_MEANING}" - top+="$box_top" - mid+="$box_mid" - bot+="$box_bot" - - _box "mark_prefix" "${LP_MARK_PREFIX}" - top+="$box_top" - mid+="$box_mid" - bot+="$box_bot" - - _box "color_mark" "${LP_COLOR_MARK}" - top+="$box_top" - mid+="$box_mid" - bot+="$box_bot" - - PS1="$top\n$mid\n$bot\n${LP_MARK}${LP_PS1_POSTFIX}" + PS1="${boxed_color}${box_hyp}\n${box_sup}\n${box_top}${NO_COL}\n${box_mid}\n${boxed_color}${box_bot}${NO_COL}\n${LP_MARK_PREFIX}${LP_MARK}${LP_PS1_POSTFIX}" # Get the core sections without prompt escapes and make them into a title. _lp_formatted_title "${LP_PS1_PREFIX}${LP_BRACKET_OPEN}${LP_USER}${LP_HOST}${LP_MARK_PERM}${lp_path-}${LP_BRACKET_CLOSE}${LP_MARK_PREFIX}${LP_MARK}${LP_PS1_POSTFIX}"