As time goes, my .emacs file grows so large that I find it difficult to organise, to switch things on/off and document the references where I found solutions for certain tasks. I decided to use Org to organise my .emacs file so that I can have emacs-lisp code and descriptions all in one file with sections.
My dotemacs.org has two parts. The first part initialise Org for loading the second part, where most of the settings are.
MELPA has to be loaded before Org is loaded. This part of the file will be tangled into a file called dotemacs.
* MELPA Load MELPA #+BEGIN_SRC emacs-lisp :tangle dotemacs (require 'package) (add-to-list 'package-archives '("melpa" . "http://melpa.milkbox.net/packages/") t) (when (< emacs-major-version 24) (add-to-list 'package-archives '("gnu" . "http://elpa.gnu.org/packages/"))) (package-initialize) #+END_SRC * Load the rest #+BEGIN_SRC emacs-lisp :tangle dotemacs (require 'org) (org-babel-load-file "~/env/emacs/dotemacs.org") #+END_SRC
The rest of the dotemacs.org file
Here is where you put your emacs settings. This part of the file will be tangled into a file called dotemacs.el
* Python ** Jedi Jedi is an emacs package for Python auto-completion #+BEGIN_SRC emacs-lisp :tangle yes (require 'jedi) (autoload 'jedi:setup "jedi" nil t) (add-hook 'python-mode-hook 'jedi:setup) (setq jedi:setup-keys t) #+END_SRC * Magit Magit is an emacs package for handling git repositories. #+BEGIN_SRC emacs-lisp :tangle yes (global-set-key (kbd "C-c g") 'magit-status) #+END_SRC
The first part of the org file is tangled into a file called “dotemacs” (because I put “dotemacs” after :tangle). Now all you need to do is to make a symbolic link .emacs in your home directory to point to this dotemacs file.
ln -s ~/env/emacs/dotemacs ~/.emacs
Then emacs will load the dotemacs.org to tangle the rest of the settings into dotemacs.el. Org is smart enough not to recompile dotemacs.el if nothing is changed.
Alternative method - not using Org at all
Neglecting all of the above, there is another way to organise your emacs settings. That is to put your settings into separate .el files and include them using the
require command in your .emacs file like this:
(add-to-list 'load-path "~/.emacs.d/user_settings") (require 'python-settings)
And you will have your python-mode setting in