emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Emacs-diffs] Changes to emacs/lisp/net/tramp.el,v


From: Michael Albinus
Subject: [Emacs-diffs] Changes to emacs/lisp/net/tramp.el,v
Date: Wed, 09 Apr 2008 20:01:13 +0000

CVSROOT:        /sources/emacs
Module name:    emacs
Changes by:     Michael Albinus <albinus>       08/04/09 20:01:12

Index: tramp.el
===================================================================
RCS file: /sources/emacs/emacs/lisp/net/tramp.el,v
retrieving revision 1.189
retrieving revision 1.190
diff -u -b -r1.189 -r1.190
--- tramp.el    7 Apr 2008 19:29:09 -0000       1.189
+++ tramp.el    9 Apr 2008 20:01:12 -0000       1.190
@@ -3921,6 +3921,21 @@
            ((eq identification 'localname) localname)
            (t (tramp-make-tramp-file-name 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."
@@ -3955,11 +3970,19 @@
                          'file-local-copy)))
                   (file-local-copy filename))))
            (tramp-message v 4 "Inserting local temp file `%s'..." local-copy)
-           (setq result (insert-file-contents local-copy nil beg end replace))
+           ;; 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))
            ;; 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 v 4 "Inserting local temp file `%s'...done" 
local-copy)
+               (setq coding-system-used
+                     (symbol-value 'last-coding-system-used))))
+           (tramp-message
+            v 4 "Inserting local temp file `%s'...done" local-copy)
            (delete-file local-copy)
            (when (boundp 'last-coding-system-used)
              (set 'last-coding-system-used coding-system-used))))
@@ -4138,13 +4161,18 @@
          ;; 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.
+         ;; on.  We must ensure that `file-coding-system-alist'
+         ;; matches `tmpfile'.
+         (let ((file-coding-system-alist
+                (tramp-find-file-name-coding-system-alist filename tmpfile)))
          (tramp-run-real-handler
           'write-region
           (list start end tmpfile append 'no-message lockname confirm))
          ;; 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)))
+             (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'




reply via email to

[Prev in Thread] Current Thread [Next in Thread]