emacs-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: user-directory: New library to find user {conf, data, state, ...} fi


From: Eli Zaretskii
Subject: Re: user-directory: New library to find user {conf, data, state, ...} files
Date: Mon, 08 Nov 2021 20:31:17 +0200

> From: Stefan Kangas <stefan@marxist.se>
> Date: Mon, 8 Nov 2021 16:26:15 +0100
> Cc: Stefan Monnier <monnier@iro.umontreal.ca>, Emacs developers 
> <emacs-devel@gnu.org>
> 
> > That is fine, but I'm not sure how you can achieve that goal and still
> > prefer the XDG directories.
> 
> This is the key point, indeed.
> 
> The new name will be preferred only when there is no old file.  If it
> exists, the old name will be used.  (This is based on how
> 'locate-user-emacs-file' works.)  See below.

"Old file" or "old directory"?  That's an important difference, IMO.

> > What do you mean by "falls back"?  To respect the current behavior,
> > the value of user-emacs-directory should be used in preference to
> > everything else.
> 
> Sorry, I should have said "use", not "falls back": it returns the
> value of 'user-emacs-directory' and does nothing else.
> 
> > But if we do that, then in which cases will the XDG
> > directories be used, since user-emacs-directory always exists and is
> > defined.
> 
> The 'config case is different from the 'cache, 'state and 'data cases,
> where the XDG directories will be preferred instead.

Which of the existing files we have in Emacs will be in one of the 3
latter directories?  Please search the tree for uses of
user-emacs-directory and tell me whether any of those will/should be
in one of those 3.  If none of them should be there, then perhaps my
problem is smaller than I feared, but I'd still want to talk about the
files which will be in those 3.  And also perhaps we should see if
some popular 3rd party packages place files under
user-emacs-directory, and consider those as well.

> 1. If "~/.emacs.d/old" exists, then we get:
> 
>     (user-file 'config "new" "old")
>     => "~/.emacs.d/old"
> 
>     (user-file 'cache "new" "old")
>     => "~/.emacs.d/old"

Not sure I understand why "new" and "old" are different strings.
Presumably, code which uses user-file will look for a particular
basename, so why do we need 2 separate arguments?

> 3. Finally, let's consider the bookmark case, where a user might be
> using the very old name "~/.emacs.bmk":
> 
>     (user-file 'data "bookmarks" (locate-user-emacs-file "bookmarks"
> ".emacs.bmk"))
>     => "~/.emacs.bmk"

And here I don't understand why the caller need to call
locate-user-emacs-file explicitly? why couldn't user-file call it
internally?

Hmm... actually, does the above mean that locate-user-emacs-file will
forever use the old semantics?  Perhaps it should call user-file
instead?



reply via email to

[Prev in Thread] Current Thread [Next in Thread]