about summary refs log tree commit diff
path: root/init/functions.el
diff options
context:
space:
mode:
authorVincent Ambo <mail@tazj.in>2018-06-06T07·46+0200
committerVincent Ambo <mail@tazj.in>2018-06-06T07·46+0200
commit66e86d2546c8abdc22cc7333e85e50eef3408c3d (patch)
tree8364fee63c818f159ddb117e15eb1e8b13f73ddf /init/functions.el
parentbe8d47257f1fa60e63e4ea6e76502011067a515d (diff)
feat(functions): Add custom ivy-password-store function
The default `ivy-pass` function shells out to `pass` in such a way
that using pinentry with emacs doesn't work, causing EXWM to freeze
until `C-g` is hit, after which the password entry buffer pops up.

That was very inconvenient - however, the new auth-source integration
with pass works correctly and this commit introduces a new function
and bindings for using the same functionality as before but doing the
actual password-reading via auth-source.
Diffstat (limited to 'init/functions.el')
-rw-r--r--init/functions.el20
1 files changed, 20 insertions, 0 deletions
diff --git a/init/functions.el b/init/functions.el
index 07411396b2..5ed9a06fd6 100644
--- a/init/functions.el
+++ b/init/functions.el
@@ -170,4 +170,24 @@ Including indent-buffer, which should not be called automatically on save."
                            (when (string= event "finished\n")
                              (message "%s process finished." process))))))))
 
+(defun ivy-password-store (&optional password-store-dir)
+  "Custom version of password-store integration with ivy that
+  actually uses the GPG agent correctly."
+
+  (interactive)
+  (ivy-read "Copy password of entry: "
+            (password-store-list (or password-store-dir (password-store-dir)))
+            :require-match t
+            :keymap ivy-pass-map
+            :action (lambda (entry)
+                      (let ((password (auth-source-pass-get 'secret entry)))
+                        (password-store-clear)
+                        (kill-new password)
+                        (setq password-store-kill-ring-pointer kill-ring-yank-pointer)
+                        (message "Copied %s to the kill ring. Will clear in %s seconds."
+                                 entry (password-store-timeout))
+                        (setq password-store-timeout-timer
+                              (run-at-time (password-store-timeout)
+                                           nil 'password-store-clear))))))
+
 (provide 'functions)