Commit 1498536e authored by Glenn Morris's avatar Glenn Morris
Browse files

dired fix for `ls -b' quoting of spaces (bug#10469)

* lisp/dired.el (dired-switches-escape-p): New function.
(dired-insert-directory): Use dired-switches-escape-p.
(dired-get-filename): Undo "\ " quoting if needed.
parent 6e9ddbb3
2012-01-13 Glenn Morris <rgm@gnu.org>
* dired.el (dired-switches-escape-p): New function.
(dired-insert-directory): Use dired-switches-escape-p.
(dired-get-filename): Undo "\ " quoting if needed. (Bug#10469)
* find-dired.el (find-ls-option): Doc fix. (Bug#10262)
2012-01-12 Glenn Morris <rgm@gnu.org>
......
......@@ -1111,6 +1111,11 @@ BEG..END is the line where the file info is located."
(defvar ls-lisp-use-insert-directory-program)
(defun dired-switches-escape-p (switches)
"Return non-nil if the string SWITCHES contains -b or --escape."
;; Do not match things like "--block-size" that happen to contain "b".
(string-match "\\(\\`\\| \\)-[[:alnum:]]*b\\|--escape\\>" switches))
(defun dired-insert-directory (dir switches &optional file-list wildcard hdr)
"Insert a directory listing of DIR, Dired style.
Use SWITCHES to make the listings.
......@@ -1152,7 +1157,7 @@ see `dired-use-ls-dired' for more details.")
(dired-align-file beg (point))))
(insert-directory dir switches wildcard (not wildcard)))
;; Quote certain characters, unless ls quoted them for us.
(if (not (string-match "b" dired-actual-switches))
(if (not (dired-switches-escape-p dired-actual-switches))
(save-excursion
(setq end (point-marker))
(goto-char opoint)
......@@ -2099,7 +2104,13 @@ Otherwise, an error occurs in these cases."
;; with quotation marks in their names.
(while (string-match "\\(?:[^\\]\\|\\`\\)\\(\"\\)" file)
(setq file (replace-match "\\\"" nil t file 1)))
;; Unescape any spaces escaped by ls -b (bug#10469).
;; Other -b quotes, eg \t, \n, work transparently.
(if (dired-switches-escape-p dired-actual-switches)
(let ((start 0))
(while (string-match "\\(\\\\\\) " file start)
(setq file (replace-match "" nil t file 1)
start (1- (match-end 0))))))
(when (eq system-type 'windows-nt)
(save-match-data
(let ((start 0))
......@@ -2107,6 +2118,7 @@ Otherwise, an error occurs in these cases."
(aset file (match-beginning 0) ?/)
(setq start (match-end 0))))))
;; Hence we don't need to worry about converting `\\' back to `\'.
(setq file (read (concat "\"" file "\"")))
;; The above `read' will return a unibyte string if FILE
;; contains eight-bit-control/graphic characters.
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment