unofficial mirror of emacs-devel@gnu.org 
 help / color / mirror / code / Atom feed
* [PATCH] Setting user-emacs-directory
@ 2015-03-23 23:25 François Févotte
  2015-04-01 15:24 ` François Févotte
  0 siblings, 1 reply; 4+ messages in thread
From: François Févotte @ 2015-03-23 23:25 UTC (permalink / raw)
  To: emacs-devel

[-- 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


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

* Re: [PATCH] Setting user-emacs-directory
  2015-03-23 23:25 [PATCH] Setting user-emacs-directory François Févotte
@ 2015-04-01 15:24 ` François Févotte
  2015-04-01 15:38   ` bug#15539: " Oleh Krehel
  0 siblings, 1 reply; 4+ messages in thread
From: François Févotte @ 2015-04-01 15:24 UTC (permalink / raw)
  To: emacs-devel, 15539

Hello,

On Tue, Mar 24, 2015 at 12:25 AM, François Févotte <fevotte@gmail.com> wrote:
> below is a patch trying to address old bug #15539.

after the lack of reaction to my last email, I would like to have one
more chance of getting emacs-devel's feedback on this issue (namely:
being able to tell Emacs where to find its init file).

Is nobody interested in this feature?  Or is the proposed patch not adequate?
In the former case, please just say so, so that we can maybe mark the
bug as "wontfix" and let it be clear.  In the latter case, I'm still
welcoming any comment on the proposed solution.  And of course I'm
willing to work on any improvement you might suggest.

Thanks in advance,
   François



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

* bug#15539: [PATCH] Setting user-emacs-directory
  2015-04-01 15:24 ` François Févotte
@ 2015-04-01 15:38   ` Oleh Krehel
  2015-04-01 15:49     ` Drew Adams
  0 siblings, 1 reply; 4+ messages in thread
From: Oleh Krehel @ 2015-04-01 15:38 UTC (permalink / raw)
  To: François Févotte; +Cc: 15539, emacs-devel

François Févotte <francois.fevotte@ensta.org> writes:

> Hello,
>
> On Tue, Mar 24, 2015 at 12:25 AM, François Févotte <fevotte@gmail.com> wrote:
>> below is a patch trying to address old bug #15539.
>
> after the lack of reaction to my last email, I would like to have one
> more chance of getting emacs-devel's feedback on this issue (namely:
> being able to tell Emacs where to find its init file).
>
> Is nobody interested in this feature?  Or is the proposed patch not adequate?
> In the former case, please just say so, so that we can maybe mark the
> bug as "wontfix" and let it be clear.  In the latter case, I'm still
> welcoming any comment on the proposed solution.  And of course I'm
> willing to work on any improvement you might suggest.

I'm interested in this feature, I just didn't have time to test it yet.
I'll try to look at it soon.

Oleh





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

* RE: [PATCH] Setting user-emacs-directory
  2015-04-01 15:38   ` bug#15539: " Oleh Krehel
@ 2015-04-01 15:49     ` Drew Adams
  0 siblings, 0 replies; 4+ messages in thread
From: Drew Adams @ 2015-04-01 15:49 UTC (permalink / raw)
  To: Oleh Krehel, François Févotte; +Cc: 15539, emacs-devel

> I'm interested in this feature, I just didn't have time to test it yet.
> I'll try to look at it soon.

Can y'all please drop one of the mailing lists (e.g. emacs-devel)?  Thx.



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

end of thread, other threads:[~2015-04-01 15:49 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2015-03-23 23:25 [PATCH] Setting user-emacs-directory François Févotte
2015-04-01 15:24 ` François Févotte
2015-04-01 15:38   ` bug#15539: " Oleh Krehel
2015-04-01 15:49     ` Drew Adams

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