Subject: 24.3; org-crypt: Making epg-context local to *epg* while let-bound!

From: Thierry Volpiatto <[email-masked]>
Date: Tue, 13 Aug 2013 10:50:06 +0200

Hi,
as subject says, epg-context is let-bounded in org-crypt and then epg
local set it in this context.
Probably is should just be set as local var instead of being let bounded.

diff --git a/lisp/org/org-crypt.el b/lisp/org/org-crypt.el
index 2dfc4ad..bb77dc6 100644
--- a/lisp/org/org-crypt.el
+++ b/lisp/org/org-crypt.el
@@ -161,8 +161,8 @@ See `org-crypt-disable-auto-save'."
   (if (and (string= crypt-key (get-text-property 0 'org-crypt-key str))
 	   (string= (sha1 str) (get-text-property 0 'org-crypt-checksum str)))
       (get-text-property 0 'org-crypt-text str)
-    (let ((epg-context (epg-make-context nil t t)))
-      (epg-encrypt-string epg-context str (epg-list-keys epg-context crypt-key)))))
+      (set (make-local-variable 'epg-context) (epg-make-context nil t t))
+    (epg-encrypt-string epg-context str (epg-list-keys epg-context crypt-key))))
 
 (defun org-encrypt-entry ()
   "Encrypt the content of the current headline."
@@ -170,11 +170,11 @@ See `org-crypt-disable-auto-save'."
   (require 'epg)
   (save-excursion
     (org-back-to-heading t)
+    (set (make-local-variable 'epg-context) (epg-make-context nil t t))
     (let ((start-heading (point)))
       (forward-line)
       (when (not (looking-at "-----BEGIN PGP MESSAGE-----"))
         (let ((folded (outline-invisible-p))
-              (epg-context (epg-make-context nil t t))
               (crypt-key (org-crypt-key-for-heading))
               (beg (point))
               end encrypted-text)
@@ -206,11 +206,11 @@ See `org-crypt-disable-auto-save'."
 	(forward-line)
 	(when (looking-at "-----BEGIN PGP MESSAGE-----")
 	  (org-crypt-check-auto-save)
+          (set (make-local-variable 'epg-context) (epg-make-context nil t t))
 	  (let* ((end (save-excursion
 			(search-forward "-----END PGP MESSAGE-----")
 			(forward-line)
 			(point)))
-		 (epg-context (epg-make-context nil t t))
 		 (encrypted-text (buffer-substring-no-properties (point) end))
 		 (decrypted-text
 		  (decode-coding-string

In GNU Emacs 24.3.1 (x86_64-unknown-linux-gnu, X toolkit)
 of 2013-06-20 on dell-14z
Windowing system distributor `The X.Org Foundation', version 11.0.11103000
System Description:	Ubuntu 12.04.2 LTS

Configured using:
 `configure '--with-x-toolkit=lucid' '--without-toolkit-scroll-bars'
 '--without-gconf' '--without-gsettings''

Important settings:
  value of $LC_MONETARY: fr_FR.UTF-8
  value of $LC_NUMERIC: fr_FR.UTF-8
  value of $LC_TIME: fr_FR.UTF-8
  value of $LANG: fr_FR.UTF-8
  locale-coding-system: utf-8-unix
  default enable-multibyte-characters: t

Major mode: Emacs-Lisp

Minor modes in effect:
  recentf-mode: t
  TeX-PDF-mode: t
  git-gutter-mode: t
  winner-mode: t
  global-undo-tree-mode: t
  undo-tree-mode: t
  auto-image-file-mode: t
  show-paren-mode: t
  display-time-mode: t
  savehist-mode: t
  golden-ratio-mode: t
  minibuffer-depth-indicate-mode: t
  eldoc-mode: t
  diff-auto-refine-mode: t
  helm-mode: t
  helm-descbinds-mode: t
  shell-dirtrack-mode: t
  helm-adaptative-mode: t
  helm-match-plugin-mode: t
  tooltip-mode: t
  file-name-shadow-mode: t
  global-font-lock-mode: t
  font-lock-mode: t
  auto-composition-mode: t
  auto-encryption-mode: t
  auto-compression-mode: t
  column-number-mode: t
  line-number-mode: t
  transient-mark-mode: t

Recent input:
C-x C-f <left> e n c <down> <down> <right> <down> <down> 
<down> <return> <down> <down> <tab> <down> <tab> <down> 
C-c d C-x C-s C-x C-b <down> <down> <down> <down> <return> 
C-x C-d C-z C-j <down> <down> <down> <down> <down> 
<down> <down> <down> <down> <down> <down> <down> <down> 
<down> <down> <down> <down> <down> <down> <down> <down> 
<down> <down> <down> <down> <down> <down> <down> <down> 
<down> <down> <down> <down> <down> <down> <down> <down> 
<up> <up> <up> <up> <up> <up> <up> <up> <up> <up> <up> 
<up> <up> <up> <up> <up> <up> <up> <up> <up> <up> <up> 
<up> <up> <up> <up> <up> <up> <up> <up> <up> <up> <up> 
<up> <up> <up> <up> C-SPC C-n C-n C-n C-n C-n C-n C-n 
C-n C-n C-n C-n C-n C-n C-n C-n C-n C-n C-n C-n C-n 
C-n C-n C-n C-n C-n C-n C-n C-n C-n C-n C-n C-n C-n 
C-n C-n C-n C-n C-n C-n C-n C-n C-n C-n C-n C-n C-n 
C-n M-w q M-x r e p o r t <down> <return>

Recent messages:
org-decrypt: Enabling re-encryption on auto-save.
Saving file /home/thierry/Encrypted/pwdthierry.org...
Wrote /home/thierry/Encrypted/pwdthierry.org
Loading /home/thierry/.emacs.d/recentf...done
Cleaning up the recentf list...done (0 removed)
Finding changes in /home/thierry/labo/emacs-savanah-git/lisp/org/org-crypt.el...done
Finding changes in /home/thierry/labo/emacs-savanah-git/lisp/org/org-crypt.el...done
Mark set
byte-code: End of buffer [6 times]
Saved text from "diff --git a/lisp/org/org-crypt.el b/lis"

Load-path shadows:
/usr/local/share/emacs/24.3/lisp/gnus/.dir-locals hides ~/elisp/magit/.dir-locals
~/elisp/auctex/lpath hides ~/elisp/emacs-wget/lpath
~/elisp/Emacs-wgrep/wgrep-ack hides ~/elisp/jenkins/emacs-wgrep/wgrep-ack
~/elisp/Emacs-wgrep/wgrep-helm hides ~/elisp/jenkins/emacs-wgrep/wgrep-helm
~/elisp/Emacs-wgrep/wgrep-test hides ~/elisp/jenkins/emacs-wgrep/wgrep-test
~/elisp/Emacs-wgrep/wgrep hides ~/elisp/jenkins/emacs-wgrep/wgrep
/usr/local/share/emacs/24.3/lisp/emacs-lisp/tq hides ~/elisp/emms/lisp/tq
~/.emacs.d/.gnus hides ~/.emacs.d/emacs-config-laptop/.gnus

Features:
(shadow gnus-dired nnir mail-extr gnus-msg gnus-art mm-uu mml2015
mm-view mml-smime smime dig gnus-sum nnoo gnus-group gnus-undo nnmail
mail-source gnus-start gnus-spec gnus-int gnus-range gnus-win helm-ring
emacsbug helm-command vc recentf ido preview prv-emacs tex-buf
reftex-dcr reftex-auc reftex imenu reftex-vars font-latex latex
tex-style tex dbus latexenc cc-langs cc-mode cc-fonts cc-guess cc-menus
cc-cmds cc-styles cc-align cc-engine cc-vars cc-defs conf-mode sh-script
smie executable vc-dispatcher vc-rcs vc-git naquadah-theme em-smart
em-unix em-script em-prompt em-ls em-hist em-pred em-glob em-dirs
em-cmpl em-basic em-banner em-alias esh-var esh-io esh-cmd esh-opt
esh-ext esh-proc esh-groups eshell esh-module esh-mode align-let
git-gutter server package winner undo-tree diff slime-xref-browser
slime-banner slime-tramp slime-asdf slime-fancy slime-fontifying-fu
slime-package-fu slime-references slime-scratch slime-presentations
slime-fuzzy slime-fancy-trace slime-fancy-inspector slime-c-p-c
slime-editing-commands slime-autodoc slime-parse slime-repl image-file
newsticker newst-treeview tree-widget newst-plainview newst-reader
newst-ticker newst-backend xdvi-search preview-latex pcomplete-extension
em-term term disp-table ehelp electric helm-ipython helm-elisp helm-eval
python rx whitespace paren time avoid savehist emamux golden-ratio
smtpmail-async smtpmail sendmail helm-async persistent-sessions
config-w3m w3m doc-view jka-compr image-mode timezone w3m-hist w3m-fb
bookmark-w3m w3m-ems w3m-ccl ccl w3m-favicon w3m-image w3m-proc w3m-util
w3m-load boxquote markdown-mode iterator google-maps google-maps-static
google-maps-geocode google-maps-base json simple-call-tree iedit-rect
rect iedit iedit-lib zop-to-char smallurl mm-url gnus gnus-ems nnheader
rectangle-utils ledger-config ledger esh-arg esh-util tv-utils async
pcvs pcvs-parse pcvs-info pcvs-defs ewoc mb-depth ioccur cl-info slime
hyperspec slime-autoloads tex-site auto-loads esh-toggle flymake
eldoc-eval eldoc no-word dired-extension emms-mpd-config
emms-playlist-limit emms-volume emms-volume-amixer emms-i18n
emms-history emms-score emms-stream-info emms-metaplaylist-mode
emms-bookmarks emms-cue emms-mode-line-icon emms-browser sort
emms-playlist-sort emms-last-played emms-player-xine emms-player-mpd tq
emms-playing-time emms-lyrics emms-url hl-line emms-tag-editor emms-mark
emms-mode-line emms-cache emms-info-ogginfo emms-info-mp3info
emms-playlist-mode emms-player-vlc emms-player-mplayer emms-info
emms-streams later-do emms-source-playlist emms-source-file
emms-player-simple emms-setup emms emms-compat magit-blame magit-stgit
magit-cherry magit-bisect magit-log-edit log-edit pcvs-util add-log
magit-key-mode magit diff-mode magit-compat htmlize-hack htmlize
muse-colors muse-docbook muse-texinfo texnfo-upd texinfo muse-latex
muse-html muse-xml-common muse-wiki cus-edit cus-start cus-load
muse-publish muse-project muse-protocols muse-regexps wid-edit muse
muse-nested-tags muse-mode muse-autoloads org-config-thierry ob-sh
cal-china lunar solar cal-dst cal-bahai cal-islam cal-hebrew holidays
hol-loaddefs vc-hg org-wl org-w3m org-vm org-rmail org-mhe org-mew
org-irc org-jsinfo org-infojs org-html org-exp ob-exp org-exp-blocks
org-info org-gnus org-docview org-bibtex bibtex org-bbdb org-agenda appt
diary-lib diary-loaddefs org-annotation-helper org-capture org-mks
remember org-remember org-datetree addressbook-bookmark message rfc822
mml mml-sec mm-decode mm-bodies mm-encode mail-parse rfc2231 rfc2047
rfc2045 ietf-drums mailabbrev mail-utils gmm-utils mailheader
firefox-protocol bookmark-firefox-handler bookmark-extensions bookmark
pp init-helm-thierry helm-mode helm-ls-git helm-descbinds helm-ls-hg
helm-files image-dired tramp tramp-compat tramp-loaddefs shell dired-x
dired-aux ffap thingatpt helm-buffers helm-elscreen helm-tags
helm-bookmark helm-adaptative helm-info helm-net browse-url xml url
url-proxy url-privacy url-expand url-methods url-history url-cookie
url-domsuf url-util url-parse url-vars mailcap helm-plugin helm-help
helm-match-plugin helm-grep wgrep-helm wgrep helm-regexp grep
helm-external helm-utils dired compile helm-locate helm helm-config
helm-aliases epa-file epa derived epg epg-config auth-source eieio
gnus-util mm-util mail-prsvr password-cache usage-memo w3m-wget info
cl-macs gv edmacro kmacro org-crypt org byte-opt warnings bytecomp
byte-compile cconv ob-tangle ob-ref ob-lob ob-table org-footnote org-src
ob-comint ob-keys org-pcomplete pcomplete comint ansi-color ring
org-list org-faces org-entities time-date noutline outline easy-mmode
org-version ob-emacs-lisp ob org-compat org-macs ob-eval org-loaddefs
format-spec find-func cal-menu easymenu calendar cal-loaddefs advice
help-fns advice-preload net-utils cl cl-lib tooltip ediff-hook vc-hooks
lisp-float-type mwheel x-win x-dnd tool-bar dnd fontset image regexp-opt
fringe tabulated-list newcomment lisp-mode register page menu-bar
rfn-eshadow timer select scroll-bar mouse jit-lock font-lock syntax
facemenu font-core frame cham georgian utf-8-lang misc-lang vietnamese
tibetan thai tai-viet lao korean japanese hebrew greek romanian slovak
czech european ethiopic indian cyrillic chinese case-table epa-hook
jka-cmpr-hook help simple abbrev minibuffer loaddefs button faces
cus-face macroexp files text-properties overlay sha1 md5 base64 format
env code-pages mule custom widget hashtable-print-readable backquote
make-network-process dbusbind dynamic-setting font-render-setting
x-toolkit x multi-tty emacs)

-- 
Thierry
Get my Gnupg key:
gpg --keyserver pgp.mit.edu --recv-keys 59F29997