wl-clipboard/Wayland support?
Brett Cornwall
brett at i--b.com
Mon Jan 14 03:20:21 CET 2019
On 2019-01-13 17:18, Brian Exelbierd wrote:
>I am interested in seeing it done. Are you able to write a patch?
Here you go.
-------------- next part --------------
From f327ed6650a333967bdc41754d0dfae8462433aa Mon Sep 17 00:00:00 2001
From: Brett Cornwall <brett at i--b.com>
Date: Sun, 13 Jan 2019 18:56:50 -0700
Subject: [PATCH] clip: Add support for wl-clipboard
---
README | 4 +++-
man/pass.1 | 7 ++++++-
src/password-store.sh | 24 +++++++++++++++++++-----
3 files changed, 28 insertions(+), 7 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..bebb6a0 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,7 +470,8 @@ The location of the text editor used by \fBedit\fP.
.BR tr (1),
.BR git (1),
.BR xclip (1),
-.BR qrencode (1).
+.BR qrencode (1),
+.BR wl-clipboard (1).
.SH AUTHOR
.B pass
diff --git a/src/password-store.sh b/src/password-store.sh
index d89d455..ebce17c 100755
--- a/src/password-store.sh
+++ b/src/password-store.sh
@@ -152,16 +152,30 @@ check_sneaky_paths() {
#
clip() {
+ # wl-clipboard's copy and paste is split into separate binaries.
+ if [[ -n $WAYLAND_DISPLAY ]] && type {wl-copy,wl-paste} &>/dev/null; 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 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"}"
+ local sleep_argv0="password store sleep on display $DISPLAY"
+ fi
+
# 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 +187,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
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 248 bytes
Desc: not available
URL: <http://lists.zx2c4.com/pipermail/password-store/attachments/20190113/4401d303/attachment.asc>
More information about the Password-Store
mailing list