Subject: Re: bug#57325: 27.1; functions in ff-other-file-alist

From: Eli Zaretskii <[email-masked]>
Date: Sun, 21 Aug 2022 21:55:27 +0300

> From: Felician Nemeth <[email-masked]>
> Date: Sun, 21 Aug 2022 20:34:17 +0200
> 
> First, the documentation of ff-other-file-alist fails to mention that
> the value of the variable does not have to be alist, it can be a symbol
> as well.

Thanks, now fixed on the emacs-28 branch.

> More importantly, if the associated value is a function, then there's no
> way for the function to signal that it cannot find a related file.

That's on purpose: this package's design causes such a situation to
make no sense.  Imagine that I wrote a C source file and what now to
"find" the corresponding header file.  If that header file doesn't
exist, I need to write it and save it.  Which is why
ff-find-the-other-file behaves like it does: if the file doesn't
exist, it visits that file as a new one and lets me edit it.

What would you have the package do instead when "the other" file is
not found?

> If the function returns "/nonexistent", then ff-find-the-other-file
> (with the default settings) will try to create "/nonexistent".
> 
> If the function returns nil, then ff-find-the-other-file will call
> ff-get-file-name and:
> 
>   (ff-get-file-name '("." "/usr/include" "/usr/local/include/*") nil nil)
>   ==> "/home/nemethf/.emacs.d/News/drafts/drafts/679"
> 
> "emacs -Q -l bug.el" reproduces the problem by setting
> uniquify-buffer-name-style.  However, my uniquify-buffer-name-style is
> 'forward and not nil.  Maybe Gnus changes uniquify-buffer-name-style
> under the hood, because drafts/679 corresponds to a buffer named
> "*sent wide reply to Somebody*<2>".
> 
> I tend to think this bug in line 577 of find-file.el:
> http://git.savannah.gnu.org/cgit/emacs.git/tree/lisp/find-file.el?id=958924a8126cf532d44c4b446d13ed744438cc9b#n577
> But I don't understand the purpose of that string-match-p.

It looks for buffers which were uniquified.  But I don't think I
understand what you don't understand there, nor how that part is
related to the issue you are raising, which AFAIU is that the function
cannot meaningfully signal a failure.  Please elaborate.

Thanks.