Adds compact support to powerline themes

pull/1447/head
David Farrell 2019-11-03 13:01:22 -08:00
parent 65358aae28
commit 920a97a264
No known key found for this signature in database
GPG Key ID: 1CCA28D0E300B56F
12 changed files with 230 additions and 33 deletions

View File

@ -94,3 +94,25 @@ This can be done by setting the `POWERLINE_PADDING` variable before Bash-it is l
```bash ```bash
export POWERLINE_PADDING=3 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"`

View File

@ -8,32 +8,50 @@ function __powerline_right_segment {
local OLD_IFS="${IFS}"; IFS="|" local OLD_IFS="${IFS}"; IFS="|"
local params=( $1 ) local params=( $1 )
IFS="${OLD_IFS}" IFS="${OLD_IFS}"
local separator_char="${POWERLINE_RIGHT_SEPARATOR}"
local separator_char_soft="${POWERLINE_RIGHT_SEPARATOR_SOFT}"
local padding="${POWERLINE_PADDING}" local padding="${POWERLINE_PADDING}"
local separator_color="" local pad_before_segment=" "
if [[ "${SEGMENTS_AT_RIGHT}" -eq 0 ]]; then if [[ "${SEGMENTS_AT_RIGHT}" -eq 0 ]]; then
separator_char="${POWERLINE_RIGHT_END}" if [[ "${POWERLINE_COMPACT_AFTER_LAST_SEGMENT}" -ne 0 ]]; then
separator_color="$(set_color ${params[1]} -)" pad_before_segment=""
fi
RIGHT_PROMPT+="$(set_color ${params[1]} -)${POWERLINE_RIGHT_END}${normal}"
(( padding += 1 ))
else else
if [[ "${LAST_SEGMENT_COLOR}" -eq "${params[1]}" ]]; then if [[ "${POWERLINE_COMPACT_BEFORE_SEPARATOR}" -ne 0 ]]; then
separator_color="$(set_color - ${LAST_SEGMENT_COLOR})" pad_before_segment=""
separator_char=${separator_char_soft} fi
else # Since the previous segment wasn't the last segment, add padding, if needed
separator_color="$(set_color ${params[1]} ${LAST_SEGMENT_COLOR})" #
fi 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 )) (( padding += 1 ))
fi 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]}" LAST_SEGMENT_COLOR="${params[1]}"
(( SEGMENTS_AT_RIGHT += 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 { function __powerline_prompt_command {
local last_status="$?" ## always the first local last_status="$?" ## always the first
local separator_char="${POWERLINE_LEFT_SEPARATOR}"
local move_cursor_rightmost='\033[500C' local move_cursor_rightmost='\033[500C'
LEFT_PROMPT="" LEFT_PROMPT=""
@ -48,6 +66,11 @@ function __powerline_prompt_command {
local info="$(__powerline_${segment}_prompt)" local info="$(__powerline_${segment}_prompt)"
[[ -n "${info}" ]] && __powerline_left_segment "${info}" [[ -n "${info}" ]] && __powerline_left_segment "${info}"
done 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}" [[ -n "${LEFT_PROMPT}" ]] && LEFT_PROMPT+="$(set_color ${LAST_SEGMENT_COLOR} -)${POWERLINE_LEFT_END}${normal}"
## right prompt ## ## right prompt ##
@ -57,12 +80,22 @@ function __powerline_prompt_command {
local info="$(__powerline_${segment}_prompt)" local info="$(__powerline_${segment}_prompt)"
[[ -n "${info}" ]] && __powerline_right_segment "${info}" [[ -n "${info}" ]] && __powerline_right_segment "${info}"
done 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)) RIGHT_PAD=$(printf "%.s " $(seq 1 $RIGHT_PROMPT_LENGTH))
LEFT_PROMPT+="${RIGHT_PAD}${move_cursor_rightmost}" LEFT_PROMPT+="${RIGHT_PAD}${move_cursor_rightmost}"
LEFT_PROMPT+="\033[${RIGHT_PROMPT_LENGTH}D" LEFT_PROMPT+="\033[$(( ${#RIGHT_PAD} - 1 ))D"
fi 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 ## ## cleanup ##
unset LAST_SEGMENT_COLOR \ unset LAST_SEGMENT_COLOR \

View File

@ -11,6 +11,13 @@ POWERLINE_LEFT_END=${POWERLINE_LEFT_END:=""}
POWERLINE_RIGHT_END=${POWERLINE_RIGHT_END:=""} POWERLINE_RIGHT_END=${POWERLINE_RIGHT_END:=""}
POWERLINE_PADDING=${POWERLINE_PADDING:=2} 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_SSH_CHAR=${POWERLINE_USER_INFO_SSH_CHAR:=" "}
USER_INFO_THEME_PROMPT_COLOR=${POWERLINE_USER_INFO_COLOR:=32} USER_INFO_THEME_PROMPT_COLOR=${POWERLINE_USER_INFO_COLOR:=32}
USER_INFO_THEME_PROMPT_COLOR_SUDO=${POWERLINE_USER_INFO_COLOR_SUDO:=202} USER_INFO_THEME_PROMPT_COLOR_SUDO=${POWERLINE_USER_INFO_COLOR_SUDO:=202}

View File

@ -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" 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. 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.

View File

@ -4,13 +4,30 @@ function __powerline_left_segment {
local OLD_IFS="${IFS}"; IFS="|" local OLD_IFS="${IFS}"; IFS="|"
local params=( $1 ) local params=( $1 )
IFS="${OLD_IFS}" IFS="${OLD_IFS}"
local separator_char="${POWERLINE_LEFT_SEPARATOR}"
local separator="" local separator=""
local pad_before_segment=" "
if [[ "${SEGMENTS_AT_LEFT}" -gt 0 ]]; then if [[ "${SEGMENTS_AT_LEFT}" -eq 0 ]]; then
separator="${separator_char}" 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 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]} LAST_SEGMENT_COLOR=${params[1]}
(( SEGMENTS_AT_LEFT += 1 )) (( SEGMENTS_AT_LEFT += 1 ))
} }
function __powerline_left_last_segment_padding {
LEFT_PROMPT+="$(set_color ${LAST_SEGMENT_COLOR} -) ${normal}"
}

View File

@ -6,6 +6,13 @@ PROMPT_CHAR=${POWERLINE_PROMPT_CHAR:=""}
POWERLINE_LEFT_SEPARATOR=${POWERLINE_LEFT_SEPARATOR:=""} POWERLINE_LEFT_SEPARATOR=${POWERLINE_LEFT_SEPARATOR:=""}
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_SSH_CHAR=${POWERLINE_USER_INFO_SSH_CHAR:=" "}
USER_INFO_THEME_PROMPT_COLOR=${POWERLINE_USER_INFO_COLOR:=240} USER_INFO_THEME_PROMPT_COLOR=${POWERLINE_USER_INFO_COLOR:=240}
USER_INFO_THEME_PROMPT_COLOR_SUDO=${POWERLINE_USER_INFO_COLOR_SUDO:=202} USER_INFO_THEME_PROMPT_COLOR_SUDO=${POWERLINE_USER_INFO_COLOR_SUDO:=202}

View File

@ -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" 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. 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.

View File

@ -4,15 +4,34 @@ function __powerline_left_segment {
local OLD_IFS="${IFS}"; IFS="|" local OLD_IFS="${IFS}"; IFS="|"
local params=( $1 ) local params=( $1 )
IFS="${OLD_IFS}" 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]} LAST_SEGMENT_COLOR=${params[1]}
(( SEGMENTS_AT_LEFT += 1 ))
} }
function __powerline_prompt_command { function __powerline_prompt_command {
local last_status="$?" ## always the first local last_status="$?" ## always the first
LEFT_PROMPT="" LEFT_PROMPT=""
SEGMENTS_AT_LEFT=0
LAST_SEGMENT_COLOR=""
_save-and-reload-history "${HISTORY_AUTOSAVE:-0}" _save-and-reload-history "${HISTORY_AUTOSAVE:-0}"
@ -21,11 +40,21 @@ function __powerline_prompt_command {
local info="$(__powerline_${segment}_prompt)" local info="$(__powerline_${segment}_prompt)"
[[ -n "${info}" ]] && __powerline_left_segment "${info}" [[ -n "${info}" ]] && __powerline_left_segment "${info}"
done 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 ## ## cleanup ##
unset LEFT_PROMPT unset LAST_SEGMENT_COLOR \
LEFT_PROMPT \
SEGMENTS_AT_LEFT
} }

View File

@ -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=${POWERLINE_USER_INFO_COLOR:=32}
USER_INFO_THEME_PROMPT_COLOR_SUDO=${POWERLINE_USER_INFO_COLOR_SUDO:=202} 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:="ⓔ "} PYTHON_VENV_CHAR=${POWERLINE_PYTHON_VENV_CHAR:="ⓔ "}
CONDA_PYTHON_VENV_CHAR=${POWERLINE_CONDA_PYTHON_VENV_CHAR:="ⓔ "} CONDA_PYTHON_VENV_CHAR=${POWERLINE_CONDA_PYTHON_VENV_CHAR:="ⓔ "}
PYTHON_VENV_THEME_PROMPT_COLOR=${POWERLINE_PYTHON_VENV_COLOR:=35} PYTHON_VENV_THEME_PROMPT_COLOR=${POWERLINE_PYTHON_VENV_COLOR:=35}

View File

@ -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" 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. 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.

View File

@ -193,22 +193,37 @@ function __powerline_left_segment {
local OLD_IFS="${IFS}"; IFS="|" local OLD_IFS="${IFS}"; IFS="|"
local params=( $1 ) local params=( $1 )
IFS="${OLD_IFS}" IFS="${OLD_IFS}"
local separator_char="${POWERLINE_LEFT_SEPARATOR}" local pad_before_segment=" "
local separator_char_soft="${POWERLINE_LEFT_SEPARATOR_SOFT}"
local separator=""
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 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 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
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]} LAST_SEGMENT_COLOR=${params[1]}
(( SEGMENTS_AT_LEFT += 1 )) (( SEGMENTS_AT_LEFT += 1 ))
} }
function __powerline_left_last_segment_padding {
LEFT_PROMPT+="$(set_color - ${LAST_SEGMENT_COLOR}) ${normal}"
}
function __powerline_last_status_prompt { function __powerline_last_status_prompt {
[[ "$1" -ne 0 ]] && echo "${1}|${LAST_STATUS_THEME_PROMPT_COLOR}" [[ "$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}) [[ "${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, # 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. # but when part of the prompt exists within that segment, we instead match the foreground color.
local prompt_color="$(set_color ${LAST_SEGMENT_COLOR} -)" local prompt_color="$(set_color ${LAST_SEGMENT_COLOR} -)"
@ -243,7 +262,11 @@ function __powerline_prompt_command {
fi fi
[[ -n "${LEFT_PROMPT}" ]] && LEFT_PROMPT+="${prompt_color}${separator_char}${normal}" [[ -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 ## ## cleanup ##
unset LAST_SEGMENT_COLOR \ unset LAST_SEGMENT_COLOR \

View File

@ -7,6 +7,13 @@ POWERLINE_LEFT_SEPARATOR=${POWERLINE_LEFT_SEPARATOR:=""}
POWERLINE_LEFT_SEPARATOR_SOFT=${POWERLINE_LEFT_SEPARATOR_SOFT:=""} POWERLINE_LEFT_SEPARATOR_SOFT=${POWERLINE_LEFT_SEPARATOR_SOFT:=""}
POWERLINE_LEFT_LAST_SEGMENT_PROMPT_CHAR=${POWERLINE_LEFT_LAST_SEGMENT_PROMPT_CHAR:=""} 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_SSH_CHAR=${POWERLINE_USER_INFO_SSH_CHAR:=" "}
USER_INFO_THEME_PROMPT_COLOR=${POWERLINE_USER_INFO_COLOR:=32} USER_INFO_THEME_PROMPT_COLOR=${POWERLINE_USER_INFO_COLOR:=32}
USER_INFO_THEME_PROMPT_COLOR_SUDO=${POWERLINE_USER_INFO_COLOR_SUDO:=202} USER_INFO_THEME_PROMPT_COLOR_SUDO=${POWERLINE_USER_INFO_COLOR_SUDO:=202}