Subject: Re: bug#62732: 29.0.60; uniquify-trailing-separator-p affects any buffer whose name matches a dir in CWD

From: Stefan Monnier <[email-masked]>
Date: Sat, 08 Jul 2023 13:48:55 -0400

> Ping again on this latest version of my patch.  I have some actual
> features I'd like to add to uniquify, but they're on top of this patch.
> Plus it would be nice to land the tests added in my patch.

Sorry for not following up further, but I was waiting for a reaction to
my proposal to replace the additional arg to `create-file-buffer`
by the patch below.

If we can't avoid changing the API of `create-file-buffer`, I'd like
a comment explaining clearly why.  As it stands the patch is a bit vague
about that, if not confusing:

     ;; FIXME we really need to fold the uniquify stuff in here by default,
    -;; not using advice, and add it to the doc string.
    -(defun create-file-buffer (filename)
    +(defun create-file-buffer (filename &optional directory)
       "Create a suitably named buffer for visiting FILENAME, and return it.
     FILENAME (sans directory) is used unchanged if that name is free;
    -otherwise a string <2> or <3> or ... is appended to get an unused name.
    +otherwise the buffer is renamed according to
    +`uniquify-buffer-name-style' to get an unused name.
     
     Emacs treats buffers whose names begin with a space as internal buffers.
     To avoid confusion when visiting a file whose name begins with a space,
    -this function prepends a \"|\" to the final result if necessary."
    +this function prepends a \"|\" to the final result if necessary.
    +
    +If DIRECTORY is non-nil, a file name separator will be added to
    +the buffer name according to `uniquify-trailing-separator-p'."

Where will that separator be added?  And why is the arg called `directory`?
And why/when is that arg needed, since the separator will often be
introduced anyway by uniquify even with a nil arg?

        Stefan

Stefan Monnier [2023-05-05 16:30:28] wrote:

>> Ah, while I'm at it, here's a fix (based on the patch in the preceding
>> mail) for a different bug which I just noticed: create-file-buffer's
>> documentations states:
>>
>>>Emacs treats buffers whose names begin with a space as internal buffers.
>>>To avoid confusion when visiting a file whose name begins with a space,
>>>this function prepends a "|" to the final result if necessary.
>>
>> But uniquify renames the buffer away from having that "|".  This patch
>> fixes that bug.
>
> How 'bout the patch below (based on the current code), instead?
>
>
>         Stefan
>
>
> diff --git a/lisp/uniquify.el b/lisp/uniquify.el
> index dee9ecba2ea..c252d5461aa 100644
> --- a/lisp/uniquify.el
> +++ b/lisp/uniquify.el
> @@ -498,7 +498,7 @@ uniquify--create-file-buffer-advice
>    (when uniquify-buffer-name-style
>      (let ((filename (expand-file-name (directory-file-name filename))))
>        (uniquify-rationalize-file-buffer-names
> -       (file-name-nondirectory filename)
> +       (buffer-name buf)
>         (file-name-directory filename)
>         buf))))
>