We use a simple pid lock file, and if another pass instance is going to
restore the clipboard, we simply restore to blank.
---
This is untested. Before I spend the time debugging this, what do
you think of the approach? I know there were some opinions on the
list about just restoring the clipboard to blank, always, but
perhaps this patch is a decent compromise for those who like it.
Is this too complex? Too error prone?

Soliciting feedback before I start debugging it.

 src/password-store.sh | 21 +++++++++++++++++----
 1 file changed, 17 insertions(+), 4 deletions(-)

diff --git a/src/password-store.sh b/src/password-store.sh
index 9cfae7f..7eafd88 100755
--- a/src/password-store.sh
+++ b/src/password-store.sh
@@ -114,14 +114,26 @@ clip() {
        # we're going with this for now.
 
        before="$(xclip -o -selection clipboard | base64)"
+       
restore_file="${TMPDIR:-/tmp}/password-store-clipboard-restore.${DISPLAY}.pid"
+       restore_pid=""
+       [[ -f $restore_file ]] && restore_pid="$(< "$restore_file")"
+       other_restore_active=0
+       [[ $restore_pid =~ ^[0-9]+$ && $(readlink -f /proc/self/exe 
2>/dev/null) == "$(readlink -f "/proc/$restore_pid/exe" 2>/dev/null)" ]] && 
other_restore_active=1
        echo -n "$1" | xclip -selection clipboard
        (
+               if [[ $other_restore_active -eq 0 ]]; then
+                       old_umask=$(umask)
+                       umask 0077
+                       echo $$ > "$restore_file"
+                       umask $old_umask
+               fi
                sleep 45
-               now="$(xclip -o -selection clipboard | base64)"
-               if [[ $now != $(echo -n "$1" | base64) ]]; then
-                       before="$now"
+               if [[ $other_restore_active -eq 0 ]]; then
+                       now="$(xclip -o -selection clipboard | base64)"
+                       [[ $now != $(echo -n "$1" | base64) ]] && before="$now"
+               else
+                       before=""
                fi
-
                # It might be nice to programatically check to see if klipper 
exists,
                # as well as checking for other common clipboard managers. But 
for now,
                # this works fine -- if qdbus isn't there or if klipper isn't 
running,
@@ -132,6 +144,7 @@ clip() {
                qdbus org.kde.klipper /klipper 
org.kde.klipper.klipper.clearClipboardHistory &>/dev/null
 
                echo "$before" | base64 -d | xclip -selection clipboard
+               [[ $other_restore_active -eq 0 ]] && rm "$restore_file"
        ) & disown
        echo "Copied $2 to clipboard. Will clear in 45 seconds."
 }
-- 
1.9.0

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

Reply via email to