On 2019-02-25 21:26, Jason A. Donenfeld wrote:
Hey Brett,

I'm just now seeing your nice wayland patch on the mailing list
archives, as it seems to have gone into my spam folder or was
otherwise not delivered into my inbox. I'd be happy to merge something
like this but with some small tweaks. Review is below.

I'm glad it was just a delivery error and that it was caught!

(If you think something's wrong with my mail that caused it to go to spam I'd appreciate a private mail).

+ local copy_cmd="wl-copy"
+ local paste_cmd="wl-paste -n"
+ if [[ $X_SELECTION == "primary" ]]; then
+ copy_cmd+=" --primary"
+ paste_cmd+=" --primary"
+ fi
+ local sleep_argv0="password store sleep on display $WAYLAND_DISPLAY"
+ else
+ local copy_cmd="${PASSWORD_STORE_copy_cmd:-xclip -selection "$X_SELECTION"}"
+ local paste_cmd="${PASSWORD_STORE_paste_cmd:-xclip -o -selection 
"$X_SELECTION"}"

Don't introduce undocumented env vars like this.


Whoa, I don't know what I was thinking there.




Hopefully this patch is now acceptable. I did some casual testing and it seems to work just as fine.
From 133fb754203330e20a931b13f571f7c9c3da9659 Mon Sep 17 00:00:00 2001
From: Brett Cornwall <[email protected]>
Date: Mon, 25 Feb 2019 17:29:03 -0700
Subject: [PATCH] clip: Add support for wl-clipboard

---
 README                |  4 +++-
 man/pass.1            |  5 +++++
 src/password-store.sh | 26 +++++++++++++++++++++-----
 3 files changed, 29 insertions(+), 6 deletions(-)

diff --git a/README b/README
index 6b59965..1a46242 100644
--- a/README
+++ b/README
@@ -19,8 +19,10 @@ Depends on:
   http://www.gnupg.org/
 - git
   http://www.git-scm.com/
-- xclip
+- xclip (for X11 environments)
   http://sourceforge.net/projects/xclip/
+- wl-clipboard (for wlroots Wayland-based environments)
+  https://github.com/bugaevc/wl-clipboard
 - tree >= 1.7.0
   http://mama.indstate.edu/users/ice/tree/
 - GNU getopt
diff --git a/man/pass.1 b/man/pass.1
index 01a3fbe..a555dcb 100644
--- a/man/pass.1
+++ b/man/pass.1
@@ -99,6 +99,8 @@ 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
 .BR xclip (1)
+or
+.BR wl-clipboard(1)
 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)
@@ -132,6 +134,8 @@ in generating passwords can be changed with the 
\fIPASSWORD_STORE_CHARACTER_SET\
 If \fI--clip\fP or \fI-c\fP is specified, do not print the password but 
instead copy
 it to the clipboard using
 .BR xclip (1)
+or
+.BR wl-clipboard(1)
 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)
@@ -466,6 +470,7 @@ The location of the text editor used by \fBedit\fP.
 .BR tr (1),
 .BR git (1),
 .BR xclip (1),
+.BR wl-clipboard (1),
 .BR qrencode (1).
 
 .SH AUTHOR
diff --git a/src/password-store.sh b/src/password-store.sh
index d89d455..5480341 100755
--- a/src/password-store.sh
+++ b/src/password-store.sh
@@ -152,16 +152,32 @@ check_sneaky_paths() {
 #
 
 clip() {
+       if [[ -n $WAYLAND_DISPLAY ]]; then
+               local copy_cmd=( wl-copy )
+               local paste_cmd=( wl-paste -n )
+               if [[ $X_SELECTION == primary ]]; then
+                       copy_cmd+=( --primary )
+                       paste_cmd+=( --primary )
+               fi
+               local display_name="$WAYLAND_DISPLAY"
+       elif [[ -n $DISPLAY ]]; then
+               local copy_cmd=( xclip -selection "$X_SELECTION" )
+               local paste_cmd=( xclip -o -selection "$X_SELECTION" )
+               local display_name="$DISPLAY"
+       else
+               die "Error: No X11 or Wayland display detected"
+       fi
+       local sleep_argv0="password store sleep on display $display_name"
+
        # This base64 business is because bash cannot store binary data in a 
shell
        # variable. Specifically, it cannot store nulls nor (non-trivally) store
        # trailing new lines.
-       local sleep_argv0="password store sleep on display $DISPLAY"
        pkill -f "^$sleep_argv0" 2>/dev/null && sleep 0.5
-       local before="$(xclip -o -selection "$X_SELECTION" 2>/dev/null | 
$BASE64)"
-       echo -n "$1" | xclip -selection "$X_SELECTION" || die "Error: Could not 
copy data to the clipboard"
+       local before="$("${paste_cmd[@]}" 2>/dev/null | $BASE64)"
+       echo -n "$1" | "${copy_cmd[@]}" || die "Error: Could not copy data to 
the clipboard"
        (
                ( exec -a "$sleep_argv0" bash <<<"trap 'kill %1' TERM; sleep 
'$CLIP_TIME' & wait" )
-               local now="$(xclip -o -selection "$X_SELECTION" | $BASE64)"
+               local now="$("${paste_cmd[@]}" | $BASE64)"
                [[ $now != $(echo -n "$1" | $BASE64) ]] && before="$now"
 
                # It might be nice to programatically check to see if klipper 
exists,
@@ -173,7 +189,7 @@ clip() {
                # so we axe it here:
                qdbus org.kde.klipper /klipper 
org.kde.klipper.klipper.clearClipboardHistory &>/dev/null
 
-               echo "$before" | $BASE64 -d | xclip -selection "$X_SELECTION"
+               echo "${before[@]}" | $BASE64 -d | "${copy_cmd[@]}"
        ) >/dev/null 2>&1 & disown
        echo "Copied $2 to clipboard. Will clear in $CLIP_TIME seconds."
 }
-- 
2.20.1

Attachment: signature.asc
Description: PGP signature

_______________________________________________
Password-Store mailing list
[email protected]
https://lists.zx2c4.com/mailman/listinfo/password-store

Reply via email to