about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--init/functions.el9
-rw-r--r--init/mail.el8
2 files changed, 17 insertions, 0 deletions
diff --git a/init/functions.el b/init/functions.el
index 5ed9a06fd6fb..84a689656425 100644
--- a/init/functions.el
+++ b/init/functions.el
@@ -190,4 +190,13 @@ Including indent-buffer, which should not be called automatically on save."
                               (run-at-time (password-store-timeout)
                                            nil 'password-store-clear))))))
 
+(defun warmup-gpg-agent (arg &optional exit)
+  "Function used to warm up the GPG agent before use. This is
+   useful in cases where there is no easy way to make pinentry run
+   in the correct context (such as when sending email)."
+  (interactive)
+  (message "Warming up GPG agent")
+  (epg-sign-string (epg-make-context) "dummy")
+  nil)
+
 (provide 'functions)
diff --git a/init/mail.el b/init/mail.el
index 0d5fdc45374f..ecc6aa4648e9 100644
--- a/init/mail.el
+++ b/init/mail.el
@@ -42,4 +42,12 @@
                          ;; in the UI m(
                          ("vincent@aprila.no" . "aprila/Sende element")))
 
+;; MSMTP decrypts passwords using pass, but pinentry doesn't work
+;; correctly in that setup. This forces a warmup of the GPG agent
+;; before sending the message.
+;;
+;; Note that the sending function is advised because the provided hook
+;; for this seems to run at the wrong time.
+(advice-add 'notmuch-mua-send-common :before 'warmup-gpg-agent)
+
 (provide 'mail-setup)