diff --git a/README.md b/README.md
index f5499c3..6e2a29f 100644
--- a/README.md
+++ b/README.md
@@ -24,6 +24,7 @@
- [Java and C](#java-and-c)
- [Assembler](#assembler)
- [LaTeX](#latex)
+ - [Markdown](#markdown)
- [Python](#python)
- [Haskell](#haskell)
- [Matlab](#matlab)
@@ -31,11 +32,43 @@
# About
-This is a Emacs configuration file written in `org-mode`. There are a few
-reasons why I wanted to do this. My `.emacs.d/` was a mess, and needed a
-proper clean-up. Also I like keeping all my configurations in a single
-file, using `org-mode` I can keep this file *organized*. I aim to briefly
-explain all my configurations.
+This is an Emacs configuration file written in [Org mode](http://orgmode.org). It is an attempt
+to keep my `~/.emacs.d` tidy, but still be able to keep it all in one
+file. I aim to briefly explain all my configurations as I go along!
+
+I would not recommend using this configuration *as-is*, because it
+probably contains a lot you don't really need. I do, however, hope people
+find some golden nuggets that they can smuggle into their own configs.
+
+If you really do want to try this config out, this is how I'd go about it:
+
+**Clone the repo.**
+
+```sh
+git clone https://github.com/larstvei/dot-emacs
+```
+
+**Backup your old `~/.emacs.d` (if necessary).**
+
+```sh
+mv ~/.emacs.d ~/.emacs.d-bak
+```
+
+**Backup your old `~/.emacs`-file (if necessary).**
+
+```sh
+mv ~/.emacs ~/.emacs-bak
+```
+
+**And finally**
+
+```sh
+mv dot-emacs ~/.emacs.d
+```
+
+On first run it should install a bunch of packages (this might take a
+while), and you might have to restart your Emacs the first time. If you
+experience bugs, please let me know!
# Configurations
@@ -63,11 +96,14 @@ tangled, and the tangled file is compiled."
## Package
-Managing extensions for Emacs is simplified using `package` which
-is built in to Emacs 24 and newer. To load downloaded packages we
-need to initialize `package`.
+Managing extensions for Emacs is simplified using `package` which is
+built in to Emacs 24 and newer. To load downloaded packages we need to
+initialize `package`. `cl` is a library that contains many functions from
+Common Lisp, and comes in handy quite often, so we want to make sure it's
+loaded, along with `package`, which is obviously needed.
```lisp
+(require 'cl)
(require 'package)
(setq package-enable-at-startup nil)
(package-initialize)
@@ -187,6 +223,7 @@ configurations are also dependent on them).
ace-jump-mode ; quick cursor location minor mode
auto-compile ; automatically compile Emacs Lisp libraries
auto-complete ; auto completion
+ centered-window ; Center the text when there's only one window
elscreen ; window session manager
expand-region ; Increase selected region by semantic units
flx-ido ; flx integration for ido
@@ -205,6 +242,7 @@ configurations are also dependent on them).
paredit ; minor mode for editing parentheses
powerline ; Rewrite of Powerline
pretty-lambdada ; the word `lambda' as the Greek letter.
+ slime ; Superior Lisp Interaction Mode for Emacs
smex ; M-x interface with Ido-style fuzzy matching.
undo-tree)) ; Treat undo history as a tree
;; Fetch dependencies from all packages.
@@ -281,7 +319,10 @@ We can set variables to whatever value we'd like using `setq`.
inhibit-startup-message t ; No splash screen please.
initial-scratch-message nil ; Clean scratch buffer.
ring-bell-function 'ignore ; Quiet.
- undo-tree-auto-save-history t ; Save undo history between sessions.
+ ;; Save undo history between sessions, if you have an undo-dir
+ undo-tree-auto-save-history
+ (file-exists-p
+ (concat user-emacs-directory "undo"))
undo-tree-history-directory-alist
;; Put undo-history files in a directory, if it exists.
(let ((undo-dir (concat user-emacs-directory "undo")))
@@ -625,19 +666,17 @@ we want to enable cycling the languages by typing `C-c l`, so we bind the
function returned from `cycle-languages`.
```lisp
-(defadvice turn-on-flyspell (around check nil activate)
+(defadvice turn-on-flyspell (before check nil activate)
"Turns on flyspell only if a spell-checking tool is installed."
(when (executable-find ispell-program-name)
- (local-set-key (kbd "C-c l") (cycle-languages))
- ad-do-it))
+ (local-set-key (kbd "C-c l") (cycle-languages))))
```
```lisp
-(defadvice flyspell-prog-mode (around check nil activate)
+(defadvice flyspell-prog-mode (before check nil activate)
"Turns on flyspell only if a spell-checking tool is installed."
(when (executable-find ispell-program-name)
- (local-set-key (kbd "C-c l") (cycle-languages))
- ad-do-it))
+ (local-set-key (kbd "C-c l") (cycle-languages))))
```
## Org
@@ -654,7 +693,11 @@ When editing org-files with source-blocks, we want the source blocks to
be themed as they would in their native mode.
```lisp
-(setq org-src-fontify-natively t)
+(setq org-src-fontify-natively t
+ org-confirm-babel-evaluate nil)
+(require 'org)
+(setcar (nthcdr 2 org-emphasis-regexp-components) " \t\n,")
+(custom-set-variables `(org-emphasis-alist ',org-emphasis-alist))
```
## Interactive functions
@@ -701,7 +744,7 @@ function.
```lisp
(defun duplicate-thing ()
- "Ethier duplicates the line or the region"
+ "Duplicates the current line, or the region if active."
(interactive)
(save-excursion
(let ((start (if (region-active-p) (region-beginning) (point-at-bol)))
@@ -725,11 +768,6 @@ To tidy up a buffer we define this function borrowed from [simenheg](https://git
(untabify beg (if (< end (point-max)) end (point-max)))))
```
-Presentation mode.
-
-```lisp
-```
-
## Key bindings
Bindings for [expand-region](https://github.com/magnars/expand-region.el).
@@ -851,7 +889,8 @@ can add some extra lisp-modes. We run the `pretty-lambda-for-modes`
function to activate `pretty-lambda-mode` in lisp modes.
```lisp
-(dolist (mode '(slime-repl-mode geiser-repl-mode))
+(dolist (mode '(slime-repl-mode geiser-repl-mode ielm-mode clojure-mode
+ cider-repl-mode))
(add-to-list 'pretty-lambda-auto-modes mode))
(pretty-lambda-for-modes)
@@ -1009,7 +1048,40 @@ Tex- and LaTeX-mode, we can add the flag with a rather dirty statement
'(setcar (cdr (cddaar tex-compile-commands)) " -shell-escape "))
```
-## Python
+## Markdown
+
+I sometimes use a specialized markdown format, where inline math-blocks
+can be achieved by surrounding a LaTeX formula with `$math$` and
+`$/math$`. Writing these out became tedious, so I wrote a small function.
+
+```lisp
+(defun insert-markdown-inline-math-block ()
+ "Inserts an empty math-block if no region is active, otherwise wrap a
+math-block around the region."
+ (interactive)
+ (let* ((beg (region-beginning))
+ (end (region-end))
+ (body (if (region-active-p) (buffer-substring beg end) "")))
+ (when (region-active-p)
+ (delete-region beg end))
+ (insert (concat "$math$ " body " $/math$"))
+ (search-backward " $/math$")))
+```
+
+Most of my writing in this markup is in Norwegian, so the dictionary is
+set accordingly. The markup is also sensitive to line breaks, so
+`auto-fill-mode` is disabled. Of course we want to bind our lovely
+function to a key!
+
+```lisp
+(add-hook 'markdown-mode-hook
+ (lambda ()
+ (auto-fill-mode 0)
+ (ispell-change-dictionary "norsk")
+ (local-set-key (kbd "C-c b") 'insert-markdown-inline-math-block)) t)
+```
+
+## Python
[Jedi](http://tkf.github.io/emacs-jedi/released/) offers very nice auto completion for `python-mode`. Mind that it is
dependent on some python programs as well, so make sure you follow the
@@ -1024,7 +1096,7 @@ instructions from the site.
(add-hook 'python-mode-hook 'jedi:ac-setup)
```
-## Haskell
+## Haskell
`haskell-doc-mode` is similar to `eldoc`, it displays documentation in
the echo area. Haskell has several indentation modes - I prefer using
@@ -1035,7 +1107,7 @@ the echo area. Haskell has several indentation modes - I prefer using
(add-hook 'haskell-mode-hook 'turn-on-haskell-indent)
```
-## Matlab
+## Matlab
`Matlab-mode` works pretty good out of the box, but we can do without the
splash screen.
diff --git a/init.el b/init.el
index 76bd5ea..567676a 100644
--- a/init.el
+++ b/init.el
@@ -21,10 +21,13 @@ tangled, and the tangled file is compiled."
;; Package
-;; Managing extensions for Emacs is simplified using =package= which
-;; is built in to Emacs 24 and newer. To load downloaded packages we
-;; need to initialize =package=.
+;; Managing extensions for Emacs is simplified using =package= which is
+;; built in to Emacs 24 and newer. To load downloaded packages we need to
+;; initialize =package=. =cl= is a library that contains many functions from
+;; Common Lisp, and comes in handy quite often, so we want to make sure it's
+;; loaded, along with =package=, which is obviously needed.
+(require 'cl)
(require 'package)
(setq package-enable-at-startup nil)
(package-initialize)
@@ -130,6 +133,7 @@ PACKAGE is installed and the current version is deleted."
ace-jump-mode ; quick cursor location minor mode
auto-compile ; automatically compile Emacs Lisp libraries
auto-complete ; auto completion
+ centered-window ; Center the text when there's only one window
elscreen ; window session manager
expand-region ; Increase selected region by semantic units
flx-ido ; flx integration for ido
@@ -148,6 +152,7 @@ PACKAGE is installed and the current version is deleted."
paredit ; minor mode for editing parentheses
powerline ; Rewrite of Powerline
pretty-lambdada ; the word `lambda' as the Greek letter.
+ slime ; Superior Lisp Interaction Mode for Emacs
smex ; M-x interface with Ido-style fuzzy matching.
undo-tree)) ; Treat undo history as a tree
;; Fetch dependencies from all packages.
@@ -218,7 +223,10 @@ PACKAGE is installed and the current version is deleted."
inhibit-startup-message t ; No splash screen please.
initial-scratch-message nil ; Clean scratch buffer.
ring-bell-function 'ignore ; Quiet.
- undo-tree-auto-save-history t ; Save undo history between sessions.
+ ;; Save undo history between sessions, if you have an undo-dir
+ undo-tree-auto-save-history
+ (file-exists-p
+ (concat user-emacs-directory "undo"))
undo-tree-history-directory-alist
;; Put undo-history files in a directory, if it exists.
(let ((undo-dir (concat user-emacs-directory "undo")))
@@ -506,17 +514,15 @@ the languages in ISPELL-LANGUAGES when invoked."
;; we want to enable cycling the languages by typing =C-c l=, so we bind the
;; function returned from =cycle-languages=.
-(defadvice turn-on-flyspell (around check nil activate)
+(defadvice turn-on-flyspell (before check nil activate)
"Turns on flyspell only if a spell-checking tool is installed."
(when (executable-find ispell-program-name)
- (local-set-key (kbd "C-c l") (cycle-languages))
- ad-do-it))
+ (local-set-key (kbd "C-c l") (cycle-languages))))
-(defadvice flyspell-prog-mode (around check nil activate)
+(defadvice flyspell-prog-mode (before check nil activate)
"Turns on flyspell only if a spell-checking tool is installed."
(when (executable-find ispell-program-name)
- (local-set-key (kbd "C-c l") (cycle-languages))
- ad-do-it))
+ (local-set-key (kbd "C-c l") (cycle-languages))))
;; Org
@@ -529,7 +535,11 @@ the languages in ISPELL-LANGUAGES when invoked."
;; When editing org-files with source-blocks, we want the source blocks to
;; be themed as they would in their native mode.
-(setq org-src-fontify-natively t)
+(setq org-src-fontify-natively t
+ org-confirm-babel-evaluate nil)
+(require 'org)
+(setcar (nthcdr 2 org-emphasis-regexp-components) " \t\n,")
+(custom-set-variables `(org-emphasis-alist ',org-emphasis-alist))
;; Interactive functions
;; <>
@@ -567,7 +577,7 @@ the languages in ISPELL-LANGUAGES when invoked."
;; function.
(defun duplicate-thing ()
- "Ethier duplicates the line or the region"
+ "Duplicates the current line, or the region if active."
(interactive)
(save-excursion
(let ((start (if (region-active-p) (region-beginning) (point-at-bol)))
@@ -588,10 +598,6 @@ the languages in ISPELL-LANGUAGES when invoked."
(whitespace-cleanup)
(untabify beg (if (< end (point-max)) end (point-max)))))
-;; Presentation mode.
-
-
-
;; Key bindings
;; Bindings for [[https://github.com/magnars/expand-region.el][expand-region]].
@@ -688,7 +694,8 @@ the languages in ISPELL-LANGUAGES when invoked."
;; can add some extra lisp-modes. We run the =pretty-lambda-for-modes=
;; function to activate =pretty-lambda-mode= in lisp modes.
-(dolist (mode '(slime-repl-mode geiser-repl-mode))
+(dolist (mode '(slime-repl-mode geiser-repl-mode ielm-mode clojure-mode
+ cider-repl-mode))
(add-to-list 'pretty-lambda-auto-modes mode))
(pretty-lambda-for-modes)
@@ -819,6 +826,35 @@ the languages in ISPELL-LANGUAGES when invoked."
(eval-after-load 'tex-mode
'(setcar (cdr (cddaar tex-compile-commands)) " -shell-escape "))
+;; Markdown
+
+;; I sometimes use a specialized markdown format, where inline math-blocks
+;; can be achieved by surrounding a LaTeX formula with =$math$= and
+;; =$/math$=. Writing these out became tedious, so I wrote a small function.
+
+(defun insert-markdown-inline-math-block ()
+ "Inserts an empty math-block if no region is active, otherwise wrap a
+math-block around the region."
+ (interactive)
+ (let* ((beg (region-beginning))
+ (end (region-end))
+ (body (if (region-active-p) (buffer-substring beg end) "")))
+ (when (region-active-p)
+ (delete-region beg end))
+ (insert (concat "$math$ " body " $/math$"))
+ (search-backward " $/math$")))
+
+;; Most of my writing in this markup is in Norwegian, so the dictionary is
+;; set accordingly. The markup is also sensitive to line breaks, so
+;; =auto-fill-mode= is disabled. Of course we want to bind our lovely
+;; function to a key!
+
+(add-hook 'markdown-mode-hook
+ (lambda ()
+ (auto-fill-mode 0)
+ (ispell-change-dictionary "norsk")
+ (local-set-key (kbd "C-c b") 'insert-markdown-inline-math-block)) t)
+
;; Python
;; [[http://tkf.github.io/emacs-jedi/released/][Jedi]] offers very nice auto completion for =python-mode=. Mind that it is
diff --git a/init.org b/init.org
index 74aa1d4..58698d5 100644
--- a/init.org
+++ b/init.org
@@ -7,11 +7,40 @@
#+AUTHOR: Lars Tveito
* About
- This is a Emacs configuration file written in =org-mode=. There are a few
- reasons why I wanted to do this. My =.emacs.d/= was a mess, and needed a
- proper clean-up. Also I like keeping all my configurations in a single
- file, using =org-mode= I can keep this file /organized/. I aim to briefly
- explain all my configurations.
+
+ This is an Emacs configuration file written in [[http://orgmode.org][Org mode]]. It is an attempt
+ to keep my =~/.emacs.d= tidy, but still be able to keep it all in one
+ file. I aim to briefly explain all my configurations as I go along!
+
+ I would not recommend using this configuration /as-is/, because it
+ probably contains a lot you don't really need. I do, however, hope people
+ find some golden nuggets that they can smuggle into their own configs.
+
+ If you really do want to try this config out, this is how I'd go about it:
+
+ *Clone the repo.*
+ #+BEGIN_SRC sh :tangle no
+ git clone https://github.com/larstvei/dot-emacs
+ #+END_SRC
+
+ *Backup your old =~/.emacs.d= (if necessary).*
+ #+BEGIN_SRC sh :tangle no
+ mv ~/.emacs.d ~/.emacs.d-bak
+ #+END_SRC
+
+ *Backup your old =~/.emacs=-file (if necessary).*
+ #+BEGIN_SRC sh :tangle no
+ mv ~/.emacs ~/.emacs-bak
+ #+END_SRC
+
+ *And finally*
+ #+BEGIN_SRC sh :tangle no
+ mv dot-emacs ~/.emacs.d
+ #+END_SRC
+
+ On first run it should install a bunch of packages (this might take a
+ while), and you might have to restart your Emacs the first time. If you
+ experience bugs, please let me know!
* Configurations
** Meta
@@ -38,11 +67,14 @@
** Package
- Managing extensions for Emacs is simplified using =package= which
- is built in to Emacs 24 and newer. To load downloaded packages we
- need to initialize =package=.
+ Managing extensions for Emacs is simplified using =package= which is
+ built in to Emacs 24 and newer. To load downloaded packages we need to
+ initialize =package=. =cl= is a library that contains many functions from
+ Common Lisp, and comes in handy quite often, so we want to make sure it's
+ loaded, along with =package=, which is obviously needed.
#+BEGIN_SRC emacs-lisp
+ (require 'cl)
(require 'package)
(setq package-enable-at-startup nil)
(package-initialize)
@@ -162,6 +194,7 @@
ace-jump-mode ; quick cursor location minor mode
auto-compile ; automatically compile Emacs Lisp libraries
auto-complete ; auto completion
+ centered-window ; Center the text when there's only one window
elscreen ; window session manager
expand-region ; Increase selected region by semantic units
flx-ido ; flx integration for ido
@@ -180,6 +213,7 @@
paredit ; minor mode for editing parentheses
powerline ; Rewrite of Powerline
pretty-lambdada ; the word `lambda' as the Greek letter.
+ slime ; Superior Lisp Interaction Mode for Emacs
smex ; M-x interface with Ido-style fuzzy matching.
undo-tree)) ; Treat undo history as a tree
;; Fetch dependencies from all packages.
@@ -256,7 +290,10 @@
inhibit-startup-message t ; No splash screen please.
initial-scratch-message nil ; Clean scratch buffer.
ring-bell-function 'ignore ; Quiet.
- undo-tree-auto-save-history t ; Save undo history between sessions.
+ ;; Save undo history between sessions, if you have an undo-dir
+ undo-tree-auto-save-history
+ (file-exists-p
+ (concat user-emacs-directory "undo"))
undo-tree-history-directory-alist
;; Put undo-history files in a directory, if it exists.
(let ((undo-dir (concat user-emacs-directory "undo")))
@@ -286,10 +323,10 @@
projects).
#+BEGIN_SRC emacs-lisp
- (let ((default-directory (concat user-emacs-directory "site-lisp/")))
- (when (file-exists-p default-directory)
- (normal-top-level-add-to-load-path '("."))
- (normal-top-level-add-subdirs-to-load-path)))
+ (let ((default-directory (concat user-emacs-directory "site-lisp/")))
+ (when (file-exists-p default-directory)
+ (normal-top-level-add-to-load-path '("."))
+ (normal-top-level-add-subdirs-to-load-path)))
#+END_SRC
Answering /yes/ and /no/ to each question from Emacs can be tedious, a
@@ -378,7 +415,7 @@
This makes =.md=-files open in =markdown-mode=.
#+BEGIN_SRC emacs-lisp
- (add-to-list 'auto-mode-alist '("\\.md\\'" . markdown-mode))
+ (add-to-list 'auto-mode-alist '("\\.md\\'" . markdown-mode))
#+END_SRC
** Visual
@@ -603,19 +640,17 @@
function returned from =cycle-languages=.
#+BEGIN_SRC emacs-lisp
- (defadvice turn-on-flyspell (around check nil activate)
+ (defadvice turn-on-flyspell (before check nil activate)
"Turns on flyspell only if a spell-checking tool is installed."
(when (executable-find ispell-program-name)
- (local-set-key (kbd "C-c l") (cycle-languages))
- ad-do-it))
+ (local-set-key (kbd "C-c l") (cycle-languages))))
#+END_SRC
#+BEGIN_SRC emacs-lisp
- (defadvice flyspell-prog-mode (around check nil activate)
+ (defadvice flyspell-prog-mode (before check nil activate)
"Turns on flyspell only if a spell-checking tool is installed."
(when (executable-find ispell-program-name)
- (local-set-key (kbd "C-c l") (cycle-languages))
- ad-do-it))
+ (local-set-key (kbd "C-c l") (cycle-languages))))
#+END_SRC
** Org
@@ -632,7 +667,11 @@
be themed as they would in their native mode.
#+BEGIN_SRC emacs-lisp
- (setq org-src-fontify-natively t)
+ (setq org-src-fontify-natively t
+ org-confirm-babel-evaluate nil)
+ (require 'org)
+ (setcar (nthcdr 2 org-emphasis-regexp-components) " \t\n,")
+ (custom-set-variables `(org-emphasis-alist ',org-emphasis-alist))
#+END_SRC
** Interactive functions
@@ -677,16 +716,16 @@
function.
#+BEGIN_SRC emacs-lisp
- (defun duplicate-thing ()
- "Ethier duplicates the line or the region"
- (interactive)
- (save-excursion
- (let ((start (if (region-active-p) (region-beginning) (point-at-bol)))
- (end (if (region-active-p) (region-end) (point-at-eol))))
- (goto-char end)
- (unless (region-active-p)
- (newline))
- (insert (buffer-substring start end)))))
+ (defun duplicate-thing ()
+ "Duplicates the current line, or the region if active."
+ (interactive)
+ (save-excursion
+ (let ((start (if (region-active-p) (region-beginning) (point-at-bol)))
+ (end (if (region-active-p) (region-end) (point-at-eol))))
+ (goto-char end)
+ (unless (region-active-p)
+ (newline))
+ (insert (buffer-substring start end)))))
#+END_SRC
To tidy up a buffer we define this function borrowed from [[https://github.com/simenheg][simenheg]].
@@ -702,12 +741,6 @@
(untabify beg (if (< end (point-max)) end (point-max)))))
#+END_SRC
- Presentation mode.
-
- #+BEGIN_SRC emacs-lisp
-
- #+END_SRC
-
** Key bindings
Bindings for [[https://github.com/magnars/expand-region.el][expand-region]].
@@ -828,10 +861,11 @@
function to activate =pretty-lambda-mode= in lisp modes.
#+BEGIN_SRC emacs-lisp
- (dolist (mode '(slime-repl-mode geiser-repl-mode))
- (add-to-list 'pretty-lambda-auto-modes mode))
+ (dolist (mode '(slime-repl-mode geiser-repl-mode ielm-mode clojure-mode
+ cider-repl-mode))
+ (add-to-list 'pretty-lambda-auto-modes mode))
- (pretty-lambda-for-modes)
+ (pretty-lambda-for-modes)
#+END_SRC
I use =Paredit= when editing lisp code, we enable this for all lisp-modes
@@ -986,6 +1020,39 @@
'(setcar (cdr (cddaar tex-compile-commands)) " -shell-escape "))
#+END_SRC
+** Markdown
+
+ I sometimes use a specialized markdown format, where inline math-blocks
+ can be achieved by surrounding a LaTeX formula with =$math$= and
+ =$/math$=. Writing these out became tedious, so I wrote a small function.
+
+ #+BEGIN_SRC emacs-lisp
+ (defun insert-markdown-inline-math-block ()
+ "Inserts an empty math-block if no region is active, otherwise wrap a
+ math-block around the region."
+ (interactive)
+ (let* ((beg (region-beginning))
+ (end (region-end))
+ (body (if (region-active-p) (buffer-substring beg end) "")))
+ (when (region-active-p)
+ (delete-region beg end))
+ (insert (concat "$math$ " body " $/math$"))
+ (search-backward " $/math$")))
+ #+END_SRC
+
+ Most of my writing in this markup is in Norwegian, so the dictionary is
+ set accordingly. The markup is also sensitive to line breaks, so
+ =auto-fill-mode= is disabled. Of course we want to bind our lovely
+ function to a key!
+
+ #+BEGIN_SRC emacs-lisp
+ (add-hook 'markdown-mode-hook
+ (lambda ()
+ (auto-fill-mode 0)
+ (ispell-change-dictionary "norsk")
+ (local-set-key (kbd "C-c b") 'insert-markdown-inline-math-block)) t)
+ #+END_SRC
+
** Python
[[http://tkf.github.io/emacs-jedi/released/][Jedi]] offers very nice auto completion for =python-mode=. Mind that it is
diff --git a/init.pdf b/init.pdf
deleted file mode 100644
index e415c9f..0000000
Binary files a/init.pdf and /dev/null differ