unofficial mirror of bug-gnu-emacs@gnu.org 
 help / color / mirror / code / Atom feed
* bug#66534: 30.0.50; [PATCH] Expand file-name of ~/.emacs before attempt to load it
@ 2023-10-13 18:41 Christoph via Bug reports for GNU Emacs, the Swiss army knife of text editors
  2023-10-14  6:54 ` Eli Zaretskii
  2023-10-14  7:25 ` Andreas Schwab
  0 siblings, 2 replies; 6+ messages in thread
From: Christoph via Bug reports for GNU Emacs, the Swiss army knife of text editors @ 2023-10-13 18:41 UTC (permalink / raw)
  To: 66534

[-- Attachment #1: Type: text/plain, Size: 882 bytes --]

Hi,

I noticed that during startup, emacs tries to load ~/.emacs (with
different extensions) many times over.  You can see this by using
strace and tracing the openat syscall.  The problem is, that `load'
does not expand the ~/ in the filename passed to it.  So it does not
recognize the file as being absolute and tries to resolve it using
the load-path.

While resolving the path in the openp function in lread.c,
`expand-file-name' is used with the default directory being the
elements of the load-path.  Since for `expand-file-name', ~/.emacs is
an absolute path, it returns the path unchanged, and load tries to
load ~/.emacs many times over.  I am not sure if the behavior of
`load' should also be considered a bug, but since all the other paths
of init files are resolved using `expand-file-name', I guess the same
should be done for the ~/.emacs path as well.

-- Christoph

[-- Attachment #2: 0001-Expand-file-name-of-.emacs-before-attempt-to-load-it.patch --]
[-- Type: text/x-patch, Size: 2783 bytes --]

From 42bc428470f0b6907cfc81718f35083a2df30d12 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Christoph=20G=C3=B6ttschkes?= <just.mychris@googlemail.com>
Date: Fri, 13 Oct 2023 20:19:48 +0200
Subject: [PATCH] Expand file-name of ~/.emacs before attempt to load it.

* lisp/startup.el (command-line):
Expand the name of the ~/.emacs (or its other variant)
initialization file-name before passing the absolute path to load.
Otherwise, load does not recognize the path to be absolute and uses the
load-path to find the file.
---
 lisp/startup.el | 40 +++++++++++++++++++++-------------------
 1 file changed, 21 insertions(+), 19 deletions(-)

diff --git a/lisp/startup.el b/lisp/startup.el
index 6329e3ea8d0..73e27439e50 100644
--- a/lisp/startup.el
+++ b/lisp/startup.el
@@ -1493,25 +1493,27 @@ command-line
     ;; Load that user's init file, or the default one, or none.
     (startup--load-user-init-file
      (lambda ()
-       (cond
-	((eq startup-init-directory xdg-dir) nil)
-        ((eq system-type 'ms-dos)
-         (concat "~" init-file-user "/_emacs"))
-        ((not (eq system-type 'windows-nt))
-         (concat "~" init-file-user "/.emacs"))
-        ;; Else deal with the Windows situation.
-        ((directory-files "~" nil "\\`\\.emacs\\(\\.elc?\\)?\\'")
-         ;; Prefer .emacs on Windows.
-         "~/.emacs")
-        ((directory-files "~" nil "\\`_emacs\\(\\.elc?\\)?\\'")
-         ;; Also support _emacs for compatibility, but warn about it.
-         (push `(initialization
-                 ,(format-message
-                   "`_emacs' init file is deprecated, please use `.emacs'"))
-               delayed-warnings-list)
-         "~/_emacs")
-        (t ;; But default to .emacs if _emacs does not exist.
-         "~/.emacs")))
+       (if (eq startup-init-directory xdg-dir)
+           nil
+         (expand-file-name
+          (cond
+           ((eq system-type 'ms-dos)
+            (concat "~" init-file-user "/_emacs"))
+           ((not (eq system-type 'windows-nt))
+            (concat "~" init-file-user "/.emacs"))
+           ;; Else deal with the Windows situation.
+           ((directory-files "~" nil "\\`\\.emacs\\(\\.elc?\\)?\\'")
+            ;; Prefer .emacs on Windows.
+            "~/.emacs")
+           ((directory-files "~" nil "\\`_emacs\\(\\.elc?\\)?\\'")
+            ;; Also support _emacs for compatibility, but warn about it.
+            (push `(initialization
+                    ,(format-message
+                      "`_emacs' init file is deprecated, please use `.emacs'"))
+                  delayed-warnings-list)
+            "~/_emacs")
+           (t ;; But default to .emacs if _emacs does not exist.
+            "~/.emacs")))))
      (lambda ()
        (expand-file-name
         "init.el"
-- 
2.42.0


^ permalink raw reply related	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2023-10-23 15:56 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-10-13 18:41 bug#66534: 30.0.50; [PATCH] Expand file-name of ~/.emacs before attempt to load it Christoph via Bug reports for GNU Emacs, the Swiss army knife of text editors
2023-10-14  6:54 ` Eli Zaretskii
2023-10-14  9:04   ` Christoph via Bug reports for GNU Emacs, the Swiss army knife of text editors
2023-10-23 15:56   ` Christoph via Bug reports for GNU Emacs, the Swiss army knife of text editors
2023-10-14  7:25 ` Andreas Schwab
2023-10-14  9:05   ` Christoph via Bug reports for GNU Emacs, the Swiss army knife of text editors

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