Subject: bug#20993: 25.0.50; virtual-dired problems

From: Drew Adams <[email-masked]>
Date: Mon, 6 Jul 2015 11:01:34 -0700 (PDT)

A followup to bug #20992.  Here are some other problems noticed
immediately, besides the lack of clarity and the nature of the "mode",
lighter/menu, etc.:

1. The prompt uses `read-string'.  It should use `read-directory-name'
or `read-file-name', to provide completion.

In fact, given that the parameter list is the same as for `dired', why
doesn't `virtual-dired' use `dired-read-dir-and-switches'?

OK, presumably it is because you want to use `dired-virtual-guess-dir'.
But that doesn't proscribe providing completion etc.

2. It seems that `virtual-dired' tries to reuse the current buffer.  But
it makes no attempt to ensure that this buffer is in a mode derived from
Dired mode - it does not raise an error if not.  For example, `M-x
virtual-dired' from a buffer showing dired-x.el in read-only mode raises
an error because that buffer is read-only.

The doc string of `virtual-dired' says nothing about what mode the
current buffer must be in, or the fact that the buffer is not switched
but instead its mode is changed.

You would need to consult the doc string of `dired-virtual-guess-dir' to
discover this constraint/assumption:

  "The buffer is assumed to be in Dired or ls -lR format"

That should be tested for.  Dunno how the latter can be tested for, but
some test should be used to make sure the buffer is appropriate for the
kind of changes `virtual-dired' will make to it.  As it is now, the code
just willy nilly tries to modify the buffer text.

3. Defaulting to `default-directory' should be done in the interactive
spec (also).

4. Overall, I'd say that someone should take a look at this
`virtual-dired' feature and polish it up a bit.  It seems a bit rough,
so far.

In GNU Emacs 25.0.50.1 (i686-pc-mingw32)
 of 2014-10-20 on LEG570
Bzr revision: 118168 [email-masked]
Windowing system distributor `Microsoft Corp.', version 6.1.7601
Configured using:
 `configure --enable-checking=yes,glyphs CPPFLAGS=-DGLYPH_DEBUG=1'