emacs-orgmode
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[O] [PATCH] Wash output of org-encrypt-entry


From: Óscar Fuentes
Subject: [O] [PATCH] Wash output of org-encrypt-entry
Date: Fri, 18 Mar 2011 18:05:58 +0100
User-agent: Gnus/5.13 (Gnus v5.13) Emacs/24.0.50 (gnu/linux)

With a gpg executable with default settings, org-encrypt-entry produces
output like this:

-----BEGIN PGP MESSAGE-----
Version: GnuPG v1.4.10 (GNU/Linux)

jA0EAwMCBWZVym6QMPVgyTxreTb1AEL3uTO+qCh2lR9/Qxk4nEMpPr9/RwNk95Gb
slUra9X+N+qSWghEHvvxY0Ol8Yw9Ko4n7JVhHFs=
=E4vw
-----END PGP MESSAGE-----

The first line (Version:...) can change from machine to machine and over
time (as gpg is updated with a new version.) This is problematic when
the file is stored under version control, because as you decrypt and
encrypt an entry that line will change and create differences among the
file on the workspace and the file stored on VC.

Second, the empty line just wastes space and it is plain ugly once we
remove the first one with the Version text.

Finally, on some systems (mostly Windows) depending on how your Emacs
and gpg are configured, ^M characters may appear at the end of every
line of gpg output once it is inserted on the Emacs buffer. This happens
when the buffer uses Unix line-endings but gpg uses DOS line-endings.

The patch removes all that junk from the encrypted text just before it
is inserted on the buffer.

I'm assuming that the transformations made by this patch are
uncontroversial and desirable. If anyone actually prefers to keep that
noise on his encrypted org entries, an alternative implementation that
uses a configurable list of regexps is trivial to implement, but then
every user would have to do some job for achieving the same result.

diff --git a/lisp/org-crypt.el b/lisp/org-crypt.el
index b649e39..8ba382e 100644
--- a/lisp/org-crypt.el
+++ b/lisp/org-crypt.el
@@ -112,6 +112,17 @@ This setting can also be overridden in the CRYPTKEY 
property."
     (let ((epg-context (epg-make-context nil t t)))
       (epg-encrypt-string epg-context str (epg-list-keys epg-context 
crypt-key)))))
 
+(defun org-crypt-wash-encrypted-string (str)
+  "Remove superfluos and annoying text from the encrypted string."
+  ;; Remove gpg version information:
+  (setq str (replace-regexp-in-string "^Version:.*$" "" str))
+  ;; Remove ^M characters created by end-of-line type mismatch
+  ;; (Windows suffer from this):
+  (setq str (replace-regexp-in-string "\^M" "" str))
+  ;; Remove empty lines:
+  (setq str (replace-regexp-in-string "^\n" "" str))
+  str)
+
 (defun org-encrypt-entry ()
   "Encrypt the content of the current headline."
   (interactive)
@@ -133,6 +144,7 @@ This setting can also be overridden in the CRYPTKEY 
property."
                 encrypted-text
                (org-encrypt-string (buffer-substring beg end) crypt-key))
           (delete-region beg end)
+         (setq encrypted-text (org-crypt-wash-encrypted-string encrypted-text))
           (insert encrypted-text)
           (when folded
             (goto-char start-heading)




reply via email to

[Prev in Thread] Current Thread [Next in Thread]