X-Git-Url: http://git.chise.org/gitweb/?a=blobdiff_plain;f=epa-file.el;h=86af182ee2955c67a5e7376103e8c287011ea18b;hb=f0cf0f951e5534b14c3a798424ff6fdc40ad39a8;hp=574eaed463c1274438b0273db4260bcad4130b15;hpb=5d6935c92aff822b34c3a2b457cac0d1be14164a;p=elisp%2Fepg.git diff --git a/epa-file.el b/epa-file.el index 574eaed..86af182 100644 --- a/epa-file.el +++ b/epa-file.el @@ -33,11 +33,14 @@ "Regexp which matches filenames to be encrypted with GnuPG." :type 'regexp :group 'epa-file) + +(defvar epa-file-handler + (cons epa-file-name-regexp 'epa-file-handler)) (defvar epa-file-passphrase-alist nil) -(defun epa-file-passphrase-callback-function (key-id file) - (if (eq key-id 'SYM) +(defun epa-file-passphrase-callback-function (file) + (if (eq epg-key-id 'SYM) (let ((entry (assoc file epa-file-passphrase-alist)) passphrase) (or (copy-sequence (cdr entry)) @@ -46,10 +49,10 @@ (setq entry (list file) epa-file-passphrase-alist (cons entry epa-file-passphrase-alist))) - (setq passphrase (epg-passphrase-callback-function key-id nil)) + (setq passphrase (epg-passphrase-callback-function nil)) (setcdr entry (copy-sequence passphrase)) passphrase))) - (epg-passphrase-callback-function key-id nil))) + (epg-passphrase-callback-function nil))) (defun epa-file-handler (operation &rest args) (save-match-data @@ -93,7 +96,7 @@ (if (setq entry (assoc file epa-file-passphrase-alist)) (setcdr entry nil)) (signal 'file-error - (cons "Opening input file" (nthcdr 2 error))))) + (cons "Opening input file" (cdr error))))) (if (boundp 'last-coding-system-used) (set-buffer-file-coding-system last-coding-system-used) (set-buffer-file-coding-system default-buffer-file-coding-system)) @@ -128,7 +131,10 @@ (setq string (epg-encrypt-string context - (encode-coding-string (buffer-string) coding-system) + (if (stringp start) + (encode-coding-string start coding-system) + (encode-coding-string (buffer-substring start end) + coding-system)) (mapcar (lambda (key) (epg-sub-key-id (car (epg-key-sub-key-list key)))) (unless (assoc file epa-file-passphrase-alist) @@ -138,7 +144,7 @@ If no one is selected, symmetric encryption will be performed. "))))) (error (if (setq entry (assoc file epa-file-passphrase-alist)) (setcdr entry nil)) - (signal 'file-error (cons "Opening output file" (nthcdr 2 error))))) + (signal 'file-error (cons "Opening output file" (cdr error))))) (epa-file-run-real-handler #'write-region (list string nil file append visit lockname mustbenew)) @@ -158,6 +164,25 @@ If no one is selected, symmetric encryption will be performed. "))))) (message "Wrote %s" buffer-file-name)))) (put 'write-region 'epa-file 'epa-file-write-region) +;;;###autoload +(defun epa-file-enable () + (interactive) + (if (memq epa-file-handler file-name-handler-alist) + (message "`epa-file' already enabled") + (setq file-name-handler-alist + (cons epa-file-handler file-name-handler-alist)) + (message "`epa-file' enabled"))) + +;;;###autoload +(defun epa-file-disable () + (interactive) + (if (memq epa-file-handler file-name-handler-alist) + (progn + (setq file-name-handler-alist + (delq epa-file-handler file-name-handler-alist)) + (message "`epa-file' disabled")) + (message "`epa-file' already disabled"))) + (provide 'epa-file) ;;; epa-file.el ends here