"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))
(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
(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))
(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)
(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))
(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