Simplified.
[elisp/epg.git] / epg-file.el
index f7790ed..08d1bcb 100644 (file)
@@ -115,11 +115,7 @@ with GnuPG."
                  (let ((buffer-file-name (if visit nil buffer-file-name)))
                    (save-restriction
                      (narrow-to-region (point) (point))
-                     (insert string)
-                     (epg-file-decode-coding-inserted-region
-                      (point-min) (point-max)
-                      expanded-filename
-                      visit beg end replace))
+                     (insert (decode-coding-string string 'undecided)))
                    (if replace
                        (delete-region (point) (point-max))))))
            (when (and local-copy (file-exists-p local-copy))
@@ -139,87 +135,15 @@ with GnuPG."
     ;; Returns list of absolute file name and number of characters inserted.
     (list expanded-filename length)))
 
-(if (fboundp 'decode-coding-inserted-region)
-    (defalias 'epg-file-decode-coding-inserted-region 'decode-coding-inserted-region)
-  (defun epg-file-decode-coding-inserted-region (from to filename
-                                                 &optional visit beg end replace)
-    "Decode the region between FROM and TO as if it is read from file FILENAME.
-The idea is that the text between FROM and TO was just inserted somehow.
-Optional arguments VISIT, BEG, END, and REPLACE are the same as those
-of the function `insert-file-contents'.
-Part of the job of this function is setting `buffer-undo-list' appropriately."
-  (save-excursion
-    (save-restriction
-      (let ((coding coding-system-for-read)
-            undo-list-saved)
-        (if visit
-            ;; Temporarily turn off undo recording, if we're decoding the
-            ;; text of a visited file.
-            (setq buffer-undo-list t)
-          ;; Otherwise, if we can recognize the undo elt for the insertion,
-          ;; remove it and get ready to replace it later.
-          ;; In the mean time, turn off undo recording.
-          (let ((last (car-safe buffer-undo-list)))
-            (if (and (consp last) (eq (car last) from) (eq (cdr last) to))
-                (setq undo-list-saved (cdr buffer-undo-list)
-                      buffer-undo-list t))))
-        (narrow-to-region from to)
-        (goto-char (point-min))
-        (or coding
-            (setq coding (funcall set-auto-coding-function
-                                  filename (- (point-max) (point-min)))))
-        (or coding
-            (setq coding (car (find-operation-coding-system
-                               'insert-file-contents
-                               filename visit beg end replace))))
-        (if (coding-system-p coding)
-            (or enable-multibyte-characters
-                (setq coding
-                      (coding-system-change-text-conversion coding 'raw-text)))
-          (setq coding nil))
-        (if coding
-            (decode-coding-region (point-min) (point-max) coding)
-          (setq last-coding-system-used coding))
-        ;; If we're decoding the text of a visited file,
-        ;; the undo list should start out empty.
-        (if visit
-            (setq buffer-undo-list nil)
-          ;; If we decided to replace the undo entry for the insertion,
-          ;; do so now.
-          (if undo-list-saved
-              (setq buffer-undo-list
-                    (cons (cons from (point-max)) undo-list-saved)))))))))
-      
-(put 'epg-file-handler 'safe-magic t)
-(let (epg-file-operations)
-  (mapc
-   (lambda (operation)
-     (let ((epg-file-operation (intern (format "epg-file-%s" operation))))
-       (when (fboundp epg-file-operation)
-         (push operation epg-file-operations)
-         (put operation 'epg-file epg-file-operation))))
-   '(access-file add-name-to-file byte-compiler-base-file-name copy-file
-     delete-directory delete-file  diff-latest-backup-file directory-file-name
-     directory-files directory-files-and-attributes dired-call-process
-     dired-compress-file dired-uncache expand-file-name
-     file-accessible-directory-p file-attributes file-directory-p
-     file-executable-p file-exists-p file-local-copy file-remote-p file-modes
-     file-name-all-completions file-name-as-directory file-name-completion
-     file-name-directory file-name-nondirectory file-name-sans-versions
-     file-newer-than-file-p file-ownership-preserved-p file-readable-p
-     file-regular-p file-symlink-p file-truename file-writable-p
-     find-backup-file-name find-file-noselect get-file-buffer
-     insert-directory insert-file-contents load make-directory
-     make-directory-internal make-symbolic-link rename-file set-file-modes
-     set-visited-file-modtime shell-command substitute-in-file-name
-     unhandled-file-name-directory vc-registered verify-visited-file-modtime
-     write-region))
-  (put 'epg-file-handler 'operations epg-file-operations))
+(put 'write-region 'epg-file 'epg-file-write-region)
+(put 'insert-file-contents 'epg-file 'epg-file-insert-file-contents)
 
 (unless (assoc epg-file-name-regexp file-name-handler-alist)
-  (push (cons epg-file-name-regexp 'epg-file-handler)
-        file-name-handler-alist))
+  (setq file-name-handler-alist
+       (cons (cons epg-file-name-regexp 'epg-file-handler)
+             file-name-handler-alist)))
 
 (unless (assoc epg-file-name-regexp auto-mode-alist)
-  (push (list epg-file-name-regexp nil 'strip-suffix)
-        auto-mode-alist))
+  (setq auto-mode-alist
+       (cons (list epg-file-name-regexp nil 'strip-suffix)
+             auto-mode-alist)))