* net/tramp.el (tramp-find-file-name-coding-system-alist): New
defun. (tramp-handle-insert-file-contents, tramp-handle-write-region): Use it.
This commit is contained in:
parent
c7ffd3f84e
commit
9116dfe647
1 changed files with 41 additions and 19 deletions
|
@ -3888,6 +3888,21 @@ This will break if COMMAND prints a newline, followed by the value of
|
|||
(t (tramp-make-tramp-file-name
|
||||
multi-method method user host "")))))))
|
||||
|
||||
(defun tramp-find-file-name-coding-system-alist (filename tmpname)
|
||||
"Like `find-operation-coding-system' for Tramp filenames.
|
||||
Tramp's `insert-file-contents' and `write-region' work over
|
||||
temporary file names. If `file-coding-system-alist' contains an
|
||||
expression, which matches more than the file name suffix, the
|
||||
coding system might not be determined. This function repairs it."
|
||||
(let (result)
|
||||
(dolist (elt file-coding-system-alist result)
|
||||
(when (and (consp elt) (string-match (car elt) filename))
|
||||
;; We found a matching entry in `file-coding-system-alist'.
|
||||
;; So we add a similar entry, but with the temporary file name
|
||||
;; as regexp.
|
||||
(add-to-list
|
||||
'result (cons (regexp-quote tmpname) (cdr elt)) 'append)))))
|
||||
|
||||
(defun tramp-handle-insert-file-contents
|
||||
(filename &optional visit beg end replace)
|
||||
"Like `insert-file-contents' for tramp files."
|
||||
|
@ -3916,14 +3931,18 @@ This will break if COMMAND prints a newline, followed by the value of
|
|||
(tramp-message-for-buffer
|
||||
multi-method method user host
|
||||
9 "Inserting local temp file `%s'..." local-copy)
|
||||
(setq result (insert-file-contents local-copy nil beg end replace))
|
||||
(when visit
|
||||
(setq buffer-file-name filename)
|
||||
(set-visited-file-modtime)
|
||||
(set-buffer-modified-p nil))
|
||||
;; Now `last-coding-system-used' has right value. Remember it.
|
||||
(when (boundp 'last-coding-system-used)
|
||||
(setq coding-system-used (symbol-value 'last-coding-system-used)))
|
||||
;; We must ensure that `file-coding-system-alist' matches
|
||||
;; `local-copy'.
|
||||
(let ((file-coding-system-alist
|
||||
(tramp-find-file-name-coding-system-alist filename local-copy)))
|
||||
(setq result (insert-file-contents local-copy nil beg end replace))
|
||||
(when visit
|
||||
(setq buffer-file-name filename)
|
||||
(set-visited-file-modtime)
|
||||
(set-buffer-modified-p nil))
|
||||
;; Now `last-coding-system-used' has right value. Remember it.
|
||||
(when (boundp 'last-coding-system-used)
|
||||
(setq coding-system-used (symbol-value 'last-coding-system-used))))
|
||||
(tramp-message-for-buffer
|
||||
multi-method method user host
|
||||
9 "Inserting local temp file `%s'...done" local-copy)
|
||||
|
@ -4072,17 +4091,20 @@ Returns a file name in `tramp-auto-save-directory' for autosaving this file."
|
|||
;; Set current buffer. If connection wasn't open, `file-modes' has
|
||||
;; changed it accidently.
|
||||
(set-buffer curbuf)
|
||||
;; We say `no-message' here because we don't want the visited file
|
||||
;; modtime data to be clobbered from the temp file. We call
|
||||
;; `set-visited-file-modtime' ourselves later on.
|
||||
(tramp-run-real-handler
|
||||
'write-region
|
||||
(if confirm ; don't pass this arg unless defined for backward compat.
|
||||
(list start end tmpfil append 'no-message lockname confirm)
|
||||
(list start end tmpfil append 'no-message lockname)))
|
||||
;; Now, `last-coding-system-used' has the right value. Remember it.
|
||||
(when (boundp 'last-coding-system-used)
|
||||
(setq coding-system-used (symbol-value 'last-coding-system-used)))
|
||||
;; We say `no-message' here because we don't want the visited
|
||||
;; file modtime data to be clobbered from the temp file. We
|
||||
;; call `set-visited-file-modtime' ourselves later on. We must
|
||||
;; ensure that `file-coding-system-alist' matches `tmpfil'.
|
||||
(let ((file-coding-system-alist
|
||||
(tramp-find-file-name-coding-system-alist filename tmpfil)))
|
||||
(tramp-run-real-handler
|
||||
'write-region
|
||||
(if confirm ; don't pass this arg unless defined for backward compat.
|
||||
(list start end tmpfil append 'no-message lockname confirm)
|
||||
(list start end tmpfil append 'no-message lockname)))
|
||||
;; Now, `last-coding-system-used' has the right value. Remember it.
|
||||
(when (boundp 'last-coding-system-used)
|
||||
(setq coding-system-used (symbol-value 'last-coding-system-used))))
|
||||
;; The permissions of the temporary file should be set. If
|
||||
;; filename does not exist (eq modes nil) it has been renamed to
|
||||
;; the backup file. This case `save-buffer' handles
|
||||
|
|
Loading…
Add table
Reference in a new issue