unofficial mirror of emacs-devel@gnu.org 
 help / color / mirror / code / Atom feed
* Re: master e315544: ; * src/fileio.c (Fdirectory_append): Doc fix.
       [not found] ` <20210724171900.4A26D20D0A@vcs0.savannah.gnu.org>
@ 2021-07-24 18:39   ` Michael Albinus
  2021-07-24 18:51     ` Lars Ingebrigtsen
  0 siblings, 1 reply; 16+ messages in thread
From: Michael Albinus @ 2021-07-24 18:39 UTC (permalink / raw)
  To: emacs-devel; +Cc: Eli Zaretskii, Lars Ingebrigtsen

eliz@gnu.org (Eli Zaretskii) writes:

> diff --git a/src/fileio.c b/src/fileio.c
> index 6d505fd..d6b3e7b 100644
> --- a/src/fileio.c
> +++ b/src/fileio.c
> @@ -751,9 +751,10 @@ For that reason, you should normally use `make-temp-file' instead.  */)
>
>  DEFUN ("directory-append", Fdirectory_append, Sdirectory_append, 1, MANY, 0,
>         doc: /* Append COMPONENTS to DIRECTORY and return the resulting string.
> -COMPONENTS must be a list of strings.  DIRECTORY or the non-final
> -elements in COMPONENTS may or may not end with a slash -- if they don't
> -end with a slash, a slash will be inserted before contatenating.
> +COMPONENTS must be strings.
> +DIRECTORY or the non-final elements in COMPONENTS may or may not end
> +with a slash -- if they don't end with a slash, a slash will be
> +inserted before contatenating.
>  usage: (record DIRECTORY &rest COMPONENTS) */)
>    (ptrdiff_t nargs, Lisp_Object *args)
>  {

FTR, I believe COMPONENTS might also contain nil elements, which should
be ignored.

Furthermore, we have

(directory-append "foo/" "/bar") => "foo//bar"

I would expect "foo/bar", meaning that all leading slashes in COMPONENTS
are removed.

Best regards, Michael.



^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: master e315544: ; * src/fileio.c (Fdirectory_append): Doc fix.
  2021-07-24 18:39   ` master e315544: ; * src/fileio.c (Fdirectory_append): Doc fix Michael Albinus
@ 2021-07-24 18:51     ` Lars Ingebrigtsen
  2021-07-24 19:04       ` Michael Albinus
  0 siblings, 1 reply; 16+ messages in thread
From: Lars Ingebrigtsen @ 2021-07-24 18:51 UTC (permalink / raw)
  To: Michael Albinus; +Cc: Eli Zaretskii, emacs-devel

Michael Albinus <michael.albinus@gmx.de> writes:

> FTR, I believe COMPONENTS might also contain nil elements, which should
> be ignored.

I'm not sure I follow.  You want to extend the interface to allow nil
elements?  I'm not sure that would be very useful?

> Furthermore, we have
>
> (directory-append "foo/" "/bar") => "foo//bar"
>
> I would expect "foo/bar", meaning that all leading slashes in COMPONENTS
> are removed.

Well, I think that's over into DWIM-land again (which is what
expand-file-name does, and this function deliberately doesn't do).

-- 
(domestic pets only, the antidote for overdose, milk.)
   bloggy blog: http://lars.ingebrigtsen.no



^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: master e315544: ; * src/fileio.c (Fdirectory_append): Doc fix.
  2021-07-24 18:51     ` Lars Ingebrigtsen
@ 2021-07-24 19:04       ` Michael Albinus
  2021-07-25  5:19         ` Lars Ingebrigtsen
  0 siblings, 1 reply; 16+ messages in thread
From: Michael Albinus @ 2021-07-24 19:04 UTC (permalink / raw)
  To: Lars Ingebrigtsen; +Cc: Eli Zaretskii, emacs-devel

Lars Ingebrigtsen <larsi@gnus.org> writes:

>> FTR, I believe COMPONENTS might also contain nil elements, which should
>> be ignored.
>
> I'm not sure I follow.  You want to extend the interface to allow nil
> elements?  I'm not sure that would be very useful?

It's rather a nice to have. Sometimes, I have a list of file name
fragments, and I hope to avoid the checks for being non-empty strings
...

But I can do this in my code.

>> Furthermore, we have
>>
>> (directory-append "foo/" "/bar") => "foo//bar"
>>
>> I would expect "foo/bar", meaning that all leading slashes in COMPONENTS
>> are removed.
>
> Well, I think that's over into DWIM-land again (which is what
> expand-file-name does, and this function deliberately doesn't do).

expand-file-name and file-name-as-directory are functions which call a
handler, for example Tramp. directory-append is much cheaper, and if it
could do this string handling, I could avoid those functions. It would
be more performant.

Best regards, Michael.



^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: master e315544: ; * src/fileio.c (Fdirectory_append): Doc fix.
  2021-07-24 19:04       ` Michael Albinus
@ 2021-07-25  5:19         ` Lars Ingebrigtsen
  2021-07-25  5:27           ` Stefan Monnier
  2021-07-25  7:59           ` Michael Albinus
  0 siblings, 2 replies; 16+ messages in thread
From: Lars Ingebrigtsen @ 2021-07-25  5:19 UTC (permalink / raw)
  To: Michael Albinus; +Cc: Eli Zaretskii, emacs-devel

Michael Albinus <michael.albinus@gmx.de> writes:

> It's rather a nice to have. Sometimes, I have a list of file name
> fragments, and I hope to avoid the checks for being non-empty strings
> ...
>
> But I can do this in my code.

Thinking about it a bit more, I can see use cases where ignoring nil/""
would be useful (without making the function less difficult to reason
about).  (And it's analogous to `concat', besides.)  So I think I'll go
ahead and make that change...

>>> Furthermore, we have
>>>
>>> (directory-append "foo/" "/bar") => "foo//bar"
>>>
>>> I would expect "foo/bar", meaning that all leading slashes in COMPONENTS
>>> are removed.
>>
>> Well, I think that's over into DWIM-land again (which is what
>> expand-file-name does, and this function deliberately doesn't do).
>
> expand-file-name and file-name-as-directory are functions which call a
> handler, for example Tramp. directory-append is much cheaper, and if it
> could do this string handling, I could avoid those functions. It would
> be more performant.

The reason `directory-append' is useful as a function at all (instead of
just using `concat') is that we're very vague about the difference
between a directory name and a file name in Emacs.  That is, we treat
"/tmp/" and "/tmp" as equivalent in more than 99% of cases when dealing
with directories.  This has naturally led to people setting
`foo-directory' variables etc to something ending with a slash or not
arbitrarily, which again means that you can't just use `concat' to
construct file names.

But "/bar.txt" does not happen naturally as a leaf file name, so I think
it'd be counter-productive to have `directory-append' do anything
particular about the start of file name components.

By the way -- I'm not sure that `directory-append' is the best function
name here...  `file-name-concat' would perhaps be more natural?  But
it's really about directories...  `directory-name-concat'?  Hm.

-- 
(domestic pets only, the antidote for overdose, milk.)
   bloggy blog: http://lars.ingebrigtsen.no



^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: master e315544: ; * src/fileio.c (Fdirectory_append): Doc fix.
  2021-07-25  5:19         ` Lars Ingebrigtsen
@ 2021-07-25  5:27           ` Stefan Monnier
  2021-07-25  6:54             ` Lars Ingebrigtsen
  2021-07-25  7:59           ` Michael Albinus
  1 sibling, 1 reply; 16+ messages in thread
From: Stefan Monnier @ 2021-07-25  5:27 UTC (permalink / raw)
  To: Lars Ingebrigtsen; +Cc: Michael Albinus, Eli Zaretskii, emacs-devel

> By the way -- I'm not sure that `directory-append' is the best function
> name here...  `file-name-concat' would perhaps be more natural?  But
> it's really about directories...  `directory-name-concat'?  Hm.

I vote for `file-name-concat` (while some of the arguments are
directory names, the last one usually/often isn't and neither is the
return value).


        Stefan




^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: master e315544: ; * src/fileio.c (Fdirectory_append): Doc fix.
  2021-07-25  5:27           ` Stefan Monnier
@ 2021-07-25  6:54             ` Lars Ingebrigtsen
  2021-07-25 10:01               ` Kévin Le Gouguec
  0 siblings, 1 reply; 16+ messages in thread
From: Lars Ingebrigtsen @ 2021-07-25  6:54 UTC (permalink / raw)
  To: Stefan Monnier; +Cc: Eli Zaretskii, Michael Albinus, emacs-devel

Stefan Monnier <monnier@iro.umontreal.ca> writes:

> I vote for `file-name-concat` (while some of the arguments are
> directory names, the last one usually/often isn't and neither is the
> return value).

OK; renamed.

-- 
(domestic pets only, the antidote for overdose, milk.)
   bloggy blog: http://lars.ingebrigtsen.no



^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: master e315544: ; * src/fileio.c (Fdirectory_append): Doc fix.
  2021-07-25  5:19         ` Lars Ingebrigtsen
  2021-07-25  5:27           ` Stefan Monnier
@ 2021-07-25  7:59           ` Michael Albinus
  2021-07-28 15:36             ` Lars Ingebrigtsen
  1 sibling, 1 reply; 16+ messages in thread
From: Michael Albinus @ 2021-07-25  7:59 UTC (permalink / raw)
  To: Lars Ingebrigtsen; +Cc: Eli Zaretskii, emacs-devel

Lars Ingebrigtsen <larsi@gnus.org> writes:

>>>> I would expect "foo/bar", meaning that all leading slashes in COMPONENTS
>>>> are removed.
>>>
>>> Well, I think that's over into DWIM-land again (which is what
>>> expand-file-name does, and this function deliberately doesn't do).
>>
>> expand-file-name and file-name-as-directory are functions which call a
>> handler, for example Tramp. directory-append is much cheaper, and if it
>> could do this string handling, I could avoid those functions. It would
>> be more performant.
>
> The reason `directory-append' is useful as a function at all (instead of
> just using `concat') is that we're very vague about the difference
> between a directory name and a file name in Emacs.  That is, we treat
> "/tmp/" and "/tmp" as equivalent in more than 99% of cases when dealing
> with directories.  This has naturally led to people setting
> `foo-directory' variables etc to something ending with a slash or not
> arbitrarily, which again means that you can't just use `concat' to
> construct file names.
>
> But "/bar.txt" does not happen naturally as a leaf file name, so I think
> it'd be counter-productive to have `directory-append' do anything
> particular about the start of file name components.

So (file-name-concat x y) is roughly equivalent to

(let (file-name-handler-alist)
  (concat (file-name-as-directory x) y))

Perhaps this could be mentioned somewhere in the manual? This would also
precise, that leading slashes in COMPONENTS are kept.

Best regards, Michael.



^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: master e315544: ; * src/fileio.c (Fdirectory_append): Doc fix.
  2021-07-25  6:54             ` Lars Ingebrigtsen
@ 2021-07-25 10:01               ` Kévin Le Gouguec
  2021-07-25 10:23                 ` Lars Ingebrigtsen
  2021-07-25 11:50                 ` Andreas Schwab
  0 siblings, 2 replies; 16+ messages in thread
From: Kévin Le Gouguec @ 2021-07-25 10:01 UTC (permalink / raw)
  To: Lars Ingebrigtsen
  Cc: Eli Zaretskii, Michael Albinus, Stefan Monnier, emacs-devel

Lars Ingebrigtsen <larsi@gnus.org> writes:

> Stefan Monnier <monnier@iro.umontreal.ca> writes:
>
>> I vote for `file-name-concat` (while some of the arguments are
>> directory names, the last one usually/often isn't and neither is the
>> return value).
>
> OK; renamed.

Should etc/NEWS be updated as well?

diff --git a/etc/NEWS b/etc/NEWS
index f1635ae2e6..0d1abfd852 100644
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -3109,8 +3109,8 @@ The former is now declared obsolete.
 * Lisp Changes in Emacs 28.1
 
 +++
-*** New function 'directory-append'.
-This appends a file name to a directory name and returns the result.
+*** New function 'file-name-concat'.
+This appends path components to a directory name and returns the result.
 
 +++
 *** New function 'split-string-shell-command'.



^ permalink raw reply related	[flat|nested] 16+ messages in thread

* Re: master e315544: ; * src/fileio.c (Fdirectory_append): Doc fix.
  2021-07-25 10:01               ` Kévin Le Gouguec
@ 2021-07-25 10:23                 ` Lars Ingebrigtsen
  2021-07-25 11:50                 ` Andreas Schwab
  1 sibling, 0 replies; 16+ messages in thread
From: Lars Ingebrigtsen @ 2021-07-25 10:23 UTC (permalink / raw)
  To: Kévin Le Gouguec
  Cc: Eli Zaretskii, Michael Albinus, Stefan Monnier, emacs-devel

Kévin Le Gouguec <kevin.legouguec@gmail.com> writes:

> Should etc/NEWS be updated as well?

Yup; thanks.

-- 
(domestic pets only, the antidote for overdose, milk.)
   bloggy blog: http://lars.ingebrigtsen.no



^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: master e315544: ; * src/fileio.c (Fdirectory_append): Doc fix.
  2021-07-25 10:01               ` Kévin Le Gouguec
  2021-07-25 10:23                 ` Lars Ingebrigtsen
@ 2021-07-25 11:50                 ` Andreas Schwab
  2021-07-25 13:05                   ` Kévin Le Gouguec
  1 sibling, 1 reply; 16+ messages in thread
From: Andreas Schwab @ 2021-07-25 11:50 UTC (permalink / raw)
  To: Kévin Le Gouguec
  Cc: Lars Ingebrigtsen, emacs-devel, Michael Albinus, Eli Zaretskii,
	Stefan Monnier

On Jul 25 2021, Kévin Le Gouguec wrote:

> diff --git a/etc/NEWS b/etc/NEWS
> index f1635ae2e6..0d1abfd852 100644
> --- a/etc/NEWS
> +++ b/etc/NEWS
> @@ -3109,8 +3109,8 @@ The former is now declared obsolete.
>  * Lisp Changes in Emacs 28.1
>  
>  +++
> -*** New function 'directory-append'.
> -This appends a file name to a directory name and returns the result.
> +*** New function 'file-name-concat'.
> +This appends path components to a directory name and returns the result.

s/path/file name/

This should probably emphasize the fact that it ignores file name
handlers.

Andreas.

-- 
Andreas Schwab, schwab@linux-m68k.org
GPG Key fingerprint = 7578 EB47 D4E5 4D69 2510  2552 DF73 E780 A9DA AEC1
"And now for something completely different."



^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: master e315544: ; * src/fileio.c (Fdirectory_append): Doc fix.
  2021-07-25 11:50                 ` Andreas Schwab
@ 2021-07-25 13:05                   ` Kévin Le Gouguec
  2021-07-28 15:39                     ` Lars Ingebrigtsen
  0 siblings, 1 reply; 16+ messages in thread
From: Kévin Le Gouguec @ 2021-07-25 13:05 UTC (permalink / raw)
  To: Andreas Schwab
  Cc: Lars Ingebrigtsen, Michael Albinus, Eli Zaretskii, Stefan Monnier,
	emacs-devel

Andreas Schwab <schwab@linux-m68k.org> writes:

>> -*** New function 'directory-append'.
>> -This appends a file name to a directory name and returns the result.
>> +*** New function 'file-name-concat'.
>> +This appends path components to a directory name and returns the result.
>
> s/path/file name/

Fair enough; I shied away from the three-word compound, but I see now
that we have "(elisp) File Name Components".

diff --git a/etc/NEWS b/etc/NEWS
index 0d1abfd852..ce34236500 100644
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -3110,7 +3110,8 @@ The former is now declared obsolete.
 
 +++
 *** New function 'file-name-concat'.
-This appends path components to a directory name and returns the result.
+This appends file name components to a directory name and returns the
+result.
 
 +++
 *** New function 'split-string-shell-command'.


> This should probably emphasize the fact that it ignores file name
> handlers.

The NEWS entry specifically, or the docstring and/or info entry?



^ permalink raw reply related	[flat|nested] 16+ messages in thread

* Re: master e315544: ; * src/fileio.c (Fdirectory_append): Doc fix.
  2021-07-25  7:59           ` Michael Albinus
@ 2021-07-28 15:36             ` Lars Ingebrigtsen
  2021-07-28 17:13               ` Michael Albinus
  0 siblings, 1 reply; 16+ messages in thread
From: Lars Ingebrigtsen @ 2021-07-28 15:36 UTC (permalink / raw)
  To: Michael Albinus; +Cc: Eli Zaretskii, emacs-devel

Michael Albinus <michael.albinus@gmx.de> writes:

> So (file-name-concat x y) is roughly equivalent to
>
> (let (file-name-handler-alist)
>   (concat (file-name-as-directory x) y))

Yes, I think so.

> Perhaps this could be mentioned somewhere in the manual?

In the file-name-concat bit in the manual?  I'm not sure that would be
all that informative for the readers, really...  (But it would explain
things to people who did do a concat/file-name-as-directory thing before
this function existed, so perhaps mentioning this in NEWS would make
sense.)

> This would also precise, that leading slashes in COMPONENTS are kept.

I'm not sure why we'd mention anything about leading slashes here at
all?  Or slashes in the middle of components, for that matter:

(file-name-concat "/tmp/" "//foo////bar")
=> "/tmp///foo////bar"

-- 
(domestic pets only, the antidote for overdose, milk.)
   bloggy blog: http://lars.ingebrigtsen.no



^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: master e315544: ; * src/fileio.c (Fdirectory_append): Doc fix.
  2021-07-25 13:05                   ` Kévin Le Gouguec
@ 2021-07-28 15:39                     ` Lars Ingebrigtsen
  2021-07-28 17:28                       ` Michael Albinus
  0 siblings, 1 reply; 16+ messages in thread
From: Lars Ingebrigtsen @ 2021-07-28 15:39 UTC (permalink / raw)
  To: Kévin Le Gouguec
  Cc: Michael Albinus, Eli Zaretskii, Andreas Schwab, Stefan Monnier,
	emacs-devel

Kévin Le Gouguec <kevin.legouguec@gmail.com> writes:

> Fair enough; I shied away from the three-word compound, but I see now
> that we have "(elisp) File Name Components".

Thanks; applied to Emacs 28.

>> This should probably emphasize the fact that it ignores file name
>> handlers.
>
> The NEWS entry specifically, or the docstring and/or info entry?

I'm not entirely confident that it'll keep ignoring file name handlers,
so the less said the better.

-- 
(domestic pets only, the antidote for overdose, milk.)
   bloggy blog: http://lars.ingebrigtsen.no



^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: master e315544: ; * src/fileio.c (Fdirectory_append): Doc fix.
  2021-07-28 15:36             ` Lars Ingebrigtsen
@ 2021-07-28 17:13               ` Michael Albinus
  0 siblings, 0 replies; 16+ messages in thread
From: Michael Albinus @ 2021-07-28 17:13 UTC (permalink / raw)
  To: Lars Ingebrigtsen; +Cc: Eli Zaretskii, emacs-devel

Lars Ingebrigtsen <larsi@gnus.org> writes:

Hi Lars,

>> Perhaps this could be mentioned somewhere in the manual?
>
> In the file-name-concat bit in the manual?  I'm not sure that would be
> all that informative for the readers, really...  (But it would explain
> things to people who did do a concat/file-name-as-directory thing before
> this function existed, so perhaps mentioning this in NEWS would make
> sense.)

Well, I let it to you :-) I'm one of the guys doing concat/
file-name-as-directory thing before, and I know now what's up.

At least it shall be said somewhere that there's no file name handler
involved, as Andreas has mentioned already.

Best regards, Michael.



^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: master e315544: ; * src/fileio.c (Fdirectory_append): Doc fix.
  2021-07-28 15:39                     ` Lars Ingebrigtsen
@ 2021-07-28 17:28                       ` Michael Albinus
  2021-07-30 11:36                         ` Lars Ingebrigtsen
  0 siblings, 1 reply; 16+ messages in thread
From: Michael Albinus @ 2021-07-28 17:28 UTC (permalink / raw)
  To: Lars Ingebrigtsen
  Cc: Eli Zaretskii, emacs-devel, Andreas Schwab, Stefan Monnier,
	Kévin Le Gouguec

Lars Ingebrigtsen <larsi@gnus.org> writes:

Hi Lars,

>>> This should probably emphasize the fact that it ignores file name
>>> handlers.
>>
>> The NEWS entry specifically, or the docstring and/or info entry?
>
> I'm not entirely confident that it'll keep ignoring file name handlers,
> so the less said the better.

If you want file-name-concat being well optimized, you shall not use
file name handlers:

--8<---------------cut here---------------start------------->8---
(benchmark
 1000
 (let (file-name-handlers)
   (concat (file-name-as-directory "/tmp") "foo")))
=> "Elapsed time: -0.000004s"

(benchmark
 1000
 (let nil
   (concat (file-name-as-directory "/tmp") "foo")))
=> "Elapsed time: 0.000049s"
--8<---------------cut here---------------end--------------->8---

It's not heavy in terms of absolute time, but still a factor of 10.

Best regards, Michael.



^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: master e315544: ; * src/fileio.c (Fdirectory_append): Doc fix.
  2021-07-28 17:28                       ` Michael Albinus
@ 2021-07-30 11:36                         ` Lars Ingebrigtsen
  0 siblings, 0 replies; 16+ messages in thread
From: Lars Ingebrigtsen @ 2021-07-30 11:36 UTC (permalink / raw)
  To: Michael Albinus
  Cc: Eli Zaretskii, emacs-devel, Andreas Schwab, Stefan Monnier,
	Kévin Le Gouguec

Michael Albinus <michael.albinus@gmx.de> writes:

> It's not heavy in terms of absolute time, but still a factor of 10.

Yup.  I mean, I don't foresee any reason to add a file name handler to
this function, but they have a tendency to ... happen anyway.  :-)

-- 
(domestic pets only, the antidote for overdose, milk.)
   bloggy blog: http://lars.ingebrigtsen.no



^ permalink raw reply	[flat|nested] 16+ messages in thread

end of thread, other threads:[~2021-07-30 11:36 UTC | newest]

Thread overview: 16+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
     [not found] <20210724171858.1726.43078@vcs0.savannah.gnu.org>
     [not found] ` <20210724171900.4A26D20D0A@vcs0.savannah.gnu.org>
2021-07-24 18:39   ` master e315544: ; * src/fileio.c (Fdirectory_append): Doc fix Michael Albinus
2021-07-24 18:51     ` Lars Ingebrigtsen
2021-07-24 19:04       ` Michael Albinus
2021-07-25  5:19         ` Lars Ingebrigtsen
2021-07-25  5:27           ` Stefan Monnier
2021-07-25  6:54             ` Lars Ingebrigtsen
2021-07-25 10:01               ` Kévin Le Gouguec
2021-07-25 10:23                 ` Lars Ingebrigtsen
2021-07-25 11:50                 ` Andreas Schwab
2021-07-25 13:05                   ` Kévin Le Gouguec
2021-07-28 15:39                     ` Lars Ingebrigtsen
2021-07-28 17:28                       ` Michael Albinus
2021-07-30 11:36                         ` Lars Ingebrigtsen
2021-07-25  7:59           ` Michael Albinus
2021-07-28 15:36             ` Lars Ingebrigtsen
2021-07-28 17:13               ` Michael Albinus

Code repositories for project(s) associated with this public inbox

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

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).