From: "François Févotte" <francois.fevotte@ensta.org>
To: Glenn Morris <rgm@gnu.org>
Cc: 15539@debbugs.gnu.org
Subject: bug#15539: Setting user-emacs-directory at command line invocation
Date: Tue, 17 Mar 2015 11:08:47 +0100 [thread overview]
Message-ID: <CAADsv94OnpBx4YpTdb3ivAbtgeTptWqSz5GN-k_=j=cuDKbEBQ@mail.gmail.com> (raw)
In-Reply-To: <8uk2yhg4m2.fsf@fencepost.gnu.org>
[-- Attachment #1: Type: text/plain, Size: 676 bytes --]
On Mon, Mar 16, 2015 at 1:36 AM, Glenn Morris <rgm@gnu.org> wrote:
> I'm not saying it's the right solution, but you could use an environment
> variable (eg EMACS_USER_DIRECTORY) rather than a command-line switch to
> control this.
Attached is a new patch implementing this idea. The differences with
respect to the first version are:
1- `user-emacs-directory' is read in the `EMACS_USER_DIRECTORY'
environment variable instead of from the command-line;
2- a few custom variables are declared in
`custom-delayed-init-variables' in order to account for the new value
of `user-emacs-directory'.
Once again, please don't hesitate to comment.
François
[-- Attachment #2: 0001-Look-for-an-EMACS_USER_DIRECTORY-environment-variabl.patch --]
[-- Type: text/x-patch, Size: 5180 bytes --]
From f98d2af08d2346121556f4fd91628dc0316cbff0 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Fran=C3=A7ois=20F=C3=A9votte?= <fevotte@gmail.com>
Date: Tue, 17 Mar 2015 08:50:01 +0100
Subject: [PATCH] Look for an `EMACS_USER_DIRECTORY' environment variable.
This sets `user-emacs-directory' and looks for `init.el' in it.
Fixes: bug#15539
---
doc/emacs/cmdargs.texi | 9 ++++++++-
doc/emacs/custom.texi | 8 ++++++++
lisp/custom.el | 1 +
lisp/startup.el | 21 +++++++++++++++++----
4 files changed, 34 insertions(+), 5 deletions(-)
diff --git a/doc/emacs/cmdargs.texi b/doc/emacs/cmdargs.texi
index 42c8e33..1cc8ac3 100644
--- a/doc/emacs/cmdargs.texi
+++ b/doc/emacs/cmdargs.texi
@@ -349,7 +349,9 @@ Do not reload any saved desktop. @xref{Saving Emacs Sessions}.
@opindex --user
@cindex load init file of another user
Load @var{user}'s initialization file instead of your
-own@footnote{This option has no effect on MS-Windows.}.
+own@footnote{This option has no effect on MS-Windows, nor when the
+@env{EMACS_USER_DIRECTORY} environment variable is set (@pxref{General
+Variables}).}.
@item --debug-init
@opindex --debug-init
@@ -600,6 +602,11 @@ does not use @env{TZ} at all.
@item USER
The user's login name. See also @env{LOGNAME}. On MS-DOS, this
defaults to @samp{root}.
+@item EMACS_USER_DIRECTORY
+This specifies a directory in which the initialization file will be
+looked for; @xref{Find Init}. This directory will also be used as the
+default place where user-specific configuration data will be stored;
+@xref{Standard File Names,,, elisp}.
@item VERSION_CONTROL
Used to initialize the @code{version-control} variable (@pxref{Backup
Names}).
diff --git a/doc/emacs/custom.texi b/doc/emacs/custom.texi
index 9fd823b..1e1d482 100644
--- a/doc/emacs/custom.texi
+++ b/doc/emacs/custom.texi
@@ -2516,6 +2516,14 @@ otherwise, it looks up the home directory corresponding to that user
name in the system's data base of users.
@c LocalWords: backtab
+ The whole mechanism described above is bypassed if the
+@env{EMACS_USER_DIRECTORY} environment variable is specified, in which
+case Emacs directly looks for @file{init.el} inside the directory
+specified by @env{EMACS_USER_DIRECTORY} (@pxref{General Variables}).
+This directory is also used to hold user-specific configuration
+(@pxref{Standard File Names,,, elisp}).
+
+
@node Init Non-ASCII
@subsection Non-@acronym{ASCII} Characters in Init Files
@cindex international characters in @file{.emacs}
diff --git a/lisp/custom.el b/lisp/custom.el
index e5fe0eb..36983aa 100644
--- a/lisp/custom.el
+++ b/lisp/custom.el
@@ -1119,6 +1119,7 @@ directory. By default, Emacs searches for custom themes in this
directory first---see `custom-theme-load-path'."
:type 'string
:group 'customize
+ :initialize 'custom-initialize-delay
:version "22.1")
(defcustom custom-theme-load-path (list 'custom-theme-directory t)
diff --git a/lisp/startup.el b/lisp/startup.el
index 7fa929a..2b2c324 100644
--- a/lisp/startup.el
+++ b/lisp/startup.el
@@ -397,7 +397,8 @@ Set this to nil if you want to prevent `auto-save-list-file-name'
from being initialized."
:type '(choice (const :tag "Don't record a session's auto save list" nil)
string)
- :group 'auto-save)
+ :group 'auto-save
+ :initialize 'custom-initialize-delay)
(defvar emacs-basic-display nil)
@@ -814,6 +815,12 @@ Amongst another things, it parses the command-line arguments."
((member vc '("never" "simple"))
(setq version-control 'never))))
+ ;; Set `user-emacs-directory' early so that delayed init variables
+ ;; can be updated.
+ (let ((ued (getenv "EMACS_USER_DIRECTORY")))
+ (when ued
+ (setq user-emacs-directory (file-name-as-directory ued))))
+
;;! This has been commented out; I currently find the behavior when
;;! split-window-keep-point is nil disturbing, but if I can get used
;;! to it, then it would be better to eliminate the option.
@@ -1101,11 +1108,15 @@ please check its value")
delayed-warnings-list)
"~/_emacs")
(t ;; But default to .emacs if _emacs does not exist.
- "~/.emacs"))))
+ "~/.emacs")))
+ (user-emacs-directory--from-env (getenv "EMACS_USER_DIRECTORY")))
;; This tells `load' to store the file name found
;; into user-init-file.
(setq user-init-file t)
- (load user-init-file-1 t t)
+
+ ;; Don't load `~/.emacs' if EMACS_USER_DIRECTORY was set
+ (unless user-emacs-directory--from-env
+ (load user-init-file-1 t t))
(when (eq user-init-file t)
;; If we did not find ~/.emacs, try
@@ -1114,7 +1125,9 @@ please check its value")
(expand-file-name
"init"
(file-name-as-directory
- (concat "~" init-file-user "/.emacs.d")))))
+ (if user-emacs-directory--from-env
+ user-emacs-directory
+ (concat "~" init-file-user "/.emacs.d"))))))
(load otherfile t t)
;; If we did not find the user's init file,
--
1.7.2.5
next prev parent reply other threads:[~2015-03-17 10:08 UTC|newest]
Thread overview: 16+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-10-06 17:08 bug#15539: 24.3; setting user-emacs-directory at command line invocation Mike Carifio
2015-03-13 15:01 ` bug#15539: Setting " François Févotte
2015-03-16 0:36 ` Glenn Morris
2015-03-16 7:28 ` François Févotte
2015-03-17 10:08 ` François Févotte [this message]
2016-02-15 10:31 ` bug#15539: [PATCH] Setting user-emacs-directory Alexis
2016-02-15 14:15 ` Eli Zaretskii
2016-02-24 4:03 ` Lars Ingebrigtsen
2016-02-24 17:15 ` Eli Zaretskii
2016-02-25 5:48 ` Lars Ingebrigtsen
2016-11-03 22:32 ` bug#15539: comment Max
2016-11-04 7:28 ` Eli Zaretskii
2016-11-04 12:42 ` Evgeny Roubinchtein
2016-11-04 12:55 ` Noam Postavsky
2016-11-04 13:59 ` Eli Zaretskii
2016-12-14 18:43 ` Glenn Morris
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='CAADsv94OnpBx4YpTdb3ivAbtgeTptWqSz5GN-k_=j=cuDKbEBQ@mail.gmail.com' \
--to=francois.fevotte@ensta.org \
--cc=15539@debbugs.gnu.org \
--cc=rgm@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).