Subject: Bug in built-in function substitute-in-file-name
From: Mosur Mohan <[email-masked]>
To: [email-masked]
Date: Tue, 29 Sep 2009 17:37:26 -0700

I am running Emacs version 21.3 on a Linux x86_64 machine.

When I start up Emacs, I go to the *scratch* buffer and eval
    (substitute-in-file-name "/~/")
and I get the expected result
    "~/"

After running for a while, I notice that filename completion starts
giving errors.  At this point, I re-try the above experiment:
    (substitute-in-file-name "/~/")
But now, I get:
    "/~/"

I am not able to figure out what happened in between to make it stop
working correctly.  A search for "substitute-in-file-name" in
bug.gnu.emacs didn't turn up anything relevant to this problem.

I narrowed the problem down to substitute-in-file-name after some
debugging.  Here's the sequence:

In the recently launched Emacs session, while editing a file, I type
C-x C-f to open another file.
In the minibuffer, I see the prompt "~/DesignDB/" (my current working directory)
I type "~/Al" so that the minibuffer now reads "~/DesignDB/~/Al"
I hit <TAB> to do completion on ~/Al
The minibuffer changes to "~/Alps/", which is correct.

In the older Emacs session where I see the problem, I carry out the
same sequence.
With the minibuffer reading "~/DesignDB/~/Al", I hit <TAB>
The minibuffer shows this message: "Opening directory: no such file or
directory, /nfs/pdx/home/mmohan/DesignDB/~*/Al"
The *Messages* window contains this message:
read-file-name-internal: Opening directory: no such file or directory,
/nfs/pdx/home/mmohan/DesignDB/~*/

I debugged this difference in complete.el and ffap.el until I reached
the above discrepancy in the behavior of built-in function
substitute-in-file-name.  I was then able to make the 2 sessions
exhibit the difference with the minimal arg "/~/" to the function.

Hope that is sufficient info.  Thanks,
--
Mosur Mohan