emacs-diffs
[Top][All Lists]
Advanced

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

master 827786c: Preserve `dired-filename' text properties in Tramp


From: Michael Albinus
Subject: master 827786c: Preserve `dired-filename' text properties in Tramp
Date: Wed, 18 Nov 2020 05:32:49 -0500 (EST)

branch: master
commit 827786cf759a0a14c3e2ebea2963478c2f1a9b5c
Author: Michael Albinus <michael.albinus@gmx.de>
Commit: Michael Albinus <michael.albinus@gmx.de>

    Preserve `dired-filename' text properties in Tramp
    
    * lisp/net/tramp-sh.el (tramp-sh-handle-insert-directory):
    Restore `dired-filename' text property, which has been destroyed
    by `decode-coding-region'.  (Bug#44682)
---
 lisp/net/tramp-sh.el | 26 +++++++++++++++++++++-----
 1 file changed, 21 insertions(+), 5 deletions(-)

diff --git a/lisp/net/tramp-sh.el b/lisp/net/tramp-sh.el
index ccf0c0d..c4390b3 100644
--- a/lisp/net/tramp-sh.el
+++ b/lisp/net/tramp-sh.el
@@ -2658,7 +2658,8 @@ The method used must be an out-of-band method."
                     #'file-name-nondirectory (list localname)))))))
 
       (save-restriction
-       (let ((beg (point)))
+       (let ((beg (point))
+             match)
          (narrow-to-region (point) (point))
          ;; We cannot use `insert-buffer-substring' because the Tramp
          ;; buffer changes its contents before insertion due to calling
@@ -2696,10 +2697,25 @@ The method used must be an out-of-band method."
                (re-search-forward tramp-display-escape-sequence-regexp nil t)
              (replace-match "")))
 
-         ;; Decode the output, it could be multibyte.
-         (decode-coding-region
-          beg (point-max)
-          (or file-name-coding-system default-file-name-coding-system))
+         ;; Decode the output, it could be multibyte.  We must
+         ;; restore the text property, because `decode-coding-region'
+         ;; has destroyed it.  However, text-property-search.el
+         ;; exists since Emacs 27 only.
+         (if (not (require 'text-property-search nil 'noerror))
+             (decode-coding-region
+              beg (point-max)
+              (or file-name-coding-system default-file-name-coding-system))
+           (goto-char beg)
+            (while (setq match
+                        (tramp-compat-funcall
+                         'text-property-search-forward 'dired-filename t t))
+             (decode-coding-region
+              (tramp-compat-funcall 'prop-match-beginning match)
+              (tramp-compat-funcall 'prop-match-end match)
+              (or file-name-coding-system default-file-name-coding-system))
+             (put-text-property
+              (tramp-compat-funcall 'prop-match-beginning match)
+              (point) 'dired-filename t)))
 
          ;; The inserted file could be from somewhere else.
          (when (and (not wildcard) (not full-directory-p))



reply via email to

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