Skip to content

Commit

Permalink
fix(kubectx): fix display of k8s contexts without double quotes (ohmy…
Browse files Browse the repository at this point in the history
…zsh#12534)

BREAKING CHANGE: the `kubectx` plugin now properly displays contexts from the
kubectx_mapping array, without using double quotes. Please refer to the plugin
README to see how to use it properly.

Closes ohmyzsh#12534

Co-authored-by: Ken Kelly <[email protected]>
  • Loading branch information
mcornella and kenhkelly committed Aug 1, 2024
1 parent 44ea99e commit 22bda77
Show file tree
Hide file tree
Showing 2 changed files with 44 additions and 12 deletions.
48 changes: 39 additions & 9 deletions plugins/kubectx/README.md
Original file line number Diff line number Diff line change
@@ -1,25 +1,55 @@
# kubectx - show active kubectl context

This plugins adds ```kubectx_prompt_info()``` function. It shows name of the
active kubectl context (```kubectl config current-context```).
This plugins adds `kubectx_prompt_info()` function. It shows name of the active
kubectl context (`kubectl config current-context`).

You can use it to customize prompt and know if You are on prod cluster ;)

_Example_. Add to **.zshrc**:
To use this plugin, add `kubectx` to the plugins array in your zshrc file:

```zsh
plugins=(... kubectx)
```

### Usage

Add to **.zshrc**:

```zsh
# right prompt
RPS1='$(kubectx_prompt_info)'
# left prompt
PROMPT="$PROMPT"'$(kubectx_prompt_info)'
```

### custom ctx names
### Custom context names

One can rename default context name for better readability.
You can rename the default context name for better readability or additional formatting.
These values accept [prompt expansion sequences](http://zsh.sourceforge.net/Doc/Release/Prompt-Expansion.html)
such as `%F{color}`, `%f`, `%K{color}`, `%k`, `%B`, `%b`, `%U`, `%u`, `%S`, `%s`, `%{...%}`.

_Example_. Add to **.zshrc**:
**Example**: add this to your .zshrc file:

```zsh
kubectx_mapping[minikube]="mini"
kubectx_mapping[context_name_from_kubeconfig]="$emoji[wolf_face]"
kubectx_mapping[production_cluster]="%{$fg[yellow]%}prod!%{$reset_color%}"
# contexts with spaces
kubectx_mapping[context\ with\ spaces]="%F{red}spaces%f"
# don't use quotes as it will break the prompt
kubectx_mapping["context with spaces"]="%F{red}spaces%f" # ti
```
kubectx_mapping["minikube"]="mini"
kubectx_mapping["context_name_from_kubeconfig"]="$emoji[wolf_face]"
kubectx_mapping["production_cluster"]="%{$fg[yellow]%}prod!%{$reset_color%}"

You can also define the whole mapping array at once:

```zsh
typeset -A kubectx_mapping
kubectx_mapping=(
minikube "mini"
context_name_from_kubeconfig "$emoji[wolf_face]"
production_cluster "%{$fg[yellow]%}prod!%{$reset_color%}"
"context with spaces" "%F{red}spaces%f"
)
```

![staging](stage.png)
Expand Down
8 changes: 5 additions & 3 deletions plugins/kubectx/kubectx.plugin.zsh
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,9 @@ function kubectx_prompt_info() {

[[ -n "$current_ctx" ]] || return

# use value in associative array if it exists
# otherwise fall back to the context name
echo "${kubectx_mapping[\"$current_ctx\"]:-${current_ctx:gs/%/%%}}"
# Use value in associative array if it exists, otherwise fall back to the context name
#
# Note: we need to escape the % character in the prompt string when coming directly from
# the context name, as it could contain a % character.
echo "${kubectx_mapping[$current_ctx]:-${current_ctx:gs/%/%%}}"
}

0 comments on commit 22bda77

Please sign in to comment.