From 920a97a2649655e89efc2e8f10bf8c20c4203f58 Mon Sep 17 00:00:00 2001 From: David Farrell Date: Sun, 3 Nov 2019 13:01:22 -0800 Subject: [PATCH 1/2] Adds compact support to powerline themes --- themes/powerline-multiline/README.md | 22 +++++++ .../powerline-multiline.base.bash | 65 ++++++++++++++----- .../powerline-multiline.theme.bash | 7 ++ themes/powerline-naked/README.md | 15 +++++ .../powerline-naked/powerline-naked.base.bash | 25 +++++-- .../powerline-naked.theme.bash | 7 ++ themes/powerline-plain/README.md | 15 +++++ .../powerline-plain/powerline-plain.base.bash | 39 +++++++++-- .../powerline-plain.theme.bash | 7 ++ themes/powerline/README.md | 15 +++++ themes/powerline/powerline.base.bash | 39 ++++++++--- themes/powerline/powerline.theme.bash | 7 ++ 12 files changed, 230 insertions(+), 33 deletions(-) diff --git a/themes/powerline-multiline/README.md b/themes/powerline-multiline/README.md index 23e7b079..cbc585e2 100644 --- a/themes/powerline-multiline/README.md +++ b/themes/powerline-multiline/README.md @@ -94,3 +94,25 @@ This can be done by setting the `POWERLINE_PADDING` variable before Bash-it is l ```bash export POWERLINE_PADDING=3 ``` + +### Compact Settings + +You can configure various aspects of the prompt to use less whitespace. Supported variables are: + +| Variable | Description +|--------------------------------------|------------ +|POWERLINE_COMPACT_BEFORE_SEPARATOR | Removes the leading space before each separator +|POWERLINE_COMPACT_AFTER_SEPARATOR | Removes the trailing space after each separator +|POWERLINE_COMPACT_BEFOR_FIRST_SEGMENT | Removes the leading space on the first segment +|POWERLINE_COMPACT_AFTER_LAST_SEGMENT | Removes the trailing space on the last segment +|POWERLINE_COMPACT_PROMPT | Removes the space after the prompt character +|POWERLINE_COMPACT | Enable all Compact settings (you can still override individual settings) + +The default value for all settings is `0` (disabled). Use `1` to enable. + +**Multiline Mode Right Prompt** + +For the purposes of the `Compact` settings, the segments within the **Right Prompt** are considered to run "right-to-left", i.e.: + +* The **right-most** segment is considered to be the `"first"` segment, while the **left-most** segment is considered to be the `"last"` +* The space to the **right** of the separator character is considered to be `"before"`, while the space to the **left** is considered to be `"after"` diff --git a/themes/powerline-multiline/powerline-multiline.base.bash b/themes/powerline-multiline/powerline-multiline.base.bash index ea8b2624..cbd30bff 100644 --- a/themes/powerline-multiline/powerline-multiline.base.bash +++ b/themes/powerline-multiline/powerline-multiline.base.bash @@ -8,32 +8,50 @@ function __powerline_right_segment { local OLD_IFS="${IFS}"; IFS="|" local params=( $1 ) IFS="${OLD_IFS}" - local separator_char="${POWERLINE_RIGHT_SEPARATOR}" - local separator_char_soft="${POWERLINE_RIGHT_SEPARATOR_SOFT}" local padding="${POWERLINE_PADDING}" - local separator_color="" + local pad_before_segment=" " if [[ "${SEGMENTS_AT_RIGHT}" -eq 0 ]]; then - separator_char="${POWERLINE_RIGHT_END}" - separator_color="$(set_color ${params[1]} -)" + 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 [[ "${LAST_SEGMENT_COLOR}" -eq "${params[1]}" ]]; then - separator_color="$(set_color - ${LAST_SEGMENT_COLOR})" - separator_char=${separator_char_soft} - else - separator_color="$(set_color ${params[1]} ${LAST_SEGMENT_COLOR})" - fi + 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+="${separator_color}${separator_char}${normal}$(set_color - ${params[1]}) ${params[0]} ${normal}$(set_color - ${COLOR})${normal}" - RIGHT_PROMPT_LENGTH=$(( ${#params[0]} + RIGHT_PROMPT_LENGTH + padding )) + + RIGHT_PROMPT+="$(set_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 )) } +function __powerline_right_first_segment_padding { + RIGHT_PROMPT+="$(set_color - ${LAST_SEGMENT_COLOR}) ${normal}" + (( RIGHT_PROMPT_LENGTH += 1 )) +} + function __powerline_prompt_command { local last_status="$?" ## always the first - local separator_char="${POWERLINE_LEFT_SEPARATOR}" local move_cursor_rightmost='\033[500C' LEFT_PROMPT="" @@ -48,6 +66,11 @@ function __powerline_prompt_command { 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 ## @@ -57,12 +80,22 @@ function __powerline_prompt_command { 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_PROMPT_LENGTH}D" + LEFT_PROMPT+="\033[$(( ${#RIGHT_PAD} - 1 ))D" fi - PS1="${LEFT_PROMPT}${RIGHT_PROMPT}\n$(__powerline_last_status_prompt ${last_status})${PROMPT_CHAR} " + 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 \ diff --git a/themes/powerline-multiline/powerline-multiline.theme.bash b/themes/powerline-multiline/powerline-multiline.theme.bash index f91020ad..f76c5969 100644 --- a/themes/powerline-multiline/powerline-multiline.theme.bash +++ b/themes/powerline-multiline/powerline-multiline.theme.bash @@ -11,6 +11,13 @@ POWERLINE_LEFT_END=${POWERLINE_LEFT_END:=""} POWERLINE_RIGHT_END=${POWERLINE_RIGHT_END:=""} POWERLINE_PADDING=${POWERLINE_PADDING:=2} +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}} + USER_INFO_SSH_CHAR=${POWERLINE_USER_INFO_SSH_CHAR:=" "} USER_INFO_THEME_PROMPT_COLOR=${POWERLINE_USER_INFO_COLOR:=32} USER_INFO_THEME_PROMPT_COLOR_SUDO=${POWERLINE_USER_INFO_COLOR_SUDO:=202} diff --git a/themes/powerline-naked/README.md b/themes/powerline-naked/README.md index b1ab2d69..296c30ab 100644 --- a/themes/powerline-naked/README.md +++ b/themes/powerline-naked/README.md @@ -73,3 +73,18 @@ A variable can be defined to set the order of the prompt segments: POWERLINE_PROMPT="user_info scm python_venv ruby cwd" The example values above are the current default values, but if you want to remove anything from the prompt, simply remove the "string" that represents the segment from the variable. + +### Compact Settings + +You can configure various aspects of the prompt to use less whitespace. Supported variables are: + +| Variable | Description +|--------------------------------------|------------ +|POWERLINE_COMPACT_BEFORE_SEPARATOR | Removes the leading space before each separator +|POWERLINE_COMPACT_AFTER_SEPARATOR | Removes the trailing space after each separator +|POWERLINE_COMPACT_BEFOR_FIRST_SEGMENT | Removes the leading space on the first segment +|POWERLINE_COMPACT_AFTER_LAST_SEGMENT | Removes the trailing space on the last segment +|POWERLINE_COMPACT_PROMPT | Removes the space after the prompt character +|POWERLINE_COMPACT | Enable all Compact settings (you can still override individual settings) + +The default value for all settings is `0` (disabled). Use `1` to enable. diff --git a/themes/powerline-naked/powerline-naked.base.bash b/themes/powerline-naked/powerline-naked.base.bash index b97c93cf..16b633be 100644 --- a/themes/powerline-naked/powerline-naked.base.bash +++ b/themes/powerline-naked/powerline-naked.base.bash @@ -4,13 +4,30 @@ function __powerline_left_segment { local OLD_IFS="${IFS}"; IFS="|" local params=( $1 ) IFS="${OLD_IFS}" - local separator_char="${POWERLINE_LEFT_SEPARATOR}" local separator="" + local pad_before_segment=" " - if [[ "${SEGMENTS_AT_LEFT}" -gt 0 ]]; then - separator="${separator_char}" + 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 - LEFT_PROMPT+="${separator}$(set_color ${params[1]} -) ${params[0]} ${normal}" + + LEFT_PROMPT+="$(set_color ${params[1]} -)${pad_before_segment}${params[0]}${normal}" LAST_SEGMENT_COLOR=${params[1]} (( SEGMENTS_AT_LEFT += 1 )) } + +function __powerline_left_last_segment_padding { + LEFT_PROMPT+="$(set_color ${LAST_SEGMENT_COLOR} -) ${normal}" +} diff --git a/themes/powerline-naked/powerline-naked.theme.bash b/themes/powerline-naked/powerline-naked.theme.bash index bc52a054..dfa3eb1d 100644 --- a/themes/powerline-naked/powerline-naked.theme.bash +++ b/themes/powerline-naked/powerline-naked.theme.bash @@ -6,6 +6,13 @@ PROMPT_CHAR=${POWERLINE_PROMPT_CHAR:=""} POWERLINE_LEFT_SEPARATOR=${POWERLINE_LEFT_SEPARATOR:=""} 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}} + USER_INFO_SSH_CHAR=${POWERLINE_USER_INFO_SSH_CHAR:=" "} USER_INFO_THEME_PROMPT_COLOR=${POWERLINE_USER_INFO_COLOR:=240} USER_INFO_THEME_PROMPT_COLOR_SUDO=${POWERLINE_USER_INFO_COLOR_SUDO:=202} diff --git a/themes/powerline-plain/README.md b/themes/powerline-plain/README.md index f5da2095..2470a718 100644 --- a/themes/powerline-plain/README.md +++ b/themes/powerline-plain/README.md @@ -71,3 +71,18 @@ A variable can be defined to set the order of the prompt segments: POWERLINE_PROMPT="user_info scm python_venv ruby cwd" The example values above are the current default values, but if you want to remove anything from the prompt, simply remove the "string" that represents the segment from the variable. + +### Compact Settings + +You can configure various aspects of the prompt to use less whitespace. Supported variables are: + +| Variable | Description +|--------------------------------------|------------ +|POWERLINE_COMPACT_BEFORE_SEPARATOR | Removes the leading space before each separator +|POWERLINE_COMPACT_AFTER_SEPARATOR | Removes the trailing space after each separator +|POWERLINE_COMPACT_BEFOR_FIRST_SEGMENT | Removes the leading space on the first segment +|POWERLINE_COMPACT_AFTER_LAST_SEGMENT | Removes the trailing space on the last segment +|POWERLINE_COMPACT_PROMPT | Removes the space after the prompt character +|POWERLINE_COMPACT | Enable all Compact settings (you can still override individual settings) + +The default value for all settings is `0` (disabled). Use `1` to enable. diff --git a/themes/powerline-plain/powerline-plain.base.bash b/themes/powerline-plain/powerline-plain.base.bash index 5558e0eb..37b4ff50 100644 --- a/themes/powerline-plain/powerline-plain.base.bash +++ b/themes/powerline-plain/powerline-plain.base.bash @@ -4,15 +4,34 @@ function __powerline_left_segment { local OLD_IFS="${IFS}"; IFS="|" local params=( $1 ) IFS="${OLD_IFS}" + local pad_before_segment=" " - LEFT_PROMPT+="${separator}$(set_color - ${params[1]}) ${params[0]} ${normal}" + 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 )) } function __powerline_prompt_command { local last_status="$?" ## always the first LEFT_PROMPT="" + SEGMENTS_AT_LEFT=0 + LAST_SEGMENT_COLOR="" _save-and-reload-history "${HISTORY_AUTOSAVE:-0}" @@ -21,11 +40,21 @@ function __powerline_prompt_command { 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} -) ${normal}" - PS1="${LEFT_PROMPT} " + [[ "${last_status}" -ne 0 ]] && __powerline_left_segment $(__powerline_last_status_prompt ${last_status}) + + if [[ -n "${LEFT_PROMPT}" ]] && [[ "${POWERLINE_COMPACT_AFTER_LAST_SEGMENT}" -eq 0 ]]; then + __powerline_left_last_segment_padding + fi + + if [[ "${POWERLINE_COMPACT_PROMPT}" -eq 0 ]]; then + LEFT_PROMPT+=" " + fi + + PS1="${LEFT_PROMPT}" ## cleanup ## - unset LEFT_PROMPT + unset LAST_SEGMENT_COLOR \ + LEFT_PROMPT \ + SEGMENTS_AT_LEFT } diff --git a/themes/powerline-plain/powerline-plain.theme.bash b/themes/powerline-plain/powerline-plain.theme.bash index c6334252..3ead67fe 100644 --- a/themes/powerline-plain/powerline-plain.theme.bash +++ b/themes/powerline-plain/powerline-plain.theme.bash @@ -6,6 +6,13 @@ USER_INFO_SSH_CHAR=${POWERLINE_USER_INFO_SSH_CHAR:="⌁ "} USER_INFO_THEME_PROMPT_COLOR=${POWERLINE_USER_INFO_COLOR:=32} USER_INFO_THEME_PROMPT_COLOR_SUDO=${POWERLINE_USER_INFO_COLOR_SUDO:=202} +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}} + PYTHON_VENV_CHAR=${POWERLINE_PYTHON_VENV_CHAR:="ⓔ "} CONDA_PYTHON_VENV_CHAR=${POWERLINE_CONDA_PYTHON_VENV_CHAR:="ⓔ "} PYTHON_VENV_THEME_PROMPT_COLOR=${POWERLINE_PYTHON_VENV_COLOR:=35} diff --git a/themes/powerline/README.md b/themes/powerline/README.md index 481806ec..2076336f 100644 --- a/themes/powerline/README.md +++ b/themes/powerline/README.md @@ -79,3 +79,18 @@ A variable can be defined to set the order of the prompt segments: POWERLINE_PROMPT="user_info scm python_venv ruby cwd" The example values above are the current default values, but if you want to remove anything from the prompt, simply remove the "string" that represents the segment from the variable. + +### Compact Settings + +You can configure various aspects of the prompt to use less whitespace. Supported variables are: + +| Variable | Description +|--------------------------------------|------------ +|POWERLINE_COMPACT_BEFORE_SEPARATOR | Removes the leading space before each separator +|POWERLINE_COMPACT_AFTER_SEPARATOR | Removes the trailing space after each separator +|POWERLINE_COMPACT_BEFOR_FIRST_SEGMENT | Removes the leading space on the first segment +|POWERLINE_COMPACT_AFTER_LAST_SEGMENT | Removes the trailing space on the last segment +|POWERLINE_COMPACT_PROMPT | Removes the space after the prompt character +|POWERLINE_COMPACT | Enable all Compact settings (you can still override individual settings) + +The default value for all settings is `0` (disabled). Use `1` to enable. diff --git a/themes/powerline/powerline.base.bash b/themes/powerline/powerline.base.bash index 60339ed0..c3fac913 100644 --- a/themes/powerline/powerline.base.bash +++ b/themes/powerline/powerline.base.bash @@ -193,22 +193,37 @@ function __powerline_left_segment { local OLD_IFS="${IFS}"; IFS="|" local params=( $1 ) IFS="${OLD_IFS}" - local separator_char="${POWERLINE_LEFT_SEPARATOR}" - local separator_char_soft="${POWERLINE_LEFT_SEPARATOR_SOFT}" - local separator="" + local pad_before_segment=" " - if [[ "${SEGMENTS_AT_LEFT}" -gt 0 ]]; then + 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 if [[ "${LAST_SEGMENT_COLOR}" -eq "${params[1]}" ]]; then - separator="$(set_color - ${LAST_SEGMENT_COLOR})${separator_char_soft}${normal}" + LEFT_PROMPT+="$(set_color - ${LAST_SEGMENT_COLOR})${POWERLINE_LEFT_SEPARATOR_SOFT}${normal}" else - separator="$(set_color ${LAST_SEGMENT_COLOR} ${params[1]})${separator_char}${normal}" + LEFT_PROMPT+="$(set_color ${LAST_SEGMENT_COLOR} ${params[1]})${POWERLINE_LEFT_SEPARATOR}${normal}" fi fi - LEFT_PROMPT+="${separator}$(set_color - ${params[1]}) ${params[0]} ${normal}" + + LEFT_PROMPT+="$(set_color - ${params[1]})${pad_before_segment}${params[0]}${normal}" 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}" } @@ -234,6 +249,10 @@ function __powerline_prompt_command { [[ "${last_status}" -ne 0 ]] && __powerline_left_segment $(__powerline_last_status_prompt ${last_status}) + if [[ -n "${LEFT_PROMPT}" ]] && [[ "${POWERLINE_COMPACT_AFTER_LAST_SEGMENT}" -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. local prompt_color="$(set_color ${LAST_SEGMENT_COLOR} -)" @@ -243,7 +262,11 @@ function __powerline_prompt_command { fi [[ -n "${LEFT_PROMPT}" ]] && LEFT_PROMPT+="${prompt_color}${separator_char}${normal}" - PS1="${LEFT_PROMPT} " + if [[ "${POWERLINE_COMPACT_PROMPT}" -eq 0 ]]; then + LEFT_PROMPT+=" " + fi + + PS1="${LEFT_PROMPT}" ## cleanup ## unset LAST_SEGMENT_COLOR \ diff --git a/themes/powerline/powerline.theme.bash b/themes/powerline/powerline.theme.bash index 9bcd90b1..f3ef9a32 100644 --- a/themes/powerline/powerline.theme.bash +++ b/themes/powerline/powerline.theme.bash @@ -7,6 +7,13 @@ 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}} + USER_INFO_SSH_CHAR=${POWERLINE_USER_INFO_SSH_CHAR:=" "} USER_INFO_THEME_PROMPT_COLOR=${POWERLINE_USER_INFO_COLOR:=32} USER_INFO_THEME_PROMPT_COLOR_SUDO=${POWERLINE_USER_INFO_COLOR_SUDO:=202} From 00ef69e99c1e54d0612d0398e4161bcaa5933a89 Mon Sep 17 00:00:00 2001 From: David Farrell Date: Tue, 31 Dec 2019 12:06:52 -0800 Subject: [PATCH 2/2] Only apply POWERLINE_PADDING once --- themes/powerline-multiline/powerline-multiline.base.bash | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/themes/powerline-multiline/powerline-multiline.base.bash b/themes/powerline-multiline/powerline-multiline.base.bash index cbd30bff..7ae33f86 100644 --- a/themes/powerline-multiline/powerline-multiline.base.bash +++ b/themes/powerline-multiline/powerline-multiline.base.bash @@ -8,7 +8,7 @@ function __powerline_right_segment { local OLD_IFS="${IFS}"; IFS="|" local params=( $1 ) IFS="${OLD_IFS}" - local padding="${POWERLINE_PADDING}" + local padding=0 local pad_before_segment=" " if [[ "${SEGMENTS_AT_RIGHT}" -eq 0 ]]; then @@ -56,7 +56,7 @@ function __powerline_prompt_command { LEFT_PROMPT="" RIGHT_PROMPT="" - RIGHT_PROMPT_LENGTH=0 + RIGHT_PROMPT_LENGTH=${POWERLINE_PADDING} SEGMENTS_AT_LEFT=0 SEGMENTS_AT_RIGHT=0 LAST_SEGMENT_COLOR=""