(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))
;; 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) (eql (car last) from) (eql (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)))