Subject: Re: bug#11902: Emacs 23.2: dired rename file and file is hidden - Windows 7

From: Eli Zaretskii <[email-masked]>
Date: Thu, 12 Jul 2012 15:47:39 +0300

> Date: Thu, 12 Jul 2012 07:54:07 -0400
> From: Bernard Stumpf <[email-masked]>
> CC:  [email-masked]
> 
> I have not noticed any sensitivity to the characters in "newname". I 
> just created a file named "foo" and did an R to "foo1" - the line 
> disappeared.

OK.

> I did the same with file "bar" to "bar1". Here's output in *Messages*
> ...
> (New file)
> Saving file c:/Users/bernie/bar...
> Wrote c:/Users/bernie/bar
> Overwrite `c:/Users/bernie/bar'? [Type yn!q or C-h]  [5 times]

Any idea what that "Overwrite" message was about?

> As to using Edebug: I don't know Edebug.  Is there a way to set 
> breakpoints inside emacs from emacs?

Edebug _is_ used from inside Emacs.  For example, to step through
dired-do-redisplay and dired-update-file-line, you do this:

  emacs -Q
  M-x load-library dired-aux.el RET
  C-x d some/directory RET
  C-x C-f path/to/dired-aux.el RET
  go to the function dired-do-redisplay
  with cursor inside dired-do-redisplay's body, type:
    M-x edebug-defun RET

This instruments dired-do-redisplay, such that when it is called, the
debugger kicks in automatically.  Think if this as a kind of a
breakpoint you set on the function.

Now, go to the Dired buffer to the line of the file you want to rename
and press "R".  Emacs will pop up a window with the source of
dired-do-redisplay, with a small arrow at the left showing the current
line.  Typing SPC repeatedly will step through the code one Lisp form
at a time, and will also show in the echo area the result of
evaluating each form, so you can track what Emacs does and why.  To
step into dired-update-file-line, type 'i' when you get just before
the form that calls that function; then step through
dired-update-file-line by repeatedly typing SPC again.

Easy enough, isn't it?

>From what you describe, I'd expect that dired-update-file-line deletes
the line of the file being renamed, but then doesn't add the line for
the new file, for some reason.  The addition is done by
dired-add-entry, which dired-update-file-line calls; you can step into
it by typing 'i' again.

The information you obtain by stepping through these functions will
probably get us much closer to resolving the problem, if not point out
the problem right away.

And just for the record: the way to reproduce the problem on that
machine is just the following sequence, and nothing else, right?

  emacs -Q
  C-x d RET
  go to some file
  type R foo RET

There's nothing else you do except the above sequence, correct?

Thanks.