GNU bug report logs -
#65308
(find-file) botches buffer-file-name in -batch mode
Previous Next
Full log
View this message in rfc822 format
[Message part 1 (text/plain, inline)]
Your message dated Tue, 15 Aug 2023 15:26:37 +0300
with message-id <83jztwa3uq.fsf <at> gnu.org>
and subject line Re: bug#65308: (find-file) botches buffer-file-name in -batch mode
has caused the debbugs.gnu.org bug report #65308,
regarding (find-file) botches buffer-file-name in -batch mode
to be marked as done.
(If you believe you have received this mail in error, please contact
help-debbugs <at> gnu.org.)
--
65308: https://debbugs.gnu.org/cgi/bugreport.cgi?bug=65308
GNU Bug Tracking System
Contact help-debbugs <at> gnu.org with problems
[Message part 2 (message/rfc822, inline)]
This was found while trying to use Emacs in `-batch` mode to regexp-
replace many files in a project. Turns out calling `(save-buffer)` will
make it say that directory does not exist, and the reason for that is
that `buffer-file-name` gets mangled filename.
# Steps to reproduce
$ mkdir dir && touch dir/1 dir/2
$ emacs -batch --eval '(progn (dolist (file command-line-args-left) (find-file file) (print buffer-file-name))))' dir/1 dir/2
"/tmp/dir/1"
"/tmp/dir/dir/2"
## Expected
Second print would say `/tmp/dir/2`
## Actual
Second print refers to non-existing `/tmp/dir/dir/2`.
# Versions tested
Reproducible with stable 29.1 and somewhat old master as of commit
04710bd01b2
[Message part 3 (message/rfc822, inline)]
> From: Konstantin Kharlamov <Hi-Angel <at> yandex.ru>
> Cc: 65308 <at> debbugs.gnu.org
> Date: Tue, 15 Aug 2023 15:17:00 +0300
>
> On Tue, 2023-08-15 at 15:03 +0300, Eli Zaretskii wrote:
> > There's no bug here. To get what you want, run the command-line
> > arguments through expand-file-name _before_ calling find-file.
>
> Oh, okay, thank you, I see. I settled with calling a `(kill-buffer)`
> after `(save-buffer)`, which I guess works because each time the buffer
> is killed we get back to the *scratch* buffer that has the original
> "current directory".
Yes, that will work, as will using save-current-buffer etc. But
please note that relying on the default-directory of some random
buffer when using relative file names is always fraught with surprises
in Emacs, which is why I suggested to use expand-file-name instead.
Closing.
This bug report was last modified 1 year and 337 days ago.
Previous Next
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997,2003 nCipher Corporation Ltd,
1994-97 Ian Jackson.