From: Chong Yidong Date: Fri, 5 Sep 2008 21:16:19 +0000 (+0000) Subject: (dired-get-filename): Rewrite octal escape character processor X-Git-Tag: emacs-pretest-23.0.90~3029 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=31d42b370a59f25d42719a4ddec156141b8d0b28;p=emacs.git (dired-get-filename): Rewrite octal escape character processor (bug#885). --- diff --git a/lisp/dired.el b/lisp/dired.el index 3102a6d2768..0f6039fc16c 100644 --- a/lisp/dired.el +++ b/lisp/dired.el @@ -1915,17 +1915,11 @@ Otherwise, an error occurs in these cases." ;; 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