[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH] Implement XDG Base Directory specification for user-emacs-di
From: |
Eli Zaretskii |
Subject: |
Re: [PATCH] Implement XDG Base Directory specification for user-emacs-directory |
Date: |
Sun, 25 Aug 2019 11:46:51 +0300 |
Ping! This seems to have stalled. Can we please revive it and make
the changes in the repository?
TIA
> Date: Sun, 28 Jul 2019 17:48:34 +0300
> From: Eli Zaretskii <address@hidden>
> CC: address@hidden
>
> > From: Paul Eggert <address@hidden>
> > Date: Sat, 27 Jul 2019 11:46:31 -0700
> >
> > I'll give it a whirl. Proposed patch attached.
>
> Thanks.
>
> > They can set XDG_CONFIG_DIR to /nowhere to go back to the old way,
> > as an emergency fix to get Emacs up and running well enough to fix
> > their configuration.
>
> I think we should mention this part in NEWS.
>
> > --- a/doc/emacs/custom.texi
> > +++ b/doc/emacs/custom.texi
> > @@ -2219,28 +2219,33 @@ Init File
> > @cindex init file
> > @cindex .emacs file
> > @cindex ~/.emacs file
> > -@cindex ~/.config/emacs file
> > +@cindex ~/.config/emacs/init.el file
> > @cindex Emacs initialization file
> > @cindex startup (init file)
> > +@cindex XDG_CONFIG_HOME
> >
> > When Emacs is started, it normally tries to load a Lisp program from
> > an @dfn{initialization file}, or @dfn{init file} for short. This
> > -file, if it exists, specifies how to initialize Emacs for you. Emacs
> > -looks for your init file using the filenames
> > -@file{~/.config/emacs},. @file{~/.emacs}, @file{~/.config/emacs.el},
> > -@file{~/.emacs.el}, @file{~/.config/emacs.d/init.el} or
> > -@file{~/.emacs.d/init.el}; you can choose to use any one of these
> > -names (@pxref{Find Init}). Here, @file{~/} stands for your home
> > +file, if it exists, specifies how to initialize Emacs for you.
> > +If the directory @file{@var{xdghome}/.config/emacs} exists, Emacs uses
> > +@file{@var{xdghome}/.config/emacs/init.el} as the init file. Here,
> > +@var{xdghome} stands for the value of the environment variable
> > +@env{XDG_CONFIG_HOME}, or for @file{~/.config} if
> > +@env{XDG_CONFIG_HOME} is unset; @file{~/} stands for your home
> > directory.
> >
> > - While the @file{~/.emacs} and @file{~/.emacs.d/init.el} locations
> > -are backward-compatible to older Emacs versions, and the rest of this
> > -chapter will use them to name your initialization file, it is better
> > practice
> > -to group all of your dotfiles under @file{.config} so that if you have
> > + If @file{~/.config/emacs} does not exist, Emacs looks for your init
> > +file using the filenames @file{~/.emacs}, @file{~/.emacs.el}, or
> > +@file{~/.emacs.d/init.el}; you can choose to use any one of these
> > +names (@pxref{Find Init}). Although this is backward-compatible
> > +with older Emacs versions, modern POSIX platforms prefer putting your
> > +initialization files under @file{.config} so that if you have
> > to troubleshoot a problem that might be due to a bad init file, or
> > archive a collection of them, it can be done by renaming or
> > copying that directory. Note that the @file{.config} versions
> > don't have a leading dot on the basename part of the file.
> > +For convenience the rest of this section assumes @env{XDG_CONFIG_HOME}
> > +is unset or has a value equivalent to @file{~/.config}.
>
> I think the test which describes in detail how Emacs finds the init
> file should be in the section by that name; otherwise it makes no
> sense to have that section in the first place. The "Init File"
> section should just mention the possible places and refer to that
> other section for the details.
>
> > diff --git a/etc/NEWS b/etc/NEWS
> > index d876c95e68..7703fc1e79 100644
> > --- a/etc/NEWS
> > +++ b/etc/NEWS
> > @@ -135,6 +135,14 @@ builds respectively.
> >
> > * Startup Changes in Emacs 27.1
> >
> > ++++
> > +** Emacs now uses the XDG convention for init files.
> > +For example, it looks for init.el in ~/.config/emacs/init.el.
> > +Emacs continues to look for init files in their traditional locations
> > +if ~/.config/emacs does not exist. The XDG_CONFIG_HOME environment
> > +variable (default ~/.config) specifies the parent directory of these
> > +configuration files.
>
> As mentioned above, I think we should tell here how to get back the
> old behavior.
>
> > diff --git a/lisp/subr.el b/lisp/subr.el
> > index eea4e045dd..8b50748a59 100644
> > --- a/lisp/subr.el
> > +++ b/lisp/subr.el
> > @@ -2930,10 +2930,15 @@ temp-buffer-setup-hook
> > mode.")
> >
> > (defconst user-emacs-directory
> > - (if (eq system-type 'ms-dos)
> > - ;; MS-DOS cannot have initial dot.
> > - "~/_emacs.d/"
> > - "~/.emacs.d/")
> > + (let ((config-dir (concat (or (getenv-internal "XDG_CONFIG_HOME")
> > + "~/.config")
> > + "/emacs/")))
> > + (if (file-exists-p config-dir)
> > + config-dir
>
> Can this be a defconst? It probes the existence of an environment
> variable and a directory, so it must be done at run time, not at build
> time, I think.
- Re: [PATCH] Implement XDG Base Directory specification for user-emacs-directory,
Eli Zaretskii <=