From: Daiki Ueno <ueno@gnu.org> Date: Thu, 16 Jul 2015 06:43:03 +0000 (+0900) Subject: epg: Automatically start pinentry server X-Git-Tag: emacs-25.0.90~1486 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=bd8b5ac77250d9fe0634d58a30a3bf6d2497725a;p=emacs.git epg: Automatically start pinentry server * epg-config.el (epg-gpgconf-program): New variable. * epg.el (epg--start): Call `pinentry-start' if allow-emacs-pinentry is set in ~/.gnupg/gpg-agent.conf. --- diff --git a/lisp/epg-config.el b/lisp/epg-config.el index 10f0dd3f4bf..db2951306d0 100644 --- a/lisp/epg-config.el +++ b/lisp/epg-config.el @@ -51,6 +51,11 @@ :group 'epg :type 'string) +(defcustom epg-gpgconf-program "gpgconf" + "The `gpgconf' executable." + :group 'epg + :type 'string) + (defcustom epg-gpg-home-directory nil "The directory which contains the configuration files of `epg-gpg-program'." :group 'epg diff --git a/lisp/epg.el b/lisp/epg.el index b3d39bb8505..4ba96272aae 100644 --- a/lisp/epg.el +++ b/lisp/epg.el @@ -602,6 +602,16 @@ callback data (if any)." (setq process-environment (cons (concat "GPG_TTY=" terminal-name) (cons "TERM=xterm" process-environment)))) + ;; Start the Emacs Pinentry server if allow-emacs-pinentry is set + ;; in ~/.gnupg/gpg-agent.conf. + (when (and (fboundp 'pinentry-start) + (with-temp-buffer + (when (= (call-process epg-gpgconf-program nil t nil + "--list-options" "gpg-agent") + 0) + (goto-char (point-min)) + (re-search-forward "^allow-emacs-pinentry:.*:1$" nil t)))) + (pinentry-start)) (setq process-environment (cons (format "INSIDE_EMACS=%s,epg" emacs-version) process-environment))