:group 'epa-file)
(defcustom epa-file-cache-passphrase-for-symmetric-encryption nil
- "If t, cache passphrase for symmetric encryption."
+ "If non-nil, cache passphrase for symmetric encryption."
:type 'boolean
:group 'epa-file)
+(defcustom epa-file-inhibit-auto-save t
+ "If non-nil, disable auto-saving when opening an encrypted file."
+ :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 (and epa-file-cache-passphrase-for-symmetric-encryption
(eq key-id 'SYM))
(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)
(barf-if-buffer-read-only)
(if (and visit (or beg end))
(error "Attempt to visit less than an entire file"))
+ (if epa-file-inhibit-auto-save
+ (auto-save-mode 0))
(setq file (expand-file-name file))
(let ((local-copy (epa-file-run-real-handler #'file-local-copy (list file)))
(context (epg-make-context))
(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)
+ ;; This is needed since Emacs 22 has
+ ;; no-conversion setting for *.gpg in
+ ;; `auto-coding-alist'.
+ (let ((buffer-file-name
+ (file-name-sans-extension file)))
+ (select-safe-coding-system
+ (point-min) (point-max)))
buffer-file-coding-system)))
(context (epg-make-context))
(coding-system-for-write 'binary)
(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))