Author SHA1 Message Date
Carlo SalaandCopilot Autofix powered by AI 62e5024454 Fix URL encoding for HOST and PWD variables
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
2026-09-10 13:55:55 +02:00
Robby RussellandCopilot Autofix powered by AI f68258fdf1 Apply batched suggestions from code review
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
2026-09-06 08:47:04 -07:00
Robby RussellandClaude Fable 5.1 f9cba205e1 perf(termsupport): don't re-encode the cwd URL on every prompt
`omz_termsupport_cwd` percent-encoded $HOST and $PWD on every prompt,
each through a command substitution that forks a subshell. Keep the
encoded URL and only recompute it when $HOST or $PWD changed. The OSC 7
sequence is still emitted on every prompt as before.

Output verified identical for paths with spaces, unicode and `&`, for
the root directory, for Konsole (host omitted) and after a host change.
Measured on macOS arm64, zsh 5.9: ~2-9 ms -> 0.03 ms per prompt when
the directory is unchanged.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-06 08:10:43 -07:00
Jérôme Tamarelle 426650fbe8 fix(symfony6): don't run command substitutions on tab completion (#14058)
The plugin is a copy of the completion script shipped by symfony/console.
It has not been updated since it was added, and two fixes made upstream
since then are missing.

The completion request was assembled as a string from the raw words of
the command line, then passed to "eval". Any command substitution present
in a word was therefore executed by the completion, before the user
validated the line. The request is now run as an array of arguments,
without being read again by the shell, and "_describe" is called directly
instead of through "eval". The alias of the command is resolved
explicitly, since that was the only useful effect of the "eval".

The request also runs with SHELL_VERBOSITY=0, so that completion keeps
working for users who exported SHELL_VERBOSITY=-1.

Ported from symfony/symfony#65818 and symfony/symfony#63859.
2026-09-06 07:02:47 -07:00
Robby RussellandMoulick Aggarwal 8a5b393088 feat(kubectl): add kesec alias for editing secrets (#14048)
Secret was the only resource in the plugin with get, describe and delete
aliases but no edit alias, while thirteen other resource types have one.

Closes #8309

Co-authored-by: Moulick Aggarwal <Moulick@users.noreply.github.com>
2026-09-05 23:04:08 -03:00
4 changed files with 37 additions and 20 deletions
+14 -7
View File
@@ -146,16 +146,23 @@ esac
# the host name to disambiguate local vs. remote paths.
function omz_termsupport_cwd {
setopt localoptions unset
# Percent-encode the host and path names.
local URL_HOST URL_PATH
URL_HOST="$(omz_urlencode -P $HOST)" || return 1
URL_PATH="$(omz_urlencode -P $PWD)" || return 1
# Percent-encode the host and path names. Encoding forks a subshell each,
# so keep the result and only redo it when $HOST or $PWD changed.
local cache_key="$HOST:$PWD:${KONSOLE_PROFILE_NAME:+1}:${KONSOLE_DBUS_SESSION:+1}"
if [[ "$_omz_termsupport_cwd_key" != "$cache_key" ]]; then
local URL_HOST URL_PATH
URL_HOST="$(omz_urlencode -P "$HOST")" || return 1
URL_PATH="$(omz_urlencode -P "$PWD")" || return 1
# Konsole errors if the HOST is provided
[[ -z "$KONSOLE_PROFILE_NAME" && -z "$KONSOLE_DBUS_SESSION" ]] || URL_HOST=""
# Konsole errors if the HOST is provided
[[ -z "$KONSOLE_PROFILE_NAME" && -z "$KONSOLE_DBUS_SESSION" ]] || URL_HOST=""
typeset -g _omz_termsupport_cwd_key="$cache_key"
typeset -g _omz_termsupport_cwd_url="file://${URL_HOST}${URL_PATH}"
fi
# common control sequence (OSC 7) to set current host and path
printf "\e]7;file://%s%s\e\\" "${URL_HOST}" "${URL_PATH}"
printf "\e]7;%s\e\\" "$_omz_termsupport_cwd_url"
}
# Use a precmd hook instead of a chpwd hook to avoid contaminating output
+1
View File
@@ -71,6 +71,7 @@ plugins=(... kubectl)
| | | **Secret management** |
| kgsec | `kubectl get secret` | Get secret for decoding |
| kgseca | `kubectl get secret --all-namespaces` | List secrets across all namespaces |
| kesec | `kubectl edit secret` | Edit secret resource |
| kdsec | `kubectl describe secret` | Describe secret resource in detail |
| kdelsec | `kubectl delete secret` | Delete the secret |
| | | **Deployment management** |
+1
View File
@@ -93,6 +93,7 @@ alias kdelcm='kubectl delete configmap'
# Secret management
alias kgsec='kubectl get secret'
alias kgseca='kubectl get secret --all-namespaces'
alias kesec='kubectl edit secret'
alias kdsec='kubectl describe secret'
alias kdelsec='kubectl delete secret'
+21 -13
View File
@@ -15,8 +15,8 @@
# - https://github.com/symfony/symfony/blob/5.4/src/Symfony/Component/Console/Resources/completion.bash
#
_sf_console() {
local lastParam flagPrefix requestComp out comp
local -a completions
local lastParam out comp sf_cmd
local -a completions flagPrefix requestComp inputs
# The user could have moved the cursor backwards on the command-line.
# We need to trigger completion from the $CURRENT location, so we need
@@ -29,11 +29,20 @@ _sf_console() {
setopt local_options BASH_REMATCH
if [[ "${lastParam}" =~ '-.*=' ]]; then
# We are dealing with a flag with an =
flagPrefix="-P ${BASH_REMATCH}"
flagPrefix=(-P "${BASH_REMATCH}")
fi
# Prepare the command to obtain completions
requestComp="${words[0]} ${words[1]} _complete --no-interaction -szsh -a1 -c$((CURRENT-1))" i=""
# Prepare the command to obtain completions. An alias is resolved here,
# because the request is no longer read again by the shell.
sf_cmd="${words[1]}"
if [[ -n "${aliases[$sf_cmd]}" ]]; then
requestComp=(${(z)aliases[$sf_cmd]})
else
requestComp=(${~sf_cmd})
fi
requestComp+=(_complete --no-interaction -szsh -a1 "-c$((CURRENT-1))")
for w in ${words[@]}; do
w=$(printf -- '%b' "$w")
# remove quotes from typed values
@@ -47,19 +56,18 @@ _sf_console() {
fi
# empty values are ignored
if [ ! -z "$w" ]; then
i="${i}-i${w} "
inputs+=("-i$w")
fi
done
# Ensure at least 1 input
if [ "${i}" = "" ]; then
requestComp="${requestComp} -i\" \""
else
requestComp="${requestComp} ${i}"
if (( ! $#inputs )); then
inputs=(-i' ')
fi
# Use eval to handle any environment variables and such
out=$(eval ${requestComp} 2>/dev/null)
# The request is run without being read again by the shell, so that a
# "$(...)" or a backtick typed on the command line is not executed
out=$(SHELL_VERBOSITY=0 "${requestComp[@]}" "${inputs[@]}" 2>/dev/null)
while IFS='\n' read -r comp; do
if [ -n "$comp" ]; then
@@ -75,7 +83,7 @@ _sf_console() {
done < <(printf "%s\n" "${out[@]}")
# Let inbuilt _describe handle completions
eval _describe "completions" completions $flagPrefix
_describe "completions" completions "${flagPrefix[@]}"
return $?
}