all messages for Emacs-related lists mirrored at yhetil.org
 help / color / mirror / code / Atom feed
From: Stephen Berman <stephen.berman@gmx.net>
To: emacs-devel@gnu.org
Subject: Re: rename-file
Date: Thu, 27 Aug 2009 16:59:30 +0200	[thread overview]
Message-ID: <87iqg9cnfx.fsf@escher.local.home> (raw)
In-Reply-To: <buoskfdtr0f.fsf@dhlpc061.dev.necel.com> (Miles Bader's message of "Thu, 27 Aug 2009 20:50:24 +0900")

On Thu, 27 Aug 2009 20:50:24 +0900 Miles Bader <miles@gnu.org> wrote:

> Stephen Berman <stephen.berman@gmx.net> writes:
>> I don't understand how anyone can deny that evaluating the variable
>> whose value is documented as the "Name of file visited in current
>> buffer, or nil if not visiting a file" should return the correct current
>> name of the visited file.
>
> Because "rename-file" is a relatively low-level command, which just
> tells the OS to rename the file.
>
> If you want "smart" renaming, use dired to rename files ("R" command).
> It will update buffer filenames (and buffer names) accordingly.
>
> While the latter behavior is convenient, there's certainly nothing
> _wrong_ with the former -- there's no guarantee that a buffer's filename
> variable refers an existing file at all (and really there can't be,
> since in the general case, emacs can't keep track of what goes on in the
                             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
> filesystem behind its back).
  ^^^^^^^^^^^^^^^^^^^^^^^^^^

I understand the Emacs can't be expected to track filesystem changes
that happen outside its purview (but sometimes it does anyway,
e.g. auto-revert-mode), but my concern is about changes due to a
sequence of Emacs commands (steps 1-4 below), which result in a value
for buffer-file-name that to my understanding is not consistent with its
doc string.  I wouldn't have complained if the doc string had noted this
possibility, e.g.:

"Name of file visited in current buffer, or nil if not visiting a file.
Note that a non-nil value of this variable does not change if the file
name changed after visiting the file."

On Thu, 27 Aug 2009 14:18:03 +0200 Andreas Schwab <schwab@linux-m68k.org> wrote:

> Stephen Berman <stephen.berman@gmx.net> writes:
>
>>>> 1. C-x C-f bla
>>>> 2. C-h v buffer-file-name => bla
>>>> 3. M-x rename-file RET blabla
>>>> 4. C-h v buffer-file-name => bla
>>>>
>>>> Surely the return value in step 4 is unwanted, isn't it?
>>>
>>> The visited name of the buffer didn't change in any way whatsoever.
>>
>> But that's precisely the problem!
>
> There is no assotiation between a buffer and a file, only between a
> buffer and file name.
>
>>> Only set-visited-file-name can do that.
>>
>> Then it should be made to take effect between steps 3 and 4 above.
>
> No.  That the filesystem changes does not in any way change the
       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
> association of a buffer to a file name, just like deleting a file does
  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
> not magically kill a buffer.

That appears to depend on the command or function that brings about the
filesystem change, e.g. write-file does change the association of a
buffer to a file name:

5. C-h v buffer-file-name => blip
6. C-x C-w blap (i.e. at the prompt type "blap" after default-directory)
7. C-h v buffer-file-name => "/<default-directory>/blap"
8. There is no longer a buffer visiting "/<default-directory>/blip"

If write-file does it, there's no reason in principle why rename-file
cannot do it, so if (or since) it (currently) does not change the
association, the doc string should note this.  Or is there a convention
that an Emacs command does not track file system changes unless its doc
string explicitly says it does?  If so, is this convention documented or
assumed as common lore?

Steve Berman




  reply	other threads:[~2009-08-27 14:59 UTC|newest]

Thread overview: 24+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-08-26 16:05 rename-file Sam Steingold
2009-08-26 18:58 ` rename-file Stephen Berman
2009-08-27  3:16   ` rename-file Stefan Monnier
2009-08-27  8:38     ` rename-file Stephen Berman
2009-08-27  9:09       ` rename-file Andreas Schwab
2009-08-27 10:01         ` rename-file Stephen Berman
2009-08-27 10:21           ` rename-file Andreas Schwab
2009-08-27 11:28             ` rename-file Stephen Berman
2009-08-27 11:50               ` rename-file Miles Bader
2009-08-27 14:59                 ` Stephen Berman [this message]
2009-08-27 12:18               ` rename-file Andreas Schwab
2009-08-27 17:08       ` rename-file Stefan Monnier
2009-08-26 19:21 ` rename-file Stefan Monnier
2009-08-26 20:20   ` rename-file Lennart Borgman
2009-08-26 20:35   ` rename-file Sam Steingold
2009-08-27  3:15     ` rename-file Eli Zaretskii
2009-08-27  3:25     ` rename-file Richard Stallman
2009-08-27  3:41       ` rename-file Sam Steingold
2009-08-27 17:11         ` rename-file Stefan Monnier
2009-08-29  0:46         ` rename-file Richard Stallman
2009-08-31 22:09           ` rename-file Sam Steingold
2009-08-27 14:47     ` rename-file Sam Steingold
2009-08-26 20:42 ` rename-file martin rudalics
2009-08-27 13:49 ` rename-file Daniel Colascione

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=87iqg9cnfx.fsf@escher.local.home \
    --to=stephen.berman@gmx.net \
    --cc=emacs-devel@gnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this external index

	https://git.savannah.gnu.org/cgit/emacs.git
	https://git.savannah.gnu.org/cgit/emacs/org-mode.git

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.