Subject: RE: bug#17950: 24.4.50; REGRESSION: `read-file-name' from a menu (mouse) treats "~/" as installation dir

From: Drew Adams <[email-masked]>
Date: Sun, 6 Jul 2014 08:10:35 -0700 (PDT)

> I cannot reproduce this here with today's trunk.  When I select the
> foo item from the menu, the file selection dialog that pops up shows
> me my home directory, as I'd expect.
> 
> So something else is at work here.  Perhaps the important detail you
> left out is how exactly did you invoke "emacs -Q".

I invoked emacs -Q from a Windows shortcut with `Target':
Z:\path\to\runemacs.exe -Q --debug-init
and with `Start in' set to its default: z:\path\to\Emacs\bin

I then used *scratch* to evaluate the recipe code.
I have env var HOME defined, also. And Emacs recognizes "~/" correctly
(apart from the bug).

When I check `default-directory' it is "Z:\\path\\to\\bin/" (dunno
why there is a forward slash at the end but the others are backslashes).
If I change `Start in' then `default-directory' changes to reflect it,
correctly.  But the dir used by the menu item is still the (same) wrong
one.

It works fine in Emacs 24.3 and prior.  Broken in the reported build.
It works fine also as recently as this build:
GNU Emacs 24.4.50.1 (i686-pc-mingw32) of 2014-06-17 on ODIEONE

However, it seems that the directory used for the file selection box
is not related to `Start in'.  It seems to be the something like a
dir used in a different or a previous Emacs session (?).  Not sure
about that, but it definitely comes up with a directory that is
unrelated to either my HOME or the directory in `Start in'.

The directory I see it coming up with now (which is different from
what I saw when I reported the bug yesterday) is a directory that
I normally use a lot, and which contains much of my Lisp code.
But there is nothing in this emacs -Q recipe that points to anything
to do with that directory or my code.  All I can guess is that it is
coming from another Emacs session somehow, or from a cache file
somewhere.  But looking around (e.g., in HOME, .emacs.d, etc.) I see
nothing resembling a cache file that it could be picking the dir up
from.

I added `M-x debug-on-entry read-file-name' to the recipe, and went
through the debugger after invoking from menu FOOOO.  E.g.:

* x-file-dialog("Foo: " "~/" nil nil nil)
* read-file-name-default("Foo: " "~/" nil nil nil nil)
* read-file-name("Foo: " "~/")

When I hit `d' on `x-file-dialog' the file-selection box is popped
up with the incorrect directory in field `Look in:'.  `x-file-dialog'
is defined in C, and I have no C sources.  But it seems that would
be the place to look for the cause of the problem.  Perhaps its
code has changed recently.  HTH.

Maybe you can play with it a bit more, to try to see what's going on.

In any case, what is not happening, which has always happened before,
is that the file-selection directory is HOME (since "~/" is used in
the recipe).