changeset 91731:7efbdc83b944

EasyPG: Implement some suggestions from emacs-devel.
author Michael Olson <mwolson@gnu.org>
date Sun, 10 Feb 2008 20:57:47 +0000
parents 04e7668f6b61
children c33ec1f680a9
files doc/misc/ChangeLog doc/misc/epa.texi lisp/ChangeLog lisp/epa-dired.el lisp/epa-file.el lisp/epa-mail.el lisp/epa.el lisp/epg-config.el lisp/epg.el
diffstat 9 files changed, 156 insertions(+), 15 deletions(-) [+]
line wrap: on
line diff
--- a/doc/misc/ChangeLog	Sun Feb 10 20:51:42 2008 +0000
+++ b/doc/misc/ChangeLog	Sun Feb 10 20:57:47 2008 +0000
@@ -1,3 +1,8 @@
+2008-02-10  Daiki Ueno  <ueno@unixuser.org>
+
+	* epa.texi (Quick start): Use the command `epa-enable' instead of
+	loading `epa-setup'.
+
 2008-02-08  Juanma Barranquero  <lekktu@gmail.com>
 
 	* makefile.w32-in (INFO_TARGETS, DVI_TARGETS, clean): Add epa.
--- a/doc/misc/epa.texi	Sun Feb 10 20:51:42 2008 +0000
+++ b/doc/misc/epa.texi	Sun Feb 10 20:57:47 2008 +0000
@@ -77,26 +77,28 @@
 @node  Quick start
 @chapter Quick start
 
-To install, just follow the standard CMMI installation instructions.
+@c To install, just follow the standard CMMI installation instructions.
 
-@cartouche
-@example
-$ ./configure
-$ sudo make install
-@end example
-@end cartouche
+@c @cartouche
+@c @example
+@c $ ./configure
+@c $ sudo make install
+@c @end example
+@c @end cartouche
 
-@noindent
-Then, add the following line to your @file{~/.emacs}
+@c @noindent
+@c Then, add the following line to your @file{~/.emacs}
+
+Add the following line to your @file{~/.emacs}.
 
 @cartouche
 @lisp
-(require 'epa-setup)
+(epa-mode 1)
 @end lisp
 @end cartouche
 
 @noindent
-That's all.  Restart emacs and type @kbd{M-x epa- @key{TAB}}, and you will see a
+Restart emacs and type @kbd{M-x epa- @key{TAB}}, and you will see a
 lot of commands available.  For example,
 
 @itemize @bullet
--- a/lisp/ChangeLog	Sun Feb 10 20:51:42 2008 +0000
+++ b/lisp/ChangeLog	Sun Feb 10 20:57:47 2008 +0000
@@ -1,3 +1,23 @@
+2008-02-10  Daiki Ueno  <ueno@unixuser.org>
+
+	* epg-config.el: Expand the contents of epg-package-info.el.
+	(epg-package-name): New constant.
+	(epg-version-number): New constant.
+	(epg-bug-report-address): New constant.
+
+	* epa-mail.el (epa-mail-mode): Add autoload cookie.
+	(epa-mail-minor-mode): New global minor mode.
+
+	* epa-file.el (epa-file-mode): New global minor mode.
+
+	* epa-dired.el (epa-dired-mode): New global minor mode.
+
+	* epa.el (epa-menu): New variable.
+	(epa-menu-items): New variable.
+	(epa-menu-mode): New global minor mode.
+	(epa-global-minor-modes): New user option.
+	(epa-mode): New global minor mode.
+
 2008-02-10  Michael Albinus  <michael.albinus@gmx.de>
 
 	* net/dbus.el: Remove `no-byte-compile' cookie.
--- a/lisp/epa-dired.el	Sun Feb 10 20:51:42 2008 +0000
+++ b/lisp/epa-dired.el	Sun Feb 10 20:57:47 2008 +0000
@@ -82,6 +82,14 @@
       (setq file-list (cdr file-list)))
     (revert-buffer)))
 
+;;;###autoload
+(define-minor-mode epa-dired-mode
+  "Minor mode to hook EasyPG into Dired."
+  :global t :init-value nil :group 'epa-dired :version "23.1"
+  (remove-hook 'dired-mode-hook 'epa-dired-mode-hook)
+  (if epa-dired-mode
+      (add-hook 'dired-mode-hook 'epa-dired-mode-hook)))
+
 (provide 'epa-dired)
 
 ;; arch-tag: 2025700b-48d0-4684-bc94-228ad1f8e9ff
--- a/lisp/epa-file.el	Sun Feb 10 20:51:42 2008 +0000
+++ b/lisp/epa-file.el	Sun Feb 10 20:57:47 2008 +0000
@@ -314,6 +314,24 @@
 	(message "`epa-file' disabled"))
     (message "`epa-file' already disabled")))
 
+;;;###autoload
+(define-minor-mode epa-file-mode
+  "Toggle automatic file encryption and decryption.
+With prefix argument ARG, turn auto encryption on if positive, else off.
+Return the new status of auto encryption (non-nil means on)."
+  :global t :init-value nil :group 'epa-file :version "23.1"
+  (setq file-name-handler-alist
+	(delq epa-file-handler file-name-handler-alist))
+  (remove-hook 'find-file-hooks 'epa-file-find-file-hook)
+  (setq auto-mode-alist (delq epa-file-auto-mode-alist-entry
+			      auto-mode-alist))
+  (when epa-file-mode
+    (setq file-name-handler-alist
+	  (cons epa-file-handler file-name-handler-alist))
+    (add-hook 'find-file-hooks 'epa-file-find-file-hook)
+    (setq auto-mode-alist (cons epa-file-auto-mode-alist-entry
+				auto-mode-alist))))
+
 (provide 'epa-file)
 
 ;; arch-tag: 5715152f-0eb1-4dbc-9008-07098775314d
--- a/lisp/epa-mail.el	Sun Feb 10 20:51:42 2008 +0000
+++ b/lisp/epa-mail.el	Sun Feb 10 20:57:47 2008 +0000
@@ -40,6 +40,7 @@
 (defvar epa-mail-mode-on-hook nil)
 (defvar epa-mail-mode-off-hook nil)
 
+;;;###autoload
 (define-minor-mode epa-mail-mode
   "A minor-mode for composing encrypted/clearsigned mails."
   nil " epa-mail" epa-mail-mode-map)
@@ -173,6 +174,14 @@
   (interactive)
   (epa-import-armor-in-region (point-min) (point-max)))
 
+;;;###autoload
+(define-minor-mode epa-mail-minor-mode
+  "Minor mode to hook EasyPG into Mail mode."
+  :global t :init-value nil :group 'epa-mail :version "23.1"
+  (remove-hook 'mail-mode-hook 'epa-mail-mode)
+  (if epa-mail-minor-mode
+      (add-hook 'mail-mode-hook 'epa-mail-mode)))
+
 (provide 'epa-mail)
 
 ;; arch-tag: a6f82b3f-d177-4a11-af95-040da55927d2
--- a/lisp/epa.el	Sun Feb 10 20:51:42 2008 +0000
+++ b/lisp/epa.el	Sun Feb 10 20:57:47 2008 +0000
@@ -45,6 +45,14 @@
   :type 'integer
   :group 'epa)
 
+(defcustom epa-global-minor-modes '(epa-dired-mode
+				    epa-file-mode
+				    epa-mail-minor-mode
+				    epa-menu-mode)
+  "Globally defined minor modes to hook into other modes."
+  :type '(repeat symbol)
+  :group 'epa)
+
 (defgroup epa-faces nil
   "Faces for epa-mode."
   :version "23.1"
@@ -229,6 +237,44 @@
     (define-key keymap "q" 'delete-window)
     keymap))
 
+(defvar epa-menu nil)
+
+(defconst epa-menu-items
+  '("EasyPG Assistant"
+    ("Decrypt"
+     ["File" epa-decrypt-file
+      :help "Decrypt a file"]
+     ["Region" epa-decrypt-region
+      :help "Decrypt the current region"])
+    ("Verify"
+     ["File" epa-verify-file
+      :help "Verify digital signature of a file"]
+     ["Region" epa-verify-region
+      :help "Verify digital signature of the current region"])
+    ("Sign"
+     ["File" epa-sign-file
+      :help "Create digital signature of a file"]
+     ["Region" epa-sign-region
+      :help "Create digital signature of the current region"])
+    ("Encrypt"
+     ["File" epa-encrypt-file
+      :help "Encrypt a file"]
+     ["Region" epa-encrypt-region
+      :help "Encrypt the current region"])
+    "----"
+    ["Browse keyring" epa-list-keys
+     :help "Browse your public keyring"]
+    ("Import keys"
+     ["File" epa-import-keys
+      :help "Import public keys from a file"]
+     ["Region" epa-import-keys-region
+      :help "Import public keys from the current region"])
+    ("Export key"
+     ["To a File" epa-export-keys
+      :help "Export public keys to a file"]
+     ["To a Buffer" epa-insert-keys
+      :help "Insert public keys after the current point"])))
+
 (defvar epa-exit-buffer-function #'bury-buffer)
 
 (define-widget 'epa-key 'push-button
@@ -372,7 +418,7 @@
 				     'end-open t))
 	  (widget-create 'epa-key :value (car keys))
 	  (insert "\n")
-	  (setq keys (cdr keys))))      
+	  (setq keys (cdr keys))))
       (add-text-properties (point-min) (point-max)
 			   (list 'epa-list-keys t
 				 'front-sticky nil
@@ -1173,6 +1219,32 @@
 ;;     (message "Signing keys...done")))
 ;; (make-obsolete 'epa-sign-keys "Do not use.")
 
+;;;###autoload
+(define-minor-mode epa-menu-mode
+  "Minor mode to hook EasyPG into the menu-bar."
+  :global t :init-value nil :group 'epa :version "23.1"
+  (unless epa-menu
+    (easy-menu-define epa-menu nil "EasyPG Assistant global menu"
+      epa-menu-items))
+  (easy-menu-remove-item nil '("Tools") "EasyPG Assistant")
+  (if epa-menu-mode
+      (easy-menu-add-item nil '("Tools") epa-menu)))
+
+;;;###autoload
+(define-minor-mode epa-mode
+  "Minor mode to hook EasyPG into various modes.
+See `epa-global-minor-modes'."
+  :global t :init-value nil :group 'epa :version "23.1"
+  (let ((modes epa-global-minor-modes)
+	symbol)
+    (while modes
+      (setq symbol (car modes))
+      (if (and symbol
+	       (fboundp symbol))
+	  (funcall symbol (if epa-mode 1 0))
+	(message "`%S' not found" (car modes)))
+      (setq modes (cdr modes)))))
+
 (provide 'epa)
 
 ;; arch-tag: 38d20ced-20d5-4137-b17a-f206335423d7
--- a/lisp/epg-config.el	Sun Feb 10 20:51:42 2008 +0000
+++ b/lisp/epg-config.el	Sun Feb 10 20:57:47 2008 +0000
@@ -23,7 +23,14 @@
 
 ;;; Code:
 
-(require 'epg-package-info)
+(defconst epg-package-name "epg"
+  "Name of this package.")
+
+(defconst epg-version-number "1.0.0"
+  "Version number of this package.")
+
+(defconst epg-bug-report-address "ueno@unixuser.org"
+  "Report bugs to this address.")
 
 (defgroup epg ()
   "The EasyPG Library"
--- a/lisp/epg.el	Sun Feb 10 20:51:42 2008 +0000
+++ b/lisp/epg.el	Sun Feb 10 20:57:47 2008 +0000
@@ -1430,7 +1430,7 @@
        signature
        (string-to-number (match-string 4 string)))
       (epg-signature-set-pubkey-algorithm
-       signature 
+       signature
        (string-to-number (match-string 5 string)))
       (epg-signature-set-digest-algorithm
        signature
@@ -1744,7 +1744,7 @@
 (defun epg-list-keys (context &optional name mode)
   "Return a list of epg-key objects matched with NAME.
 If MODE is nil or 'public, only public keyring should be searched.
-If MODE is t or 'secret, only secret keyring should be searched. 
+If MODE is t or 'secret, only secret keyring should be searched.
 Otherwise, only public keyring should be searched and the key
 signatures should be included.
 NAME is either a string or a list of strings."