unofficial mirror of emacs-devel@gnu.org 
 help / color / mirror / code / Atom feed
From: Eli Zaretskii <eliz@gnu.org>
To: Paul Eggert <eggert@cs.ucla.edu>
Cc: emacs-devel@gnu.org
Subject: Re: [PATCH] Implement XDG Base Directory specification for user-emacs-directory
Date: Sun, 28 Jul 2019 17:48:34 +0300	[thread overview]
Message-ID: <83ef2akyf1.fsf@gnu.org> (raw)
In-Reply-To: <49b51848-c390-eff6-b2e1-be75f67ba620@cs.ucla.edu> (message from Paul Eggert on Sat, 27 Jul 2019 11:46:31 -0700)

> From: Paul Eggert <eggert@cs.ucla.edu>
> 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.
>  \f
>  * 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.



  parent reply	other threads:[~2019-07-28 14:48 UTC|newest]

Thread overview: 30+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <20190525172356.30070.65317@vcs0.savannah.gnu.org>
     [not found] ` <20190525172357.86D4F207F5@vcs0.savannah.gnu.org>
2019-05-26 22:40   ` [Emacs-diffs] master d68ed15: Implement and document XDG-style startup files under ~/.config Stefan Monnier
2019-06-03  2:32     ` Eli Zaretskii
2019-06-09  7:01       ` [PATCH] Implement XDG Base Directory specification for user-emacs-directory (was: [Emacs-diffs] master d68ed15: Implement and document XDG-style startup files under ~/.config.) Amin Bandali
2019-06-09  8:10         ` Eli Zaretskii
2019-06-09 18:59         ` [PATCH] Implement XDG Base Directory specification for user-emacs-directory Stefan Monnier
2019-06-09 19:16           ` Eli Zaretskii
2019-06-09 20:16             ` Noam Postavsky
2019-06-10 16:22               ` Eli Zaretskii
2019-06-10 18:55                 ` Noam Postavsky
2019-06-10 19:21                   ` Lars Ingebrigtsen
2019-06-10 19:26                     ` Eli Zaretskii
2019-07-02 16:55                 ` Noam Postavsky
2019-07-02 17:26                   ` Eli Zaretskii
2019-07-23 14:36                     ` Eli Zaretskii
2019-07-27  2:58                       ` Amin Bandali
2019-07-27  7:55                         ` Eli Zaretskii
2019-07-27 18:46                           ` Paul Eggert
2019-07-27 21:22                             ` Basil L. Contovounesios
2019-07-28 14:41                               ` Eli Zaretskii
2019-07-28 15:21                                 ` Basil L. Contovounesios
2019-07-28 16:34                                   ` Eli Zaretskii
2019-07-28 14:48                             ` Eli Zaretskii [this message]
2019-07-29  1:00                               ` Elias Mårtenson
2019-07-29  2:36                                 ` Eli Zaretskii
2019-07-29  4:24                                   ` Elias Mårtenson
2019-07-29 14:21                                     ` Eli Zaretskii
2019-08-25  8:46                               ` Eli Zaretskii
2019-08-27 21:50                                 ` Paul Eggert
2019-08-28  5:59                                   ` Eli Zaretskii
2019-06-13 11:34         ` [PATCH] Implement XDG Base Directory specification for user-emacs-directory (was: [Emacs-diffs] master d68ed15: Implement and document XDG-style startup files under ~/.config.) Stefan Kangas

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: https://www.gnu.org/software/emacs/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=83ef2akyf1.fsf@gnu.org \
    --to=eliz@gnu.org \
    --cc=eggert@cs.ucla.edu \
    --cc=emacs-devel@gnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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).