Subject: Dired with long ls switches

From: "David Brown" <[email-masked]>
Date: Tue, 10 Feb 2009 01:06:48 -0500

I have "GNU Emacs 22.2.1 (i486-pc-linux-gnu, GTK+ Version 2.14.1) of
2008-09-05 on vernadsky, modified by Ubuntu," known as emacs22-gtk by my
distro.

I like --group-directories-first as an ls switch:  (setq
dired-listing-switches "-al --group-directories-first")

In dired, when I do a file operation such as R-rename or M-chmod, the system
file operation works, but the dired buffer does not update properly, giving:
Listing directory failed but `access-file' worked

This is because a character "d" is being appended to dired-actual-switches
about 50 lines into dired-add-entry:
  (dired-insert-directory directory
     (concat dired-actual-switches "d")
     (list filename)))

Just concatenating "d" assumes short switches.  For example "-ald" works
fine.  But "-al --group-directories-firstd" fails.

I fixed my installation by putting " -d" instead of "d".  This seems to work
just fine for files and directories

Here is the debugger backtrace:

Debugger entered--Lisp error: (error "Listing directory failed but
`access-file' worked")
  signal(error ("Listing directory failed but `access-file' worked"))
  error("Listing directory failed but `access-file' worked")
  insert-directory("foobar" "--dired -al --group-directories-firstd" nil
nil)
  dired-insert-directory("/home/dmb/bin/" "-al --group-directories-firstd"
("foobar"))
  (let ((default-directory directory)) (dired-insert-directory directory
(concat dired-actual-switches "d") (list filename)))
  (let (buffer-read-only opoint) (beginning-of-line) (setq opoint (point))
(let (...) (dired-insert-directory directory ... ...)) (goto-char opoint)
(when marker-char (let ... ...)) (goto-char opoint) (let (...) (if ... ...
...)) (forward-line -1) (if dired-after-readin-hook (save-excursion ...))
(dired-move-to-filename))
  (catch (quote not-found) (if (string= directory cur-dir) (progn ... ...
...) (if ... ... ...)) (let (buffer-read-only opoint) (beginning-of-line)
(setq opoint ...) (let ... ... ...) (goto-char opoint) (when marker-char
...) (goto-char opoint) (let ... ...) (forward-line -1) (if
dired-after-readin-hook ...) (dired-move-to-filename)) nil)
  (setq filename (if relative (file-relative-name filename directory)
(file-name-nondirectory filename)) reason (catch (quote not-found) (if ...
... ...) (let ... ... ... ... ... ... ... ... ... ... ...) nil))
  (let* ((opoint ...) (cur-dir ...) (orig-file-name filename) (directory
...) reason) (setq filename (if relative ... ...) reason (catch ... ... ...
nil)) (if reason (goto-char opoint)) (not reason))
  dired-add-entry("/home/dmb/bin/foobar" nil)
  apply(dired-add-entry ("/home/dmb/bin/foobar" nil))
  dired-fun-in-all-buffers("/home/dmb/bin/" "foobar" dired-add-entry
"/home/dmb/bin/foobar" nil)
  dired-add-file("/home/dmb/bin/foobar" nil)
  byte-code(" \n#ˆ\fƒ