From: "François Févotte" <fevotte@gmail.com>
To: emacs-devel@gnu.org
Subject: [PATCH] Setting user-emacs-directory
Date: Tue, 24 Mar 2015 00:25:16 +0100 [thread overview]
Message-ID: <CAADsv94GP0tVZtsS0na6RWtOc+WpDDAYDZqw299hw6j5Rq8sUw@mail.gmail.com> (raw)
[-- Attachment #1: Type: text/plain, Size: 1407 bytes --]
Hello emacs-devel,
below is a patch trying to address old bug #15539.
It introduces an EMACS_USER_DIRECTORY environment variable which (if
present) has two effects:
1- it provides a custom value for `user-emacs-directory' (instead of
the default `~/.emacs.d').
2- it instructs emacs to look for the initialization file in the
provided directory (instead of `~USER/.emacs.d')
As explained in the bug's discussion, this covers more use cases than
simply symlinking ~/.emacs.d. Here are for example a few words about
my use case: at work, I try to maintain a sensible set of init files
for my co-workers to use (with the very outdated default version that
we have installed by default on our systems: 23.2). On the other hand,
on my machine, I maintain a locally-installed Emacs version that is
more up-to-date. In order to maintain both sets of init files, I need
to be able to run
both versions of Emacs at the same time, which prevents me from
symlinking ~/.emacs.d/
There are also reddit[1] and stackexchange[2] questions hinting at the
same kind of use.
Please do not hesitate to comment and criticize the patch; this is my
first time and I might very well have overlooked some details.
Thanks in advance,
François
[1] http://www.reddit.com/r/emacs/comments/2y1b3a/how_can_i_easily_keep_different_emacsd_folders/
[2] http://emacs.stackexchange.com/q/4253/221
[-- Attachment #2: 0001-Look-for-an-EMACS_USER_DIRECTORY-environment-variabl.patch --]
[-- Type: text/x-patch, Size: 5189 bytes --]
From f98d2af08d2346121556f4fd91628dc0316cbff0 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Fran=C3=A7ois=20F=C3=A9votte?= <francois.fevotte@ensta.org>
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 reply other threads:[~2015-03-23 23:25 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-03-23 23:25 François Févotte [this message]
2015-04-01 15:24 ` [PATCH] Setting user-emacs-directory François Févotte
2015-04-01 15:38 ` bug#15539: " Oleh Krehel
2015-04-01 15:49 ` Drew Adams
2015-04-01 15:49 ` bug#15539: " Drew Adams
2015-04-01 16:48 ` Oleh Krehel
2015-04-01 17:16 ` François Févotte
2015-04-01 21:03 ` Stefan Monnier
2015-04-02 8:12 ` François Févotte
2015-04-01 15:24 ` François Févotte
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
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=CAADsv94GP0tVZtsS0na6RWtOc+WpDDAYDZqw299hw6j5Rq8sUw@mail.gmail.com \
--to=fevotte@gmail.com \
--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 external index
https://git.savannah.gnu.org/cgit/emacs.git
https://git.savannah.gnu.org/cgit/emacs/org-mode.git
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.