From: mmh <[email protected]> Instead of line numbers regular expressions can be passed to --clip and --qrcode as well. Any string which contains characters other than digits is interpretd as a regular expression. The decrypted password file in question is then piped through sed using "^regex *" as a pattern and the first line found is clipped/qrencoded.
Signed-off-by: mmh <[email protected]> --- man/pass.1 | 7 +++++-- src/password-store.sh | 11 +++++++---- 2 files changed, 12 insertions(+), 6 deletions(-) diff --git a/man/pass.1 b/man/pass.1 index a555dcb..6bcdae6 100644 --- a/man/pass.1 +++ b/man/pass.1 @@ -94,7 +94,7 @@ List names of passwords inside the tree that match \fIpass-names\fP by using the .BR tree (1) program. This command is alternatively named \fBsearch\fP. .TP -\fBshow\fP [ \fI--clip\fP[=\fIline-number\fP], \fI-c\fP[\fIline-number\fP] ] [ \fI--qrcode\fP[=\fIline-number\fP], \fI-q\fP[\fIline-number\fP] ] \fIpass-name\fP +\fBshow\fP [ \fI--clip\fP[=\fIline-number\fP or \fIregex\fP], \fI-c\fP[\fIline-number\fP or \fIregex\fP] ] [ \fI--qrcode\fP[=\fIline-number\fP or \fIregex\fP], \fI-q\fP[\fIline-number\fP or \fIregex\fP] ] \fIpass-name\fP Decrypt and print a password named \fIpass-name\fP. If \fI--clip\fP or \fI-c\fP is specified, do not print the password but instead copy the first (or otherwise specified) line to the clipboard using @@ -104,7 +104,9 @@ or and then restore the clipboard after 45 (or \fIPASSWORD_STORE_CLIP_TIME\fP) seconds. If \fI--qrcode\fP or \fI-q\fP is specified, do not print the password but instead display a QR code using .BR qrencode (1) -either to the terminal or graphically if supported. +either to the terminal or graphically if supported. If the argument to \fI--clip\fP or \fI--qrcode\fP contains other characters than digits it is interpreted as a regex rather than a line-number and it is passed to +.BR sed (1) +as "^regex *". The regex must not contain "|". .TP \fBinsert\fP [ \fI--echo\fP, \fI-e\fP | \fI--multiline\fP, \fI-m\fP ] [ \fI--force\fP, \fI-f\fP ] \fIpass-name\fP Insert a new password into the password store called \fIpass-name\fP. This will @@ -467,6 +469,7 @@ The \fBinit\fP command will keep signatures of \fB.gpg-id\fP files up to date. The location of the text editor used by \fBedit\fP. .SH SEE ALSO .BR gpg2 (1), +.BR sed (1), .BR tr (1), .BR git (1), .BR xclip (1), diff --git a/src/password-store.sh b/src/password-store.sh index 77f3eda..c435c40 100755 --- a/src/password-store.sh +++ b/src/password-store.sh @@ -282,7 +282,7 @@ cmd_usage() { List passwords. $PROGRAM find pass-names... List passwords that match pass-names. - $PROGRAM [show] [--clip[=line-number],-c[line-number]] pass-name + $PROGRAM [show] [--clip[=line-number or regex],-c[line-number or regex]] [--qrcode[=line-number or regex],-q[line-number or regex]] pass-name Show existing password and optionally put it on the clipboard. If put on the clipboard, it will be cleared in $CLIP_TIME seconds. $PROGRAM grep [GREPOPTIONS] search-string @@ -374,7 +374,7 @@ cmd_show() { --) shift; break ;; esac done - [[ $err -ne 0 || ( $qrcode -eq 1 && $clip -eq 1 ) ]] && die "Usage: $PROGRAM $COMMAND [--clip[=line-number],-c[line-number]] [--qrcode[=line-number],-q[line-number]] [pass-name]" + [[ $err -ne 0 || ( $qrcode -eq 1 && $clip -eq 1 ) ]] && die "Usage: $PROGRAM $COMMAND [--clip[=line-number or regex],-c[line-number or regex]] [--qrcode[=line-number or regex],-q[line-number or regex]] [pass-name]" local pass local path="$1" @@ -385,8 +385,11 @@ cmd_show() { pass="$($GPG -d "${GPG_OPTS[@]}" "$passfile" | $BASE64)" || exit $? echo "$pass" | $BASE64 -d else - [[ $selected_line =~ ^[0-9]+$ ]] || die "Clip location '$selected_line' is not a number." - pass="$($GPG -d "${GPG_OPTS[@]}" "$passfile" | tail -n +${selected_line} | head -n 1)" || exit $? + if [[ $selected_line =~ ^[0-9]+$ ]]; then + pass="$($GPG -d "${GPG_OPTS[@]}" "$passfile" | tail -n +${selected_line} | head -n 1)" || exit $? + else + pass="$($GPG -d "${GPG_OPTS[@]}" "$passfile" | sed -n "s|^${selected_line} *||p" | head -n 1)" || exit $? + fi [[ -n $pass ]] || die "There is no password to put on the clipboard at line ${selected_line}." if [[ $clip -eq 1 ]]; then clip "$pass" "$path" -- 2.24.0 _______________________________________________ Password-Store mailing list [email protected] https://lists.zx2c4.com/mailman/listinfo/password-store
