From c41f2e7a0947139db79ae234b994467ff921f4cb Mon Sep 17 00:00:00 2001 From: Carlo Sala Date: Wed, 9 Feb 2022 22:55:05 +0100 Subject: [PATCH] feat(rbw): add `rbwpw` function to copy passwords to the clipboard (#10639) --- plugins/rbw/README.md | 10 ++++++++++ plugins/rbw/rbw.plugin.zsh | 30 ++++++++++++++++++++++++++++++ 2 files changed, 40 insertions(+) diff --git a/plugins/rbw/README.md b/plugins/rbw/README.md index 87d073d24..cae36cead 100644 --- a/plugins/rbw/README.md +++ b/plugins/rbw/README.md @@ -9,4 +9,14 @@ To use it, add `rbw` to the plugins array in your zshrc file: plugins=(... rbw) ``` +## `rbwpw` + +The `rbwpw` function is a wrapper around `rbw`. It copies the password in the +clipboard for the service you ask for and clears the clipboard 20s later. +The usage is as follows: + +```zsh +rbwpw +``` + This plugin does not add any aliases. diff --git a/plugins/rbw/rbw.plugin.zsh b/plugins/rbw/rbw.plugin.zsh index 56683ad06..523e35aff 100644 --- a/plugins/rbw/rbw.plugin.zsh +++ b/plugins/rbw/rbw.plugin.zsh @@ -17,3 +17,33 @@ if [[ ! -f "$ZSH_CACHE_DIR/completions/_rbw" ]]; then fi rbw gen-completions zsh >| "$ZSH_CACHE_DIR/completions/_rbw" &| + +# rbwpw function copies the password of a service to the clipboard +# and clears it after 20 seconds +function rbwpw { + if [[ $# -ne 1 ]]; then + echo "usage: rbwpw " + return 1 + fi + local service=$1 + if ! rbw unlock; then + echo "rbw is locked" + return 1 + fi + local pw=$(rbw get $service 2>/dev/null) + if [[ -z $pw ]]; then + echo "$service not found" + return 1 + fi + echo -n $pw | clipcopy + echo "password for $service copied!" + {sleep 20 && clipcopy /dev/null} &| +} + +function _rbwpw { + local -a services + services=("${(@f)$(rbw ls 2>/dev/null)}") + [[ -n "$services" ]] && compadd -a -- services +} + +compdef _rbwpw rbwpw