Skip to content

[Bug]: Newest bashit with powerline multiline miscalculate padlock symbol for SSH, causing extra linewrap #2297

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
neurorepro opened this issue Mar 31, 2025 · 0 comments

Comments

@neurorepro
Copy link

Expected behavior

The right part of the prompt ends at the right of the first prompt line

Current behavior

The right part of the prompt ends at the beginning of the second line by a few characters about the same space of the SSH padlock icon

Possible solution

I could fix it only by copying an older version of .bash_it in my new server. Here are the difference between the older working version (.bash_it) and the newest version with the bug (beehive_bash_it):

Diff between the (assumed relevant) files between working and non working versions of `bash-it`.
  diff -r .bash_it/docs/themes-list/powerline-base.rst beehive_bash_it/docs/themes-list/powerline-base.rst
84c84
< * ``node`` - Current node version (only ``nvm`` is supported)
---
> * ``node`` - Current node version (``nvm`` is the default strategy; set ``NODE_VERSION_STRATEGY`` to ``node`` to use ``node --version``)

diff -r .bash_it/plugins/available/powerline.plugin.bash beehive_bash_it/plugins/available/powerline.plugin.bash
1a2
> # shellcheck disable=SC2034
25,26c26,28
< [ -e $bashPowerlineInit ] || return
< source $bashPowerlineInit
---
> [ -e "$bashPowerlineInit" ] || return
> # shellcheck disable=SC1090
> source "$bashPowerlineInit"

diff -r .bash_it/themes/gitline/gitline.theme.bash beehive_bash_it/themes/gitline/gitline.theme.bash
1,3c1,4
< #!/usr/bin/env bash
< 
< . "$BASH_IT/themes/gitline/powerline.base.bash"
---
> # shellcheck shell=bash
> # shellcheck disable=SC2034 # Expected behavior for themes.
> # shellcheck source-path=SCRIPTDIR/../gitline
> source "${BASH_IT?}/themes/gitline/powerline.base.bash"
12c13
< POWERLINE_LEFT_SEPARATOR=${POWERLINE_LEFT_SEPARATOR:=""}
---
> : "${POWERLINE_LEFT_SEPARATOR:=""}"
57c58
< BATTERY_AC_CHAR=${BATTERY_AC_CHAR:="⚡"}
---
> : "${BATTERY_AC_CHAR:="⚡"}"
62c63
< THEME_CLOCK_FORMAT=${THEME_CLOCK_FORMAT:="%H:%M:%S"}
---
> : "${THEME_CLOCK_FORMAT:="%H:%M:%S"}"
69a71
> : "${POWERLINE_PROMPT:="user_info scm python_venv ruby node cwd"}"
diff -r .bash_it/themes/gitline/powerline.base.bash beehive_bash_it/themes/gitline/powerline.base.bash
0a1,2
> # shellcheck shell=bash
> # shellcheck disable=SC2034 # Expected behavior for themes.
3,12c5,14
< function set_color {
<   set +u
<   if [[ "${1}" != "-" ]]; then
<     fg="38;5;${1}"
<   fi
<   if [[ "${2}" != "-" ]]; then
<     bg="48;5;${2}"
<     [[ -n "${fg}" ]] && bg=";${bg}"
<   fi
<   echo -e "\[\033[${fg}${bg}m\]"
---
> function set_color() {
> 	local fg='' bg=''
> 	if [[ "${1:-}" != "-" ]]; then
> 		fg="38;5;${1}"
> 	fi
> 	if [[ "${2:-}" != "-" ]]; then
> 		bg="48;5;${2}"
> 		[[ -n "${fg}" ]] && bg=";${bg}"
> 	fi
> 	echo -e "\[\033[${fg}${bg}m\]"
16,43c18,58
< function __powerline_user_info_prompt {
<   local user_info="${USER}"
<   local color=${USER_INFO_THEME_PROMPT_COLOR}
<   local fg_color=15
< 
<   if [[ "${THEME_CHECK_SUDO}" = true ]]; then
<     if sudo -n uptime 2>&1 | grep -q "load"; then
<       color=${USER_INFO_THEME_PROMPT_COLOR_SUDO}
<     fi
<   fi
< 
<   case "${POWERLINE_PROMPT_USER_INFO_MODE}" in
<     "sudo")
<       if [[ "${color}" = "${USER_INFO_THEME_PROMPT_COLOR_SUDO}" ]]; then
<         user_info="👑 ${USER}"
<         fg_color=227
<         color=${USER_INFO_THEME_PROMPT_COLOR_SUDO}
<       fi
<       ;;
<     *)
<       if [[ -n "${SSH_CLIENT}" ]] || [[ -n "${SSH_CONNECTION}" ]]; then
<         user_info="${USER_INFO_SSH_CHAR}${USER}"
<       else
<         user_info="${USER}"
<       fi
<       ;;
<   esac
<   [[ -n "${user_info}" ]] && echo "${user_info}|${color}|${fg_color}"
---
> function __powerline_user_info_prompt() {
> 	local user_info="${SHORT_USER:-${USER}}"
> 	local color=${USER_INFO_THEME_PROMPT_COLOR-${POWERLINE_USER_INFO_COLOR-"32"}}
> 	local -i fg_color=15
> 
> 	if [[ "${THEME_CHECK_SUDO:-false}" == true ]]; then
> 		if sudo -vn 2> /dev/null; then
> 			color=${USER_INFO_THEME_PROMPT_COLOR_SUDO-${POWERLINE_USER_INFO_COLOR_SUDO-"202"}}
> 		fi
> 	fi
> 
> 	case "${POWERLINE_PROMPT_USER_INFO_MODE:-}" in
> 		"sudo")
> 			if [[ "${color}" == "${USER_INFO_THEME_PROMPT_COLOR_SUDO?}" ]]; then
> 				user_info="👑 ${USER}"
> 				fg_color=227
> 			fi
> 			;;
> 		*)
> 			if [[ -n "${SSH_CLIENT:-}" ]] || [[ -n "${SSH_CONNECTION:-}" ]]; then
> 				user_info="${USER_INFO_SSH_CHAR-${POWERLINE_USER_INFO_SSH_CHAR-"⌁ "}}${user_info}"
> 			fi
> 			;;
> 	esac
> 	echo "${user_info}|${color}|${fg_color}"
> }
> 
> function __powerline_terraform_prompt() {
> 	local terraform_workspace=""
> 
> 	if [[ -d .terraform ]]; then
> 		terraform_workspace="$(terraform_workspace_prompt)"
> 		[[ -n "${terraform_workspace}" ]] && echo "${TERRAFORM_CHAR-${POWERLINE_TERRAFORM_CHAR-"❲t❳ "}}${terraform_workspace}|${TERRAFORM_THEME_PROMPT_COLOR-${POWERLINE_TERRAFORM_COLOR-"161"}}"
> 	fi
> }
> 
> function __powerline_gcloud_prompt() {
> 	local active_gcloud_account=""
> 
> 	active_gcloud_account="$(active_gcloud_account_prompt)"
> 	[[ -n "${active_gcloud_account}" ]] && echo "${GCLOUD_CHAR-${POWERLINE_GCLOUD_CHAR-"❲G❳ "}}${active_gcloud_account}|${GCLOUD_THEME_PROMPT_COLOR-${POWERLINE_GCLOUD_COLOR-"161"}}"
46,80c61,62
< #Customising Ruby Prompt
< function __powerline_ruby_prompt {
<   local ruby_version=""
<   local fg_color=206
< 
<   if _command_exists rvm; then
<     ruby_version="$(rvm_version_prompt)"
<   elif _command_exists rbenv; then
<     ruby_version=$(rbenv_version_prompt)
<   fi
< 
<   [[ -n "${ruby_version}" ]] && echo "${RUBY_CHAR}${ruby_version}|${RUBY_THEME_PROMPT_COLOR}|${fg_color}"
< }
< 
< #Customising Python (venv) Prompt
< function __powerline_python_venv_prompt {
<   set +u
<   local python_venv=""
<   local fg_color=206
< 
<   if [[ -n "${CONDA_DEFAULT_ENV}" ]]; then
<     python_venv="${CONDA_DEFAULT_ENV}"
<     PYTHON_VENV_CHAR=${CONDA_PYTHON_VENV_CHAR}
<   elif [[ -n "${VIRTUAL_ENV}" ]]; then
<     python_venv=$(basename "${VIRTUAL_ENV}")
<   fi
< 
<   [[ -n "${python_venv}" ]] && echo "${PYTHON_VENV_CHAR}${python_venv}|${PYTHON_VENV_THEME_PROMPT_COLOR}|${fg_color}"
< }
< 
< #Customising SCM(GIT) Prompt
< function __powerline_scm_prompt {
<   local color=""
<   local scm_prompt=""
<   local fg_color=206
---
> function __powerline_node_prompt() {
> 	local node_version=""
82,117c64,65
<   scm_prompt_vars
< 
< 
<   if [[ "${SCM_NONE_CHAR}" != "${SCM_CHAR}" ]]; then
<     if [[ "${SCM_DIRTY}" -eq 3 ]]; then
<       color=${SCM_THEME_PROMPT_STAGED_COLOR}
<       fg_color=124
<     elif [[ "${SCM_DIRTY}" -eq 2 ]]; then
<       color=${SCM_THEME_PROMPT_UNSTAGED_COLOR}
<       fg_color=56
<     elif [[ "${SCM_DIRTY}" -eq 1 ]]; then
<       color=${SCM_THEME_PROMPT_DIRTY_COLOR}
<       fg_color=118
<     elif [[ "${SCM_DIRTY}" -eq 0 ]]; then
<       color=${SCM_THEME_PROMPT_CLEAN_COLOR}
<       fg_color=16
<     else
<       color=${SCM_THEME_PROMPT_COLOR}
<       fg_color=255
<     fi
<     if [[ "${SCM_GIT_CHAR}" == "${SCM_CHAR}" ]]; then
<       scm_prompt+="${SCM_CHAR}${SCM_BRANCH}${SCM_STATE}"
<     elif [[ "${SCM_P4_CHAR}" == "${SCM_CHAR}" ]]; then
<       scm_prompt+="${SCM_CHAR}${SCM_BRANCH}${SCM_STATE}"
<     elif [[ "${SCM_HG_CHAR}" == "${SCM_CHAR}" ]]; then
<       scm_prompt+="${SCM_CHAR}${SCM_BRANCH}${SCM_STATE}"
<     fi
<     echo "${scm_prompt}${scm}|${color}|${fg_color}"
<   fi
< }
< 
< function __powerline_cwd_prompt {
<   local cwd=$(pwd | sed "s|^${HOME}|~|")
<   local fg_color=16
< 
<   echo "${cwd}|${CWD_THEME_PROMPT_COLOR}|${fg_color}"
---
> 	node_version="$(node_version_prompt)"
> 	[[ -n "${node_version}" ]] && echo "${NODE_CHAR-${POWERLINE_NODE_CHAR-="❲n❳ "}}${node_version}|${NODE_THEME_PROMPT_COLOR-${POWERLINE_NODE_COLOR-"22"}}"
120,130c68,71
< function __powerline_hostname_prompt {
<   local fg_color=206
< 
<   echo "$(hostname -s)|${HOST_THEME_PROMPT_COLOR}|${fg_color}"
< }
< 
< function __powerline_wd_prompt {
<   local fg_color=206
< 
<   echo "\W|${CWD_THEME_PROMPT_COLOR}|${fg_color}"
< }
---
> #Customising Ruby Prompt
> function __powerline_ruby_prompt() {
> 	local ruby_version
> 	local -i fg_color=206
132,133c73,77
< function __powerline_clock_prompt {
<     local fg_color=206
---
> 	if _command_exists rvm; then
> 		ruby_version="$(rvm_version_prompt)"
> 	elif _command_exists rbenv; then
> 		ruby_version=$(rbenv_version_prompt)
> 	fi
135c79,81
<   echo "$(date +"${THEME_CLOCK_FORMAT}")|${CLOCK_THEME_PROMPT_COLOR}|${fg_color}"
---
> 	if [[ -n "${ruby_version:-}" ]]; then
> 		echo "${RUBY_CHAR?}${ruby_version}|${RUBY_THEME_PROMPT_COLOR?}|${fg_color}"
> 	fi
138,141c84,85
< function __powerline_battery_prompt {
<   local color=""
<   local battery_status="$(battery_percentage 2> /dev/null)"
<   local fg_color=255
---
> function __powerline_k8s_context_prompt() {
> 	local kubernetes_context=""
143,156c87,89
<   if [[ -z "${battery_status}" ]] || [[ "${battery_status}" = "-1" ]] || [[ "${battery_status}" = "no" ]]; then
<     true
<   else
<     if [[ "$((10#${battery_status}))" -le 5 ]]; then
<       color="${BATTERY_STATUS_THEME_PROMPT_CRITICAL_COLOR}"
<     elif [[ "$((10#${battery_status}))" -le 25 ]]; then
<       color="${BATTERY_STATUS_THEME_PROMPT_LOW_COLOR}"
<     else
<       color="${BATTERY_STATUS_THEME_PROMPT_GOOD_COLOR}"
<     fi
<     ac_adapter_connected && battery_status="${BATTERY_AC_CHAR}${battery_status}"
<     echo "${battery_status}%|${color}|${fg_color}"
<   fi
< }
---
> 	if _command_exists kubectl; then
> 		kubernetes_context="$(k8s_context_prompt)"
> 	fi
158,163c91
< function __powerline_in_vim_prompt {
<   local fg_color=206
< 
<   if [ -n "$VIMRUNTIME" ]; then
<     echo "${IN_VIM_THEME_PROMPT_TEXT}|${IN_VIM_THEME_PROMPT_COLOR}|${fg_color}"
<   fi
---
> 	[[ -n "${kubernetes_context}" ]] && echo "${KUBERNETES_CONTEXT_THEME_CHAR-${POWERLINE_KUBERNETES_CONTEXT_CHAR-"⎈ "}}${kubernetes_context}|${KUBERNETES_CONTEXT_THEME_PROMPT_COLOR-${POWERLINE_KUBERNETES_CONTEXT_COLOR-"26"}}"
166,167c94,95
< function __powerline_aws_profile_prompt {
<   local fg_color=206
---
> function __powerline_k8s_namespace_prompt() {
> 	local kubernetes_namespace=""
169,172c97,99
<   if [[ -n "${AWS_PROFILE}" ]]; then
<     echo "${AWS_PROFILE_CHAR}${AWS_PROFILE}|${AWS_PROFILE_PROMPT_COLOR}|${fg_color}"
<   fi
< }
---
> 	if _command_exists kubectl; then
> 		kubernetes_namespace="$(k8s_namespace_prompt)"
> 	fi
174,179c101
< function __powerline_in_toolbox_prompt {
<   local fg_color=206
< 
<   if [ -f /run/.containerenv ] && [ -f /run/.toolboxenv ]; then
<     echo "${IN_TOOLBOX_THEME_PROMPT_TEXT}|${IN_TOOLBOX_THEME_PROMPT_COLOR}|${fg_color}"
<   fi
---
> 	[[ -n "${kubernetes_namespace}" ]] && echo "${KUBERNETES_NAMESPACE_THEME_CHAR-${POWERLINE_KUBERNETES_NAMESPACE_CHAR-"⎈ "}}${kubernetes_namespace}|${KUBERNETES_NAMESPACE_THEME_PROMPT_COLOR-${POWERLINE_KUBERNETES_NAMESPACE_COLOR-"60"}}"
182,199c104,114
< function __powerline_left_segment {
<   local OLD_IFS="${IFS}"; IFS="|"
<   local params=( $1 )
<   IFS="${OLD_IFS}"
<   local separator_char="${POWERLINE_LEFT_SEPARATOR}"
<   local separator=""
<   local fg_color=206
< 
<   #for seperator character
<   if [[ "${SEGMENTS_AT_LEFT}" -gt 0 ]]; then
<     separator="$(set_color ${LAST_SEGMENT_COLOR} ${params[1]})${separator_char}${normal}"
<   fi
<   #change here to cahnge fg color
<   LEFT_PROMPT+="${separator}$(set_color ${params[2]} ${params[1]}) ${params[0]} ${normal}"
<   #seperator char color = current bg
<   LAST_SEGMENT_COLOR=${params[1]}
<   (( SEGMENTS_AT_LEFT += 1 ))
< }
---
> #Customising Python (venv) Prompt
> function __powerline_python_venv_prompt() {
> 	local python_venv=""
> 	local -i fg_color=206
> 
> 	if [[ -n "${CONDA_DEFAULT_ENV:-}" ]]; then
> 		python_venv="${CONDA_DEFAULT_ENV}"
> 		local PYTHON_VENV_CHAR=${CONDA_PYTHON_VENV_CHAR-${POWERLINE_CONDA_PYTHON_VENV_CHAR-"ⓔ "}}
> 	elif [[ -n "${VIRTUAL_ENV:-}" ]]; then
> 		python_venv="${VIRTUAL_ENV##*/}"
> 	fi
201,202c116
< function __powerline_last_status_prompt {
<   [[ "$1" -ne 0 ]] && echo "${1}|${LAST_STATUS_THEME_PROMPT_COLOR}"
---
> 	[[ -n "${python_venv}" ]] && echo "${PYTHON_VENV_CHAR?}${python_venv}|${PYTHON_VENV_THEME_PROMPT_COLOR?}|${fg_color}"
205,232c119,344
< function __powerline_prompt_command {
<   local last_status="$?" ## always the first
<   local separator_char="${POWERLINE_PROMPT_CHAR}"
< 
<   LEFT_PROMPT=""
<   SEGMENTS_AT_LEFT=0
<   LAST_SEGMENT_COLOR=""
< 
< 
<   if [[ -n "${POWERLINE_PROMPT_DISTRO_LOGO}" ]]; then
<       LEFT_PROMPT+="$(set_color ${PROMPT_DISTRO_LOGO_COLOR} ${PROMPT_DISTRO_LOGO_COLORBG})${PROMPT_DISTRO_LOGO}$(set_color - -)"
<   fi
< 
<   ## left prompt ##
<   for segment in $POWERLINE_PROMPT; do
<     local info="$(__powerline_${segment}_prompt)"
<     [[ -n "${info}" ]] && __powerline_left_segment "${info}"
<   done
< 
<   [[ "${last_status}" -ne 0 ]] && __powerline_left_segment $(__powerline_last_status_prompt ${last_status})
<   [[ -n "${LEFT_PROMPT}" ]] && LEFT_PROMPT+="$(set_color ${LAST_SEGMENT_COLOR} -)${separator_char}${normal}"
< 
<   PS1="${LEFT_PROMPT} "
< 
<   ## cleanup ##
<   unset LAST_SEGMENT_COLOR \
<         LEFT_PROMPT \
<         SEGMENTS_AT_LEFT
---
> #Customising SCM(GIT) Prompt
> function __powerline_scm_prompt() {
> 	local color=""
> 	local scm_prompt=""
> 	local -i fg_color=206
> 
> 	scm_prompt_vars
> 
> 	if [[ "${SCM_NONE_CHAR?}" != "${SCM_CHAR?}" ]]; then
> 		if [[ "${SCM_DIRTY?}" -eq 3 ]]; then
> 			color=${SCM_THEME_PROMPT_STAGED_COLOR-${POWERLINE_SCM_STAGED_COLOR-"30"}}
> 			fg_color=124
> 		elif [[ "${SCM_DIRTY?}" -eq 2 ]]; then
> 			color=${SCM_THEME_PROMPT_UNSTAGED_COLOR-${POWERLINE_SCM_UNSTAGED_COLOR-"92"}}
> 			fg_color=56
> 		elif [[ "${SCM_DIRTY?}" -eq 1 ]]; then
> 			color=${SCM_THEME_PROMPT_DIRTY_COLOR-${POWERLINE_SCM_DIRTY_COLOR-"88"}}
> 			fg_color=118
> 		elif [[ "${SCM_DIRTY?}" -eq 0 ]]; then
> 			color=${SCM_THEME_PROMPT_CLEAN_COLOR-${POWERLINE_SCM_CLEAN_COLOR-"25"}}
> 			fg_color=16
> 		else
> 			color=${SCM_THEME_PROMPT_COLOR-${POWERLINE_SCM_CLEAN_COLOR-"25"}}
> 			fg_color=255
> 		fi
> 		if [[ "${SCM_GIT_CHAR?}" == "${SCM_CHAR?}" ]]; then
> 			scm_prompt+="${SCM_CHAR}${SCM_BRANCH?}${SCM_STATE?}"
> 		elif [[ "${SCM_P4_CHAR?}" == "${SCM_CHAR}" ]]; then
> 			scm_prompt+="${SCM_CHAR}${SCM_BRANCH?}${SCM_STATE?}"
> 		elif [[ "${SCM_HG_CHAR?}" == "${SCM_CHAR}" ]]; then
> 			scm_prompt+="${SCM_CHAR}${SCM_BRANCH?}${SCM_STATE?}"
> 		elif [[ "${SCM_SVN_CHAR?}" == "${SCM_CHAR}" ]]; then
> 			scm_prompt+="${SCM_CHAR}${SCM_BRANCH?}${SCM_STATE?}"
> 		fi
> 		echo "${scm_prompt?}|${color}|${fg_color}"
> 	fi
> }
> 
> function __powerline_cwd_prompt() {
> 	local -i fg_color=16
> 
> 	echo "\w|${CWD_THEME_PROMPT_COLOR?}|${fg_color}"
> }
> 
> function __powerline_hostname_prompt() {
> 	local -i fg_color=206
> 
> 	echo "\h|${HOST_THEME_PROMPT_COLOR?}|${fg_color}"
> }
> 
> function __powerline_wd_prompt() {
> 	local -i fg_color=206
> 
> 	echo "\W|${CWD_THEME_PROMPT_COLOR?}|${fg_color}"
> }
> 
> function __powerline_clock_prompt() {
> 	local -i fg_color=206
> 
> 	echo "\D{${THEME_CLOCK_FORMAT?}}|${CLOCK_THEME_PROMPT_COLOR?}|${fg_color}"
> }
> 
> function __powerline_battery_prompt() {
> 	local color="" battery_status
> 	battery_status="$(battery_percentage 2> /dev/null)"
> 	local -i fg_color=255
> 
> 	if [[ -z "${battery_status}" || "${battery_status}" == "-1" || "${battery_status}" == "no" ]]; then
> 		true
> 	else
> 		if [[ "$((10#${battery_status}))" -le 5 ]]; then
> 			color="${BATTERY_STATUS_THEME_PROMPT_CRITICAL_COLOR-"160"}"
> 		elif [[ "$((10#${battery_status}))" -le 25 ]]; then
> 			color="${BATTERY_STATUS_THEME_PROMPT_LOW_COLOR-"208"}"
> 		else
> 			color="${BATTERY_STATUS_THEME_PROMPT_GOOD_COLOR-"70"}"
> 		fi
> 		ac_adapter_connected && battery_status="${BATTERY_AC_CHAR?}${battery_status}"
> 		echo "${battery_status}%|${color}|${fg_color}"
> 	fi
> }
> 
> function __powerline_in_vim_prompt() {
> 	local -i fg_color=206
> 
> 	if [[ -n "${VIMRUNTIME:-}" ]]; then
> 		echo "${IN_VIM_THEME_PROMPT_TEXT?}|${IN_VIM_THEME_PROMPT_COLOR?}|${fg_color}"
> 	fi
> }
> 
> function __powerline_aws_profile_prompt() {
> 	local -i fg_color=206
> 
> 	if [[ -n "${AWS_PROFILE:-}" ]]; then
> 		echo "${AWS_PROFILE_CHAR?}${AWS_PROFILE?}|${AWS_PROFILE_PROMPT_COLOR?}|${fg_color}"
> 	fi
> }
> 
> function __powerline_in_toolbox_prompt() {
> 	local -i fg_color=206
> 
> 	if [[ -f /run/.containerenv ]] && [[ -f /run/.toolboxenv ]]; then
> 		echo "${IN_TOOLBOX_THEME_PROMPT_TEXT?}|${IN_TOOLBOX_THEME_PROMPT_COLOR?}|${fg_color}"
> 	fi
> }
> 
> function __powerline_shlvl_prompt() {
> 	if [[ "${SHLVL}" -gt 1 ]]; then
> 		local prompt="${SHLVL_THEME_PROMPT_CHAR-"§"}"
> 		local level=$((SHLVL - 1))
> 		echo "${prompt}${level}|${SHLVL_THEME_PROMPT_COLOR-${HOST_THEME_PROMPT_COLOR-"0"}}"
> 	fi
> }
> 
> function __powerline_dirstack_prompt() {
> 	if [[ "${#DIRSTACK[@]}" -gt 1 ]]; then
> 		local depth=$((${#DIRSTACK[@]} - 1))
> 		local prompt="${DIRSTACK_THEME_PROMPT_CHAR-${POWERLINE_DIRSTACK_CHAR-"←"}}"
> 		if [[ "${depth}" -ge 2 ]]; then
> 			prompt+="${depth}"
> 		fi
> 		echo "${prompt}|${DIRSTACK_THEME_PROMPT_COLOR-${POWERLINE_DIRSTACK_COLOR-${CWD_THEME_PROMPT_COLOR-${POWERLINE_CWD_COLOR-"240"}}}}"
> 	fi
> }
> 
> function __powerline_history_number_prompt() {
> 	echo "${HISTORY_NUMBER_THEME_PROMPT_CHAR-${POWERLINE_HISTORY_NUMBER_CHAR-"#"}}\!|${HISTORY_NUMBER_THEME_PROMPT_COLOR-${POWERLINE_HISTORY_NUMBER_COLOR-"0"}}"
> }
> 
> function __powerline_command_number_prompt() {
> 	echo "${COMMAND_NUMBER_THEME_PROMPT_CHAR-${POWERLINE_COMMAND_NUMBER_CHAR-"#"}}\#|${COMMAND_NUMBER_THEME_PROMPT_COLOR-${POWERLINE_COMMAND_NUMBER_COLOR-"0"}}"
> }
> 
> function __powerline_duration_prompt() {
> 	local duration
> 	duration=$(_command_duration)
> 	[[ -n "$duration" ]] && echo "${duration}|${COMMAND_DURATION_PROMPT_COLOR?}"
> }
> 
> function __powerline_left_segment() {
> 	local -a params
> 	IFS="|" read -ra params <<< "${1}"
> 	local pad_before_segment=" "
> 	local -i fg_color=206
> 
> 	#for seperator character
> 	if [[ "${SEGMENTS_AT_LEFT?}" -eq 0 ]]; then
> 		if [[ "${POWERLINE_COMPACT_BEFORE_FIRST_SEGMENT:-0}" -ne 0 ]]; then
> 			pad_before_segment=""
> 		fi
> 	else
> 		if [[ "${POWERLINE_COMPACT_AFTER_SEPARATOR:-0}" -ne 0 ]]; then
> 			pad_before_segment=""
> 		fi
> 		# Since the previous segment wasn't the last segment, add padding, if needed
> 		#
> 		if [[ "${POWERLINE_COMPACT_BEFORE_SEPARATOR:-0}" -eq 0 ]]; then
> 			LEFT_PROMPT+="$(set_color - "${LAST_SEGMENT_COLOR?}") ${normal?}"
> 		fi
> 		if [[ "${LAST_SEGMENT_COLOR?}" -eq "${params[1]:-}" ]]; then
> 			LEFT_PROMPT+="$(set_color - "${LAST_SEGMENT_COLOR?}")${POWERLINE_LEFT_SEPARATOR_SOFT:- }${normal?}"
> 		else
> 			LEFT_PROMPT+="$(set_color "${LAST_SEGMENT_COLOR?}" "${params[1]:-}")${POWERLINE_LEFT_SEPARATOR:- }${normal?}"
> 		fi
> 	fi
> 
> 	#change here to cahnge fg color
> 	LEFT_PROMPT+="$(set_color "${params[2]:-}" "${params[1]:-}")${pad_before_segment}${params[0]}${normal?}"
> 	#seperator char color == current bg
> 	LAST_SEGMENT_COLOR="${params[1]:-}"
> 	((SEGMENTS_AT_LEFT += 1))
> }
> 
> function __powerline_left_last_segment_padding() {
> 	LEFT_PROMPT+="$(set_color - "${LAST_SEGMENT_COLOR?}") ${normal?}"
> }
> 
> function __powerline_last_status_prompt() {
> 	[[ "$1" -ne 0 ]] && echo "${1}|${LAST_STATUS_THEME_PROMPT_COLOR-"52"}"
> }
> 
> function __powerline_prompt_command() {
> 	local last_status="$?" ## always the first
> 	local info prompt_color
> 
> 	local LEFT_PROMPT=""
> 	local SEGMENTS_AT_LEFT=0
> 	local LAST_SEGMENT_COLOR=""
> 
> 	_save-and-reload-history "${HISTORY_AUTOSAVE:-0}"
> 
> 	if [[ -n "${POWERLINE_PROMPT_DISTRO_LOGO:-}" ]]; then
> 		LEFT_PROMPT+="$(set_color "${PROMPT_DISTRO_LOGO_COLOR?}" "${PROMPT_DISTRO_LOGO_COLORBG?}")${PROMPT_DISTRO_LOGO?}$(set_color - -)"
> 	fi
> 
> 	## left prompt ##
> 	for segment in ${POWERLINE_PROMPT-"user_info" "scm" "python_venv" "ruby" "node" "cwd"}; do
> 		info="$("__powerline_${segment}_prompt")"
> 		[[ -n "${info}" ]] && __powerline_left_segment "${info}"
> 	done
> 
> 	[[ "${last_status}" -ne 0 ]] && __powerline_left_segment "$(__powerline_last_status_prompt "${last_status}")"
> 
> 	if [[ -n "${LEFT_PROMPT:-}" ]] && [[ "${POWERLINE_COMPACT_AFTER_LAST_SEGMENT:-0}" -eq 0 ]]; then
> 		__powerline_left_last_segment_padding
> 	fi
> 
> 	# By default we try to match the prompt to the adjacent segment's background color,
> 	# but when part of the prompt exists within that segment, we instead match the foreground color.
> 	prompt_color="$(set_color "${LAST_SEGMENT_COLOR?}" -)"
> 	if [[ -n "${LEFT_PROMPT:-}" ]] && [[ -n "${POWERLINE_LEFT_LAST_SEGMENT_PROMPT_CHAR:-}" ]]; then
> 		LEFT_PROMPT+="$(set_color - "${LAST_SEGMENT_COLOR?}")${POWERLINE_LEFT_LAST_SEGMENT_PROMPT_CHAR}"
> 		prompt_color="${normal?}"
> 	fi
> 	[[ -n "${LEFT_PROMPT:-}" ]] && LEFT_PROMPT+="${prompt_color}${POWERLINE_PROMPT_CHAR-\\$}${normal?}"
> 
> 	if [[ "${POWERLINE_COMPACT_PROMPT:-0}" -eq 0 ]]; then
> 		LEFT_PROMPT+=" "
> 	fi
> 
> 	PS1="${LEFT_PROMPT?}"
> 
> 	## cleanup ##
> 	unset LAST_SEGMENT_COLOR \
> 		LEFT_PROMPT \
> 		SEGMENTS_AT_LEFT

diff -r .bash_it/themes/powerline/powerline.base.bash beehive_bash_it/themes/powerline/powerline.base.bash
3a4
> #To set color for foreground and background
11c12,14
< 		[[ -n "${fg}" ]] && bg=";${bg}"
---
> 		if [[ -n "${fg}" ]]; then
> 			bg=";${bg}"
> 		fi
13c16
< 	echo -e "\[\033[${fg}${bg}m\]"
---
> 	printf '\[\\e[%s%sm\]' "${fg}" "${bg}"
15a19
> #Customising User Info Segment
17,22c21,22
< 	local user_info=""
< 	local color=${USER_INFO_THEME_PROMPT_COLOR}
< 
< 	if [[ "${THEME_CHECK_SUDO}" = true ]]; then
< 		sudo -vn 1> /dev/null 2>&1 && color=${USER_INFO_THEME_PROMPT_COLOR_SUDO}
< 	fi
---
> 	local user_info='\u'
> 	local color=${USER_INFO_THEME_PROMPT_COLOR-${POWERLINE_USER_INFO_COLOR-"32"}}
24,26c24,27
< 	case "${POWERLINE_PROMPT_USER_INFO_MODE}" in
< 		"sudo")
< 			if [[ "${color}" = "${USER_INFO_THEME_PROMPT_COLOR_SUDO}" ]]; then
---
> 	if [[ "${THEME_CHECK_SUDO:-false}" == true ]]; then
> 		if sudo -vn 2> /dev/null; then
> 			color=${USER_INFO_THEME_PROMPT_COLOR_SUDO-${POWERLINE_USER_INFO_COLOR_SUDO-"202"}}
> 			if [[ "${POWERLINE_PROMPT_USER_INFO_MODE:-}" == "sudo" ]]; then
29,39c30,36
< 			;;
< 		*)
< 			local user=${SHORT_USER:-${USER}}
< 			if [[ -n "${SSH_CLIENT}" ]] || [[ -n "${SSH_CONNECTION}" ]]; then
< 				user_info="${USER_INFO_SSH_CHAR}${user}"
< 			else
< 				user_info="${user}"
< 			fi
< 			;;
< 	esac
< 	[[ -n "${user_info}" ]] && echo "${user_info}|${color}"
---
> 		fi
> 	fi
> 
> 	if [[ -n "${SSH_CLIENT:-}" || -n "${SSH_CONNECTION:-}" ]]; then
> 		user_info="${USER_INFO_SSH_CHAR-${POWERLINE_USER_INFO_SSH_CHAR-"⌁"}}${user_info}"
> 	fi
> 	printf '%s|%s' "${user_info}" "${color}"
45c42
< 	if [ -d .terraform ]; then
---
> 	if [[ -d .terraform ]]; then
47c44,46
< 		[[ -n "${terraform_workspace}" ]] && echo "${TERRAFORM_CHAR}${terraform_workspace}|${TERRAFORM_THEME_PROMPT_COLOR}"
---
> 		if [[ -n "${terraform_workspace}" ]]; then
> 			printf '%s%s|%s' "${TERRAFORM_CHAR-${POWERLINE_TERRAFORM_CHAR-"❲t❳"}}" "${terraform_workspace}" "${TERRAFORM_THEME_PROMPT_COLOR-${POWERLINE_TERRAFORM_COLOR-"161"}}"
> 		fi
55c54,56
< 	[[ -n "${active_gcloud_account}" ]] && echo "${GCLOUD_CHAR}${active_gcloud_account}|${GCLOUD_THEME_PROMPT_COLOR}"
---
> 	if [[ -n "${active_gcloud_account}" ]]; then
> 		printf '%s%s|%s' "${GCLOUD_CHAR-${POWERLINE_GCLOUD_CHAR-"❲G❳"}}" "${active_gcloud_account}" "${GCLOUD_THEME_PROMPT_COLOR-${POWERLINE_GCLOUD_COLOR-"161"}}"
> 	fi
62c63,65
< 	[[ -n "${node_version}" ]] && echo "${NODE_CHAR}${node_version}|${NODE_THEME_PROMPT_COLOR}"
---
> 	if [[ -n "${node_version}" ]]; then
> 		printf '%s%s|%s' "${NODE_CHAR-${POWERLINE_NODE_CHAR-="❲n❳"}}" "${node_version}" "${NODE_THEME_PROMPT_COLOR-${POWERLINE_NODE_COLOR-"22"}}"
> 	fi
64a68
> #Customising Ruby Prompt
66c70
< 	local ruby_version=""
---
> 	local ruby_version
74c78,80
< 	[[ -n "${ruby_version}" ]] && echo "${RUBY_CHAR}${ruby_version}|${RUBY_THEME_PROMPT_COLOR}"
---
> 	if [[ -n "${ruby_version:-}" ]]; then
> 		printf '%s%s|%s' "${RUBY_CHAR-${POWERLINE_RUBY_CHAR-"💎"}}" "${ruby_version}" "${RUBY_THEME_PROMPT_COLOR-${POWERLINE_RUBY_COLOR-"161"}}"
> 	fi
84c90,92
< 	[[ -n "${kubernetes_context}" ]] && echo "${KUBERNETES_CONTEXT_THEME_CHAR}${kubernetes_context}|${KUBERNETES_CONTEXT_THEME_PROMPT_COLOR}"
---
> 	if [[ -n "${kubernetes_context}" ]]; then
> 		printf '%s%s|%s' "${KUBERNETES_CONTEXT_THEME_CHAR-${POWERLINE_KUBERNETES_CONTEXT_CHAR-"⎈"}}" "${kubernetes_context}" "${KUBERNETES_CONTEXT_THEME_PROMPT_COLOR-${POWERLINE_KUBERNETES_CONTEXT_COLOR-"26"}}"
> 	fi
94c102,104
< 	[[ -n "${kubernetes_namespace}" ]] && echo "${KUBERNETES_NAMESPACE_THEME_CHAR}${kubernetes_namespace}|${KUBERNETES_NAMESPACE_THEME_PROMPT_COLOR}"
---
> 	if [[ -n "${kubernetes_namespace}" ]]; then
> 		printf '%s%s|%s' "${KUBERNETES_NAMESPACE_THEME_CHAR-${POWERLINE_KUBERNETES_NAMESPACE_CHAR-"⎈"}}" "${kubernetes_namespace}" "${KUBERNETES_NAMESPACE_THEME_PROMPT_COLOR-${POWERLINE_KUBERNETES_NAMESPACE_COLOR-"60"}}"
> 	fi
96a107
> #Customising Python (venv) Prompt
102c113
< 		PYTHON_VENV_CHAR=${CONDA_PYTHON_VENV_CHAR}
---
> 		local PYTHON_VENV_CHAR=${CONDA_PYTHON_VENV_CHAR-${POWERLINE_CONDA_PYTHON_VENV_CHAR-"ⓔ"}}
107c118,120
< 	[[ -n "${python_venv}" ]] && echo "${PYTHON_VENV_CHAR}${python_venv}|${PYTHON_VENV_THEME_PROMPT_COLOR}"
---
> 	if [[ -n "${python_venv}" ]]; then
> 		printf '%s%s|%s' "${PYTHON_VENV_CHAR-${POWERLINE_PYTHON_VENV_CHAR-"ⓔ"}}" "${python_venv}" "${PYTHON_VENV_THEME_PROMPT_COLOR-${POWERLINE_PYTHON_VENV_COLOR-"35"}}"
> 	fi
109a123
> #Customising SCM(GIT) Prompt
116,122c130,138
< 	if [[ "${SCM_NONE_CHAR}" != "${SCM_CHAR}" ]]; then
< 		if [[ "${SCM_DIRTY}" -eq 3 ]]; then
< 			color=${SCM_THEME_PROMPT_STAGED_COLOR}
< 		elif [[ "${SCM_DIRTY}" -eq 2 ]]; then
< 			color=${SCM_THEME_PROMPT_UNSTAGED_COLOR}
< 		elif [[ "${SCM_DIRTY}" -eq 1 ]]; then
< 			color=${SCM_THEME_PROMPT_DIRTY_COLOR}
---
> 	if [[ "${SCM_NONE_CHAR?}" != "${SCM_CHAR?}" ]]; then
> 		if [[ "${SCM_DIRTY?}" -eq 3 ]]; then
> 			color=${SCM_THEME_PROMPT_STAGED_COLOR-${POWERLINE_SCM_STAGED_COLOR-"30"}}
> 		elif [[ "${SCM_DIRTY?}" -eq 2 ]]; then
> 			color=${SCM_THEME_PROMPT_UNSTAGED_COLOR-${POWERLINE_SCM_UNSTAGED_COLOR-"92"}}
> 		elif [[ "${SCM_DIRTY?}" -eq 1 ]]; then
> 			color=${SCM_THEME_PROMPT_DIRTY_COLOR-${POWERLINE_SCM_DIRTY_COLOR-"88"}}
> 		elif [[ "${SCM_DIRTY?}" -eq 0 ]]; then
> 			color=${SCM_THEME_PROMPT_CLEAN_COLOR-${POWERLINE_SCM_CLEAN_COLOR-"25"}}
124c140
< 			color=${SCM_THEME_PROMPT_CLEAN_COLOR}
---
> 			color=${SCM_THEME_PROMPT_COLOR-${POWERLINE_SCM_CLEAN_COLOR-"25"}}
126,133c142,149
< 		if [[ "${SCM_GIT_CHAR}" == "${SCM_CHAR}" ]]; then
< 			scm_prompt+="${SCM_CHAR}${SCM_BRANCH}${SCM_STATE}"
< 		elif [[ "${SCM_P4_CHAR}" == "${SCM_CHAR}" ]]; then
< 			scm_prompt+="${SCM_CHAR}${SCM_BRANCH}${SCM_STATE}"
< 		elif [[ "${SCM_HG_CHAR}" == "${SCM_CHAR}" ]]; then
< 			scm_prompt+="${SCM_CHAR}${SCM_BRANCH}${SCM_STATE}"
< 		elif [[ "${SCM_SVN_CHAR}" == "${SCM_CHAR}" ]]; then
< 			scm_prompt+="${SCM_CHAR}${SCM_BRANCH}${SCM_STATE}"
---
> 		if [[ "${SCM_GIT_CHAR?}" == "${SCM_CHAR?}" ]]; then
> 			scm_prompt+="${SCM_CHAR}${SCM_BRANCH?}${SCM_STATE?}"
> 		elif [[ "${SCM_P4_CHAR?}" == "${SCM_CHAR}" ]]; then
> 			scm_prompt+="${SCM_CHAR}${SCM_BRANCH?}${SCM_STATE?}"
> 		elif [[ "${SCM_HG_CHAR?}" == "${SCM_CHAR}" ]]; then
> 			scm_prompt+="${SCM_CHAR}${SCM_BRANCH?}${SCM_STATE?}"
> 		elif [[ "${SCM_SVN_CHAR?}" == "${SCM_CHAR}" ]]; then
> 			scm_prompt+="${SCM_CHAR}${SCM_BRANCH?}${SCM_STATE?}"
135c151
< 		echo "${scm_prompt?}|${color}"
---
> 		printf '%s|%s' "${scm_prompt}" "${color}"
140c156
< 	echo "\w|${CWD_THEME_PROMPT_COLOR}"
---
> 	printf '%s|%s' "\w" "${CWD_THEME_PROMPT_COLOR-"240"}"
144c160
< 	echo "${SHORT_HOSTNAME:-$(hostname -s)}|${HOST_THEME_PROMPT_COLOR}"
---
> 	printf '%s|%s' "\h" "${HOST_THEME_PROMPT_COLOR-"0"}"
148c164
< 	echo "\W|${CWD_THEME_PROMPT_COLOR}"
---
> 	printf '%s|%s' "\W" "${CWD_THEME_PROMPT_COLOR-"240"}"
152c168
< 	echo "$(date +"${THEME_CLOCK_FORMAT}")|${CLOCK_THEME_PROMPT_COLOR}"
---
> 	printf '%s|%s' "\D{${THEME_CLOCK_FORMAT-"%H:%M:%S"}}" "${CLOCK_THEME_PROMPT_COLOR-"240"}"
163c179
< 			color="${BATTERY_STATUS_THEME_PROMPT_CRITICAL_COLOR}"
---
> 			color="${BATTERY_STATUS_THEME_PROMPT_CRITICAL_COLOR-"160"}"
165c181
< 			color="${BATTERY_STATUS_THEME_PROMPT_LOW_COLOR}"
---
> 			color="${BATTERY_STATUS_THEME_PROMPT_LOW_COLOR-"208"}"
167c183,186
< 			color="${BATTERY_STATUS_THEME_PROMPT_GOOD_COLOR}"
---
> 			color="${BATTERY_STATUS_THEME_PROMPT_GOOD_COLOR-"70"}"
> 		fi
> 		if ac_adapter_connected; then
> 			battery_status="${BATTERY_AC_CHAR-"+"}${battery_status}"
169,170c188
< 		ac_adapter_connected && battery_status="${BATTERY_AC_CHAR}${battery_status}"
< 		echo "${battery_status}%|${color}"
---
> 		printf '%s|%s' "${battery_status}%" "${color}"
175,176c193,194
< 	if [[ -n "$VIMRUNTIME" ]]; then
< 		echo "${IN_VIM_THEME_PROMPT_TEXT}|${IN_VIM_THEME_PROMPT_COLOR}"
---
> 	if [[ -n "${VIMRUNTIME:-}" ]]; then
> 		printf '%s|%s' "${IN_VIM_THEME_PROMPT_TEXT-"vim"}" "${IN_VIM_THEME_PROMPT_COLOR-"245"}"
181,182c199,200
< 	if [[ -n "${AWS_PROFILE}" ]]; then
< 		echo "${AWS_PROFILE_CHAR}${AWS_PROFILE}|${AWS_PROFILE_PROMPT_COLOR}"
---
> 	if [[ -n "${AWS_PROFILE:-}" ]]; then
> 		printf '%s%s|%s' "${AWS_PROFILE_CHAR-${POWERLINE_AWS_PROFILE_CHAR-"❲aws❳"}}" "${AWS_PROFILE}" "${AWS_PROFILE_PROMPT_COLOR-${POWERLINE_AWS_PROFILE_COLOR-"208"}}"
187,188c205,206
< 	if [ -f /run/.containerenv ] && [ -f /run/.toolboxenv ]; then
< 		echo "${IN_TOOLBOX_THEME_PROMPT_TEXT}|${IN_TOOLBOX_THEME_PROMPT_COLOR}"
---
> 	if [[ -f /run/.containerenv && -f /run/.toolboxenv ]]; then
> 		printf '%s|%s' "${IN_TOOLBOX_THEME_PROMPT_TEXT-"⬢"}" "${IN_TOOLBOX_THEME_PROMPT_COLOR-"125"}"
194c212
< 		local prompt="${SHLVL_THEME_PROMPT_CHAR}"
---
> 		local prompt="${SHLVL_THEME_PROMPT_CHAR-"§"}"
196c214
< 		echo "${prompt}${level}|${SHLVL_THEME_PROMPT_COLOR}"
---
> 		printf '%s|%s' "${prompt}${level}" "${SHLVL_THEME_PROMPT_COLOR-${HOST_THEME_PROMPT_COLOR-"0"}}"
203c221
< 		local prompt="${DIRSTACK_THEME_PROMPT_CHAR}"
---
> 		local prompt="${DIRSTACK_THEME_PROMPT_CHAR-${POWERLINE_DIRSTACK_CHAR-"←"}}"
207c225
< 		echo "${prompt}|${DIRSTACK_THEME_PROMPT_COLOR}"
---
> 		printf '%s|%s' "${prompt}" "${DIRSTACK_THEME_PROMPT_COLOR-${POWERLINE_DIRSTACK_COLOR-${CWD_THEME_PROMPT_COLOR-${POWERLINE_CWD_COLOR-"240"}}}}"
212c230
< 	echo "${HISTORY_NUMBER_THEME_PROMPT_CHAR}\!|${HISTORY_NUMBER_THEME_PROMPT_COLOR}"
---
> 	printf '%s%s|%s' "${HISTORY_NUMBER_THEME_PROMPT_CHAR-${POWERLINE_HISTORY_NUMBER_CHAR-"#"}}" '\!' "${HISTORY_NUMBER_THEME_PROMPT_COLOR-${POWERLINE_HISTORY_NUMBER_COLOR-"0"}}"
216c234
< 	echo "${COMMAND_NUMBER_THEME_PROMPT_CHAR}\#|${COMMAND_NUMBER_THEME_PROMPT_COLOR}"
---
> 	printf '%s%s|%s' "${COMMAND_NUMBER_THEME_PROMPT_CHAR-${POWERLINE_COMMAND_NUMBER_CHAR-"#"}}" '\#' "${COMMAND_NUMBER_THEME_PROMPT_COLOR-${POWERLINE_COMMAND_NUMBER_COLOR-"0"}}"
222c240,242
< 	[[ -n "$duration" ]] && echo "${duration}|${COMMAND_DURATION_PROMPT_COLOR}"
---
> 	if [[ -n "$duration" ]]; then
> 		printf '%s|%s' "${duration}" "${COMMAND_DURATION_PROMPT_COLOR?}"
> 	fi
226c246
< 	local params
---
> 	local -a params
230,231c250,252
< 	if [[ "${SEGMENTS_AT_LEFT}" -eq 0 ]]; then
< 		if [[ "${POWERLINE_COMPACT_BEFORE_FIRST_SEGMENT}" -ne 0 ]]; then
---
> 	#for seperator character
> 	if [[ "${SEGMENTS_AT_LEFT?}" -eq 0 ]]; then
> 		if [[ "${POWERLINE_COMPACT_BEFORE_FIRST_SEGMENT:-${POWERLINE_COMPACT:-0}}" -ne 0 ]]; then
235c256
< 		if [[ "${POWERLINE_COMPACT_AFTER_SEPARATOR}" -ne 0 ]]; then
---
> 		if [[ "${POWERLINE_COMPACT_AFTER_SEPARATOR:-${POWERLINE_COMPACT:-0}}" -ne 0 ]]; then
240,241c261,262
< 		if [[ "${POWERLINE_COMPACT_BEFORE_SEPARATOR}" -eq 0 ]]; then
< 			LEFT_PROMPT+="$(set_color - "${LAST_SEGMENT_COLOR}") ${normal?}"
---
> 		if [[ "${POWERLINE_COMPACT_BEFORE_SEPARATOR:-${POWERLINE_COMPACT:-0}}" -eq 0 ]]; then
> 			LEFT_PROMPT+="$(set_color - "${LAST_SEGMENT_COLOR?}") ${normal?}"
243,244c264,265
< 		if [[ "${LAST_SEGMENT_COLOR}" -eq "${params[1]}" ]]; then
< 			LEFT_PROMPT+="$(set_color - "${LAST_SEGMENT_COLOR}")${POWERLINE_LEFT_SEPARATOR_SOFT}${normal?}"
---
> 		if [[ "${LAST_SEGMENT_COLOR?}" -eq "${params[1]:-}" ]]; then
> 			LEFT_PROMPT+="$(set_color - "${LAST_SEGMENT_COLOR?}")${POWERLINE_LEFT_SEPARATOR_SOFT- }${normal?}"
246c267
< 			LEFT_PROMPT+="$(set_color "${LAST_SEGMENT_COLOR}" "${params[1]}")${POWERLINE_LEFT_SEPARATOR}${normal?}"
---
> 			LEFT_PROMPT+="$(set_color "${LAST_SEGMENT_COLOR?}" "${params[1]:-}")${POWERLINE_LEFT_SEPARATOR- }${normal?}"
250,251c271,274
< 	LEFT_PROMPT+="$(set_color "${POWERLINE_PROMPT_FOREGROUND_COLOR}" "${params[1]}")${pad_before_segment}${params[0]}${normal}"
< 	LAST_SEGMENT_COLOR=${params[1]}
---
> 	#change here to cahnge fg color
> 	LEFT_PROMPT+="$(set_color - "${params[1]:-}")${pad_before_segment}${params[0]}${normal?}"
> 	#seperator char color == current bg
> 	LAST_SEGMENT_COLOR="${params[1]:-}"
256c279
< 	LEFT_PROMPT+="$(set_color - "${LAST_SEGMENT_COLOR}") ${normal?}"
---
> 	LEFT_PROMPT+="$(set_color - "${LAST_SEGMENT_COLOR?}") ${normal?}"
260c283,285
< 	[[ "$1" -ne 0 ]] && echo "${1}|${LAST_STATUS_THEME_PROMPT_COLOR}"
---
> 	if [[ "${1?}" -ne 0 ]]; then
> 		printf '%s|%s' "${1}" "${LAST_STATUS_THEME_PROMPT_COLOR-"52"}"
> 	fi
265c290,291
< 	local separator_char="${POWERLINE_PROMPT_CHAR}" info prompt_color
---
> 	local beginning_of_line='\[\e[G\]'
> 	local info prompt_color segment prompt
267,269c293,295
< 	LEFT_PROMPT=""
< 	SEGMENTS_AT_LEFT=0
< 	LAST_SEGMENT_COLOR=""
---
> 	local LEFT_PROMPT=""
> 	local SEGMENTS_AT_LEFT=0
> 	local LAST_SEGMENT_COLOR=""
273,274c299,300
< 	if [[ -n "${POWERLINE_PROMPT_DISTRO_LOGO}" ]]; then
< 		LEFT_PROMPT+="$(set_color "${PROMPT_DISTRO_LOGO_COLOR}" "${PROMPT_DISTRO_LOGO_COLORBG}")${PROMPT_DISTRO_LOGO}$(set_color - -)"
---
> 	if [[ -n "${POWERLINE_PROMPT_DISTRO_LOGO:-}" ]]; then
> 		LEFT_PROMPT+="$(set_color "${PROMPT_DISTRO_LOGO_COLOR?}" "${PROMPT_DISTRO_LOGO_COLORBG?}")${PROMPT_DISTRO_LOGO?}$(set_color - -)"
278,280c304,309
< 	for segment in $POWERLINE_PROMPT; do
< 		info="$(__powerline_"${segment}"_prompt)"
< 		[[ -n "${info}" ]] && __powerline_left_segment "${info}"
---
> 	# shellcheck disable=SC2068 # intended behavior
> 	for segment in ${POWERLINE_PROMPT[@]-"user_info" "scm" "python_venv" "ruby" "node" "cwd"}; do
> 		info="$("__powerline_${segment}_prompt")"
> 		if [[ -n "${info}" ]]; then
> 			__powerline_left_segment "${info}"
> 		fi
283c312,314
< 	[[ "${last_status}" -ne 0 ]] && __powerline_left_segment "$(__powerline_last_status_prompt "${last_status}")"
---
> 	if [[ "${last_status}" -ne 0 ]]; then
> 		__powerline_left_segment "$(__powerline_last_status_prompt "${last_status}")"
> 	fi
285c316
< 	if [[ -n "${LEFT_PROMPT}" ]] && [[ "${POWERLINE_COMPACT_AFTER_LAST_SEGMENT:-}" -eq 0 ]]; then
---
> 	if [[ -n "${LEFT_PROMPT:-}" && "${POWERLINE_COMPACT_AFTER_LAST_SEGMENT:-${POWERLINE_COMPACT:-0}}" -eq 0 ]]; then
291,293c322,324
< 	prompt_color="$(set_color "${LAST_SEGMENT_COLOR}" -)"
< 	if [[ -n "${LEFT_PROMPT}" ]] && [[ -n "${POWERLINE_LEFT_LAST_SEGMENT_PROMPT_CHAR}" ]]; then
< 		LEFT_PROMPT+="$(set_color - "${LAST_SEGMENT_COLOR}")${POWERLINE_LEFT_LAST_SEGMENT_PROMPT_CHAR}"
---
> 	prompt_color="$(set_color "${LAST_SEGMENT_COLOR?}" -)"
> 	if [[ -n "${LEFT_PROMPT:-}" && -n "${POWERLINE_LEFT_LAST_SEGMENT_END_CHAR:-}" ]]; then
> 		LEFT_PROMPT+="$(set_color - "${LAST_SEGMENT_COLOR?}")${POWERLINE_LEFT_LAST_SEGMENT_END_CHAR}"
296d326
< 	[[ -n "${LEFT_PROMPT}" ]] && LEFT_PROMPT+="${prompt_color}${separator_char}${normal?}"
298,299c328,330
< 	if [[ "${POWERLINE_COMPACT_PROMPT:-}" -eq 0 ]]; then
< 		LEFT_PROMPT+=" "
---
> 	prompt="${prompt_color}${PROMPT_CHAR-${POWERLINE_PROMPT_CHAR-\\$}}${normal?}"
> 	if [[ "${POWERLINE_COMPACT_PROMPT:-${POWERLINE_COMPACT:-0}}" -eq 0 ]]; then
> 		prompt+=" "
302,307c333
< 	PS1="${LEFT_PROMPT}"
< 
< 	## cleanup ##
< 	unset LAST_SEGMENT_COLOR \
< 		LEFT_PROMPT \
< 		SEGMENTS_AT_LEFT
---
> 	PS1="${beginning_of_line}${normal?}${LEFT_PROMPT}${prompt}"
diff -r .bash_it/themes/powerline/powerline.theme.bash beehive_bash_it/themes/powerline/powerline.theme.bash
3,5c3,4
< 
< # shellcheck source=../../themes/powerline/powerline.base.bash
< . "$BASH_IT/themes/powerline/powerline.base.bash"
---
> # shellcheck source-path=SCRIPTDIR/../powerline
> source "${BASH_IT?}/themes/powerline/powerline.base.bash"
8,17c7,16
< POWERLINE_LEFT_SEPARATOR=${POWERLINE_LEFT_SEPARATOR:=""}
< POWERLINE_LEFT_SEPARATOR_SOFT=${POWERLINE_LEFT_SEPARATOR_SOFT:=""}
< POWERLINE_LEFT_LAST_SEGMENT_PROMPT_CHAR=${POWERLINE_LEFT_LAST_SEGMENT_PROMPT_CHAR:=""}
< 
< POWERLINE_COMPACT=${POWERLINE_COMPACT:=0}
< POWERLINE_COMPACT_BEFORE_SEPARATOR=${POWERLINE_COMPACT_BEFORE_SEPARATOR:=${POWERLINE_COMPACT}}
< POWERLINE_COMPACT_AFTER_SEPARATOR=${POWERLINE_COMPACT_AFTER_SEPARATOR:=${POWERLINE_COMPACT}}
< POWERLINE_COMPACT_BEFOR_FIRST_SEGMENT=${POWERLINE_COMPACT_BEFORE_FIRST_SEGMENT:=${POWERLINE_COMPACT}}
< POWERLINE_COMPACT_AFTER_LAST_SEGMENT=${POWERLINE_COMPACT_AFTER_LAST_SEGMENT:=${POWERLINE_COMPACT}}
< POWERLINE_COMPACT_PROMPT=${POWERLINE_COMPACT_PROMPT:=${POWERLINE_COMPACT}}
---
> : "${POWERLINE_LEFT_SEPARATOR:=""}"
> : "${POWERLINE_LEFT_SEPARATOR_SOFT:=""}"
> : "${POWERLINE_LEFT_LAST_SEGMENT_END_CHAR:=""}"
> 
> : "${POWERLINE_COMPACT:=0}"
> : "${POWERLINE_COMPACT_BEFORE_SEPARATOR:=${POWERLINE_COMPACT}}"
> : "${POWERLINE_COMPACT_AFTER_SEPARATOR:=${POWERLINE_COMPACT}}"
> : "${POWERLINE_COMPACT_BEFORE_FIRST_SEGMENT:=${POWERLINE_COMPACT}}"
> : "${POWERLINE_COMPACT_AFTER_LAST_SEGMENT:=${POWERLINE_COMPACT}}"
> : "${POWERLINE_COMPACT_PROMPT:=${POWERLINE_COMPACT}}"
41a41,42
> NODE_THEME_PROMPT_PREFIX=""
> NODE_THEME_PROMPT_SUFFIX=""
70c71
< BATTERY_AC_CHAR=${BATTERY_AC_CHAR:="⚡"}
---
> : "${BATTERY_AC_CHAR:="⚡"}"
75c76
< THEME_CLOCK_FORMAT=${THEME_CLOCK_FORMAT:="%H:%M:%S"}
---
> : "${THEME_CLOCK_FORMAT:="%H:%M:%S"}"
102c103
< POWERLINE_PROMPT=${POWERLINE_PROMPT:="user_info scm python_venv ruby node cwd"}
---
> : "${POWERLINE_PROMPT:="user_info scm python_venv ruby node cwd"}"
diff -r .bash_it/themes/powerline-multiline/powerline-multiline.base.bash beehive_bash_it/themes/powerline-multiline/powerline-multiline.base.bash
4c4
<   [[ "$1" -ne 0 ]] && echo "$(set_color ${LAST_STATUS_THEME_PROMPT_COLOR} -) ${1} ${normal}"
---
> 	[[ "$1" -ne 0 ]] && echo "$(set_color ${LAST_STATUS_THEME_PROMPT_COLOR} -) ${1} ${normal}"
8,45c8,46
<   local OLD_IFS="${IFS}"; IFS="|"
<   local params=( $1 )
<   IFS="${OLD_IFS}"
<   local padding=0
<   local pad_before_segment=" "
< 
<   if [[ "${SEGMENTS_AT_RIGHT}" -eq 0 ]]; then
<     if [[ "${POWERLINE_COMPACT_AFTER_LAST_SEGMENT}" -ne 0 ]]; then
<       pad_before_segment=""
<     fi
<     RIGHT_PROMPT+="$(set_color ${params[1]} -)${POWERLINE_RIGHT_END}${normal}"
<     (( padding += 1 ))
<   else
<     if [[ "${POWERLINE_COMPACT_BEFORE_SEPARATOR}" -ne 0 ]]; then
<       pad_before_segment=""
<     fi
<     # Since the previous segment wasn't the last segment, add padding, if needed
<     #
<     if [[ "${POWERLINE_COMPACT_AFTER_SEPARATOR}" -eq 0 ]]; then
<       RIGHT_PROMPT+="$(set_color - ${LAST_SEGMENT_COLOR}) ${normal}"
<       (( padding += 1 ))
<     fi
<     if [[ "${LAST_SEGMENT_COLOR}" -eq "${params[1]}" ]]; then
<       RIGHT_PROMPT+="$(set_color - ${LAST_SEGMENT_COLOR})${POWERLINE_RIGHT_SEPARATOR_SOFT}${normal}"
<     else
<       RIGHT_PROMPT+="$(set_color ${params[1]} ${LAST_SEGMENT_COLOR})${POWERLINE_RIGHT_SEPARATOR}${normal}"
<     fi
<     (( padding += 1 ))
<   fi
< 
<   RIGHT_PROMPT+="$(set_color "${POWERLINE_PROMPT_FOREGROUND_COLOR}" ${params[1]})${pad_before_segment}${params[0]}${normal}"
< 
<   (( padding += ${#pad_before_segment} ))
<   (( padding += ${#params[0]} ))
< 
<   (( RIGHT_PROMPT_LENGTH += padding ))
<   LAST_SEGMENT_COLOR="${params[1]}"
<   (( SEGMENTS_AT_RIGHT += 1 ))
---
> 	local OLD_IFS="${IFS}"
> 	IFS="|"
> 	local params=($1)
> 	IFS="${OLD_IFS}"
> 	local padding=0
> 	local pad_before_segment=" "
> 
> 	if [[ "${SEGMENTS_AT_RIGHT}" -eq 0 ]]; then
> 		if [[ "${POWERLINE_COMPACT_AFTER_LAST_SEGMENT}" -ne 0 ]]; then
> 			pad_before_segment=""
> 		fi
> 		RIGHT_PROMPT+="$(set_color ${params[1]} -)${POWERLINE_RIGHT_END}${normal}"
> 		((padding += 1))
> 	else
> 		if [[ "${POWERLINE_COMPACT_BEFORE_SEPARATOR}" -ne 0 ]]; then
> 			pad_before_segment=""
> 		fi
> 		# Since the previous segment wasn't the last segment, add padding, if needed
> 		#
> 		if [[ "${POWERLINE_COMPACT_AFTER_SEPARATOR}" -eq 0 ]]; then
> 			RIGHT_PROMPT+="$(set_color - ${LAST_SEGMENT_COLOR}) ${normal}"
> 			((padding += 1))
> 		fi
> 		if [[ "${LAST_SEGMENT_COLOR}" -eq "${params[1]}" ]]; then
> 			RIGHT_PROMPT+="$(set_color - ${LAST_SEGMENT_COLOR})${POWERLINE_RIGHT_SEPARATOR_SOFT}${normal}"
> 		else
> 			RIGHT_PROMPT+="$(set_color ${params[1]} ${LAST_SEGMENT_COLOR})${POWERLINE_RIGHT_SEPARATOR}${normal}"
> 		fi
> 		((padding += 1))
> 	fi
> 
> 	RIGHT_PROMPT+="$(set_color "${POWERLINE_PROMPT_FOREGROUND_COLOR}" ${params[1]})${pad_before_segment}${params[0]}${normal}"
> 
> 	((padding += ${#pad_before_segment}))
> 	((padding += ${#params[0]}))
> 
> 	((RIGHT_PROMPT_LENGTH += padding))
> 	LAST_SEGMENT_COLOR="${params[1]}"
> 	((SEGMENTS_AT_RIGHT += 1))
49,50c50,51
<   RIGHT_PROMPT+="$(set_color - ${LAST_SEGMENT_COLOR}) ${normal}"
<   (( RIGHT_PROMPT_LENGTH += 1 ))
---
> 	RIGHT_PROMPT+="$(set_color - ${LAST_SEGMENT_COLOR}) ${normal}"
> 	((RIGHT_PROMPT_LENGTH += 1))
54,55c55,56
<   local last_status="$?" ## always the first
<   local move_cursor_rightmost='\033[500C'
---
> 	local last_status="$?" ## always the first
> 	local move_cursor_rightmost='\033[500C'
57,105c58,106
<   LEFT_PROMPT=""
<   RIGHT_PROMPT=""
<   RIGHT_PROMPT_LENGTH=${POWERLINE_PADDING}
<   SEGMENTS_AT_LEFT=0
<   SEGMENTS_AT_RIGHT=0
<   LAST_SEGMENT_COLOR=""
< 
<   _save-and-reload-history "${HISTORY_AUTOSAVE:-0}"
< 
<   ## left prompt ##
<   for segment in $POWERLINE_LEFT_PROMPT; do
<     local info="$(__powerline_${segment}_prompt)"
<     [[ -n "${info}" ]] && __powerline_left_segment "${info}"
<   done
< 
<   if [[ -n "${LEFT_PROMPT}" ]] && [[ "${POWERLINE_COMPACT_AFTER_LAST_SEGMENT}" -eq 0 ]]; then
<     __powerline_left_last_segment_padding
<   fi
< 
<   [[ -n "${LEFT_PROMPT}" ]] && LEFT_PROMPT+="$(set_color ${LAST_SEGMENT_COLOR} -)${POWERLINE_LEFT_END}${normal}"
< 
<   ## right prompt ##
<   if [[ -n "${POWERLINE_RIGHT_PROMPT}" ]]; then
<     # LEFT_PROMPT+="${move_cursor_rightmost}"
<     for segment in $POWERLINE_RIGHT_PROMPT; do
<       local info="$(__powerline_${segment}_prompt)"
<       [[ -n "${info}" ]] && __powerline_right_segment "${info}"
<     done
< 
<     if [[ -n "${RIGHT_PROMPT}" ]] && [[ "${POWERLINE_COMPACT_BEFORE_FIRST_SEGMENT}" -eq 0 ]]; then
<       __powerline_right_first_segment_padding
<     fi
< 
<     RIGHT_PAD=$(printf "%.s " $(seq 1 $RIGHT_PROMPT_LENGTH))
<     LEFT_PROMPT+="${RIGHT_PAD}${move_cursor_rightmost}"
<     LEFT_PROMPT+="\033[$(( ${#RIGHT_PAD} - 1 ))D"
<   fi
< 
<   local prompt="${PROMPT_CHAR}"
<   if [[ "${POWERLINE_COMPACT_PROMPT}" -eq 0 ]]; then
<     prompt+=" "
<   fi
< 
<   PS1="${LEFT_PROMPT}${RIGHT_PROMPT}\n$(__powerline_last_status_prompt ${last_status})${prompt}"
< 
<   ## cleanup ##
<   unset LAST_SEGMENT_COLOR \
<         LEFT_PROMPT RIGHT_PROMPT RIGHT_PROMPT_LENGTH \
<         SEGMENTS_AT_LEFT SEGMENTS_AT_RIGHT
---
> 	LEFT_PROMPT=""
> 	RIGHT_PROMPT=""
> 	RIGHT_PROMPT_LENGTH=${POWERLINE_PADDING}
> 	SEGMENTS_AT_LEFT=0
> 	SEGMENTS_AT_RIGHT=0
> 	LAST_SEGMENT_COLOR=""
> 
> 	_save-and-reload-history "${HISTORY_AUTOSAVE:-0}"
> 
> 	## left prompt ##
> 	for segment in $POWERLINE_LEFT_PROMPT; do
> 		local info="$(__powerline_${segment}_prompt)"
> 		[[ -n "${info}" ]] && __powerline_left_segment "${info}"
> 	done
> 
> 	if [[ -n "${LEFT_PROMPT}" ]] && [[ "${POWERLINE_COMPACT_AFTER_LAST_SEGMENT}" -eq 0 ]]; then
> 		__powerline_left_last_segment_padding
> 	fi
> 
> 	[[ -n "${LEFT_PROMPT}" ]] && LEFT_PROMPT+="$(set_color ${LAST_SEGMENT_COLOR} -)${POWERLINE_LEFT_END}${normal}"
> 
> 	## right prompt ##
> 	if [[ -n "${POWERLINE_RIGHT_PROMPT}" ]]; then
> 		# LEFT_PROMPT+="${move_cursor_rightmost}"
> 		for segment in $POWERLINE_RIGHT_PROMPT; do
> 			local info="$(__powerline_${segment}_prompt)"
> 			[[ -n "${info}" ]] && __powerline_right_segment "${info}"
> 		done
> 
> 		if [[ -n "${RIGHT_PROMPT}" ]] && [[ "${POWERLINE_COMPACT_BEFORE_FIRST_SEGMENT}" -eq 0 ]]; then
> 			__powerline_right_first_segment_padding
> 		fi
> 
> 		RIGHT_PAD=$(printf "%.s " $(seq 1 $RIGHT_PROMPT_LENGTH))
> 		LEFT_PROMPT+="${RIGHT_PAD}${move_cursor_rightmost}"
> 		LEFT_PROMPT+="\033[$((${#RIGHT_PAD} - 1))D"
> 	fi
> 
> 	local prompt="${PROMPT_CHAR}"
> 	if [[ "${POWERLINE_COMPACT_PROMPT}" -eq 0 ]]; then
> 		prompt+=" "
> 	fi
> 
> 	PS1="${LEFT_PROMPT}${RIGHT_PROMPT}\n$(__powerline_last_status_prompt ${last_status})${prompt}"
> 
> 	## cleanup ##
> 	unset LAST_SEGMENT_COLOR \
> 		LEFT_PROMPT RIGHT_PROMPT RIGHT_PROMPT_LENGTH \
> 		SEGMENTS_AT_LEFT SEGMENTS_AT_RIGHT
diff -r .bash_it/themes/powerline-multiline/powerline-multiline.theme.bash beehive_bash_it/themes/powerline-multiline/powerline-multiline.theme.bash
43a44,45
> NODE_THEME_PROMPT_PREFIX=""
> NODE_THEME_PROMPT_SUFFIX=""
diff -r .bash_it/themes/powerline-naked/powerline-naked.base.bash beehive_bash_it/themes/powerline-naked/powerline-naked.base.bash
4,8c4,9
<   local OLD_IFS="${IFS}"; IFS="|"
<   local params=( $1 )
<   IFS="${OLD_IFS}"
<   local separator=""
<   local pad_before_segment=" "
---
> 	local OLD_IFS="${IFS}"
> 	IFS="|"
> 	local params=($1)
> 	IFS="${OLD_IFS}"
> 	local separator=""
> 	local pad_before_segment=" "
10,24c11,25
<   if [[ "${SEGMENTS_AT_LEFT}" -eq 0 ]]; then
<     if [[ "${POWERLINE_COMPACT_BEFORE_FIRST_SEGMENT}" -ne 0 ]]; then
<       pad_before_segment=""
<     fi
<   else
<     if [[ "${POWERLINE_COMPACT_AFTER_SEPARATOR}" -ne 0 ]]; then
<       pad_before_segment=""
<     fi
<     # Since the previous segment wasn't the last segment, add padding, if needed
<     #
<     if [[ "${POWERLINE_COMPACT_BEFORE_SEPARATOR}" -eq 0 ]]; then
<       LEFT_PROMPT+=" "
<     fi
<     LEFT_PROMPT+="${POWERLINE_LEFT_SEPARATOR}"
<   fi
---
> 	if [[ "${SEGMENTS_AT_LEFT}" -eq 0 ]]; then
> 		if [[ "${POWERLINE_COMPACT_BEFORE_FIRST_SEGMENT}" -ne 0 ]]; then
> 			pad_before_segment=""
> 		fi
> 	else
> 		if [[ "${POWERLINE_COMPACT_AFTER_SEPARATOR}" -ne 0 ]]; then
> 			pad_before_segment=""
> 		fi
> 		# Since the previous segment wasn't the last segment, add padding, if needed
> 		#
> 		if [[ "${POWERLINE_COMPACT_BEFORE_SEPARATOR}" -eq 0 ]]; then
> 			LEFT_PROMPT+=" "
> 		fi
> 		LEFT_PROMPT+="${POWERLINE_LEFT_SEPARATOR}"
> 	fi
26,28c27,29
<   LEFT_PROMPT+="$(set_color ${params[1]} -)${pad_before_segment}${params[0]}${normal}"
<   LAST_SEGMENT_COLOR=${params[1]}
<   (( SEGMENTS_AT_LEFT += 1 ))
---
> 	LEFT_PROMPT+="$(set_color ${params[1]} -)${pad_before_segment}${params[0]}${normal}"
> 	LAST_SEGMENT_COLOR=${params[1]}
> 	((SEGMENTS_AT_LEFT += 1))
30c31
<   _save-and-reload-history "${HISTORY_AUTOSAVE:-0}"
---
> 	_save-and-reload-history "${HISTORY_AUTOSAVE:-0}"
34c35
<   LEFT_PROMPT+="$(set_color ${LAST_SEGMENT_COLOR} -) ${normal}"
---
> 	LEFT_PROMPT+="$(set_color ${LAST_SEGMENT_COLOR} -) ${normal}"
diff -r .bash_it/themes/powerline-naked/powerline-naked.theme.bash beehive_bash_it/themes/powerline-naked/powerline-naked.theme.bash
38a39,40
> NODE_THEME_PROMPT_PREFIX=""
> NODE_THEME_PROMPT_SUFFIX=""
diff -r .bash_it/themes/powerline-plain/powerline-plain.base.bash beehive_bash_it/themes/powerline-plain/powerline-plain.base.bash
4,26c4,27
<   local OLD_IFS="${IFS}"; IFS="|"
<   local params=( $1 )
<   IFS="${OLD_IFS}"
<   local pad_before_segment=" "
< 
<   if [[ "${SEGMENTS_AT_LEFT}" -eq 0 ]]; then
<     if [[ "${POWERLINE_COMPACT_BEFORE_FIRST_SEGMENT}" -ne 0 ]]; then
<       pad_before_segment=""
<     fi
<   else
<     if [[ "${POWERLINE_COMPACT_AFTER_SEPARATOR}" -ne 0 ]]; then
<       pad_before_segment=""
<     fi
<     # Since the previous segment wasn't the last segment, add padding, if needed
<     #
<     if [[ "${POWERLINE_COMPACT_BEFORE_SEPARATOR}" -eq 0 ]]; then
<       LEFT_PROMPT+="$(set_color - ${LAST_SEGMENT_COLOR}) ${normal}"
<     fi
<   fi
< 
<   LEFT_PROMPT+="$(set_color - ${params[1]})${pad_before_segment}${params[0]}${normal}"
<   LAST_SEGMENT_COLOR=${params[1]}
<   (( SEGMENTS_AT_LEFT += 1 ))
---
> 	local OLD_IFS="${IFS}"
> 	IFS="|"
> 	local params=($1)
> 	IFS="${OLD_IFS}"
> 	local pad_before_segment=" "
> 
> 	if [[ "${SEGMENTS_AT_LEFT}" -eq 0 ]]; then
> 		if [[ "${POWERLINE_COMPACT_BEFORE_FIRST_SEGMENT}" -ne 0 ]]; then
> 			pad_before_segment=""
> 		fi
> 	else
> 		if [[ "${POWERLINE_COMPACT_AFTER_SEPARATOR}" -ne 0 ]]; then
> 			pad_before_segment=""
> 		fi
> 		# Since the previous segment wasn't the last segment, add padding, if needed
> 		#
> 		if [[ "${POWERLINE_COMPACT_BEFORE_SEPARATOR}" -eq 0 ]]; then
> 			LEFT_PROMPT+="$(set_color - ${LAST_SEGMENT_COLOR}) ${normal}"
> 		fi
> 	fi
> 
> 	LEFT_PROMPT+="$(set_color - ${params[1]})${pad_before_segment}${params[0]}${normal}"
> 	LAST_SEGMENT_COLOR=${params[1]}
> 	((SEGMENTS_AT_LEFT += 1))
30c31
<   local last_status="$?" ## always the first
---
> 	local last_status="$?" ## always the first
32,35c33,36
<   LEFT_PROMPT=""
<   SEGMENTS_AT_LEFT=0
<   LAST_SEGMENT_COLOR=""
<   PROMPT_AFTER="${POWERLINE_PROMPT_AFTER}"
---
> 	LEFT_PROMPT=""
> 	SEGMENTS_AT_LEFT=0
> 	LAST_SEGMENT_COLOR=""
> 	PROMPT_AFTER="${POWERLINE_PROMPT_AFTER}"
37c38
<   _save-and-reload-history "${HISTORY_AUTOSAVE:-0}"
---
> 	_save-and-reload-history "${HISTORY_AUTOSAVE:-0}"
39,43c40,44
<   ## left prompt ##
<   for segment in $POWERLINE_PROMPT; do
<     local info="$(__powerline_${segment}_prompt)"
<     [[ -n "${info}" ]] && __powerline_left_segment "${info}"
<   done
---
> 	## left prompt ##
> 	for segment in $POWERLINE_PROMPT; do
> 		local info="$(__powerline_${segment}_prompt)"
> 		[[ -n "${info}" ]] && __powerline_left_segment "${info}"
> 	done
45c46
<   [[ "${last_status}" -ne 0 ]] && __powerline_left_segment $(__powerline_last_status_prompt ${last_status})
---
> 	[[ "${last_status}" -ne 0 ]] && __powerline_left_segment $(__powerline_last_status_prompt ${last_status})
47,49c48,50
<   if [[ -n "${LEFT_PROMPT}" ]] && [[ "${POWERLINE_COMPACT_AFTER_LAST_SEGMENT}" -eq 0 ]]; then
<     __powerline_left_last_segment_padding
<   fi
---
> 	if [[ -n "${LEFT_PROMPT}" ]] && [[ "${POWERLINE_COMPACT_AFTER_LAST_SEGMENT}" -eq 0 ]]; then
> 		__powerline_left_last_segment_padding
> 	fi
51,53c52,54
<   if [[ "${POWERLINE_COMPACT_PROMPT}" -eq 0 ]]; then
<     LEFT_PROMPT+=" "
<   fi
---
> 	if [[ "${POWERLINE_COMPACT_PROMPT}" -eq 0 ]]; then
> 		LEFT_PROMPT+=" "
> 	fi
55c56
<   PS1="${LEFT_PROMPT}${PROMPT_AFTER}"
---
> 	PS1="${LEFT_PROMPT}${PROMPT_AFTER}"
57,60c58,61
<   ## cleanup ##
<   unset LAST_SEGMENT_COLOR \
<         LEFT_PROMPT \
<         SEGMENTS_AT_LEFT
---
> 	## cleanup ##
> 	unset LAST_SEGMENT_COLOR \
> 		LEFT_PROMPT \
> 		SEGMENTS_AT_LEFT
diff -r .bash_it/themes/powerline-plain/powerline-plain.theme.bash beehive_bash_it/themes/powerline-plain/powerline-plain.theme.bash
35a36,37
> NODE_THEME_PROMPT_PREFIX=""
> NODE_THEME_PROMPT_SUFFIX=""


Context

I am simply trying to get the same powerline multiline prompt as usual without line wrapping i.e. without "leaking" of the prompt first line into the second line.

Working bashit version:
Version type: dev
Current git SHA: d985e4c on 2023-11-18T14:42:33-07:00
Commit info: d985e4c
Compare to latest: d985e4c...master

Non-working bashit version: the one from today on git (31-MARCH-2025)

Steps to reproduce

Install newest version of bash-it. Add following lines in bash:

export BASH_IT_THEME='powerline-multiline'
export POWERLINE_RIGHT_PROMPT='in_vim clock battery user_info hostname'

SSH into computer having this bashit configuration. Observe the prompt leaking into second line.

Bash-it version

Version type: dev Current git SHA: d985e4c on 2023-11-18T14:42:33-07:00 Commit info: d985e4c Compare to latest: d985e4c...master

List of enabled plugins, themes and aliases

No plugins (except base), no aliases (even general removed)

Bash version

5.1.16 on old server, 5.2.21 on new server, but again it works if i copy the old bash-it code on new server

Operating system and version

Ubuntu 22.04 on old server, Ubuntu 24.04 on new server , but again it works if i copy the old bash-it code on new server

bash-it doctor output

# How to get: bash-it doctor

Your ~/.bashrc

# Path to the bash it configuration
export BASH_IT="/home/michael/.bash_it"

# Lock and Load a custom theme file.
# Leave empty to disable theming.
# location "$BASH_IT"/themes/
export BASH_IT_THEME='powerline-multiline'
export POWERLINE_RIGHT_PROMPT='in_vim clock battery user_info hostname'

# Some themes can show whether `sudo` has a current token or not.
# Set `$THEME_CHECK_SUDO` to `true` to check every prompt:
#THEME_CHECK_SUDO='true'

# (Advanced): Change this to the name of your remote repo if you
# cloned bash-it with a remote other than origin such as `bash-it`.
# export BASH_IT_REMOTE='bash-it'

# (Advanced): Change this to the name of the main development branch if
# you renamed it or if it was changed for some reason
# export BASH_IT_DEVELOPMENT_BRANCH='master'

# Your place for hosting Git repos. I use this for private repos.
export GIT_HOSTING='git@git.domain.com'

# Don't check mail when opening terminal.
unset MAILCHECK

# Change this to your console based IRC client of choice.
export IRC_CLIENT='irssi'

# Set this to the command you use for todo.txt-cli
export TODO="t"

# Set this to the location of your work or project folders
#BASH_IT_PROJECT_PATHS="${HOME}/Projects:/Volumes/work/src"

# Set this to false to turn off version control status checking within the prompt for all themes
export SCM_CHECK=true
# Set to actual location of gitstatus directory if installed
#export SCM_GIT_GITSTATUS_DIR="$HOME/gitstatus"
# per default gitstatus uses 2 times as many threads as CPU cores, you can change this here if you must
#export GITSTATUS_NUM_THREADS=8

# Set Xterm/screen/Tmux title with only a short hostname.
# Uncomment this (or set SHORT_HOSTNAME to something else),
# Will otherwise fall back on $HOSTNAME.
#export SHORT_HOSTNAME=$(hostname -s)

# Set Xterm/screen/Tmux title with only a short username.
# Uncomment this (or set SHORT_USER to something else),
# Will otherwise fall back on $USER.
#export SHORT_USER=${USER:0:8}

# If your theme use command duration, uncomment this to
# enable display of last command duration.
#export BASH_IT_COMMAND_DURATION=true
# You can choose the minimum time in seconds before
# command duration is displayed.
#export COMMAND_DURATION_MIN_SECONDS=1

# Set Xterm/screen/Tmux title with shortened command and directory.
# Uncomment this to set.
#export SHORT_TERM_LINE=true

# Set vcprompt executable path for scm advance info in prompt (demula theme)
# https://github.com/djl/vcprompt
#export VCPROMPT_EXECUTABLE=~/.vcprompt/bin/vcprompt

# (Advanced): Uncomment this to make Bash-it reload itself automatically
# after enabling or disabling aliases, plugins, and completions.
# export BASH_IT_AUTOMATIC_RELOAD_AFTER_CONFIG_CHANGE=1

# Uncomment this to make Bash-it create alias reload.
# export BASH_IT_RELOAD_LEGACY=1

# Load Bash It
source "$BASH_IT"/bash_it.sh

Notes

Would be very grateful if possible to fix the bug in newest version of bash-it instead of relying on "old" one

@neurorepro neurorepro changed the title [Bug]: Newest bashit with oowerline multiline miscalculate padlock symbol for SSH, causing extra linewrap [Bug]: Newest bashit with powerline multiline miscalculate padlock symbol for SSH, causing extra linewrap Mar 31, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

1 participant