X-Git-Url: http://git.chise.org/gitweb/?a=blobdiff_plain;f=epa-file.el;h=1f939c1fb83aa89ac40e8d52c91bfe5fc66ad65a;hb=6ea4768dfc6993c0553985ee7855e8ce51f766a9;hp=80b1dbbb8be6adee86f2f0817c15c4d50d686913;hpb=408dcae39cea0d4cc3df9852c9359c7866bafbc0;p=elisp%2Fepg.git diff --git a/epa-file.el b/epa-file.el index 80b1dbb..1f939c1 100644 --- a/epa-file.el +++ b/epa-file.el @@ -34,13 +34,43 @@ :type 'regexp :group 'epa-file) +(defcustom epa-file-cache-passphrase-for-symmetric-encryption nil + "If t, cache passphrase for symmetric encryption." + :type 'boolean + :group 'epa-file) + +(defvar epa-file-encrypt-to nil + "*Recipient(s) used for encrypting files. +May either be a string or a list of strings.") + +;;;###autoload +(put 'epa-file-encrypt-to 'safe-local-variable + (lambda (val) + (or (stringp val) + (and (listp val) + (catch 'safe + (mapc (lambda (elt) + (unless (stringp elt) + (throw 'safe nil))) + val) + t))))) + (defvar epa-file-handler (cons epa-file-name-regexp 'epa-file-handler)) - + (defvar epa-file-passphrase-alist nil) +(if (fboundp 'encode-coding-string) + (defalias 'epa-file--encode-coding-string 'encode-coding-string) + (defalias 'epa-file--encode-coding-string 'identity)) + +(if (fboundp 'decode-coding-string) + (defalias 'epa-file--decode-coding-string 'decode-coding-string) + (defalias 'epa-file--decode-coding-string 'identity)) + (defun epa-file-passphrase-callback-function (context key-id file) - (if (eq key-id 'SYM) + (if (and epa-file-cache-passphrase-for-symmetric-encryption + (eq key-id 'SYM)) (let ((entry (assoc file epa-file-passphrase-alist)) passphrase) (or (copy-sequence (cdr entry)) @@ -82,8 +112,8 @@ (point-min) (point-max) (substring file 0 (string-match epa-file-name-regexp file)) visit beg end replace))) - (insert (decode-coding-string string (or coding-system-for-read - 'undecided))))) + (insert (epa-file--decode-coding-string string (or coding-system-for-read + 'undecided))))) (defvar last-coding-system-used) (defun epa-file-insert-file-contents (file &optional visit beg end replace) @@ -134,10 +164,9 @@ (error "Can't append to the file.")) (setq file (expand-file-name file)) (let* ((coding-system (or coding-system-for-write - (if (boundp 'last-coding-system-used) - (condition-case nil - (write-region (point-min) (point-max) "/") - (error last-coding-system-used)) + (if (fboundp 'select-safe-coding-system) + (select-safe-coding-system + (point-min) (point-max)) buffer-file-coding-system))) (context (epg-make-context)) (coding-system-for-write 'binary) @@ -153,14 +182,17 @@ (epg-encrypt-string context (if (stringp start) - (encode-coding-string start coding-system) - (encode-coding-string (buffer-substring start end) - coding-system)) + (epa-file--encode-coding-string start coding-system) + (epa-file--encode-coding-string (buffer-substring start end) + coding-system)) (unless (assoc file epa-file-passphrase-alist) (epa-select-keys context "Select recipents for encryption. -If no one is selected, symmetric encryption will be performed. ")))) +If no one is selected, symmetric encryption will be performed. " + (cond + ((listp epa-file-encrypt-to) epa-file-encrypt-to) + ((stringp epa-file-encrypt-to) (list epa-file-encrypt-to))))))) (error (if (setq entry (assoc file epa-file-passphrase-alist)) (setcdr entry nil))