Compare commits

...

4 Commits

Author SHA1 Message Date
Frank Peleato 1ae2dddf18
Merge f076985c57 into 9253fb1c50 2026-06-15 14:41:57 -07:00
Roman Perepelitsa 9253fb1c50 fix a bug that triggers when SH_GLOB is set (#2887) 2026-06-15 09:54:55 +02:00
Frank Peleato f076985c57
refactor: use pure zsh for JSON parsing instead of awk
Replace awk-based JSON parsing with native zsh regex matching
and file reading. This removes the external command dependency
and is slightly faster.

Made-with: Cursor
2026-03-26 12:02:00 -06:00
Frank Peleato eca86908eb
feat: add salesforce_org prompt segment
Add a new user-defined prompt segment that displays the current
Salesforce CLI default target org. The segment reads target-org
from .sf/config.json, walking up from the current directory to
find the nearest Salesforce DX project root.

The segment is added to all four main config templates (rainbow,
classic, lean, lean-8colors) as a commented-out option in
RIGHT_PROMPT_ELEMENTS, along with the segment function definition
and customization parameters.

Made-with: Cursor
2026-03-26 11:52:36 -06:00
6 changed files with 161 additions and 7 deletions

View File

@ -78,6 +78,7 @@
gcloud # google cloud cli account and project (https://cloud.google.com/)
google_app_cred # google application credentials (https://cloud.google.com/docs/authentication/production)
toolbox # toolbox name (https://github.com/containers/toolbox)
# salesforce_org # salesforce cli default org (https://developer.salesforce.com/tools/salesforcecli)
context # user@hostname
nordvpn # nordvpn connection status, linux only (https://nordvpn.com/)
ranger # ranger shell (https://github.com/ranger/ranger)
@ -1667,6 +1668,40 @@
# Custom prefix.
# typeset -g POWERLEVEL9K_TIME_PREFIX='%248Fat '
##[ salesforce_org: salesforce cli default org (https://developer.salesforce.com/tools/salesforcecli) ]##
# Displays the Salesforce CLI default target org from .sf/config.json.
# Only shown when inside a Salesforce DX project directory (or subdirectory).
function prompt_salesforce_org() {
local sf_config
local dir=$PWD
while [[ $dir != / ]]; do
if [[ -f "$dir/.sf/config.json" ]]; then
sf_config="$dir/.sf/config.json"
break
fi
dir=${dir:h}
done
[[ -z $sf_config ]] && return
local content
content=$(<"$sf_config") || return
[[ $content =~ '"target-org"[[:space:]]*:[[:space:]]*"([^"]*)"' ]] || return
local org=$match[1]
[[ -z $org ]] && return
p10k segment -b 4 -f 255 -i $'\uf0c2' -t "$org"
}
function instant_prompt_salesforce_org() {
prompt_salesforce_org
}
typeset -g POWERLEVEL9K_SALESFORCE_ORG_FOREGROUND=255
typeset -g POWERLEVEL9K_SALESFORCE_ORG_BACKGROUND=4
# Show salesforce_org only when the command you are typing invokes one of these tools.
# Tip: Remove the next line to always show salesforce_org.
# typeset -g POWERLEVEL9K_SALESFORCE_ORG_SHOW_ON_COMMAND='sf|sfdx'
# Custom icon.
# typeset -g POWERLEVEL9K_SALESFORCE_ORG_VISUAL_IDENTIFIER_EXPANSION='⭐'
# Example of a user-defined prompt segment. Function prompt_example will be called on every
# prompt if `example` prompt segment is added to POWERLEVEL9K_LEFT_PROMPT_ELEMENTS or
# POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS. It displays an icon and orange text greeting the user.

View File

@ -78,6 +78,7 @@
gcloud # google cloud cli account and project (https://cloud.google.com/)
google_app_cred # google application credentials (https://cloud.google.com/docs/authentication/production)
toolbox # toolbox name (https://github.com/containers/toolbox)
# salesforce_org # salesforce cli default org (https://developer.salesforce.com/tools/salesforcecli)
context # user@hostname
nordvpn # nordvpn connection status, linux only (https://nordvpn.com/)
ranger # ranger shell (https://github.com/ranger/ranger)
@ -1642,6 +1643,40 @@
# Custom prefix.
# typeset -g POWERLEVEL9K_TIME_PREFIX='%fat '
##[ salesforce_org: salesforce cli default org (https://developer.salesforce.com/tools/salesforcecli) ]##
# Displays the Salesforce CLI default target org from .sf/config.json.
# Only shown when inside a Salesforce DX project directory (or subdirectory).
function prompt_salesforce_org() {
local sf_config
local dir=$PWD
while [[ $dir != / ]]; do
if [[ -f "$dir/.sf/config.json" ]]; then
sf_config="$dir/.sf/config.json"
break
fi
dir=${dir:h}
done
[[ -z $sf_config ]] && return
local content
content=$(<"$sf_config") || return
[[ $content =~ '"target-org"[[:space:]]*:[[:space:]]*"([^"]*)"' ]] || return
local org=$match[1]
[[ -z $org ]] && return
p10k segment -b 4 -f 255 -i $'\uf0c2' -t "$org"
}
function instant_prompt_salesforce_org() {
prompt_salesforce_org
}
typeset -g POWERLEVEL9K_SALESFORCE_ORG_FOREGROUND=255
typeset -g POWERLEVEL9K_SALESFORCE_ORG_BACKGROUND=4
# Show salesforce_org only when the command you are typing invokes one of these tools.
# Tip: Remove the next line to always show salesforce_org.
# typeset -g POWERLEVEL9K_SALESFORCE_ORG_SHOW_ON_COMMAND='sf|sfdx'
# Custom icon.
# typeset -g POWERLEVEL9K_SALESFORCE_ORG_VISUAL_IDENTIFIER_EXPANSION='⭐'
# Example of a user-defined prompt segment. Function prompt_example will be called on every
# prompt if `example` prompt segment is added to POWERLEVEL9K_LEFT_PROMPT_ELEMENTS or
# POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS. It displays an icon and green text greeting the user.

View File

@ -78,6 +78,7 @@
gcloud # google cloud cli account and project (https://cloud.google.com/)
google_app_cred # google application credentials (https://cloud.google.com/docs/authentication/production)
toolbox # toolbox name (https://github.com/containers/toolbox)
# salesforce_org # salesforce cli default org (https://developer.salesforce.com/tools/salesforcecli)
context # user@hostname
nordvpn # nordvpn connection status, linux only (https://nordvpn.com/)
ranger # ranger shell (https://github.com/ranger/ranger)
@ -1642,6 +1643,40 @@
# Custom prefix.
# typeset -g POWERLEVEL9K_TIME_PREFIX='%fat '
##[ salesforce_org: salesforce cli default org (https://developer.salesforce.com/tools/salesforcecli) ]##
# Displays the Salesforce CLI default target org from .sf/config.json.
# Only shown when inside a Salesforce DX project directory (or subdirectory).
function prompt_salesforce_org() {
local sf_config
local dir=$PWD
while [[ $dir != / ]]; do
if [[ -f "$dir/.sf/config.json" ]]; then
sf_config="$dir/.sf/config.json"
break
fi
dir=${dir:h}
done
[[ -z $sf_config ]] && return
local content
content=$(<"$sf_config") || return
[[ $content =~ '"target-org"[[:space:]]*:[[:space:]]*"([^"]*)"' ]] || return
local org=$match[1]
[[ -z $org ]] && return
p10k segment -b 4 -f 255 -i $'\uf0c2' -t "$org"
}
function instant_prompt_salesforce_org() {
prompt_salesforce_org
}
typeset -g POWERLEVEL9K_SALESFORCE_ORG_FOREGROUND=255
typeset -g POWERLEVEL9K_SALESFORCE_ORG_BACKGROUND=4
# Show salesforce_org only when the command you are typing invokes one of these tools.
# Tip: Remove the next line to always show salesforce_org.
# typeset -g POWERLEVEL9K_SALESFORCE_ORG_SHOW_ON_COMMAND='sf|sfdx'
# Custom icon.
# typeset -g POWERLEVEL9K_SALESFORCE_ORG_VISUAL_IDENTIFIER_EXPANSION='⭐'
# Example of a user-defined prompt segment. Function prompt_example will be called on every
# prompt if `example` prompt segment is added to POWERLEVEL9K_LEFT_PROMPT_ELEMENTS or
# POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS. It displays an icon and orange text greeting the user.

View File

@ -78,6 +78,7 @@
gcloud # google cloud cli account and project (https://cloud.google.com/)
google_app_cred # google application credentials (https://cloud.google.com/docs/authentication/production)
toolbox # toolbox name (https://github.com/containers/toolbox)
# salesforce_org # salesforce cli default org (https://developer.salesforce.com/tools/salesforcecli)
context # user@hostname
nordvpn # nordvpn connection status, linux only (https://nordvpn.com/)
ranger # ranger shell (https://github.com/ranger/ranger)
@ -1760,6 +1761,40 @@
# Custom prefix.
# typeset -g POWERLEVEL9K_TIME_PREFIX='at '
##[ salesforce_org: salesforce cli default org (https://developer.salesforce.com/tools/salesforcecli) ]##
# Displays the Salesforce CLI default target org from .sf/config.json.
# Only shown when inside a Salesforce DX project directory (or subdirectory).
function prompt_salesforce_org() {
local sf_config
local dir=$PWD
while [[ $dir != / ]]; do
if [[ -f "$dir/.sf/config.json" ]]; then
sf_config="$dir/.sf/config.json"
break
fi
dir=${dir:h}
done
[[ -z $sf_config ]] && return
local content
content=$(<"$sf_config") || return
[[ $content =~ '"target-org"[[:space:]]*:[[:space:]]*"([^"]*)"' ]] || return
local org=$match[1]
[[ -z $org ]] && return
p10k segment -b 4 -f 255 -i $'\uf0c2' -t "$org"
}
function instant_prompt_salesforce_org() {
prompt_salesforce_org
}
typeset -g POWERLEVEL9K_SALESFORCE_ORG_FOREGROUND=255
typeset -g POWERLEVEL9K_SALESFORCE_ORG_BACKGROUND=4
# Show salesforce_org only when the command you are typing invokes one of these tools.
# Tip: Remove the next line to always show salesforce_org.
# typeset -g POWERLEVEL9K_SALESFORCE_ORG_SHOW_ON_COMMAND='sf|sfdx'
# Custom icon.
# typeset -g POWERLEVEL9K_SALESFORCE_ORG_VISUAL_IDENTIFIER_EXPANSION='⭐'
# Example of a user-defined prompt segment. Function prompt_example will be called on every
# prompt if `example` prompt segment is added to POWERLEVEL9K_LEFT_PROMPT_ELEMENTS or
# POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS. It displays an icon and yellow text on red background

View File

@ -138,6 +138,14 @@ function getColorCode() {
return 1
}
function _p9k_codeset_is_utf8() {
# Use `case` to survive SH_GLOB.
case "${langinfo[CODESET]}" in
utf-8|UTF-8|utf8|UTF8) return 0;;
*) return 1;;
esac
}
# _p9k_declare <type> <uppercase-name> [default]...
function _p9k_declare() {
local -i set=$+parameters[$2]
@ -1796,7 +1804,7 @@ prompt_dir() {
if (( $+_POWERLEVEL9K_SHORTEN_DELIMITER )); then
local delim=$_POWERLEVEL9K_SHORTEN_DELIMITER
else
if [[ $langinfo[CODESET] == (utf|UTF)(-|)8 ]]; then
if _p9k_codeset_is_utf8; then
local delim=$'\u2026'
else
local delim='..'
@ -6851,13 +6859,13 @@ function _p9k_restore_special_params() {
}
function _p9k_on_expand() {
(( _p9k__expanded && ! ${+__p9k_instant_prompt_active} )) && [[ "${langinfo[CODESET]}" == (utf|UTF)(-|)8 ]] && return
(( _p9k__expanded && ! ${+__p9k_instant_prompt_active} )) && _p9k_codeset_is_utf8 && return
eval "$__p9k_intro_no_locale"
if [[ $langinfo[CODESET] != (utf|UTF)(-|)8 ]]; then
if ! _p9k_codeset_is_utf8; then
_p9k_restore_special_params
if [[ $langinfo[CODESET] != (utf|UTF)(-|)8 ]] && _p9k_init_locale; then
if ! _p9k_codeset_is_utf8 && _p9k_init_locale; then
if [[ -n $LC_ALL ]]; then
_p9k__real_lc_all=$LC_ALL
LC_ALL=$__p9k_locale
@ -7458,7 +7466,7 @@ _p9k_init_params() {
_p9k_declare -i POWERLEVEL9K_VCS_SHORTEN_LENGTH
_p9k_declare -i POWERLEVEL9K_VCS_SHORTEN_MIN_LENGTH
_p9k_declare -s POWERLEVEL9K_VCS_SHORTEN_STRATEGY
if [[ $langinfo[CODESET] == (utf|UTF)(-|)8 ]]; then
if _p9k_codeset_is_utf8; then
_p9k_declare -e POWERLEVEL9K_VCS_SHORTEN_DELIMITER '\u2026'
else
_p9k_declare -e POWERLEVEL9K_VCS_SHORTEN_DELIMITER '..'
@ -9519,7 +9527,7 @@ if [[ $__p9k_dump_file != $__p9k_instant_prompt_dump_file && -n $__p9k_instant_p
zf_rm -f -- $__p9k_instant_prompt_dump_file{,.zwc} 2>/dev/null
fi
typeset -g P9K_VERSION=1.20.16
typeset -g P9K_VERSION=1.20.17
if [[ ${VSCODE_SHELL_INTEGRATION-} == <1-> && ${+__p9k_force_term_shell_integration} == 0 ]]; then
typeset -gri __p9k_force_term_shell_integration=1

View File

@ -27,7 +27,13 @@
local -a match mbegin mend
local -i MBEGIN MEND OPTIND
local MATCH OPTARG IFS=$'\'' \t\n\0'\'
typeset -gr __p9k_intro_locale='[[ $langinfo[CODESET] != (utf|UTF)(-|)8 ]] && _p9k_init_locale && { [[ -n $LC_ALL ]] && local LC_ALL=$__p9k_locale || local LC_CTYPE=$__p9k_locale }'
# Use `case` to survive SH_GLOB.
typeset -gr __p9k_intro_locale='{
case "${langinfo[CODESET]}" in
utf-8|UTF-8|utf8|UTF8) false;;
*) true;;
esac
} && _p9k_init_locale && { [[ -n "$LC_ALL" ]] && local LC_ALL=$__p9k_locale || local LC_CTYPE=$__p9k_locale }'
typeset -gr __p9k_intro_no_locale="${${__p9k_intro_base/ match / match reply }/ MATCH / MATCH REPLY }"
typeset -gr __p9k_intro_no_reply="$__p9k_intro_base; $__p9k_intro_locale"
typeset -gr __p9k_intro="$__p9k_intro_no_locale; $__p9k_intro_locale"