Browse Source

aws: refactor AWS plugin (#7615)

* Update the AWS plugin to support disabling RPROMT display:
  Use a $SHOW_AWS_PROMPT option.

* Refactoring aws plugin:
  Exposing customizable aws_prompt_info function to be used in themes.

* Set aws prompt prefix and suffix to original values and fix README

Co-authored-by: "Vassilis S. Moustakas" <vsmoustakas@gmail.com>
David Kane 5 years ago
parent
commit
532a784b80
2 changed files with 36 additions and 9 deletions
  1. 19 6
      plugins/aws/README.md
  2. 17 3
      plugins/aws/aws.plugin.zsh

+ 19 - 6
plugins/aws/README.md

@@ -1,8 +1,7 @@
 # aws
 
 This plugin provides completion support for [awscli](https://docs.aws.amazon.com/cli/latest/reference/index.html)
-and a few utilities to manage AWS profiles: a function to change profiles with autocompletion support
-and a function to get the current AWS profile. The current AWS profile is also displayed in `RPROMPT`.
+and a few utilities to manage AWS profiles and display them in the prompt.
 
 To use it, add `aws` to the plugins array in your zshrc file.
 
@@ -12,9 +11,23 @@ plugins=(... aws)
 
 ## Plugin commands
 
-* `asp <profile>`: Sets `AWS_PROFILE` and `AWS_DEFAULT_PROFILE` (legacy) to `<profile>`.
-It also adds it to your RPROMPT.
+* `asp [<profile>]`: Sets `$AWS_PROFILE` and `$AWS_DEFAULT_PROFILE` (legacy) to `<profile>`.
+  Run `asp` without arguments to clear the profile.
 
-* `agp`: Gets the current value of `AWS_PROFILE`.
+* `agp`: Gets the current value of `$AWS_PROFILE`.
 
-* `aws_profiles`: Lists the available profiles in the file referenced in `AWS_CONFIG_FILE` (default: ~/.aws/config). Used to provide completion for the `asp` function.
+* `aws_profiles`: Lists the available profiles in the  `$AWS_CONFIG_FILE` (default: `~/.aws/config`).
+  Used to provide completion for the `asp` function.
+
+## Plugin options
+
+* Set `SHOW_AWS_PROMPT=false` in your zshrc file if you want to prevent the plugin from modifying your RPROMPT.
+
+## Theme
+
+The plugin creates an `aws_prompt_info` function that you can use in your theme, which displays
+the current `$AWS_PROFILE`. It uses two variables to control how that is shown:
+
+- ZSH_THEME_AWS_PREFIX: sets the prefix of the AWS_PROFILE. Defaults to `<aws:`.
+
+- ZSH_THEME_AWS_SUFFIX: sets the suffix of the AWS_PROFILE. Defaults to `>`.

+ 17 - 3
plugins/aws/aws.plugin.zsh

@@ -1,14 +1,16 @@
+# AWS profile selection
+
 function agp {
   echo $AWS_PROFILE
 }
 
 function asp {
-  local rprompt=${RPROMPT/<aws:$AWS_PROFILE>/}
-
   export AWS_DEFAULT_PROFILE=$1
   export AWS_PROFILE=$1
 
-  export RPROMPT="<aws:$AWS_PROFILE>$rprompt"
+  if [[ -z "$1" ]]; then
+    echo AWS profile cleared.
+  fi
 }
 
 function aws_profiles {
@@ -17,6 +19,18 @@ function aws_profiles {
 compctl -K aws_profiles asp
 
 
+# AWS prompt
+
+function aws_prompt_info() {
+  [[ -z $AWS_PROFILE ]] && return
+  echo "${ZSH_THEME_AWS_PREFIX:=<aws:}${AWS_PROFILE}${ZSH_THEME_AWS_SUFFIX:=>}"
+}
+
+if [ "$SHOW_AWS_PROMPT" != false ]; then
+  export RPROMPT='$(aws_prompt_info)'"$RPROMPT"
+fi
+
+
 # Load awscli completions
 
 _awscli-homebrew-installed() {