]> git.eshelyaron.com Git - emacs.git/commitdiff
Prefer ~/.config/emacs to ~/.emacs.d if neither exists
authorPaul Eggert <eggert@cs.ucla.edu>
Fri, 30 Aug 2019 05:29:52 +0000 (22:29 -0700)
committerPaul Eggert <eggert@cs.ucla.edu>
Fri, 30 Aug 2019 07:24:46 +0000 (00:24 -0700)
That way, when Emacs starts in a fresh home directory,
it prefers the new (XDG) convention rather than the old one.
* lisp/files.el (locate-user-emacs-file): Make the parent
directories of user-emacs-directory if needed.  This is useful
if user-emacs-directory is "~/.config/emacs" and "~/.config"
does not yet exist.
* lisp/startup.el (command-line):
* lisp/subr.el (user-emacs-directory):
Prefer XDG_CONFIG_HOME to ~/.emacs.d if neither exists.

lisp/files.el
lisp/startup.el
lisp/subr.el

index 2a84c2c48f57f819895aec9f36e033918c445c65..ce4dd99bd535906f6df0d77bb418a14c2814f5a5 100644 (file)
@@ -1043,7 +1043,7 @@ directory if it does not exist."
                     (setq errtype "access"))
               (with-file-modes ?\700
                 (condition-case nil
-                    (make-directory user-emacs-directory)
+                    (make-directory user-emacs-directory t)
                   (error (setq errtype "create")))))
             (when (and errtype
                        user-emacs-directory-warning
index 4d584a0cb59aed5e1e618ba6c4a7650982292779..c1e429b8db786a34aac474761c3f9d20c66dc95f 100644 (file)
@@ -1170,13 +1170,16 @@ please check its value")
   ;; This is typically equivalent to ~/.config/emacs if the user is
   ;; following the XDG convention, and is ~INIT-FILE-USER/.emacs.d
   ;; on other systems.
-  (setq xdg-dir
-    (let* ((dir (concat (or (getenv "XDG_CONFIG_HOME")
+  (setq xdg-dir (concat (or (getenv "XDG_CONFIG_HOME")
                            (concat "~" init-file-user "/.config"))
-                       "/emacs/")))
-      (if (file-exists-p dir) dir)))
+                       "/emacs/"))
   (setq startup-init-directory
-       (or xdg-dir (concat "~" init-file-user "/.emacs.d/")))
+       (if (file-exists-p xdg-dir)
+           xdg-dir
+         (let ((emacs-d-dir (concat "~" init-file-user "/.emacs.d/")))
+           (if (file-exists-p emacs-d-dir)
+               emacs-d-dir
+             xdg-dir))))
 
   ;; Load the early init file, if found.
   (startup--load-user-init-file
@@ -1325,7 +1328,7 @@ please check its value")
     (startup--load-user-init-file
      (lambda ()
        (cond
-       (xdg-dir nil)
+       ((eq startup-init-directory xdg-dir) nil)
         ((eq system-type 'ms-dos)
          (concat "~" init-file-user "/_emacs"))
         ((not (eq system-type 'windows-nt))
index 3cf395787eb4993b5455990f4f7a09dd298caaf0..566a3fc758ec94227bc43aefa4f07cd3687249b7 100644 (file)
@@ -2943,10 +2943,13 @@ mode.")
                            "/emacs/")))
     (if (file-exists-p config-dir)
        config-dir
-      (if (eq system-type 'ms-dos)
-         ;; MS-DOS cannot have initial dot.
-         "~/_emacs.d/"
-       "~/.emacs.d/")))
+      (let ((emacs-d-dir (if (eq system-type 'ms-dos)
+                            ;; MS-DOS cannot have initial dot.
+                            "~/_emacs.d/"
+                          "~/.emacs.d/")))
+       (if (file-exists-p emacs-d-dir)
+           emacs-d-dir
+         config-dir))))
   "Directory beneath which additional per-user Emacs-specific files are placed.
 Various programs in Emacs store information in this directory.
 Note that this should end with a directory separator.