How to start up emacs with different configurations
Asked Answered
E

5

15

I often come across the following popular emacs builds:

Currently I'm running a custom configuration, but I'd like to experiment with these builds without clobbering my current ~/.emacs.d.

Here's some background on my current installation:

I installed Emacs via Homebrew, so it's located here: /usr/local/Cellar/emacs/HEAD/Emacs.app My current version of emacs is: GNU Emacs 24.3.50.1 (i386-apple-darwin13.0.0, NS apple-appkit-1265.00)

Basically, here's what I'd like to know:

  1. What's the easiest way to switch between these builds as well as my current custom configuration?

  2. Given my current setup, is it possible to start multiple emacs sessions, each with their respective configuration/buffers?

Expiation answered 5/2, 2014 at 3:25 Comment(3)
It sounds like you've already outgrown them all -- time to build your own: #21242467 Install Bazaar through Macports and install the Apple developer tools, and deal with whatever may be missing if you get error messages when trying to build. It's only scary the fist couple of times and once you have the required tools to build your own Emacs, you'll never go back. Alternatively, just use emacsformacosx.com and forget about all the rest if your not going to build your own.Knighthood
In terms of libraries, it is as simple as commenting out whatever you don't want to use at the moment and then restarting Emacs -- e.g., comment out (require 'prelude... in your initialization file -- e.g., .emacs or init.el.Knighthood
See also thread #17484098Increate
A
11

(Edit: I've wrapped this approach up into a shell script which I've added to the EmacsWiki.)

I'd be inclined to use the $HOME environment variable:

  1. Firstly copy the 'distribution' (for want of a better term) into a sub-directory .emacs.d of a directory which will serve as the replacement $HOME for that distribution. i.e. /path/to/(distribution)/.emacs.d:

    $ git clone https://github.com/bbatsov/prelude.git ~/emacs/prelude/.emacs.d
    $ git clone https://github.com/overtone/emacs-live.git ~/emacs/emacs-live/.emacs.d
    
  2. Then you can start emacs using env to set the HOME environment variable locally for that command:

    $ env HOME=$HOME/emacs/prelude emacs
    $ env HOME=$HOME/emacs/emacs-live emacs
    

They shouldn't interact with each other, so you can run them together and have multiple side-by-side emacs instances, each using a different configuration.

I see that graphene is actually an ELPA package, so it has no init.el file and needs to be installed via the package manager; but you can still use the same technique to install it in a separate clean configuration: Simply make a similar directory structure to the others, then create an init.el file (e.g. ~/emacs/graphene/.emacs.d/init.el) containing the code from the graphene installation instructions, then run emacs (e.g. env HOME=$HOME/emacs/graphene emacs), and finish the remainder of the installation instructions.

The down-side to this technique is that Emacs won't see all your other dot files (because it will be looking in $HOME), and so running other processes from within Emacs won't necessarily work as normal; but that's not likely to be a huge issue if you're just experimenting, and you can always symlink or copy the bits you need.

You may even prefer it that way -- the benefit is that if anything in the distribution you're trialing writes files to the home directory, it's not going to clobber your real files.

This may also be a useful approach when upgrading Emacs to a new release (if you can run both the old and the new versions side by side) as you could set up a copy of your existing config to use with the new Emacs until you're convinced everything is working, and you can edit the new config without the risk of breaking your existing one. Or flip that around, and instead keep the original config in the new/alternate location, in case you need it as a back-up.

Animality answered 5/2, 2014 at 5:38 Comment(3)
Thank you for the response. Using this method, how would one switch between distributions? Is it as simple as changing my $HOME variable back to it's original value?Expiation
I like this. The ability to create unique emacs sessions from the command line is just the solution I was looking for.Expiation
@xingmu's answer is cleaner - because changing the HOME variable begs for problemsDownbeat
B
15

I create ~/.emacs.1.d/init.el file , and give it content:

(setq user-emacs-directory "~/.emacs.1.d/")

then , start emacs like this emacs -q -l ~/.emacs.1.d/init.el , now emacs used new configration.

success!!

  • -q is means skip the default configration ~/.emacs.d/init.el
  • -l is means load new configration
Brabazon answered 21/9, 2019 at 11:5 Comment(1)
This solution is the best - this should be the true answer. Since this works also in Windows.Downbeat
A
11

(Edit: I've wrapped this approach up into a shell script which I've added to the EmacsWiki.)

I'd be inclined to use the $HOME environment variable:

  1. Firstly copy the 'distribution' (for want of a better term) into a sub-directory .emacs.d of a directory which will serve as the replacement $HOME for that distribution. i.e. /path/to/(distribution)/.emacs.d:

    $ git clone https://github.com/bbatsov/prelude.git ~/emacs/prelude/.emacs.d
    $ git clone https://github.com/overtone/emacs-live.git ~/emacs/emacs-live/.emacs.d
    
  2. Then you can start emacs using env to set the HOME environment variable locally for that command:

    $ env HOME=$HOME/emacs/prelude emacs
    $ env HOME=$HOME/emacs/emacs-live emacs
    

They shouldn't interact with each other, so you can run them together and have multiple side-by-side emacs instances, each using a different configuration.

I see that graphene is actually an ELPA package, so it has no init.el file and needs to be installed via the package manager; but you can still use the same technique to install it in a separate clean configuration: Simply make a similar directory structure to the others, then create an init.el file (e.g. ~/emacs/graphene/.emacs.d/init.el) containing the code from the graphene installation instructions, then run emacs (e.g. env HOME=$HOME/emacs/graphene emacs), and finish the remainder of the installation instructions.

The down-side to this technique is that Emacs won't see all your other dot files (because it will be looking in $HOME), and so running other processes from within Emacs won't necessarily work as normal; but that's not likely to be a huge issue if you're just experimenting, and you can always symlink or copy the bits you need.

You may even prefer it that way -- the benefit is that if anything in the distribution you're trialing writes files to the home directory, it's not going to clobber your real files.

This may also be a useful approach when upgrading Emacs to a new release (if you can run both the old and the new versions side by side) as you could set up a copy of your existing config to use with the new Emacs until you're convinced everything is working, and you can edit the new config without the risk of breaking your existing one. Or flip that around, and instead keep the original config in the new/alternate location, in case you need it as a back-up.

Animality answered 5/2, 2014 at 5:38 Comment(3)
Thank you for the response. Using this method, how would one switch between distributions? Is it as simple as changing my $HOME variable back to it's original value?Expiation
I like this. The ability to create unique emacs sessions from the command line is just the solution I was looking for.Expiation
@xingmu's answer is cleaner - because changing the HOME variable begs for problemsDownbeat
C
9

You can symlink ~/.emacs.d, this is what I do

1) Try to keep my emacs configuration ~/.emacs.d oriented i.e. all the config files should live in that folder. For example I use workgroups2, by default it stores workgroup configuration in ~/.emacs_workgroups but I have configured it to store configuration in ~/.emacs.d/workgroups, so my entire emacs configuration is in just one folder.

2) Then I have an ~/emacs_configs folder where all config folders (basically a folder with a init.el and rest of the configuration) live, so my personal config folder will be ~/emacs_configs/iqbal, a prelude distribution will be in ~/emacs_configs/prelude

3) Then finally I symlink ~/.emacs.d to the configuration I actually want to use, eg. to use my configuration I will do ln -s ~/emacs_configs/iqbal .emacs.d. If you want to tryout some configuration just copy the configuration folder to ~/emacs_configs/whatever_name and change the symlink

Hope this helps

Creamcups answered 5/2, 2014 at 4:59 Comment(1)
This is exactly what I do, right down to the ~/emacs_configs location.Belorussia
B
0

You can do this with chemacs2. This is the primary (only?) usecase of chemacs2.

Buprestid answered 14/2, 2023 at 22:3 Comment(0)
P
0

As was answered elsewhere:

In Emacs 29+, set the user-emacs-directory with the flag --init-directory.

So if you, e.g. have prelude in a ~/.config/emacs/prelude directory, to use it you can start emacs with emacs --init-directory ~/.config/emacs/prelude.

Paintbox answered 29/12, 2023 at 19:34 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.