From: ueno Date: Mon, 17 Apr 2006 05:22:59 +0000 (+0000) Subject: * epa-file.el (epa-passphrase): New variable. X-Git-Tag: epgsm-branchpoint~54 X-Git-Url: http://git.chise.org/gitweb/?a=commitdiff_plain;h=3108e5ea8d6bb54dd79688a9369067b54b1af4f7;p=elisp%2Fepg.git * epa-file.el (epa-passphrase): New variable. (epa-file-passphrase-callback-function): New function. (epa-find-file): Reset buffer-undo-list; set buffer-file-coding-system to last-coding-system-used after decoding. --- diff --git a/ChangeLog b/ChangeLog index 4f658ec..1a7b25c 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,13 @@ 2006-04-17 Daiki Ueno + * epa-file.el (epa-passphrase): New variable. + (epa-file-passphrase-callback-function): New function. + (epa-find-file): Reset buffer-undo-list; set + buffer-file-coding-system to last-coding-system-used after + decoding. + +2006-04-17 Daiki Ueno + * epa-file.el (epa-write-file): Try to write region to "/" to get last-coding-system-used to be set. diff --git a/epa-file.el b/epa-file.el index 3d3b757..202ccdf 100644 --- a/epa-file.el +++ b/epa-file.el @@ -35,26 +35,48 @@ :group 'epa-file) (defvar epa-file nil) +(defvar epa-passphrase nil) +(defun epa-file-passphrase-callback-function (key-id buffer) + (save-excursion + (set-buffer buffer) + (if (and (eq key-id 'SYM) + epa-file) + (or epa-passphrase + (let ((passphrase (epg-passphrase-callback-function + key-id buffer))) + (setq epa-passphrase (copy-sequence passphrase)) + passphrase)) + (epg-passphrase-callback-function key-id buffer)))) + +(defvar last-coding-system-used) (defun epa-find-file () (when (string-match epa-file-name-regexp (buffer-file-name)) (when (file-exists-p (expand-file-name (buffer-file-name))) (if (fboundp 'set-buffer-multibyte) (set-buffer-multibyte t)) (goto-char (point-min)) - (insert (epg-decrypt-file (epg-make-context) - (expand-file-name (buffer-file-name)) - nil)) + (let ((context (epg-make-context))) + (epg-context-set-passphrase-callback + context + (cons #'epa-file-passphrase-callback-function + (current-buffer))) + (insert (epg-decrypt-file context + (expand-file-name (buffer-file-name)) + nil))) (delete-region (point) (point-max)) (decode-coding-region (point-min) (point-max) 'undecided) - (set-buffer-modified-p nil) + (if (boundp 'last-coding-system-used) + (set-buffer-file-coding-system last-coding-system-used)) (set-auto-mode) (hack-local-variables) - (auto-save-mode nil)) + (auto-save-mode nil) + (set-buffer-modified-p nil) + (setq buffer-undo-list nil)) (make-local-variable 'epa-file) - (setq epa-file (buffer-file-name)))) + (setq epa-file (buffer-file-name)) + (make-local-variable 'epa-passphrase))) -(defvar last-coding-system-used) (defun epa-write-file () (when epa-file (let* ((coding-system (if (boundp 'last-coding-system-used) @@ -62,18 +84,24 @@ (write-region (point-min) (point-max) "/") (error last-coding-system-used)) buffer-file-coding-system)) - (coding-system-for-write 'binary)) + (coding-system-for-write 'binary) + (context (epg-make-context))) + (epg-context-set-passphrase-callback + context + (cons #'epa-file-passphrase-callback-function + (current-buffer))) (write-region (epg-encrypt-string - (epg-make-context) + context (encode-coding-string (buffer-string) coding-system) (mapcar (lambda (key) - (epg-sub-key-id - (car (epg-key-sub-key-list key)))) - (epa-select-keys - "Select recipents for encryption. -If no one is selected, symmetric encryption will be performed. "))) + (epg-sub-key-id (car (epg-key-sub-key-list key)))) + (unless epa-passphrase + (epa-select-keys + "Select recipents for encryption. +If no one is selected, symmetric encryption will be performed. ")))) nil (expand-file-name (buffer-file-name)))) + (set-visited-file-modtime) (set-buffer-modified-p nil) t))