This repository contains all my settings for emacs. It is structured so that it is easy for me to setup emacs in any system that I work on, simply by cloning this repo on that system, and then copying the .emacs files to the home directory.
-
Download and install emacs
-
Clone this repository in your home directory:
git clone https://github.com/arvindd/.emacs.d.git
Home directory depends on the type of your system: on Windows, this is the
%USERPROFILE%
location, and on Unix/Linux, it is where$HOME
points to. -
Move the file
.emacs
seen in the cloned directory to your home directory too
That is it. You should be able to use emacs already with this setup, with many settings already in place for you.
The settings can be further customised by anybody who uses this repo, either by directly changing the settings in the *.el files, or by simply adding one of these files - .emacsuserpre
OR/AND .emacsuserpost
- in the home directory. The pre-settings file sets configurations that
can help in being effective before the rest of the settings are effective (therefore, things like setting proxy in a corporate environment
can get into this) and the post-settings file are for settings that can override default settings (for example, you may override the default
color scheme here).
By adding such a user-settings file, it is possible for whoever uses this repo to keep the settings updated from the repo, without the fear of overwriting their own settings. The file .emacsuserpre
or .emacsuserpost
will not be overwritten by repo update, because this file is outside the repo, and need to be created by the user. Samples of both these files are also in this repo.
The file .emacs
that is in the repo (and which needs to be moved to the home directory before using these settings) contain basic paths for various features (eg: notesdir
where the org-mode files will be in, etc.). emacshome
is like the top-most directory, relative to which other files are searched for.
Any customisations done via the emacs customisation interface go into the custom.el
file.
Note that all the keybindings (except those for org-mode) are put in one place: keybindings.el
. All the org-mode keybindings are put along with other org-mode settings (see below).
Hey, this is another small trick. To pin emacs on the taskbar, just follow these steps:
- In your emacs distribution, get into the
bin
folder, and double-click onrunemacs
to start emacs. Emacs starts, with an icon shown on the taskbar - Now, right-click on the icon on the taskbar, and click on "pin to taskbar"
- Right-click this icon again, and move up to
emacs
menu-option, and right-click that again. Select "Properties" - In the "Properties", change the target to run
runemacs
instead ofemacs
that you'll see there. Very important is to keep the rest of the path as it is!
Yes, it requires all these steps in this order to have the best "pin to taskbar" experience. A simple "pin to taskbar" with following the other (one-time) steps will show two icons on the taskbar everytime emacs is started.
NOTE: For this to work, you should have already followed the steps mentione in "Starting Emacs as a server" above.
If you would just like to use emacs to edit files, and would like to access emacs via a context menu, all you have to do is to edit the addtomenu
file that you see in this repo to change all the paths to emacs to the one that you have in your PC, and then double-click this file to add some registry information. After do this, you will see two menu items in your context-menu: one that starts a new emacs for editing files, and one that simply allows you to use an existing emacs instance to edit a file.
If your emacs is in c:\tools\emacs
directory, then, the file addtomenu
already contains this path: simply double-click that to add these menu-items in your context-menu.
The popular package color-theme is included with the configuration. The default color theme is as set in loadext.el
file.
To choose another color theme:
-
Type
M-x color-theme-select
-
In the buffer that gives a list of color themes, test your theme by simply moving your cursor on a color-theme, and pressing
<ENTER>
-
Once satisfied with a specific color theme, keeping the cursor on the selected theme, press
?
- you will now see information on the chosen color theme. -
The name of the color theme that you can use will be mentioned in the information. Simply add this in the
<emacshome>/.emacsuser
file. Example:(color-theme-pok-wog)
-
Of course, you could also replace the default color theme in
loadext.el
file with your chosen theme - in that case, if you pull in new updates to your.emacs.d
folder, you will overide the setting.
The settings have been done so that all the emacs packages get into the directory <emacshome>/.emacselpa
. For the packages to be installed, it is important that you have the proper GPG key for verifying the signatures of the package. Follow these steps to make it all work:
-
Start up emacs
-
Temperorily disable signature check:
M-: (setq package-check-signature nil) RET
-
Refresh package contents, and install the latest GNU GPG keys
M-x package-refresh-contents RET M-x package-install RET gnu-elpa-keyring-update RET
-
Revert back the checking of the package signatures
M-: (setq package-check-signature 'allow-unsigned) RET
Having done the above steps once after you clone this repo, there is no longer any need to do them again. Every other time you want to install a package, just use the normal elpa ways to install a package:
M-x package-install RET <package-to-install> RET
There are so many interesting emacs packages that can be installed to make your emacs experience very good. One of the many such interesting package is: magit - a magical git interface. To install this in your emacs installation, just do this:
M-x package-install RET magit RET
Keybinding for magit
is already configured in the settings; to invoke magit, just use: c-x g
. To know how to use magit for working with git, check out the official magit website.
All installed packages get into the directory <emacshome>/.emacselpa
. These are not affected anytime you update this repo because this directory is outside the repository. You are free to install whatever packages you need.
All settings for package installation from ELPA sources are in the load-melpa.el
file.
Every package that is installed gets into the <emacshome>/.emacselpa
directory, and an entry to that effect gets into the custom.el file. If, for whatever reason you lose your <emacshome>/.emacselpa
directory, and need to re-install the packages again, follow the one-time steps of installing the GNU GPG keys above, and then:
M-x package-install-selected-packages RET
This will re-install all packages back into the <emacshome>/.emacselpa
directory.
Of course, a lot of this section is very subjective: the workflow I mention here is what I use for maintaining my Todos.
As a developer, we have many demands to fulfill - each from various projects that we are involved in. Some of these todos are those that we make a note-of ourselves, and some of them come to us from other sources - our bosses, colleagues, friends (eg: in an opensource collaboration), or even from our family :-)
What other best tool do we have when compared to our dear-old Emacs? With org-mode, we organise our lives in plain-text!
The default workflow for all our todos as configured by the org-mode settings (see below) goes like this:
- All captured todos get into a todo file in the default state
TODO
. Capture is configured to be done withC-c c
. - When we begin working on them, we move them to
INPROGRESS
. Moving a todo to a state forward (in this case, fromTODO
toINPROGRESS
) is done usingS-right
. - If this todo has many steps, they are added as sub-entries. Default state of these added sub-entries are also
TODO
. - Some of these sub-entries may actually become the
NEXT
thing to do with respect to the originalINPROGRESS
todo. If theINPROGRESS
todo is already self-contained, it becomes theNEXT
action itself. - When time comes to work on a
NEXT
action, it gets to be a task to be doneTODAY
. Of course, it remains atTODAY
until it is done OR...- If it needs a dependent action to be done (eg, your code is to be reviewed by another collegue before checking in), it gets
WAIT
ing. - If it is no longer relevant (eg: deadline is passed, and your boss is angry at you) - your task gets
CANCELLED
. - May be it is not very important now, but still needs to be in your radar until you are satisfied to restart it, or cancel it - so it is
DEFERRED
.
- If it needs a dependent action to be done (eg, your code is to be reviewed by another collegue before checking in), it gets
- From any of the above states, to go back to the previous state, use
S-Left
.
You can either follow the same workflow, or of course, change it to your liking - see org-mode settings below.
Well, most of the settings are directly to use the org-mode very effectively. All the org-mode settings are in the file orgsettings.el
. On default, all the org-mode files are to be stored in the directory <emacshome>/.notes
- and this can be changed by changing the value of the variable notesdir
in .emacs
.
To change the behaviour of orgmode, either change the settings in this file, or, override them by putting the settings in your own .emacsuser
file in the home directory. The advantage of putting it in the .emacsuser
is that you can update the repo for new settings, without the fear of overwriting your own settings.
All the calendar and diary settings get into caldiary.el
.
We have some customisations for the calendar and diary too. Most importantly, for the calendar (which in our configuration is bound to c-c v
, as expected, in keybindings.el
), week numbers are displayed. The week also starts from Monday, with the weekends put at the end.
Diary is bound to c-c d
- again, done in keybindings.el
. Diary file is searched in the same directory as your notes: on default, the file ~/.notes/diary is used. This location can be changed in init.el
. The first time diary is used, this file needs to be created.
extensions
- Where you can drop other extensions you want. The file loadext.el
is for adding all the auto-load statements for loading the dropped extensions. It also loads the color-theme.
mycode
- Any custom code you have developed yourself can get in here.
elpa
- All packages installed ia the M-x package-install
goes into this directory.
The autosaves of emacs get into <emacshome>/.emacsautosaves
and all the emacs backups get into <emacshome>/.emacssaves
. These directories are automatically created when you use emacs for the first time. By moving the autosaves and backups to this location, we will avoid having such files strewn in all our filesystem locations. What will still be created in the same directory as your opened file is the lock file created by emacs (starting with .#) to avoid multiple instances of emacs accessing the same file. You can switch off creation of such lock files by uncommenting the line that mentions so in init.el
.
All the *.el files in the repo have lots of comments - so it is easy to change the settings as hinted by the comments. Feel free to make this your own!