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: Stefan Kangas
Subject: Re: user-directory: New library to find user {conf, data, state, ...} files
Date: Mon, 8 Nov 2021 23:05:57 -0800

Eli Zaretskii <eliz@gnu.org> writes:

>> 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.

The above applies to looking for the file name with `user-file'.

When looking for the directory, the new one will always be preferred.
The old name in all cases is just `user-emacs-directory', so it doesn't
make sense to look for it.

I expect that most application code will use `user-file' rather than
`user-directory'.

> 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.

I have looked over all of `user-emacs-directory' in our tree.  I found
some cases where 'locate-user-emacs-file' was not used, so I fixed them.
Now, if we filter out some irrelevant ones, I see this:

cache

  ./startup.el547:      (push (expand-file-name "eln-cache/"
user-emacs-directory)

data

  ./net/eww.el101:(defcustom eww-bookmarks-directory user-emacs-directory
  ./startup.el401:       (concat user-emacs-directory "auto-save.list/_s"))
  ./startup.el403:       (concat user-emacs-directory 
"auto-save-list/.saves-")))

state

  ./desktop.el259:(defcustom desktop-path (list user-emacs-directory "~")
  ./desktop.el1062:                                 user-emacs-directory)))
  ./desktop.el1255:             user-emacs-directory))))
  ./progmodes/gdb-mi.el654:(defcustom
gdb-window-configuration-directory user-emacs-directory

(The "desktop directory" should probably just be a "desktop file".
Similarly for the eww bookmarks and the gdb variable window
configuration.  But that's a separate issue.)

>> 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?

The handling of them is currently different: "new" (NAME) is only
considered in the new directory, while "old" (OLD-NAME) is considered in
the new directory and in `user-emacs-directory'.

If we don't need to make that distinction, this can indeed be simplified
to just one argument.  I'm starting to lean towards the conclusion that
it is indeed okay to simplify this.

>> 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?

I have made a simplification on the branch, so the above is now:

    (user-file 'data "bookmarks" "bookmarks" "~/.emacs.bmk")

With the further simplification of NAME and OLD-NAME discussed above,
this would be just:

    (user-file 'data "bookmarks" "~/.emacs.bmk")

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

Sure, that is definitely something we could consider.  The main idea
here is that application code should use `user-file' directly though, to
be more explicit about what kind of file it is that they want to store.



reply via email to

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