* Re: master f8fed41 2/3: image-dired: Improve XDG compliance @ 2021-10-25 13:14 Eli Zaretskii 2021-10-25 16:14 ` Philip Kaludercic ` (2 more replies) 0 siblings, 3 replies; 63+ messages in thread From: Eli Zaretskii @ 2021-10-25 13:14 UTC (permalink / raw) To: Stefan Kangas; +Cc: emacs-devel I can't say I'm happy with creeping of XDG specifics into our application code. It's too platform-specific, so it gets in the way of either adhering to platform-specific directories on each platform, or having completely platform-independent identical directories on all platforms. Both of these alternatives could be useful, but XDG provides neither: it only caters to a single platform, and leaves the rest to manual coding. Here's the result: (defcustom image-dired-main-image-directory (or (xdg-user-dir "PICTURES") "~/pics/") Why "~/pics/"? What platform behaves like that? Probably none. XDG is also prone to fashion changes. What will we do when it goes out of fashion, and we have dozens of xdg-user-dir calls in our application code? change all of them to some latest desktop fashion? To me, xdg.el was supposed to be a platform-specific layer on which to base platform-independent abstractions. Those abstractions should have other platform-specific layers for other platforms, and the abstractions should then be used in application code. So when fashions change on this or that platform, we need to change only the code that implements the abstractions. Our handling of XDG in startup.el to find the user's Emacs home directory fits this description; code like the above does not. Can we agree not to use xdg.el in application code, and instead develop those abstractions and start using them? For example, how about having a function user-pics-directory, which will return the appropriate file name for the underlying platform? Doing that will not diminish our support for XDG (as long as it lasts), but will allow us to have application code XDG-clean, so to speak. OK? ^ permalink raw reply [flat|nested] 63+ messages in thread
* Re: master f8fed41 2/3: image-dired: Improve XDG compliance 2021-10-25 13:14 master f8fed41 2/3: image-dired: Improve XDG compliance Eli Zaretskii @ 2021-10-25 16:14 ` Philip Kaludercic 2021-10-25 16:39 ` Eli Zaretskii 2021-10-25 17:48 ` Stefan Monnier 2021-10-26 10:25 ` Default for image-dired-main-image-directory Stefan Kangas 2021-10-26 14:01 ` master f8fed41 2/3: image-dired: Improve XDG compliance Stefan Kangas 2 siblings, 2 replies; 63+ messages in thread From: Philip Kaludercic @ 2021-10-25 16:14 UTC (permalink / raw) To: Eli Zaretskii; +Cc: Stefan Kangas, emacs-devel Eli Zaretskii <eliz@gnu.org> writes: > XDG is also prone to fashion changes. What will we do when it goes > out of fashion, and we have dozens of xdg-user-dir calls in our > application code? change all of them to some latest desktop fashion? What do you mean by this? Shouldn't XDG as a specification prevent this from being an issue? -- Philip Kaludercic ^ permalink raw reply [flat|nested] 63+ messages in thread
* Re: master f8fed41 2/3: image-dired: Improve XDG compliance 2021-10-25 16:14 ` Philip Kaludercic @ 2021-10-25 16:39 ` Eli Zaretskii 2021-10-25 17:52 ` Philip Kaludercic 2021-10-25 17:48 ` Stefan Monnier 1 sibling, 1 reply; 63+ messages in thread From: Eli Zaretskii @ 2021-10-25 16:39 UTC (permalink / raw) To: Philip Kaludercic; +Cc: stefan, emacs-devel > From: Philip Kaludercic <philipk@posteo.net> > Cc: Stefan Kangas <stefan@marxist.se>, emacs-devel@gnu.org > Date: Mon, 25 Oct 2021 16:14:33 +0000 > > Eli Zaretskii <eliz@gnu.org> writes: > > > XDG is also prone to fashion changes. What will we do when it goes > > out of fashion, and we have dozens of xdg-user-dir calls in our > > application code? change all of them to some latest desktop fashion? > > What do you mean by this? Shouldn't XDG as a specification prevent this > from being an issue? Sorry, I don't understand the second question. What can "XDG as a specification" prevent? It cannot prevent XDG ceasing to be the fashion, that's entirely out of control of any specification. Fashions some and go, and when they come, users rightfully expect us to support the latest fashions, and we generally comply. ^ permalink raw reply [flat|nested] 63+ messages in thread
* Re: master f8fed41 2/3: image-dired: Improve XDG compliance 2021-10-25 16:39 ` Eli Zaretskii @ 2021-10-25 17:52 ` Philip Kaludercic 2021-10-25 18:30 ` Eli Zaretskii 2021-10-26 2:07 ` Po Lu 0 siblings, 2 replies; 63+ messages in thread From: Philip Kaludercic @ 2021-10-25 17:52 UTC (permalink / raw) To: Eli Zaretskii; +Cc: stefan, emacs-devel Eli Zaretskii <eliz@gnu.org> writes: >> From: Philip Kaludercic <philipk@posteo.net> >> Cc: Stefan Kangas <stefan@marxist.se>, emacs-devel@gnu.org >> Date: Mon, 25 Oct 2021 16:14:33 +0000 >> >> Eli Zaretskii <eliz@gnu.org> writes: >> >> > XDG is also prone to fashion changes. What will we do when it goes >> > out of fashion, and we have dozens of xdg-user-dir calls in our >> > application code? change all of them to some latest desktop fashion? >> >> What do you mean by this? Shouldn't XDG as a specification prevent this >> from being an issue? > > Sorry, I don't understand the second question. What can "XDG as a > specification" prevent? I misunderstood what you meant by fashion, assuming you meant how XDG was implemented was a matter of fashion. > It cannot prevent XDG ceasing to be the fashion, that's entirely out > of control of any specification. Fashions some and go, and when they > come, users rightfully expect us to support the latest fashions, and > we generally comply. If anything, I think XDG is becoming more and more popular since 2003, and I wouldn't know of any other serious contender to replace XDG. Generally I'd agree that it would be better to provide better support for the problem XDG solves, without having to use XDG directly for cross-platform compliance, but XDG is certainly preferable to hard-coding directories as is still done in Emacs. -- Philip Kaludercic ^ permalink raw reply [flat|nested] 63+ messages in thread
* Re: master f8fed41 2/3: image-dired: Improve XDG compliance 2021-10-25 17:52 ` Philip Kaludercic @ 2021-10-25 18:30 ` Eli Zaretskii 2021-10-26 10:24 ` Stefan Kangas 2021-10-26 16:47 ` Philip Kaludercic 2021-10-26 2:07 ` Po Lu 1 sibling, 2 replies; 63+ messages in thread From: Eli Zaretskii @ 2021-10-25 18:30 UTC (permalink / raw) To: Philip Kaludercic; +Cc: stefan, emacs-devel > From: Philip Kaludercic <philipk@posteo.net> > Cc: stefan@marxist.se, emacs-devel@gnu.org > Date: Mon, 25 Oct 2021 17:52:56 +0000 > > If anything, I think XDG is becoming more and more popular since 2003, > and I wouldn't know of any other serious contender to replace XDG. Yes, XDG is the current fashion. As were the ones before it. > Generally I'd agree that it would be better to provide better support > for the problem XDG solves, without having to use XDG directly for > cross-platform compliance, but XDG is certainly preferable to > hard-coding directories as is still done in Emacs. I wasn't suggesting we hard-code directories, I suggested something quite different. ^ permalink raw reply [flat|nested] 63+ messages in thread
* Re: master f8fed41 2/3: image-dired: Improve XDG compliance 2021-10-25 18:30 ` Eli Zaretskii @ 2021-10-26 10:24 ` Stefan Kangas 2021-10-26 13:09 ` Eli Zaretskii 2021-10-26 16:47 ` Philip Kaludercic 1 sibling, 1 reply; 63+ messages in thread From: Stefan Kangas @ 2021-10-26 10:24 UTC (permalink / raw) To: Eli Zaretskii; +Cc: Philip Kaludercic, Emacs developers Eli Zaretskii <eliz@gnu.org> writes: > > If anything, I think XDG is becoming more and more popular since 2003, > > and I wouldn't know of any other serious contender to replace XDG. > > Yes, XDG is the current fashion. As were the ones before it. Which ones would that be? ^ permalink raw reply [flat|nested] 63+ messages in thread
* Re: master f8fed41 2/3: image-dired: Improve XDG compliance 2021-10-26 10:24 ` Stefan Kangas @ 2021-10-26 13:09 ` Eli Zaretskii 2021-10-26 13:28 ` Stefan Kangas 0 siblings, 1 reply; 63+ messages in thread From: Eli Zaretskii @ 2021-10-26 13:09 UTC (permalink / raw) To: Stefan Kangas; +Cc: philipk, emacs-devel > From: Stefan Kangas <stefan@marxist.se> > Date: Tue, 26 Oct 2021 12:24:11 +0200 > Cc: Philip Kaludercic <philipk@posteo.net>, Emacs developers <emacs-devel@gnu.org> > > Eli Zaretskii <eliz@gnu.org> writes: > > > > If anything, I think XDG is becoming more and more popular since 2003, > > > and I wouldn't know of any other serious contender to replace XDG. > > > > Yes, XDG is the current fashion. As were the ones before it. > > Which ones would that be? Is it important? ^ permalink raw reply [flat|nested] 63+ messages in thread
* Re: master f8fed41 2/3: image-dired: Improve XDG compliance 2021-10-26 13:09 ` Eli Zaretskii @ 2021-10-26 13:28 ` Stefan Kangas 2021-10-26 14:11 ` Eli Zaretskii 0 siblings, 1 reply; 63+ messages in thread From: Stefan Kangas @ 2021-10-26 13:28 UTC (permalink / raw) To: Eli Zaretskii; +Cc: Philip K., Emacs developers Eli Zaretskii <eliz@gnu.org> writes: > > > Yes, XDG is the current fashion. As were the ones before it. > > > > Which ones would that be? > > Is it important? It is not very important to me, but it seems crucial for the argument that the XDG Base Directory Specification is merely "the current fashion". AFAIK, there was no standard before the XDG BDS which it could replace, there exists no competing standard, and so far there has been no standard proposed to replace it. Is that wrong? ^ permalink raw reply [flat|nested] 63+ messages in thread
* Re: master f8fed41 2/3: image-dired: Improve XDG compliance 2021-10-26 13:28 ` Stefan Kangas @ 2021-10-26 14:11 ` Eli Zaretskii 2021-10-26 14:35 ` Stefan Kangas 0 siblings, 1 reply; 63+ messages in thread From: Eli Zaretskii @ 2021-10-26 14:11 UTC (permalink / raw) To: Stefan Kangas; +Cc: philipk, emacs-devel > From: Stefan Kangas <stefan@marxist.se> > Date: Tue, 26 Oct 2021 15:28:27 +0200 > Cc: "Philip K." <philipk@posteo.net>, Emacs developers <emacs-devel@gnu.org> > > AFAIK, there was no standard before the XDG BDS which it could > replace, there exists no competing standard, and so far there has been > no standard proposed to replace it. Is that wrong? The original standard was to use files that begin with a dot in the user's home directory, with system-wide defaults in /etc or /usr/etc. Then came the standard (copy-cat from Windows) that each type of files had its own directory under the home directory -- so we have ~/Pictures, ~/Documents, ~/Desktop, ~/Mail, etc. And now we have XDG. I'm sure they will invent something else in a few years, which will of course be the best thing since sliced bread. ^ permalink raw reply [flat|nested] 63+ messages in thread
* Re: master f8fed41 2/3: image-dired: Improve XDG compliance 2021-10-26 14:11 ` Eli Zaretskii @ 2021-10-26 14:35 ` Stefan Kangas 2021-10-27 4:37 ` Po Lu 0 siblings, 1 reply; 63+ messages in thread From: Stefan Kangas @ 2021-10-26 14:35 UTC (permalink / raw) To: Eli Zaretskii; +Cc: Philip K., Emacs developers Eli Zaretskii <eliz@gnu.org> writes: > The original standard was to use files that begin with a dot in the > user's home directory, with system-wide defaults in /etc or /usr/etc. I'd say that ad-hoc mess is just what happens organically if you have no standard. But sure, that was all we got from Unix, so I guess that I will have to agree that we have seen two standards since 1969. > I'm sure they will invent something else in a few years, which will of > course be the best thing since sliced bread. Well, sure. OTOH, it took 15 years for us to warm up to the XDG BDS enough to introduce xdg.el - and it is still at least somewhat controversial - so I expect that we will not see any rush to implement the new standard either. ;-) ^ permalink raw reply [flat|nested] 63+ messages in thread
* Re: master f8fed41 2/3: image-dired: Improve XDG compliance 2021-10-26 14:35 ` Stefan Kangas @ 2021-10-27 4:37 ` Po Lu 0 siblings, 0 replies; 63+ messages in thread From: Po Lu @ 2021-10-27 4:37 UTC (permalink / raw) To: Stefan Kangas; +Cc: Eli Zaretskii, Philip K., Emacs developers Stefan Kangas <stefan@marxist.se> writes: > I'd say that ad-hoc mess is just what happens organically if you have > no standard. But sure, that was all we got from Unix, so I guess that > I will have to agree that we have seen two standards since 1969. There was the CDE, and all of its associated conventions, that Freedesktop was at least partially created to compete with. And aside from that, I'm told Sun's Open Windows also had its own set of quirks and conventions. ^ permalink raw reply [flat|nested] 63+ messages in thread
* Re: master f8fed41 2/3: image-dired: Improve XDG compliance 2021-10-25 18:30 ` Eli Zaretskii 2021-10-26 10:24 ` Stefan Kangas @ 2021-10-26 16:47 ` Philip Kaludercic 1 sibling, 0 replies; 63+ messages in thread From: Philip Kaludercic @ 2021-10-26 16:47 UTC (permalink / raw) To: Eli Zaretskii; +Cc: stefan, emacs-devel Eli Zaretskii <eliz@gnu.org> writes: >> From: Philip Kaludercic <philipk@posteo.net> >> Cc: stefan@marxist.se, emacs-devel@gnu.org >> Date: Mon, 25 Oct 2021 17:52:56 +0000 >> >> If anything, I think XDG is becoming more and more popular since 2003, >> and I wouldn't know of any other serious contender to replace XDG. > > Yes, XDG is the current fashion. As were the ones before it. What time frames are we talking about? Fashion can be anything that remains popular for only a few months up until something that dominates the scene for years or decades. XDG appears to lean towards the latter. >> Generally I'd agree that it would be better to provide better support >> for the problem XDG solves, without having to use XDG directly for >> cross-platform compliance, but XDG is certainly preferable to >> hard-coding directories as is still done in Emacs. > > I wasn't suggesting we hard-code directories, I suggested something > quite different. I understood that, my point was that using XDG is preferable to that, and anything that abstracts over XDG might be even better. -- Philip Kaludercic ^ permalink raw reply [flat|nested] 63+ messages in thread
* Re: master f8fed41 2/3: image-dired: Improve XDG compliance 2021-10-25 17:52 ` Philip Kaludercic 2021-10-25 18:30 ` Eli Zaretskii @ 2021-10-26 2:07 ` Po Lu 1 sibling, 0 replies; 63+ messages in thread From: Po Lu @ 2021-10-26 2:07 UTC (permalink / raw) To: Philip Kaludercic; +Cc: Eli Zaretskii, stefan, emacs-devel Philip Kaludercic <philipk@posteo.net> writes: > If anything, I think XDG is becoming more and more popular since 2003, > and I wouldn't know of any other serious contender to replace XDG. That is what we used to think about the "standards" of CDE (DT) and Motif. So these standards are definitely subject to changes of fashion. For instance, many Freedesktop people already consider X-Windows legacy software, and are in the process of replacing it with Wayland. ^ permalink raw reply [flat|nested] 63+ messages in thread
* Re: master f8fed41 2/3: image-dired: Improve XDG compliance 2021-10-25 16:14 ` Philip Kaludercic 2021-10-25 16:39 ` Eli Zaretskii @ 2021-10-25 17:48 ` Stefan Monnier 2021-10-25 17:55 ` Philip Kaludercic 1 sibling, 1 reply; 63+ messages in thread From: Stefan Monnier @ 2021-10-25 17:48 UTC (permalink / raw) To: Philip Kaludercic; +Cc: Eli Zaretskii, Stefan Kangas, emacs-devel Philip Kaludercic [2021-10-25 16:14:33] wrote: > Eli Zaretskii <eliz@gnu.org> writes: >> XDG is also prone to fashion changes. What will we do when it goes >> out of fashion, and we have dozens of xdg-user-dir calls in our >> application code? change all of them to some latest desktop fashion? > What do you mean by this? The YEH spec from the Wayland++ guys is quite different, for one. > Shouldn't XDG as a specification prevent this > from being an issue? It did back when people cared about it, but freedesktop.org has been inaccesible for a few years now, Stefan from the future ^ permalink raw reply [flat|nested] 63+ messages in thread
* Re: master f8fed41 2/3: image-dired: Improve XDG compliance 2021-10-25 17:48 ` Stefan Monnier @ 2021-10-25 17:55 ` Philip Kaludercic 2021-10-25 17:58 ` Gregory Heytings 2021-10-25 18:04 ` Stefan Monnier 0 siblings, 2 replies; 63+ messages in thread From: Philip Kaludercic @ 2021-10-25 17:55 UTC (permalink / raw) To: Stefan Monnier; +Cc: Eli Zaretskii, Stefan Kangas, emacs-devel Stefan Monnier <monnier@iro.umontreal.ca> writes: > Philip Kaludercic [2021-10-25 16:14:33] wrote: >> Eli Zaretskii <eliz@gnu.org> writes: >>> XDG is also prone to fashion changes. What will we do when it goes >>> out of fashion, and we have dozens of xdg-user-dir calls in our >>> application code? change all of them to some latest desktop fashion? >> What do you mean by this? > > The YEH spec from the Wayland++ guys is quite different, for one. I have never heard of this, nor can I find any information about YEH. Do you have a link or some other pointer? -- Philip Kaludercic ^ permalink raw reply [flat|nested] 63+ messages in thread
* Re: master f8fed41 2/3: image-dired: Improve XDG compliance 2021-10-25 17:55 ` Philip Kaludercic @ 2021-10-25 17:58 ` Gregory Heytings 2021-10-25 18:04 ` Stefan Monnier 1 sibling, 0 replies; 63+ messages in thread From: Gregory Heytings @ 2021-10-25 17:58 UTC (permalink / raw) To: Philip Kaludercic Cc: Eli Zaretskii, Stefan Kangas, Stefan Monnier, emacs-devel >>>> XDG is also prone to fashion changes. What will we do when it goes >>>> out of fashion, and we have dozens of xdg-user-dir calls in our >>>> application code? change all of them to some latest desktop fashion? >>> >>> What do you mean by this? >> >> The YEH spec from the Wayland++ guys is quite different, for one. > > I have never heard of this, nor can I find any information about YEH. Do > you have a link or some other pointer? > Read the signature: "Stefan from the future" ;-) ^ permalink raw reply [flat|nested] 63+ messages in thread
* Re: master f8fed41 2/3: image-dired: Improve XDG compliance 2021-10-25 17:55 ` Philip Kaludercic 2021-10-25 17:58 ` Gregory Heytings @ 2021-10-25 18:04 ` Stefan Monnier 1 sibling, 0 replies; 63+ messages in thread From: Stefan Monnier @ 2021-10-25 18:04 UTC (permalink / raw) To: Philip Kaludercic; +Cc: Eli Zaretskii, Stefan Kangas, emacs-devel Philip Kaludercic [2021-10-25 17:55:33] wrote: > Stefan Monnier <monnier@iro.umontreal.ca> writes: >> Philip Kaludercic [2021-10-25 16:14:33] wrote: >>> Eli Zaretskii <eliz@gnu.org> writes: >>>> XDG is also prone to fashion changes. What will we do when it goes >>>> out of fashion, and we have dozens of xdg-user-dir calls in our >>>> application code? change all of them to some latest desktop fashion? >>> What do you mean by this? >> The YEH spec from the Wayland++ guys is quite different, for one. > I have never heard of this, nor can I find any information about YEH. My Gnus from the future inferred those links from me, as usual. Maybe you're stuck with an old MUA from 2021 or so? Stefan ^ permalink raw reply [flat|nested] 63+ messages in thread
* Default for image-dired-main-image-directory 2021-10-25 13:14 master f8fed41 2/3: image-dired: Improve XDG compliance Eli Zaretskii 2021-10-25 16:14 ` Philip Kaludercic @ 2021-10-26 10:25 ` Stefan Kangas 2021-10-26 13:12 ` Eli Zaretskii 2021-10-26 14:01 ` master f8fed41 2/3: image-dired: Improve XDG compliance Stefan Kangas 2 siblings, 1 reply; 63+ messages in thread From: Stefan Kangas @ 2021-10-26 10:25 UTC (permalink / raw) To: Eli Zaretskii; +Cc: Emacs developers Eli Zaretskii <eliz@gnu.org> writes: > (defcustom image-dired-main-image-directory > (or (xdg-user-dir "PICTURES") "~/pics/") > > Why "~/pics/"? What platform behaves like that? Probably none. (I will reply to your other points separately, this is a bit of a tangent.) That's the old default, so if you don't use XDG this code will behave exactly as before. So this is a step forward on GNU/Linux, and everyone else is unaffected (unless they have specifically opted in). We could use something more reasonable than "~/pics" of course, which just seems to be what someone happened to be using at some point. I suggest "~/Pictures", which is at least used by XDG. ^ permalink raw reply [flat|nested] 63+ messages in thread
* Re: Default for image-dired-main-image-directory 2021-10-26 10:25 ` Default for image-dired-main-image-directory Stefan Kangas @ 2021-10-26 13:12 ` Eli Zaretskii 2021-10-26 13:42 ` Ihor Radchenko 2021-10-26 14:14 ` Default for image-dired-main-image-directory Stefan Kangas 0 siblings, 2 replies; 63+ messages in thread From: Eli Zaretskii @ 2021-10-26 13:12 UTC (permalink / raw) To: Stefan Kangas; +Cc: emacs-devel > From: Stefan Kangas <stefan@marxist.se> > Date: Tue, 26 Oct 2021 12:25:51 +0200 > Cc: Emacs developers <emacs-devel@gnu.org> > > Eli Zaretskii <eliz@gnu.org> writes: > > > (defcustom image-dired-main-image-directory > > (or (xdg-user-dir "PICTURES") "~/pics/") > > > > Why "~/pics/"? What platform behaves like that? Probably none. > > (I will reply to your other points separately, this is a bit of a tangent.) > > That's the old default, so if you don't use XDG this code will behave > exactly as before. So this is a step forward on GNU/Linux, and > everyone else is unaffected (unless they have specifically opted in). It is a step forward for GNU/Linux, maybe, but it is a step back for Emacs, for the reasons I explained. > We could use something more reasonable than "~/pics" of course, which > just seems to be what someone happened to be using at some point. > > I suggest "~/Pictures", which is at least used by XDG. How about if we DTRT right away, and provide reasonable defaults for all the non-XDG platforms (assuming we prefer platform-specific defaults in this particular case)? I see no real reason to install half-solutions. ^ permalink raw reply [flat|nested] 63+ messages in thread
* Re: Default for image-dired-main-image-directory 2021-10-26 13:12 ` Eli Zaretskii @ 2021-10-26 13:42 ` Ihor Radchenko 2021-10-26 14:15 ` Eli Zaretskii 2021-10-26 14:14 ` Default for image-dired-main-image-directory Stefan Kangas 1 sibling, 1 reply; 63+ messages in thread From: Ihor Radchenko @ 2021-10-26 13:42 UTC (permalink / raw) To: Eli Zaretskii; +Cc: Stefan Kangas, emacs-devel Eli Zaretskii <eliz@gnu.org> writes: > How about if we DTRT right away, and provide reasonable defaults for > all the non-XDG platforms (assuming we prefer platform-specific > defaults in this particular case)? I see no real reason to install > half-solutions. FYI, there is no-littering package [1] trying to provide unified directory structure within .emacs.d. It follows the same idea of unified set of abstract directory variables for different types of data: - etc-directory - var-directory Essentially, it is similar to XDG directory set, but all the directories are inside .emacs.d by default. I think that putting things in a reasonably-names directories inside .emacs.d can be a meaningful default, unless there is an OS-specific standard (XDG on Linux, de-facto standard on Windows or Mac). The question is what kind of directories are actually useful within Emacs. [1] https://github.com/emacscollective/no-littering Best, Ihor ^ permalink raw reply [flat|nested] 63+ messages in thread
* Re: Default for image-dired-main-image-directory 2021-10-26 13:42 ` Ihor Radchenko @ 2021-10-26 14:15 ` Eli Zaretskii 2021-10-26 14:22 ` Stefan Kangas 2021-10-26 14:58 ` Ihor Radchenko 0 siblings, 2 replies; 63+ messages in thread From: Eli Zaretskii @ 2021-10-26 14:15 UTC (permalink / raw) To: Ihor Radchenko; +Cc: stefan, emacs-devel > From: Ihor Radchenko <yantar92@gmail.com> > Cc: Stefan Kangas <stefan@marxist.se>, emacs-devel@gnu.org > Date: Tue, 26 Oct 2021 21:42:22 +0800 > > Eli Zaretskii <eliz@gnu.org> writes: > > > How about if we DTRT right away, and provide reasonable defaults for > > all the non-XDG platforms (assuming we prefer platform-specific > > defaults in this particular case)? I see no real reason to install > > half-solutions. > > FYI, there is no-littering package [1] trying to provide unified > directory structure within .emacs.d. It follows the same idea of > unified set of abstract directory variables for different types of data: > - etc-directory > - var-directory > > Essentially, it is similar to XDG directory set, but all the directories > are inside .emacs.d by default. That's a different philosophy, and since it contradicts XDG, which many people want, I don't think we can go that way, except as an opt-in feature (which will then become a maintenance burden, as it will be yet another, third, set of defaults). > I think that putting things in a reasonably-names directories inside > .emacs.d can be a meaningful default, unless there is an OS-specific > standard (XDG on Linux, de-facto standard on Windows or Mac). Yes, every modern platform has standardized places for this stuff. If we decided to support XDG on GNU/Linux, it follows that we prefer platform-specific behavior, not identical standard directories on all platforms. So we need something like system-config.el, which would use xdg.el for XDG platforms, and something else for the rest. ^ permalink raw reply [flat|nested] 63+ messages in thread
* Re: Default for image-dired-main-image-directory 2021-10-26 14:15 ` Eli Zaretskii @ 2021-10-26 14:22 ` Stefan Kangas 2021-10-26 14:58 ` Ihor Radchenko 1 sibling, 0 replies; 63+ messages in thread From: Stefan Kangas @ 2021-10-26 14:22 UTC (permalink / raw) To: Eli Zaretskii; +Cc: Ihor Radchenko, Emacs developers Eli Zaretskii <eliz@gnu.org> writes: > That's a different philosophy, and since it contradicts XDG, which > many people want, I don't think we can go that way, except as an > opt-in feature (which will then become a maintenance burden, as it > will be yet another, third, set of defaults). Exactly. I think "no-litter" solves the problem of "how do I keep all my stuff in .emacs.d without making too much of a mess of it". It doesn't do a bad job at solving that problem, but it is IMO exactly the wrong problem to solve. > So we need something like system-config.el, which would use xdg.el for > XDG platforms, and something else for the rest. Sounds good to me. ^ permalink raw reply [flat|nested] 63+ messages in thread
* Re: Default for image-dired-main-image-directory 2021-10-26 14:15 ` Eli Zaretskii 2021-10-26 14:22 ` Stefan Kangas @ 2021-10-26 14:58 ` Ihor Radchenko 2021-10-26 16:15 ` Eli Zaretskii 1 sibling, 1 reply; 63+ messages in thread From: Ihor Radchenko @ 2021-10-26 14:58 UTC (permalink / raw) To: Eli Zaretskii; +Cc: stefan, emacs-devel Eli Zaretskii <eliz@gnu.org> writes: >> Essentially, it is similar to XDG directory set, but all the directories >> are inside .emacs.d by default. > > That's a different philosophy, and since it contradicts XDG, which > many people want, I don't think we can go that way, except as an > opt-in feature (which will then become a maintenance burden, as it > will be yet another, third, set of defaults). Not necessarily. no-littering provides a unified directory structure to be used by other packages. Yes, it defaults to structure inside .emacs.d (and thus do not need to bother with OS-specific conventions), but that's not required: (defvar no-littering-etc-directory (expand-file-name (convert-standard-filename "etc/") user-emacs-directory) "The directory where packages place their configuration files. This variable has to be set before `no-littering' is loaded.") From point of view of a package author, I usually have difficulty deciding where to put files. Package install dir? Directly into .emacs.d? User home dir? I would prefer to have a convention about default dirs. I would prefer Emacs to handle variations of directory structure in different OS. no-littering proposes a set of Emacs-specific conventions about where to put package files: >> (A) File names >> >> File names are based on the name of the respective Emacs lisp variables >> and the name of the respective Emacs package. >> >> The name of the respective Emacs package should serve as the prefix of >> the file name, unless the file is in a subdirectory in which case the >> name of the subdirectory serves as the prefix. >> >> If the name of the package and the prefix of the variable do not match, >> then we prefer the name of the package. >> >> If the name of a path variable ends with -file, -default-file, >> -directory, -default-directory, or something similar, then that suffix >> is usually dropped from the file name. >> >> If applicable, the appropriate extension is added to the file name so >> that files are visited using the appropriate major-modes and also to >> provide a hint about the kind of data stored in the file. E.g. if a file >> contains an S-expression, then the suffix should be *.el. >> >> B) File location and subdirectories If a package has only one data file, >> then that is usually placed in no-littering-var-directory itself. >> Likewise if a package has only one config file, then that is placed in >> no-littering-etc-directory itself. >> >> If a package has multiple data (or config files), then those files are >> placed in a subdirectory of no-littering-var-directory (or >> no-littering-etc-directory). >> >> If a subdirectory is used for a package's data (or config) file >> variables, then the name of the directory should match the name of the >> package in most cases. The subdirectory name may serve as the package >> prefix of the file name. >> >> If a package provides a "framework" for other packages to use, then we >> may reuse its directories for other packages that make use of that >> framework or otherwise "extend" the "main package". E.g. we place all >> helm related files in helm/. >> >> If a package only defines a single variable that specifies a data (or >> config) directory, then the directory name should nevertheless be just >> the package name. E.g. the path used for sx-cache-directory from the sx >> package is sx/cache/, not sx-cache/. >> >> However if the name of the directory variable implies that the package >> won't ever define any data (or config) files that won't be placed in >> that directory, then we use a top-level directory. E.g. when the name of >> the variable is <package>-directory, in which case we would use just >> <package>/ as the path. Best, Ihor ^ permalink raw reply [flat|nested] 63+ messages in thread
* Re: Default for image-dired-main-image-directory 2021-10-26 14:58 ` Ihor Radchenko @ 2021-10-26 16:15 ` Eli Zaretskii 2021-10-27 13:04 ` Ihor Radchenko 0 siblings, 1 reply; 63+ messages in thread From: Eli Zaretskii @ 2021-10-26 16:15 UTC (permalink / raw) To: Ihor Radchenko; +Cc: stefan, emacs-devel > From: Ihor Radchenko <yantar92@gmail.com> > Cc: stefan@marxist.se, emacs-devel@gnu.org > Date: Tue, 26 Oct 2021 22:58:09 +0800 > > Eli Zaretskii <eliz@gnu.org> writes: > > >> Essentially, it is similar to XDG directory set, but all the directories > >> are inside .emacs.d by default. > > > > That's a different philosophy, and since it contradicts XDG, which > > many people want, I don't think we can go that way, except as an > > opt-in feature (which will then become a maintenance burden, as it > > will be yet another, third, set of defaults). > > Not necessarily. no-littering provides a unified directory structure to > be used by other packages. Yes, it defaults to structure inside .emacs.d > (and thus do not need to bother with OS-specific conventions), but > that's not required: You say "not necessarily", but then proceed to describe details that actually agree with what I said. It is fine to provide such a feature, I'm just saying that XDG requires different directories, and so these two arrangements contradict each other. ^ permalink raw reply [flat|nested] 63+ messages in thread
* Re: Default for image-dired-main-image-directory 2021-10-26 16:15 ` Eli Zaretskii @ 2021-10-27 13:04 ` Ihor Radchenko 2021-10-27 13:26 ` Eli Zaretskii 0 siblings, 1 reply; 63+ messages in thread From: Ihor Radchenko @ 2021-10-27 13:04 UTC (permalink / raw) To: Eli Zaretskii; +Cc: stefan, emacs-devel Eli Zaretskii <eliz@gnu.org> writes: > You say "not necessarily", but then proceed to describe details that > actually agree with what I said. > > It is fine to provide such a feature, I'm just saying that XDG > requires different directories, and so these two arrangements > contradict each other. Probably I misunderstood what XDG stadard describes. I have read the XDG description at freedesktop.org [1]. My understanding is that XDG does not provide any recommendations on the file naming and subdirectories inside home, config, state, bin, data, runtime, and cache dirs. XDG only prescribes using the listed dirs to store different types of data. From a Emacs package perspective, just following XDG is still not clear enough. Should all Emacs packages store data inside "XDG_DIR/emacs" subdirectory or maybe "XDG_DIR/emacs/package-name"? What should be the file names? The details I quoted are providing a possible clarification about these kinds of questions, except that no-littering assumes XDG_DIR=.emacs.d. [1] https://specifications.freedesktop.org/basedir-spec/basedir-spec-latest.html Best, Ihor ^ permalink raw reply [flat|nested] 63+ messages in thread
* Re: Default for image-dired-main-image-directory 2021-10-27 13:04 ` Ihor Radchenko @ 2021-10-27 13:26 ` Eli Zaretskii 2021-10-27 13:42 ` Ihor Radchenko 0 siblings, 1 reply; 63+ messages in thread From: Eli Zaretskii @ 2021-10-27 13:26 UTC (permalink / raw) To: Ihor Radchenko; +Cc: stefan, emacs-devel > From: Ihor Radchenko <yantar92@gmail.com> > Cc: stefan@marxist.se, emacs-devel@gnu.org > Date: Wed, 27 Oct 2021 21:04:40 +0800 > > Eli Zaretskii <eliz@gnu.org> writes: > > > You say "not necessarily", but then proceed to describe details that > > actually agree with what I said. > > > > It is fine to provide such a feature, I'm just saying that XDG > > requires different directories, and so these two arrangements > > contradict each other. > > Probably I misunderstood what XDG stadard describes. I have read the XDG > description at freedesktop.org [1]. My understanding is that XDG does > not provide any recommendations on the file naming and subdirectories > inside home, config, state, bin, data, runtime, and cache dirs. XDG only > prescribes using the listed dirs to store different types of data. Sure, but none of those is called .emacs.d or anything close. > >From a Emacs package perspective, just following XDG is still not clear > enough. Should all Emacs packages store data inside "XDG_DIR/emacs" > subdirectory or maybe "XDG_DIR/emacs/package-name"? What should be the > file names? The details I quoted are providing a possible clarification > about these kinds of questions, except that no-littering assumes > XDG_DIR=.emacs.d. Look at xdg.el and at startup.el where we already use XDG-compliant directories. What you say above is neither compliant with XDG nor with any current Emacs convention; it's an entirely new arrangement. I think that's one too many. ^ permalink raw reply [flat|nested] 63+ messages in thread
* Re: Default for image-dired-main-image-directory 2021-10-27 13:26 ` Eli Zaretskii @ 2021-10-27 13:42 ` Ihor Radchenko 2021-10-27 16:53 ` XDG config dir [Was: Re: Default for image-dired-main-image-directory] Alexandre Garreau 0 siblings, 1 reply; 63+ messages in thread From: Ihor Radchenko @ 2021-10-27 13:42 UTC (permalink / raw) To: Eli Zaretskii; +Cc: stefan, emacs-devel Eli Zaretskii <eliz@gnu.org> writes: >> >From a Emacs package perspective, just following XDG is still not clear >> enough. Should all Emacs packages store data inside "XDG_DIR/emacs" >> subdirectory or maybe "XDG_DIR/emacs/package-name"? What should be the >> file names? The details I quoted are providing a possible clarification >> about these kinds of questions, except that no-littering assumes >> XDG_DIR=.emacs.d. > > Look at xdg.el and at startup.el where we already use XDG-compliant > directories. What you say above is neither compliant with XDG nor > with any current Emacs convention; it's an entirely new arrangement. > I think that's one too many. What I propose is not an alternative to XDG. It is complient with XDG in a sense defined in "Referencing this specification" section of the XDG standard. We just put things under appropriate XDG_DIR instead of .emacs.d. It is indeed a new arrangement for Emacs. I feel that having a convention about sub-directories and file names would be useful. The very existence of no-littering package indicates that some other people also prefer having a convention. If you think that it is not necessary, it is fine. Other people can jump in and support/oppose my suggestion. Best, Ihor ^ permalink raw reply [flat|nested] 63+ messages in thread
* XDG config dir [Was: Re: Default for image-dired-main-image-directory] 2021-10-27 13:42 ` Ihor Radchenko @ 2021-10-27 16:53 ` Alexandre Garreau 2021-10-28 3:45 ` Ihor Radchenko 2021-10-28 3:48 ` Phil Sainty 0 siblings, 2 replies; 63+ messages in thread From: Alexandre Garreau @ 2021-10-27 16:53 UTC (permalink / raw) To: emacs-devel Le mercredi 27 octobre 2021, 15:42:11 CEST Ihor Radchenko a écrit : > Eli Zaretskii <eliz@gnu.org> writes: > >> >From a Emacs package perspective, just following XDG is still not > >> >clear > >> > >> enough. Should all Emacs packages store data inside "XDG_DIR/emacs" > >> subdirectory or maybe "XDG_DIR/emacs/package-name"? What should be > >> the > >> file names? The details I quoted are providing a possible > >> clarification > >> about these kinds of questions, except that no-littering assumes > >> XDG_DIR=.emacs.d. > > > > Look at xdg.el and at startup.el where we already use XDG-compliant > > directories. What you say above is neither compliant with XDG nor > > with any current Emacs convention; it's an entirely new arrangement. > > I think that's one too many. > > What I propose is not an alternative to XDG. It is complient with XDG in > a sense defined in "Referencing this specification" section of the XDG > standard. We just put things under appropriate XDG_DIR instead of > .emacs.d. Oh btw that makes me think to something I always wondered: would there be a way to make so that to have .config/emacs instead of .emacs.d? at least when .config/xdg-something exists, for instance That would reduce the clutter inside home directory, that’s partially solved by that xdg .config directory (although I find regrettable it’s not .local/etc, but a such symlink can solve that). Btw there’s a whole bunch of directories autoconf computes at configuration time… where are these accessible from emacs lisp? shouldn’t emacs use the same naming convention for all of these? if they’re not accessible yet, maybe exposing them would be a good way to start… Something like (std-dir 'user 'music) or (std-dir 'system 'icons) would be more complex than music-user-dir (and less consistent with already existing variables such as emacs-user-dir), but be useful in case a dir needs to be computed programmatically, for instance to do (std-dir 'user (case file-ext (("jpg" "png") 'picture) ("mkv" 'video) ("ogg" 'music))) instead of rewriting “-user-dir” each time (and imho allows greater flexibility since you could reuse the symbol to trigger something else before passing it to std-dir). OTOH a such system couldn’t be searched with variable autocompletion, but on the other hand, given autocompletion/searching, the most useful naming scheme wouldn’t be a normal english name but something reversed like dir- std-user-music or dir-std-system-icons, while a doc for std-dir could specify all of that comprehensively in just-one-place™ (but it would be a less standard way to search for a variable). …although emacs supports autocompletion starting by the end or middle of a variable, so I don’t know, but I like the more complex system. ^ permalink raw reply [flat|nested] 63+ messages in thread
* Re: XDG config dir [Was: Re: Default for image-dired-main-image-directory] 2021-10-27 16:53 ` XDG config dir [Was: Re: Default for image-dired-main-image-directory] Alexandre Garreau @ 2021-10-28 3:45 ` Ihor Radchenko 2021-10-28 3:48 ` Phil Sainty 1 sibling, 0 replies; 63+ messages in thread From: Ihor Radchenko @ 2021-10-28 3:45 UTC (permalink / raw) To: Alexandre Garreau; +Cc: emacs-devel Alexandre Garreau <galex-713@galex-713.eu> writes: > Oh btw that makes me think to something I always wondered: would there be > a way to make so that to have .config/emacs instead of .emacs.d? at least > when .config/xdg-something exists, for instance AFAIK, emacs does support ~/.config/emacs. As long, as you do not have ~/.emacs and ~/.emacs.d and do have ~/.config/emacs directory, Emacs is using the ~/.config/emacs (or $XDG_CONFIG_HOME/emacs). > That would reduce the clutter inside home directory, that’s partially > solved by that xdg .config directory (although I find regrettable it’s not > .local/etc, but a such symlink can solve that). According to XDG spec, you just need to set $XDG_CONFIG_HOME environment variable. ~/.config is only used when the variable is not set: From https://specifications.freedesktop.org/basedir-spec/basedir-spec-latest.html: >> $XDG_CONFIG_HOME defines the base directory relative to which user-specific configuration files should be stored. If $XDG_CONFIG_HOME is either not set or empty, a default equal to $HOME/.config should be used. Best, Ihor ^ permalink raw reply [flat|nested] 63+ messages in thread
* Re: XDG config dir [Was: Re: Default for image-dired-main-image-directory] 2021-10-27 16:53 ` XDG config dir [Was: Re: Default for image-dired-main-image-directory] Alexandre Garreau 2021-10-28 3:45 ` Ihor Radchenko @ 2021-10-28 3:48 ` Phil Sainty 2021-10-28 5:57 ` Alexandre Garreau 1 sibling, 1 reply; 63+ messages in thread From: Phil Sainty @ 2021-10-28 3:48 UTC (permalink / raw) To: Alexandre Garreau; +Cc: emacs-devel On 2021-10-28 05:53, Alexandre Garreau wrote: > Oh btw that makes me think to something I always wondered: would there > be > a way to make so that to have .config/emacs instead of .emacs.d? at > least > when .config/xdg-something exists, for instance Like this? https://git.savannah.gnu.org/cgit/emacs.git/tree/etc/NEWS?h=emacs-27&id=348b2aed0c8c3630be4c15c8e70acf7ea9c023af#n224 ^ permalink raw reply [flat|nested] 63+ messages in thread
* Re: XDG config dir [Was: Re: Default for image-dired-main-image-directory] 2021-10-28 3:48 ` Phil Sainty @ 2021-10-28 5:57 ` Alexandre Garreau 2021-10-28 6:46 ` Stefan Kangas 0 siblings, 1 reply; 63+ messages in thread From: Alexandre Garreau @ 2021-10-28 5:57 UTC (permalink / raw) To: Phil Sainty; +Cc: emacs-devel Le jeudi 28 octobre 2021, 05:48:56 CEST Phil Sainty a écrit : > On 2021-10-28 05:53, Alexandre Garreau wrote: > > Oh btw that makes me think to something I always wondered: would there > > be > > a way to make so that to have .config/emacs instead of .emacs.d? at > > least > > when .config/xdg-something exists, for instance > > Like this? > > https://git.savannah.gnu.org/cgit/emacs.git/tree/etc/NEWS?h=emacs-27&id= > 348b2aed0c8c3630be4c15c8e70acf7ea9c023af#n224 oh yes! I just appear to be using emacs 26 (debian stable), so I won’t be able to benefit from that immediately (or until my next recompile of emacs) ^^ I find sad that it’s still .emacs.d (or, well, .emacs isn’t it?) that will be created by default, but well, I imagine that’s configurable per-site in /etc ^ permalink raw reply [flat|nested] 63+ messages in thread
* Re: XDG config dir [Was: Re: Default for image-dired-main-image-directory] 2021-10-28 5:57 ` Alexandre Garreau @ 2021-10-28 6:46 ` Stefan Kangas 0 siblings, 0 replies; 63+ messages in thread From: Stefan Kangas @ 2021-10-28 6:46 UTC (permalink / raw) To: Alexandre Garreau, Phil Sainty; +Cc: emacs-devel Alexandre Garreau <galex-713@galex-713.eu> writes: > oh yes! I just appear to be using emacs 26 (debian stable), so I won’t be > able to benefit from that immediately (or until my next recompile of emacs) Debian stable/bullseye has Emacs 27.1: https://packages.debian.org/stable/emacs ^ permalink raw reply [flat|nested] 63+ messages in thread
* Re: Default for image-dired-main-image-directory 2021-10-26 13:12 ` Eli Zaretskii 2021-10-26 13:42 ` Ihor Radchenko @ 2021-10-26 14:14 ` Stefan Kangas 2021-10-26 15:37 ` Eli Zaretskii 1 sibling, 1 reply; 63+ messages in thread From: Stefan Kangas @ 2021-10-26 14:14 UTC (permalink / raw) To: Eli Zaretskii; +Cc: Emacs developers Eli Zaretskii <eliz@gnu.org> writes: > How about if we DTRT right away, and provide reasonable defaults for > all the non-XDG platforms Which are the "non-XDG platforms" more exactly? Why is "~/Pictures" not a reasonable default on those platforms? ^ permalink raw reply [flat|nested] 63+ messages in thread
* Re: Default for image-dired-main-image-directory 2021-10-26 14:14 ` Default for image-dired-main-image-directory Stefan Kangas @ 2021-10-26 15:37 ` Eli Zaretskii 0 siblings, 0 replies; 63+ messages in thread From: Eli Zaretskii @ 2021-10-26 15:37 UTC (permalink / raw) To: Stefan Kangas; +Cc: emacs-devel > From: Stefan Kangas <stefan@marxist.se> > Date: Tue, 26 Oct 2021 16:14:42 +0200 > Cc: Emacs developers <emacs-devel@gnu.org> > > Eli Zaretskii <eliz@gnu.org> writes: > > > How about if we DTRT right away, and provide reasonable defaults for > > all the non-XDG platforms > > Which are the "non-XDG platforms" more exactly? > > Why is "~/Pictures" not a reasonable default on those platforms? Because it goes against the platform conventions. Or let me put it this way: for the same reason we don't want to use ~/Pictures on systems that use the XDG conventions. ^ permalink raw reply [flat|nested] 63+ messages in thread
* Re: master f8fed41 2/3: image-dired: Improve XDG compliance 2021-10-25 13:14 master f8fed41 2/3: image-dired: Improve XDG compliance Eli Zaretskii 2021-10-25 16:14 ` Philip Kaludercic 2021-10-26 10:25 ` Default for image-dired-main-image-directory Stefan Kangas @ 2021-10-26 14:01 ` Stefan Kangas 2021-10-26 14:19 ` Eli Zaretskii 2021-10-26 14:28 ` Eli Zaretskii 2 siblings, 2 replies; 63+ messages in thread From: Stefan Kangas @ 2021-10-26 14:01 UTC (permalink / raw) To: Eli Zaretskii; +Cc: Emacs developers Eli Zaretskii <eliz@gnu.org> writes: > XDG is also prone to fashion changes. What will we do when it goes > out of fashion, and we have dozens of xdg-user-dir calls in our > application code? change all of them to some latest desktop fashion? Yes, that's what we should do in that case. Such work will be much easier if we have already adapted our code to use the xdg specification: if you move xdg.el to "lisp/obsolete" the byte-compiler will warn about any places where we use it. But we have no easy way to find strings like "~/pics", and therefore can't easily update them. In other words, if we expect the standard to change very soon, it is already a step forward to update hardcoded strings like "~/pics" like I did in image-dired.el. However, I don't really see any reason to expect a replacement to the XDG Base Directory Specification (XDG BDS) any time soon. As Philip points out, it has only become more ubiquitous over the almost 20 years since its inception, and no replacement is on the horizon. Therefore, this all seems very academic to me, and I think the points below about other platforms are more immediately relevant. > Can we agree not to use xdg.el in application code, and instead > develop those abstractions and start using them? For example, how > about having a function user-pics-directory, which will return the > appropriate file name for the underlying platform? Doing that will > not diminish our support for XDG (as long as it lasts), but will allow > us to have application code XDG-clean, so to speak. I have no objections to the general plan you propose, and I encourage anyone with a particular interest in such support to work on it. (It will be mainly of interest to macOS or MS-Windows users, I think? But they should probably already be using a lot of software that uses the XDG BDS. I note that I have several BDS mandated directories on my macOS laptop.) However, I do not see any logic in stopping work on XDG BDS support until such a library or functions has been implemented. Just like above, any work we do in conforming better to the XDG BDS can only serve to make the "platform independent" or "XDG BDS independent" plan you propose easier to implement. ^ permalink raw reply [flat|nested] 63+ messages in thread
* Re: master f8fed41 2/3: image-dired: Improve XDG compliance 2021-10-26 14:01 ` master f8fed41 2/3: image-dired: Improve XDG compliance Stefan Kangas @ 2021-10-26 14:19 ` Eli Zaretskii 2021-10-26 14:24 ` Stefan Kangas 2021-10-26 14:28 ` Eli Zaretskii 1 sibling, 1 reply; 63+ messages in thread From: Eli Zaretskii @ 2021-10-26 14:19 UTC (permalink / raw) To: Stefan Kangas; +Cc: emacs-devel > From: Stefan Kangas <stefan@marxist.se> > Date: Tue, 26 Oct 2021 16:01:50 +0200 > Cc: Emacs developers <emacs-devel@gnu.org> > > However, I do not see any logic in stopping work on XDG BDS support > until such a library or functions has been implemented. Just like > above, any work we do in conforming better to the XDG BDS can only > serve to make the "platform independent" or "XDG BDS independent" plan > you propose easier to implement. I'm not against extending xdg.el, I'm against seeing more and more xdg-FOO stuff in the application code. That's not why we agreed to include it in Emacs. ^ permalink raw reply [flat|nested] 63+ messages in thread
* Re: master f8fed41 2/3: image-dired: Improve XDG compliance 2021-10-26 14:19 ` Eli Zaretskii @ 2021-10-26 14:24 ` Stefan Kangas 2021-10-26 16:00 ` Eli Zaretskii 0 siblings, 1 reply; 63+ messages in thread From: Stefan Kangas @ 2021-10-26 14:24 UTC (permalink / raw) To: Eli Zaretskii; +Cc: Emacs developers Eli Zaretskii <eliz@gnu.org> writes: > I'm against seeing more and more > xdg-FOO stuff in the application code. That's not why we agreed to > include it in Emacs. I don't see why: as I explained, this will make implementing your idea easier, not harder. Right? ^ permalink raw reply [flat|nested] 63+ messages in thread
* Re: master f8fed41 2/3: image-dired: Improve XDG compliance 2021-10-26 14:24 ` Stefan Kangas @ 2021-10-26 16:00 ` Eli Zaretskii 2021-10-26 16:13 ` Stefan Kangas 0 siblings, 1 reply; 63+ messages in thread From: Eli Zaretskii @ 2021-10-26 16:00 UTC (permalink / raw) To: Stefan Kangas; +Cc: emacs-devel > From: Stefan Kangas <stefan@marxist.se> > Date: Tue, 26 Oct 2021 16:24:30 +0200 > Cc: Emacs developers <emacs-devel@gnu.org> > > Eli Zaretskii <eliz@gnu.org> writes: > > > I'm against seeing more and more > > xdg-FOO stuff in the application code. That's not why we agreed to > > include it in Emacs. > > I don't see why: as I explained, this will make implementing your idea > easier, not harder. Right? No. What will happen is we will see the proliferation of the likes of this: (cond ((eq system-type 'windows-nt (or (w32-read-registry 'HKCU "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Explorer\\User Shell Folders" "Personal") "~/../My Documents" "~/../../Documents")) ((eq system-type 'darwin "~/Documents")) (t (xdg-documents-directory))) and similarly for other standard directories, in our application code. I really hope this is not what we want to see there. My idea was to hide all this platform-specific ugliness under a standard API, such as (user-std-directory 'DOCUMENTS) or maybe a set of APIs like (user-documents-directory), (user-music-directory), etc. I thought it will be a no-brainer that using the latter will be both cleaner, more readable, and easier in maintenance; am I the only one who thinks so? ^ permalink raw reply [flat|nested] 63+ messages in thread
* Re: master f8fed41 2/3: image-dired: Improve XDG compliance 2021-10-26 16:00 ` Eli Zaretskii @ 2021-10-26 16:13 ` Stefan Kangas 2021-10-26 16:21 ` Eli Zaretskii 0 siblings, 1 reply; 63+ messages in thread From: Stefan Kangas @ 2021-10-26 16:13 UTC (permalink / raw) To: Eli Zaretskii; +Cc: Emacs developers Eli Zaretskii <eliz@gnu.org> writes: > No. What will happen is we will see the proliferation of the likes of > this: > > (cond > ((eq system-type 'windows-nt > (or (w32-read-registry > 'HKCU > "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Explorer\\User Shell Folders" "Personal") > "~/../My Documents" > "~/../../Documents")) > ((eq system-type 'darwin "~/Documents")) > (t (xdg-documents-directory))) > > and similarly for other standard directories, in our application code. That looks like a nightmare, yes. > I really hope this is not what we want to see there. My idea was to > hide all this platform-specific ugliness under a standard API, such as > (user-std-directory 'DOCUMENTS) or maybe a set of APIs like > (user-documents-directory), (user-music-directory), etc. I'm not seeing any other volunteers, so let me have a crack at it. ^ permalink raw reply [flat|nested] 63+ messages in thread
* Re: master f8fed41 2/3: image-dired: Improve XDG compliance 2021-10-26 16:13 ` Stefan Kangas @ 2021-10-26 16:21 ` Eli Zaretskii 0 siblings, 0 replies; 63+ messages in thread From: Eli Zaretskii @ 2021-10-26 16:21 UTC (permalink / raw) To: Stefan Kangas; +Cc: emacs-devel > From: Stefan Kangas <stefan@marxist.se> > Date: Tue, 26 Oct 2021 18:13:41 +0200 > Cc: Emacs developers <emacs-devel@gnu.org> > > > I really hope this is not what we want to see there. My idea was to > > hide all this platform-specific ugliness under a standard API, such as > > (user-std-directory 'DOCUMENTS) or maybe a set of APIs like > > (user-documents-directory), (user-music-directory), etc. > > I'm not seeing any other volunteers, so let me have a crack at it. Thanks, and let me know if I can help. ^ permalink raw reply [flat|nested] 63+ messages in thread
* Re: master f8fed41 2/3: image-dired: Improve XDG compliance 2021-10-26 14:01 ` master f8fed41 2/3: image-dired: Improve XDG compliance Stefan Kangas 2021-10-26 14:19 ` Eli Zaretskii @ 2021-10-26 14:28 ` Eli Zaretskii 2021-10-26 14:45 ` Stefan Kangas 1 sibling, 1 reply; 63+ messages in thread From: Eli Zaretskii @ 2021-10-26 14:28 UTC (permalink / raw) To: Stefan Kangas; +Cc: emacs-devel > From: Stefan Kangas <stefan@marxist.se> > Date: Tue, 26 Oct 2021 16:01:50 +0200 > Cc: Emacs developers <emacs-devel@gnu.org> > > Eli Zaretskii <eliz@gnu.org> writes: > > > XDG is also prone to fashion changes. What will we do when it goes > > out of fashion, and we have dozens of xdg-user-dir calls in our > > application code? change all of them to some latest desktop fashion? > > Yes, that's what we should do in that case. I'm quite astonished to read this, coming from an active Emacs developer. It's basically an antithesis of good maintainability. > Such work will be much > easier if we have already adapted our code to use the xdg > specification: if you move xdg.el to "lisp/obsolete" the byte-compiler > will warn about any places where we use it. But we have no easy way > to find strings like "~/pics", and therefore can't easily update them. I didn't propose to have hard-coded strings like "~/pics", not at all. I proposed to have a couple of higher-level APIs that will hide system-dependent stuff, including hard-coded strings if some systems need that. xdg.el will then be one layer lower, and application code will not call it directly. > In other words, if we expect the standard to change very soon, it is > already a step forward to update hardcoded strings like "~/pics" like > I did in image-dired.el. These "semi-standards" change quite frequently, and we should be prepared for the next change in advance, even if we don't know when will that happen. > However, I don't really see any reason to expect a replacement to the > XDG Base Directory Specification (XDG BDS) any time soon. As Philip > points out, it has only become more ubiquitous over the almost 20 > years since its inception, and no replacement is on the horizon. > Therefore, this all seems very academic to me, and I think the points > below about other platforms are more immediately relevant. Good maintainability is not an academic subject, it is pretty much in our face here. ^ permalink raw reply [flat|nested] 63+ messages in thread
* Re: master f8fed41 2/3: image-dired: Improve XDG compliance 2021-10-26 14:28 ` Eli Zaretskii @ 2021-10-26 14:45 ` Stefan Kangas 2021-10-26 16:12 ` Eli Zaretskii 0 siblings, 1 reply; 63+ messages in thread From: Stefan Kangas @ 2021-10-26 14:45 UTC (permalink / raw) To: Eli Zaretskii; +Cc: Emacs developers Eli Zaretskii <eliz@gnu.org> writes: > I proposed to have a couple of higher-level APIs that will hide > system-dependent stuff, including hard-coded strings if some systems > need that. xdg.el will then be one layer lower, and application code > will not call it directly. OK, I think we agree that this would be a good thing. The contentious point seems to be what we should do until we have such a library. I think that it is better to update hardcoded strings to use xdg.el, since it will make the above idea easier to implement. However, if we have a plan for a higher-level API in a reasonable time-frame (for example, before Emacs 29 is released), then I am more than happy to accept that we might as well wait with any such changes until that work is done. ^ permalink raw reply [flat|nested] 63+ messages in thread
* Re: master f8fed41 2/3: image-dired: Improve XDG compliance 2021-10-26 14:45 ` Stefan Kangas @ 2021-10-26 16:12 ` Eli Zaretskii 2021-10-26 16:31 ` Eli Zaretskii 2021-10-26 19:17 ` Stefan Monnier 0 siblings, 2 replies; 63+ messages in thread From: Eli Zaretskii @ 2021-10-26 16:12 UTC (permalink / raw) To: Stefan Kangas; +Cc: emacs-devel > From: Stefan Kangas <stefan@marxist.se> > Date: Tue, 26 Oct 2021 16:45:04 +0200 > Cc: Emacs developers <emacs-devel@gnu.org> > > Eli Zaretskii <eliz@gnu.org> writes: > > > I proposed to have a couple of higher-level APIs that will hide > > system-dependent stuff, including hard-coded strings if some systems > > need that. xdg.el will then be one layer lower, and application code > > will not call it directly. > > OK, I think we agree that this would be a good thing. > > The contentious point seems to be what we should do until we have such > a library. I think that it is better to update hardcoded strings to > use xdg.el, since it will make the above idea easier to implement. > > However, if we have a plan for a higher-level API in a reasonable > time-frame (for example, before Emacs 29 is released), then I am more > than happy to accept that we might as well wait with any such changes > until that work is done. It is so easy to provide this API (or set of APIs) piecemeal that I don't see why we would need to wait for anything. Let's simply start a file called, say, std-dirs.el or somesuch, and add support there for each directory we bump into. For example, in the specific case that triggered this, just add a function there that calls (or (xdg-user-dir "PICTURES") "~/pics/") and call that function in image-dired.el. Before long, we will have everything we need, and more. If you don't want to provide support for anything except XDG, you can initially leave the fixed strings there as the alternatives, and someone else will pick up where you left off and fill in the blanks. The only decision we need to make is whether we want a single function that accepts an argument telling it the purpose of the standard directory (in this case, I'd use 'PICTURES, a symbol), or maybe a separate function for each kind of directory, like user-pictures-dir. ^ permalink raw reply [flat|nested] 63+ messages in thread
* Re: master f8fed41 2/3: image-dired: Improve XDG compliance 2021-10-26 16:12 ` Eli Zaretskii @ 2021-10-26 16:31 ` Eli Zaretskii 2021-10-26 19:17 ` Stefan Monnier 1 sibling, 0 replies; 63+ messages in thread From: Eli Zaretskii @ 2021-10-26 16:31 UTC (permalink / raw) To: stefan; +Cc: emacs-devel > Date: Tue, 26 Oct 2021 19:12:31 +0300 > From: Eli Zaretskii <eliz@gnu.org> > Cc: emacs-devel@gnu.org > > Let's simply start a file called, say, std-dirs.el or somesuch Or maybe user-dir.el. (We can bikeshed the name later.) ^ permalink raw reply [flat|nested] 63+ messages in thread
* Re: master f8fed41 2/3: image-dired: Improve XDG compliance 2021-10-26 16:12 ` Eli Zaretskii 2021-10-26 16:31 ` Eli Zaretskii @ 2021-10-26 19:17 ` Stefan Monnier 2021-10-26 19:28 ` Eli Zaretskii 2021-11-06 1:38 ` user-directory: New library to find user {conf,data,state,...} files Stefan Kangas 1 sibling, 2 replies; 63+ messages in thread From: Stefan Monnier @ 2021-10-26 19:17 UTC (permalink / raw) To: Eli Zaretskii; +Cc: Stefan Kangas, emacs-devel > The only decision we need to make is whether we want a single function > that accepts an argument telling it the purpose of the standard > directory (in this case, I'd use 'PICTURES, a symbol), or maybe a > separate function for each kind of directory, like user-pictures-dir. I'd vote for a single defgeneric function. Stefan ^ permalink raw reply [flat|nested] 63+ messages in thread
* Re: master f8fed41 2/3: image-dired: Improve XDG compliance 2021-10-26 19:17 ` Stefan Monnier @ 2021-10-26 19:28 ` Eli Zaretskii 2021-11-06 1:38 ` user-directory: New library to find user {conf,data,state,...} files Stefan Kangas 1 sibling, 0 replies; 63+ messages in thread From: Eli Zaretskii @ 2021-10-26 19:28 UTC (permalink / raw) To: Stefan Monnier; +Cc: stefan, emacs-devel > From: Stefan Monnier <monnier@iro.umontreal.ca> > Cc: Stefan Kangas <stefan@marxist.se>, emacs-devel@gnu.org > Date: Tue, 26 Oct 2021 15:17:52 -0400 > > > The only decision we need to make is whether we want a single function > > that accepts an argument telling it the purpose of the standard > > directory (in this case, I'd use 'PICTURES, a symbol), or maybe a > > separate function for each kind of directory, like user-pictures-dir. > > I'd vote for a single defgeneric function. What would be generic about it? ^ permalink raw reply [flat|nested] 63+ messages in thread
* user-directory: New library to find user {conf,data,state,...} files 2021-10-26 19:17 ` Stefan Monnier 2021-10-26 19:28 ` Eli Zaretskii @ 2021-11-06 1:38 ` Stefan Kangas 2021-11-06 1:52 ` Lars Ingebrigtsen ` (2 more replies) 1 sibling, 3 replies; 63+ messages in thread From: Stefan Kangas @ 2021-11-06 1:38 UTC (permalink / raw) To: Stefan Monnier, Eli Zaretskii; +Cc: emacs-devel Stefan Monnier <monnier@iro.umontreal.ca> writes: >> The only decision we need to make is whether we want a single function >> that accepts an argument telling it the purpose of the standard >> directory (in this case, I'd use 'PICTURES, a symbol), or maybe a >> separate function for each kind of directory, like user-pictures-dir. > > I'd vote for a single defgeneric function. I hacked something quick together and pushed it to features/user-directory, mostly so that we can decide on the basic API. It needs more work, but the interface should hopefully be clear. The one I propose is: (user-directory 'cache) => "/home/skangas/.cache" (user-file 'cache "foo") => "/home/skangas/.cache/foo" There's also a defcustom `user-directory-alist' for overrides: (let ((user-directory-alist '((downloads "/foo")))) (user-directory 'downloads)) => "/foo" I thought about having defuns like `user-directory-cache', which gives us autocompletion, but I feel like the symbol approach is more straightforward and means we can avoid code like this: (intern (concat "user-directory-" (symbol-name sym))) This is implemented with a defgeneric, as suggested by Stefan Monnier (thanks!), but we could easily convert it to regular defuns if we need to preload it. ^ permalink raw reply [flat|nested] 63+ messages in thread
* Re: user-directory: New library to find user {conf,data,state,...} files 2021-11-06 1:38 ` user-directory: New library to find user {conf,data,state,...} files Stefan Kangas @ 2021-11-06 1:52 ` Lars Ingebrigtsen 2021-11-06 2:56 ` user-directory: New library to find user {conf, data, state, ...} files Stefan Kangas 2021-11-06 3:11 ` Stefan Kangas 2021-11-07 19:31 ` Stefan Kangas 2 siblings, 1 reply; 63+ messages in thread From: Lars Ingebrigtsen @ 2021-11-06 1:52 UTC (permalink / raw) To: Stefan Kangas; +Cc: Eli Zaretskii, Stefan Monnier, emacs-devel Stefan Kangas <stefan@marxist.se> writes: > The one I propose is: > > (user-directory 'cache) > => "/home/skangas/.cache" > > (user-file 'cache "foo") > => "/home/skangas/.cache/foo" Looks nice to me. I haven't looked at the branch, but there's one problem that many of the things that try to store data have: They used to store the data in ~/some-strange-location, but now want to follow XDG or whatever. So it would be nice if we could just say (user-file 'cache "foo" :legacy "~/Groovy/foo") and it'd return the legacy file name if it exists, but otherwise use the new one. Or something like that -- the :legacy should probably also be allowed to be a list of names for things that have moved around a lot. -- (domestic pets only, the antidote for overdose, milk.) bloggy blog: http://lars.ingebrigtsen.no ^ permalink raw reply [flat|nested] 63+ messages in thread
* Re: user-directory: New library to find user {conf, data, state, ...} files 2021-11-06 1:52 ` Lars Ingebrigtsen @ 2021-11-06 2:56 ` Stefan Kangas 0 siblings, 0 replies; 63+ messages in thread From: Stefan Kangas @ 2021-11-06 2:56 UTC (permalink / raw) To: Lars Ingebrigtsen; +Cc: Eli Zaretskii, Stefan Monnier, emacs-devel Lars Ingebrigtsen <larsi@gnus.org> writes: > Looks nice to me. Thanks. > So it would be nice if we could just say > > (user-file 'cache "foo" :legacy "~/Groovy/foo") > > and it'd return the legacy file name if it exists, but otherwise use the > new one. Or something like that -- the :legacy should probably also be > allowed to be a list of names for things that have moved around a lot. I forgot to mention it, but `user-file' is supposed to support an OLD-NAME argument just like `locate-user-emacs-file' does. Making it accept either a string or a list sounds like a good addition. ^ permalink raw reply [flat|nested] 63+ messages in thread
* Re: user-directory: New library to find user {conf, data, state, ...} files 2021-11-06 1:38 ` user-directory: New library to find user {conf,data,state,...} files Stefan Kangas 2021-11-06 1:52 ` Lars Ingebrigtsen @ 2021-11-06 3:11 ` Stefan Kangas 2021-11-07 19:31 ` Stefan Kangas 2 siblings, 0 replies; 63+ messages in thread From: Stefan Kangas @ 2021-11-06 3:11 UTC (permalink / raw) To: Stefan Monnier, Eli Zaretskii; +Cc: emacs-devel Stefan Kangas <stefan@marxist.se> writes: > This is implemented with a defgeneric, as suggested by Stefan Monnier > (thanks!), but we could easily convert it to regular defuns if we need > to preload it. By the way, I am getting the defmethods in the reverse order in `C-h f user-directory' than the one in which they were defined. Is that expected? Should I put the most important defmethods at the bottom of the file if I want them listed at the top? ^ permalink raw reply [flat|nested] 63+ messages in thread
* Re: user-directory: New library to find user {conf, data, state, ...} files 2021-11-06 1:38 ` user-directory: New library to find user {conf,data,state,...} files Stefan Kangas 2021-11-06 1:52 ` Lars Ingebrigtsen 2021-11-06 3:11 ` Stefan Kangas @ 2021-11-07 19:31 ` Stefan Kangas 2021-11-07 19:52 ` Eli Zaretskii 2021-11-08 3:35 ` Stefan Kangas 2 siblings, 2 replies; 63+ messages in thread From: Stefan Kangas @ 2021-11-07 19:31 UTC (permalink / raw) To: Stefan Monnier, Eli Zaretskii; +Cc: emacs-devel Stefan Kangas <stefan@marxist.se> writes: > I hacked something quick together and pushed it to > features/user-directory, mostly so that we can decide on the basic API. > It needs more work, but the interface should hopefully be clear. > > The one I propose is: > > (user-directory 'cache) > => "/home/skangas/.cache" > > (user-file 'cache "foo") > => "/home/skangas/.cache/foo" > > There's also a defcustom `user-directory-alist' for overrides: > > (let ((user-directory-alist '((downloads "/foo")))) > (user-directory 'downloads)) > => "/foo" OK, I think this is ready for merging to master so that we can start experimenting with it, obviously based on the assumption that this is tentative and open for change. I guess someone will want to look at adding MS-Windows support to this, for example. Note that on GNU/Linux, even if the user has their configuration file in "~/.emacs.d/", the library currently prefers the XDG paths here: (user-file 'cache "image-dired") => "~/.cache/emacs/image-dired" This is a feature. If users prefer not to have a clean "~/.emacs.d/" they can say: (setq user-directory-alist '((cache . user-emacs-directory) (config . user-emacs-directory) (data . user-emacs-directory) (runtime . user-emacs-directory) (state . user-emacs-directory))) I also think we should consider adding some heuristics to `user-file' to be able to find the old name if it exists. I considered some alternatives, but I thought I'd see what people think first. Currently, application code would say: (user-file 'cache "image-dired" (locate-user-emacs-file "image-dired")) Which could, if we want to be smart, be simplified to: (user-file 'cache "image-dired" "image-dired") Or even: (user-file 'cache "image-dired") Unfortunately, in this case I think it's harder to be smart: (user-file 'data "bookmarks" (locate-user-emacs-file "bookmarks" ".emacs.bmk")) But perhaps we can think of something even for that. ^ permalink raw reply [flat|nested] 63+ messages in thread
* Re: user-directory: New library to find user {conf, data, state, ...} files 2021-11-07 19:31 ` Stefan Kangas @ 2021-11-07 19:52 ` Eli Zaretskii 2021-11-08 3:04 ` Stefan Kangas 2021-11-08 3:35 ` Stefan Kangas 1 sibling, 1 reply; 63+ messages in thread From: Eli Zaretskii @ 2021-11-07 19:52 UTC (permalink / raw) To: Stefan Kangas; +Cc: monnier, emacs-devel > From: Stefan Kangas <stefan@marxist.se> > Date: Sun, 7 Nov 2021 11:31:50 -0800 > Cc: emacs-devel@gnu.org > > Note that on GNU/Linux, even if the user has their configuration file in > "~/.emacs.d/", the library currently prefers the XDG paths here: > > (user-file 'cache "image-dired") > => "~/.cache/emacs/image-dired" > > This is a feature. If users prefer not to have a clean "~/.emacs.d/" > they can say: > > (setq user-directory-alist '((cache . user-emacs-directory) > (config . user-emacs-directory) > (data . user-emacs-directory) > (runtime . user-emacs-directory) > (state . user-emacs-directory))) This contradicts how Emacs by default finds the init file: its preference is the other way around, and it sets user-emacs-directory according to the directory from which it loaded the init file. I don't think I understand why this package should behave differently by default (it could do that as an opt-in option, of course, if that is considered useful to someone). ^ permalink raw reply [flat|nested] 63+ messages in thread
* Re: user-directory: New library to find user {conf, data, state, ...} files 2021-11-07 19:52 ` Eli Zaretskii @ 2021-11-08 3:04 ` Stefan Kangas 2021-11-08 12:19 ` Eric S Fraga 2021-11-08 13:55 ` Eli Zaretskii 0 siblings, 2 replies; 63+ messages in thread From: Stefan Kangas @ 2021-11-08 3:04 UTC (permalink / raw) To: Eli Zaretskii; +Cc: monnier, emacs-devel Eli Zaretskii <eliz@gnu.org> writes: >> Note that on GNU/Linux, even if the user has their configuration file in >> "~/.emacs.d/", the library currently prefers the XDG paths here: >> >> (user-file 'cache "image-dired") >> => "~/.cache/emacs/image-dired" > > This contradicts how Emacs by default finds the init file: its > preference is the other way around, and it sets user-emacs-directory > according to the directory from which it loaded the init file. I > don't think I understand why this package should behave differently by > default (it could do that as an opt-in option, of course, if that is > considered useful to someone). It should because it is a change for the better. We have a chance to decide what this should look like for the foreseeable future, and I don't think we are bound by past decisions if they do not produce optimal (or even good) results. Here's my take on it: The `user-emacs-directory' directory currently contains a grab-bag of, well, everything, which among other things makes it hard for a user to know what is safe to delete and what is not, which files you would need to backup, etc. You basically need to manually inspect the files and consider their content one by one. The big use-case here, though, is that we want to be able to easily synchronize our Emacs configuration file between several machines. You don't want to synchronize things like your completion history or recently opened files, because it is not very useful, and you will have an infinite amounts of conflicts. (It's somewhat easier with version control, which is what I use, but less so if you want to use rsync or unison.) The solution is to proscribe that: The categories data, cache and state files belong in specific `data', `state' and `cache' directories. This means that e.g. my bookmarks file goes to the data directory, the recentf and saveplace file goes to `state', while my image-dired thumbnails go to `cache'. As for runtime files, I note that `server-socket-dir' already uses XDG_RUNTIME_DIR (but gets it manually). IOW, all this should be orthogonal to where your init file is placed. You can put it in any of the accepted locations, including the XDG one if you like. (Personally, I keep mine in "~/.emacs.d/init.el" and will continue to do so.) You should still be able to get all of the above, by default and with no hassle. What I propose is obviously inspired by the XDG BDS, but with the Emacs twist that its interface is not tied to that standard, it's completely customizable, and it can easily grow to be platform independent. With all that being said, we must take great care not to cause unnecessary churn. In particular, we should absolutely not break anything that's currently working. This means that we should respect locations of already existing files, and ensure they continue working seamlessly. PS. Note that (user-directory 'config) in particular already just falls back to use whatever `user-emacs-directory' was set to. There is no need to duplicate what is happening in startup.el, or to try to outsmart it. ^ permalink raw reply [flat|nested] 63+ messages in thread
* Re: user-directory: New library to find user {conf, data, state, ...} files 2021-11-08 3:04 ` Stefan Kangas @ 2021-11-08 12:19 ` Eric S Fraga 2021-11-08 13:55 ` Eli Zaretskii 1 sibling, 0 replies; 63+ messages in thread From: Eric S Fraga @ 2021-11-08 12:19 UTC (permalink / raw) To: emacs-devel On Sunday, 7 Nov 2021 at 21:04, Stefan Kangas wrote: > The big use-case here, though, is that we want to be able to easily > synchronize our Emacs configuration file between several machines. You > don't want to synchronize things like your completion history or > recently opened files, because it is not very useful, and you will have > an infinite amounts of conflicts. +1 especially true for eln-cache? -- Eric S Fraga via Emacs 28.0.60 & org 9.5 on Debian 11.1 ^ permalink raw reply [flat|nested] 63+ messages in thread
* Re: user-directory: New library to find user {conf, data, state, ...} files 2021-11-08 3:04 ` Stefan Kangas 2021-11-08 12:19 ` Eric S Fraga @ 2021-11-08 13:55 ` Eli Zaretskii 2021-11-08 15:26 ` Stefan Kangas 1 sibling, 1 reply; 63+ messages in thread From: Eli Zaretskii @ 2021-11-08 13:55 UTC (permalink / raw) To: Stefan Kangas; +Cc: monnier, emacs-devel > From: Stefan Kangas <stefan@marxist.se> > Date: Sun, 7 Nov 2021 21:04:42 -0600 > Cc: monnier@iro.umontreal.ca, emacs-devel@gnu.org > > Eli Zaretskii <eliz@gnu.org> writes: > > >> Note that on GNU/Linux, even if the user has their configuration file in > >> "~/.emacs.d/", the library currently prefers the XDG paths here: > >> > >> (user-file 'cache "image-dired") > >> => "~/.cache/emacs/image-dired" > > > > This contradicts how Emacs by default finds the init file: its > > preference is the other way around, and it sets user-emacs-directory > > according to the directory from which it loaded the init file. I > > don't think I understand why this package should behave differently by > > default (it could do that as an opt-in option, of course, if that is > > considered useful to someone). > > It should because it is a change for the better. We have a chance to > decide what this should look like for the foreseeable future, and I > don't think we are bound by past decisions if they do not produce > optimal (or even good) results. The problem is that changes which break users' configurations will not be appreciated. > The `user-emacs-directory' directory currently contains a grab-bag of, > well, everything, which among other things makes it hard for a user to > know what is safe to delete and what is not, which files you would need > to backup, etc. You basically need to manually inspect the files and > consider their content one by one. > > The big use-case here, though, is that we want to be able to easily > synchronize our Emacs configuration file between several machines. You > don't want to synchronize things like your completion history or > recently opened files, because it is not very useful, and you will have > an infinite amounts of conflicts. (It's somewhat easier with version > control, which is what I use, but less so if you want to use rsync or > unison.) > > The solution is to proscribe that: > > The categories data, cache and state files belong in specific `data', > `state' and `cache' directories. This means that e.g. my bookmarks file > goes to the data directory, the recentf and saveplace file goes to > `state', while my image-dired thumbnails go to `cache'. As for runtime > files, I note that `server-socket-dir' already uses XDG_RUNTIME_DIR (but > gets it manually). > > IOW, all this should be orthogonal to where your init file is placed. > You can put it in any of the accepted locations, including the XDG one > if you like. (Personally, I keep mine in "~/.emacs.d/init.el" and will > continue to do so.) You should still be able to get all of the above, > by default and with no hassle. My problem is that Emacs computes user-emacs-directory from the place where it loaded the init file, and then uses the value of user-emacs-directory to look for other files. Search the sources for user-emacs-directory and you will see how we use it. If the changes you propose will modify those users of user-emacs-directory to use user-file machinery instead, and if user-file machinery prefers the XDG directories, Emacs will not find the files it found previously, and some of the user customizations will mysteriously stop working. > With all that being said, we must take great care not to cause > unnecessary churn. In particular, we should absolutely not break > anything that's currently working. This means that we should respect > locations of already existing files, and ensure they continue working > seamlessly. That is fine, but I'm not sure how you can achieve that goal and still prefer the XDG directories. > PS. Note that (user-directory 'config) in particular already just falls > back to use whatever `user-emacs-directory' was set to. There is no > need to duplicate what is happening in startup.el, or to try to > outsmart it. 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. But if we do that, then in which cases will the XDG directories be used, since user-emacs-directory always exists and is defined. ^ permalink raw reply [flat|nested] 63+ messages in thread
* Re: user-directory: New library to find user {conf, data, state, ...} files 2021-11-08 13:55 ` Eli Zaretskii @ 2021-11-08 15:26 ` Stefan Kangas 2021-11-08 18:31 ` Eli Zaretskii 0 siblings, 1 reply; 63+ messages in thread From: Stefan Kangas @ 2021-11-08 15:26 UTC (permalink / raw) To: Eli Zaretskii; +Cc: Stefan Monnier, Emacs developers Eli Zaretskii <eliz@gnu.org> writes: > The problem is that changes which break users' configurations will not > be appreciated. Correct, and fully agreed. I believe we can avoid this. > > With all that being said, we must take great care not to cause > > unnecessary churn. In particular, we should absolutely not break > > anything that's currently working. This means that we should respect > > locations of already existing files, and ensure they continue working > > seamlessly. > > 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. > > PS. Note that (user-directory 'config) in particular already just falls > > back to use whatever `user-emacs-directory' was set to. There is no > > need to duplicate what is happening in startup.el, or to try to > > outsmart it. > > 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. To be more precise, they will be preferred _only_ if we don't specify an old name, or if we did specify an old name but no such file exists. To give an example, let's assume that 'user-emacs-directory' is "~/.emacs.d/". 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" 2. However, if "~/.emacs.d/old" does not exist: (user-file 'config "new" old") => "~/.emacs.d/new" (user-file 'cache "new" old") => "~/.cache/new" 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" It's true that this requires discipline on behalf of application developers when calling 'user-directory': they need to provide an "old name" in addition to a "new name". I don't see any way around that. (See my separate email about the state of the API so far, and some possible simplifications, especially for the third example above.) I'd consider any failure to use a previously existing file as a bug. Bugs will inevitably exist, but I don't believe fixing them will be fundamentally impossible, or necessarily even hard. Another consideration is that the interface of course has to be helpful: it has to be easy to use correctly, and hard to use incorrectly. I think what it looks like now is not too bad in that sense, but I'm very open to suggestions about how to do better. ^ permalink raw reply [flat|nested] 63+ messages in thread
* Re: user-directory: New library to find user {conf, data, state, ...} files 2021-11-08 15:26 ` Stefan Kangas @ 2021-11-08 18:31 ` Eli Zaretskii 2021-11-09 7:05 ` Stefan Kangas 0 siblings, 1 reply; 63+ messages in thread From: Eli Zaretskii @ 2021-11-08 18:31 UTC (permalink / raw) To: Stefan Kangas; +Cc: monnier, emacs-devel > 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? ^ permalink raw reply [flat|nested] 63+ messages in thread
* Re: user-directory: New library to find user {conf, data, state, ...} files 2021-11-08 18:31 ` Eli Zaretskii @ 2021-11-09 7:05 ` Stefan Kangas 2021-11-09 18:23 ` Eli Zaretskii 0 siblings, 1 reply; 63+ messages in thread From: Stefan Kangas @ 2021-11-09 7:05 UTC (permalink / raw) To: Eli Zaretskii; +Cc: monnier, emacs-devel 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. ^ permalink raw reply [flat|nested] 63+ messages in thread
* Re: user-directory: New library to find user {conf, data, state, ...} files 2021-11-09 7:05 ` Stefan Kangas @ 2021-11-09 18:23 ` Eli Zaretskii 2021-11-09 20:38 ` Stefan Kangas 0 siblings, 1 reply; 63+ messages in thread From: Eli Zaretskii @ 2021-11-09 18:23 UTC (permalink / raw) To: Stefan Kangas; +Cc: monnier, emacs-devel > From: Stefan Kangas <stefan@marxist.se> > Date: Mon, 8 Nov 2021 23:05:57 -0800 > Cc: monnier@iro.umontreal.ca, emacs-devel@gnu.org > > 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. That's not true, unless we are mis-communicating. I have quite a few directories under ~/.emacs.d/, and most of them are important. Are you saying we will now look for them all according to the XDG spec? > I expect that most application code will use `user-file' rather than > `user-directory'. If some Lisp program needs to ensure a sub-directory of user-emacs-directory exists, it will want to use user-directory, I think. > > 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) Isn't that a problem? It would mean we'd need to preload xdg.el and user-file, and all the stuff they need to work, right? Also, the XDG spec says about "cache": $XDG_CACHE_HOME defines the base directory relative to which user-specific non-essential data files should be stored. I don't think files in eln-cache can be classified as "non-essential". They are important for using Emacs; removing them will make Emacs slow and sluggish for quite some time after startup. > 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 And you are saying we will redirect all those to the XDG tree? Users have files in these places, and they need to trust Emacs to find those files when it is restarted. How can we change where we look for them without breaking configurations? > (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.) No, desktop.el is explicitly programmed to be able to use a "path", i.e. a list of directories. You can have several different desktop files in several different directories, and use each one for its own project or type of activity. > >> 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. I see no reason not to. We are not going to change the base names as well, are we? > (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") Once again, why not just one argument? ^ permalink raw reply [flat|nested] 63+ messages in thread
* Re: user-directory: New library to find user {conf, data, state, ...} files 2021-11-09 18:23 ` Eli Zaretskii @ 2021-11-09 20:38 ` Stefan Kangas 2021-11-11 10:34 ` Eli Zaretskii 0 siblings, 1 reply; 63+ messages in thread From: Stefan Kangas @ 2021-11-09 20:38 UTC (permalink / raw) To: Eli Zaretskii; +Cc: monnier, emacs-devel Eli Zaretskii <eliz@gnu.org> writes: >> 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. > > That's not true, unless we are mis-communicating. I have quite a few > directories under ~/.emacs.d/, and most of them are important. Are > you saying we will now look for them all according to the XDG spec? Aha, yes we are talking about two different things. If you need some file in `user-emacs-directory' ("file" in the Unix sense here, i.e. it could also be a directory) you would use `user-file'. So to get "~/.emacs.d/auto-save-list/" you would say: (user-file 'state "auto-save-list") => "~/.local/state/emacs/auto-save-list" `user-directory' only returns the top-level directory. There is no way to give it a name of a file. (user-directory 'state) => "/home/skangas/.local/state/emacs" However, your question makes me think that we should make `user-file' the only public function here, to avoid confusion. I think it's rare to need the directory itself, and if someone does they could just use user-emacs-directory => "~/.emacs.d/" or (user-file 'cache "") => "~/.cache/emacs" So I think we should rename the library to user-file.el, and make `user-file' the only non-internal and user-facing function. That makes it simpler, and more clear. >> ./startup.el547: (push (expand-file-name "eln-cache/" >> user-emacs-directory) > > Isn't that a problem? It would mean we'd need to preload xdg.el and > user-file, and all the stuff they need to work, right? Also, the XDG > spec says about "cache": Yes, if we want to move the eln-cache to the cache directory, we need to do something about preloading. The relevant XDG code could be moved from xdg.el and xdg.el could depend on the preloaded location; this is about 30-40 lines of code. We would also need to rewrite the code I have in user-directory.el to not use cl-lib.el. > $XDG_CACHE_HOME defines the base directory relative to which > user-specific non-essential data files should be stored. > > I don't think files in eln-cache can be classified as "non-essential". > They are important for using Emacs; removing them will make Emacs slow > and sluggish for quite some time after startup. Removing anything from a cache will always make performance worse until you can recache it, but the character of a cache is that it can always be recreated from some original data. So my understanding is that "non-essential" here is provided to contrast with the data file, and simply means that it is not (highly) important not to lose those files. I.e. it is just a way to further specify that this is the directory for cached files. > And you are saying we will redirect all those to the XDG tree? Users > have files in these places, and they need to trust Emacs to find those > files when it is restarted. How can we change where we look for them > without breaking configurations? For each file NAME: (1) look for NAME in the XDG directory, if NAME exists there and is readable return it, otherwise (2) look for it in `user-emacs-directory', if NAME exists there and is readable return it, otherwise (3) return the file name of NAME in the XDG directory. This is the same basic approach that we also use in `locate-user-emacs-file'. Is that what you mean? >> (user-file 'data "bookmarks" "~/.emacs.bmk") > > Once again, why not just one argument? For backwards compatibility. The "bookmarks" file used to be in "~/.emacs.bmk" (before 2010 or so?). We currently locate it using this call: (locate-user-emacs-file "bookmarks" ".emacs.bmk") ^ permalink raw reply [flat|nested] 63+ messages in thread
* Re: user-directory: New library to find user {conf, data, state, ...} files 2021-11-09 20:38 ` Stefan Kangas @ 2021-11-11 10:34 ` Eli Zaretskii 0 siblings, 0 replies; 63+ messages in thread From: Eli Zaretskii @ 2021-11-11 10:34 UTC (permalink / raw) To: Stefan Kangas; +Cc: monnier, emacs-devel > From: Stefan Kangas <stefan@marxist.se> > Date: Tue, 9 Nov 2021 12:38:52 -0800 > Cc: monnier@iro.umontreal.ca, emacs-devel@gnu.org > > Eli Zaretskii <eliz@gnu.org> writes: > > >> 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. > > > > That's not true, unless we are mis-communicating. I have quite a few > > directories under ~/.emacs.d/, and most of them are important. Are > > you saying we will now look for them all according to the XDG spec? > > Aha, yes we are talking about two different things. > > If you need some file in `user-emacs-directory' ("file" in the Unix > sense here, i.e. it could also be a directory) you would use > `user-file'. So to get "~/.emacs.d/auto-save-list/" you would say: > > (user-file 'state "auto-save-list") > => "~/.local/state/emacs/auto-save-list" > > `user-directory' only returns the top-level directory. There is no way > to give it a name of a file. > > (user-directory 'state) > => "/home/skangas/.local/state/emacs" I'm saying that user-directory should also honor user-emacs-directory, because we have no way of knowing the intent of the caller of user-directory: it could be that the caller wants then to get to some file under it. > However, your question makes me think that we should make `user-file' > the only public function here, to avoid confusion. I think it's rare to > need the directory itself, and if someone does they could just use > > user-emacs-directory > => "~/.emacs.d/" > > or > > (user-file 'cache "") > => "~/.cache/emacs" > > So I think we should rename the library to user-file.el, and make > `user-file' the only non-internal and user-facing function. That makes > it simpler, and more clear. Could be, indeed. (But please make user-file accept nil instead of an empty string.) > >> ./startup.el547: (push (expand-file-name "eln-cache/" > >> user-emacs-directory) > > > > Isn't that a problem? It would mean we'd need to preload xdg.el and > > user-file, and all the stuff they need to work, right? Also, the XDG > > spec says about "cache": > > Yes, if we want to move the eln-cache to the cache directory, we need to > do something about preloading. The relevant XDG code could be moved > from xdg.el and xdg.el could depend on the preloaded location; this is > about 30-40 lines of code. We would also need to rewrite the code I > have in user-directory.el to not use cl-lib.el. That's a bummer, because we didn't intend to preload xdg.el. And since it prefers the "traditional" setups anyway, I wonder whether preloading it would be justified, as in most cases its code will be trivially bypassed. > > $XDG_CACHE_HOME defines the base directory relative to which > > user-specific non-essential data files should be stored. > > > > I don't think files in eln-cache can be classified as "non-essential". > > They are important for using Emacs; removing them will make Emacs slow > > and sluggish for quite some time after startup. > > Removing anything from a cache will always make performance worse until > you can recache it, but the character of a cache is that it can always > be recreated from some original data. > > So my understanding is that "non-essential" here is provided to contrast > with the data file, and simply means that it is not (highly) important > not to lose those files. I.e. it is just a way to further specify that > this is the directory for cached files. That's not true for the *.eln files: they cannot be "simply lost". Note that the XDG spec says "data files", which *.eln aren't: they are code. I think it would be wrong to put *.eln files there for the same reasons it would be wrong to put *.elc files there. > > And you are saying we will redirect all those to the XDG tree? Users > > have files in these places, and they need to trust Emacs to find those > > files when it is restarted. How can we change where we look for them > > without breaking configurations? > > For each file NAME: (1) look for NAME in the XDG directory, if NAME > exists there and is readable return it, otherwise (2) look for it in > `user-emacs-directory', if NAME exists there and is readable return it, > otherwise (3) return the file name of NAME in the XDG directory. This > is the same basic approach that we also use in `locate-user-emacs-file'. Why not start with (2)? It will save us one step. > Is that what you mean? > > >> (user-file 'data "bookmarks" "~/.emacs.bmk") > > > > Once again, why not just one argument? > > For backwards compatibility. The "bookmarks" file used to be in > "~/.emacs.bmk" (before 2010 or so?). > > We currently locate it using this call: > > (locate-user-emacs-file "bookmarks" ".emacs.bmk") If the 2nd argument is optional for alternative names, that's OK, I think. Thanks. ^ permalink raw reply [flat|nested] 63+ messages in thread
* Re: user-directory: New library to find user {conf, data, state, ...} files 2021-11-07 19:31 ` Stefan Kangas 2021-11-07 19:52 ` Eli Zaretskii @ 2021-11-08 3:35 ` Stefan Kangas 2021-11-08 15:40 ` Stefan Kangas 1 sibling, 1 reply; 63+ messages in thread From: Stefan Kangas @ 2021-11-08 3:35 UTC (permalink / raw) To: Stefan Monnier, Eli Zaretskii; +Cc: emacs-devel Stefan Kangas <stefan@marxist.se> writes: > I also think we should consider adding some heuristics to `user-file' to > be able to find the old name if it exists. I considered some > alternatives, but I thought I'd see what people think first. Currently, > application code would say: > > (user-file 'cache "image-dired" > (locate-user-emacs-file "image-dired")) > > Which could, if we want to be smart, be simplified to: > > (user-file 'cache "image-dired" "image-dired") I have implemented the above simplification now, see my recent commit to features/user-directory. We could take it even further if we want to of course, to support the below as well: > Or even: > > (user-file 'cache "image-dired") > > Unfortunately, in this case I think it's harder to be smart: > > (user-file 'data "bookmarks" > (locate-user-emacs-file "bookmarks" ".emacs.bmk")) > > But perhaps we can think of something even for that. ^ permalink raw reply [flat|nested] 63+ messages in thread
* Re: user-directory: New library to find user {conf, data, state, ...} files 2021-11-08 3:35 ` Stefan Kangas @ 2021-11-08 15:40 ` Stefan Kangas 0 siblings, 0 replies; 63+ messages in thread From: Stefan Kangas @ 2021-11-08 15:40 UTC (permalink / raw) To: Stefan Monnier, Eli Zaretskii; +Cc: Emacs developers Stefan Kangas <stefan@marxist.se> writes: > > Unfortunately, in this case I think it's harder to be smart: > > > > (user-file 'data "bookmarks" > > (locate-user-emacs-file "bookmarks" ".emacs.bmk")) > > > > But perhaps we can think of something even for that. Maybe this could be simplified to (user-file 'data "bookmarks" "bookmarks" "~/.emacs.bmk") or even (user-file 'data "bookmarks" "~/.emacs.bmk") ? ^ permalink raw reply [flat|nested] 63+ messages in thread
end of thread, other threads:[~2021-11-11 10:34 UTC | newest] Thread overview: 63+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2021-10-25 13:14 master f8fed41 2/3: image-dired: Improve XDG compliance Eli Zaretskii 2021-10-25 16:14 ` Philip Kaludercic 2021-10-25 16:39 ` Eli Zaretskii 2021-10-25 17:52 ` Philip Kaludercic 2021-10-25 18:30 ` Eli Zaretskii 2021-10-26 10:24 ` Stefan Kangas 2021-10-26 13:09 ` Eli Zaretskii 2021-10-26 13:28 ` Stefan Kangas 2021-10-26 14:11 ` Eli Zaretskii 2021-10-26 14:35 ` Stefan Kangas 2021-10-27 4:37 ` Po Lu 2021-10-26 16:47 ` Philip Kaludercic 2021-10-26 2:07 ` Po Lu 2021-10-25 17:48 ` Stefan Monnier 2021-10-25 17:55 ` Philip Kaludercic 2021-10-25 17:58 ` Gregory Heytings 2021-10-25 18:04 ` Stefan Monnier 2021-10-26 10:25 ` Default for image-dired-main-image-directory Stefan Kangas 2021-10-26 13:12 ` Eli Zaretskii 2021-10-26 13:42 ` Ihor Radchenko 2021-10-26 14:15 ` Eli Zaretskii 2021-10-26 14:22 ` Stefan Kangas 2021-10-26 14:58 ` Ihor Radchenko 2021-10-26 16:15 ` Eli Zaretskii 2021-10-27 13:04 ` Ihor Radchenko 2021-10-27 13:26 ` Eli Zaretskii 2021-10-27 13:42 ` Ihor Radchenko 2021-10-27 16:53 ` XDG config dir [Was: Re: Default for image-dired-main-image-directory] Alexandre Garreau 2021-10-28 3:45 ` Ihor Radchenko 2021-10-28 3:48 ` Phil Sainty 2021-10-28 5:57 ` Alexandre Garreau 2021-10-28 6:46 ` Stefan Kangas 2021-10-26 14:14 ` Default for image-dired-main-image-directory Stefan Kangas 2021-10-26 15:37 ` Eli Zaretskii 2021-10-26 14:01 ` master f8fed41 2/3: image-dired: Improve XDG compliance Stefan Kangas 2021-10-26 14:19 ` Eli Zaretskii 2021-10-26 14:24 ` Stefan Kangas 2021-10-26 16:00 ` Eli Zaretskii 2021-10-26 16:13 ` Stefan Kangas 2021-10-26 16:21 ` Eli Zaretskii 2021-10-26 14:28 ` Eli Zaretskii 2021-10-26 14:45 ` Stefan Kangas 2021-10-26 16:12 ` Eli Zaretskii 2021-10-26 16:31 ` Eli Zaretskii 2021-10-26 19:17 ` Stefan Monnier 2021-10-26 19:28 ` Eli Zaretskii 2021-11-06 1:38 ` user-directory: New library to find user {conf,data,state,...} files Stefan Kangas 2021-11-06 1:52 ` Lars Ingebrigtsen 2021-11-06 2:56 ` user-directory: New library to find user {conf, data, state, ...} files Stefan Kangas 2021-11-06 3:11 ` Stefan Kangas 2021-11-07 19:31 ` Stefan Kangas 2021-11-07 19:52 ` Eli Zaretskii 2021-11-08 3:04 ` Stefan Kangas 2021-11-08 12:19 ` Eric S Fraga 2021-11-08 13:55 ` Eli Zaretskii 2021-11-08 15:26 ` Stefan Kangas 2021-11-08 18:31 ` Eli Zaretskii 2021-11-09 7:05 ` Stefan Kangas 2021-11-09 18:23 ` Eli Zaretskii 2021-11-09 20:38 ` Stefan Kangas 2021-11-11 10:34 ` Eli Zaretskii 2021-11-08 3:35 ` Stefan Kangas 2021-11-08 15:40 ` Stefan Kangas
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).