From fa64758aeaeb17abdefca5d193c1002230048977 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marc=20Cornell=C3=A0?= Date: Sun, 27 Oct 2024 17:31:38 +0100 Subject: [PATCH] fix(vagrant-prompt): make `vagrant_prompt_info` generic for any state (#12782) --- plugins/vagrant-prompt/README.md | 25 +++++++++++++++-- .../vagrant-prompt/vagrant-prompt.plugin.zsh | 28 ++++++++++--------- 2 files changed, 37 insertions(+), 16 deletions(-) diff --git a/plugins/vagrant-prompt/README.md b/plugins/vagrant-prompt/README.md index 0720f4bde..f7bfce4f3 100644 --- a/plugins/vagrant-prompt/README.md +++ b/plugins/vagrant-prompt/README.md @@ -17,11 +17,15 @@ To display Vagrant info on your prompt add the `vagrant_prompt_info` to the `$PROMPT` or `$RPROMPT` variable in your theme. Example: ```zsh -PROMPT='%{$fg[$NCOLOR]%}%B%n%b%{$reset_color%}:%{$fg[blue]%}%B%c/%b%{$reset_color%} $(vagrant_prompt_info)$(svn_prompt_info)$(git_prompt_info)%(!.#.$) ' +PROMPT="$PROMPT"' $(vagrant_prompt_info)' +# or +RPROMPT='$(vagrant_prompt_info)' ``` -`vagrant_prompt_info` makes use of some custom variables. This is an example -definition: +### Customization + +`vagrant_prompt_info` makes use of the following custom variables, which can be set in your +`.zshrc` file: ```zsh ZSH_THEME_VAGRANT_PROMPT_PREFIX="%{$fg_bold[blue]%}[" @@ -31,3 +35,18 @@ ZSH_THEME_VAGRANT_PROMPT_POWEROFF="%{$fg_no_bold[red]%}●" ZSH_THEME_VAGRANT_PROMPT_SUSPENDED="%{$fg_no_bold[yellow]%}●" ZSH_THEME_VAGRANT_PROMPT_NOT_CREATED="%{$fg_no_bold[white]%}○" ``` + +### State to variable mapping + +The plugin uses the output reported by `vagrant status` to print whichever symbol matches, +according to the following table: + +| State | Symbol | +| ----------- | -------------------------------------- | +| running | `ZSH_THEME_VAGRANT_PROMPT_RUNNING` | +| not running | `ZSH_THEME_VAGRANT_PROMPT_POWEROFF` | +| poweroff | `ZSH_THEME_VAGRANT_PROMPT_POWEROFF` | +| paused | `ZSH_THEME_VAGRANT_PROMPT_SUSPENDED` | +| saved | `ZSH_THEME_VAGRANT_PROMPT_SUSPENDED` | +| suspended | `ZSH_THEME_VAGRANT_PROMPT_SUSPENDED` | +| not created | `ZSH_THEME_VAGRANT_PROMPT_NOT_CREATED` | diff --git a/plugins/vagrant-prompt/vagrant-prompt.plugin.zsh b/plugins/vagrant-prompt/vagrant-prompt.plugin.zsh index 29f4038c5..2d8455a53 100644 --- a/plugins/vagrant-prompt/vagrant-prompt.plugin.zsh +++ b/plugins/vagrant-prompt/vagrant-prompt.plugin.zsh @@ -1,16 +1,18 @@ function vagrant_prompt_info() { - local vm_states vm_state - if [[ -d .vagrant && -f Vagrantfile ]]; then - vm_states=(${(f)"$(vagrant status 2> /dev/null | sed -nE 's/^.*(saved|poweroff|running|not created) \([[:alnum:]_]+\)$/\1/p')"}) - printf '%s' $ZSH_THEME_VAGRANT_PROMPT_PREFIX - for vm_state in $vm_states; do - case "$vm_state" in - saved) printf '%s' $ZSH_THEME_VAGRANT_PROMPT_SUSPENDED ;; - running) printf '%s' $ZSH_THEME_VAGRANT_PROMPT_RUNNING ;; - poweroff) printf '%s' $ZSH_THEME_VAGRANT_PROMPT_POWEROFF ;; - "not created") printf '%s' $ZSH_THEME_VAGRANT_PROMPT_NOT_CREATED ;; - esac - done - printf '%s' $ZSH_THEME_VAGRANT_PROMPT_SUFFIX + if [[ ! -d .vagrant || ! -f Vagrantfile ]]; then + return fi + + local vm_states vm_state + vm_states=(${(f)"$(vagrant status 2> /dev/null | sed -nE 's/^[^ ]* *([[:alnum:] ]*) \([[:alnum:]_]+\)$/\1/p')"}) + printf '%s' $ZSH_THEME_VAGRANT_PROMPT_PREFIX + for vm_state in $vm_states; do + case "$vm_state" in + running) printf '%s' $ZSH_THEME_VAGRANT_PROMPT_RUNNING ;; + "not running"|poweroff) printf '%s' $ZSH_THEME_VAGRANT_PROMPT_POWEROFF ;; + paused|saved|suspended) printf '%s' $ZSH_THEME_VAGRANT_PROMPT_SUSPENDED ;; + "not created") printf '%s' $ZSH_THEME_VAGRANT_PROMPT_NOT_CREATED ;; + esac + done + printf '%s' $ZSH_THEME_VAGRANT_PROMPT_SUFFIX }