changeset 98004:cb25381fabcc

(dired-get-filename): Rewrite octal escape character processor (bug#885).
author Chong Yidong <cyd@stupidchicken.com>
date Fri, 05 Sep 2008 21:16:19 +0000
parents 752eb2a81b82
children c6c423c9302e
files lisp/dired.el
diffstat 1 files changed, 5 insertions(+), 11 deletions(-) [+]
line wrap: on
line diff
--- a/lisp/dired.el	Fri Sep 05 21:16:01 2008 +0000
+++ b/lisp/dired.el	Fri Sep 05 21:16:19 2008 +0000
@@ -1915,17 +1915,11 @@
 	  ;; Get rid of the mouse-face property that file names have.
 	  (set-text-properties 0 (length file) nil file)
 	  ;; Unquote names quoted by ls or by dired-insert-directory.
-	  ;; Using read to unquote is much faster than substituting
-	  ;; \007 (4 chars) -> ^G  (1 char) etc. in a lisp loop.
-	  (setq file
-		(read
-		 (concat "\""
-			 ;; Some ls -b don't escape quotes, argh!
-			 ;; This is not needed for GNU ls, though.
-			 (or (dired-string-replace-match
-			      "\\([^\\]\\|\\`\\)\"" file "\\1\\\\\"" nil t)
-			     file)
-			 "\"")))
+	  (while (string-match
+		  "\\(?:[^\\]\\|\\`\\)\\(\\\\[0-7][0-7][0-7]\\)" file)
+	    (setq file (replace-match
+			(read (concat "\"" (match-string 1 file)  "\""))
+			nil t file 1)))
 	  ;; The above `read' will return a unibyte string if FILE
 	  ;; contains eight-bit-control/graphic characters.
 	  (if (and enable-multibyte-characters