OSDN Git Service

* epa-file.el (epa-file-write-region): Ask recipients only the
[epg/epg.git] / epa-file.el
index 777a1a9..7c75f7c 100644 (file)
@@ -71,6 +71,9 @@ May either be a string or a list of strings.")
                        val)
                  t)))))
 
+;;;###autoload
+(put 'epa-file-encrypt-to 'permanent-local t)
+
 (defvar epa-file-handler
   (cons epa-file-name-regexp 'epa-file-handler))
 
@@ -164,6 +167,9 @@ May either be a string or a list of strings.")
                 (setcdr entry nil))
             (signal 'file-error
                     (cons "Opening input file" (cdr error)))))
+         (make-local-variable 'epa-file-encrypt-to)
+         (setq epa-file-encrypt-to
+               (mapcar #'car (epg-context-result-for context 'encrypted-to)))
          (if (or beg end)
              (setq string (substring string (or beg 0) end)))
          (save-excursion
@@ -196,7 +202,11 @@ May either be a string or a list of strings.")
                              buffer-file-coding-system)))
         (context (epg-make-context))
         (coding-system-for-write 'binary)
-        string entry)
+        string entry
+        (recipients
+         (cond
+          ((listp epa-file-encrypt-to) epa-file-encrypt-to)
+          ((stringp epa-file-encrypt-to) (list epa-file-encrypt-to)))))
     (epg-context-set-passphrase-callback
      context
      (cons #'epa-file-passphrase-callback-function
@@ -211,14 +221,14 @@ May either be a string or a list of strings.")
                   (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)
+              (if (local-variable-p 'epa-file-encrypt-to)
+                  (if epa-file-encrypt-to
+                      (epg-list-keys context recipients))
                 (epa-select-keys
                  context
                  "Select recipents for encryption.
 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)))))))
+                 recipients))))
       (error
        (if (setq entry (assoc file epa-file-passphrase-alist))
           (setcdr entry nil))