diff --git a/README.md b/README.md
index f2d0e8b..a3223a9 100644
--- a/README.md
+++ b/README.md
@@ -98,6 +98,18 @@ tangled, and the tangled file is compiled."
(add-hook 'after-save-hook 'tangle-init)
```
+I'd like to keep a few settings private, so we load a `private.el` if it
+exists after the init-file has loaded.
+
+```emacs-lisp
+(add-hook
+ 'after-init-hook
+ (lambda ()
+ (let ((private-file (concat user-emacs-directory "private.el")))
+ (when (file-exists-p private-file)
+ (load-file private-file)))))
+```
+
## Package
Managing extensions for Emacs is simplified using `package` which is
@@ -223,7 +235,6 @@ configurations are also dependent on them).
(when (and do-package-update-on-init
(y-or-n-p "Update all packages?"))
(package-refresh-contents)
-
(let* ((packages
'(ac-geiser ; Auto-complete backend for geiser
ac-slime ; An auto-complete source using slime completions
@@ -252,7 +263,8 @@ configurations are also dependent on them).
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
+ undo-tree ; Treat undo history as a tree
+ try)) ; Try out Emacs packages.
;; Fetch dependencies from all packages.
(reqs (mapcar 'dependencies packages))
;; Append these to the original list, and remove any duplicates.
@@ -457,17 +469,30 @@ This makes `.md`-files open in `markdown-mode`.
## Visual
-Change the color-theme to `monokai` (downloaded using `package`).
+Change the color-theme to `leuven`.
```emacs-lisp
-(load-theme 'monokai t)
+(load-theme 'leuven t)
+```
+
+`leuven` is my preferred light theme, but `monokai` makes a very nice
+dark theme. I want to be able to cycle between these.
+
+```emacs-lisp
+(defun cycle-themes ()
+ "Returns a function that lets you cycle your themes."
+ (lexical-let ((themes '#1=(leuven monokai . #1#)))
+ (lambda ()
+ (interactive)
+ ;; Rotates the thme cycle and changes the current theme.
+ (load-theme (car (setq themes (cdr themes))) t))))
```
Use the [Inconsolata](http://www.levien.com/type/myfonts/inconsolata.html) font if it's installed on the system.
```emacs-lisp
-(when (member "Inconsolata-g" (font-family-list))
- (set-face-attribute 'default nil :font "Inconsolata-g-11"))
+(when (member "Inconsolata" (font-family-list))
+ (set-face-attribute 'default nil :font "Inconsolata-13"))
```
## Ido
@@ -661,7 +686,7 @@ I use `org-agenda` for appointments and such.
```emacs-lisp
(setq org-agenda-start-on-weekday nil ; Show agenda from today.
- org-agenda-files '("~/Dropbox/life.org") ; A list of agenda files.
+ org-agenda-files '("~/Dropbox/cal.org") ; A list of agenda files.
org-agenda-default-appointment-duration 120) ; 2 hours appointments.
```
@@ -677,9 +702,11 @@ This is quite an ugly fix for allowing code markup for expressions like
`"this string"`, because the quotation marks causes problems.
```emacs-lisp
-(require 'org)
-(setcar (nthcdr 2 org-emphasis-regexp-components) " \t\n,")
-(custom-set-variables `(org-emphasis-alist ',org-emphasis-alist))
+;;(require 'org)
+(eval-after-load "org"
+ '(progn
+ (setcar (nthcdr 2 org-emphasis-regexp-components) " \t\n,")
+ (custom-set-variables `(org-emphasis-alist ',org-emphasis-alist))))
```
## Interactive functions
@@ -797,17 +824,6 @@ To tidy up a buffer we define this function borrowed from [simenheg](https://git
(untabify beg (if (< end (point-max)) end (point-max)))))
```
-If you have a link to a raw `.el`-file, run `M-x try` and yank an URL
-into the minibuffer, and the file will be evaluated.
-
-```emacs-lisp
-(defun try (url)
- "Takes an URL to a .el-file, and evaluates it."
- (interactive (list (read-from-minibuffer "url: ")))
- (with-current-buffer (url-retrieve-synchronously url)
- (eval-region (search-forward-regexp "^$") (point-max))))
-```
-
## Advice
An advice can be given to a function to make it behave differently. This
@@ -892,7 +908,7 @@ does not remove anything. In Emacs removing stuff is less of a worry,
since we can always undo!
```emacs-lisp
-(defun clear-shell ()
+(defun clear-comint ()
"Runs `comint-truncate-buffer' with the
`comint-buffer-maximum-size' set to zero."
(interactive)
@@ -905,7 +921,7 @@ global binding (because we want to be able to switch to a shell from any
buffer), but the `clear-shell` should only affect `shell-mode`.
```emacs-lisp
-(add-hook 'shell-mode-hook (lambda () (local-set-key (kbd "C-l") 'clear-shell)))
+(add-hook 'comint-mode-hook (lambda () (local-set-key (kbd "C-l") 'clear-comint)))
```
## Lisp
@@ -951,8 +967,14 @@ and you can install Slime following the instructions from the site along
with this snippet.
```emacs-lisp
-(when (file-exists-p "~/.quicklisp/slime-helper.el")
- (load (expand-file-name "~/.quicklisp/slime-helper.el")))
+(defun activate-slime-helper ()
+ (when (file-exists-p "~/.quicklisp/slime-helper.elc")
+ (load (expand-file-name "~/.quicklisp/slime-helper.elc"))
+ (define-key slime-repl-mode-map (kbd "C-l")
+ 'slime-repl-clear-buffer))
+ (remove-hook 'lisp-mode-hook #'activate-slime-helper))
+
+(add-hook 'lisp-mode-hook #'activate-slime-helper)
```
We can specify what Common Lisp program Slime should use (I use SBCL).
@@ -981,7 +1003,6 @@ More sensible `loop` indentation, borrowed from [simenheg](https://github.com/si
```
```emacs-lisp
-(define-key slime-repl-mode-map (kbd "C-l") 'slime-repl-clear-buffer)
```
### Scheme
@@ -1158,7 +1179,7 @@ Bindings for [expand-region](https://github.com/magnars/expand-region.el).
```emacs-lisp
(define-key custom-bindings-map (kbd "C-'") 'er/expand-region)
-(define-key custom-bindings-map (kbd "C-;") 'er/contract-region)
+(define-key custom-bindings-map (kbd "C-\"") 'er/contract-region)
```
Bindings for [multiple-cursors](https://github.com/magnars/multiple-cursors.el).
@@ -1212,8 +1233,11 @@ Bind some native Emacs functions.
Bind the functions defined above.
```emacs-lisp
+(define-key global-map (kbd "M-p") 'jump-to-previous-like-this)
+(define-key global-map (kbd "M-n") 'jump-to-next-like-this)
(define-key custom-bindings-map (kbd "M-,") 'jump-to-previous-like-this)
(define-key custom-bindings-map (kbd "M-.") 'jump-to-next-like-this)
+(define-key custom-bindings-map (kbd "C-c .") (cycle-themes))
(define-key custom-bindings-map (kbd "C-x k") 'kill-this-buffer-unless-scratch)
(define-key custom-bindings-map (kbd "C-x t") 'toggle-shell)
(define-key custom-bindings-map (kbd "C-c j") 'cycle-spacing-delete-newlines)
diff --git a/init.el b/init.el
index 3edcb3e..4e4cd94 100644
--- a/init.el
+++ b/init.el
@@ -21,6 +21,16 @@ tangled, and the tangled file is compiled."
(add-hook 'after-save-hook 'tangle-init)
+;; I'd like to keep a few settings private, so we load a =private.el= if it
+;; exists after the init-file has loaded.
+
+(add-hook
+ 'after-init-hook
+ (lambda ()
+ (let ((private-file (concat user-emacs-directory "private.el")))
+ (when (file-exists-p private-file)
+ (load-file private-file)))))
+
;; Package
;; Managing extensions for Emacs is simplified using =package= which is
@@ -131,7 +141,6 @@ PACKAGE is installed and the current version is deleted."
(when (and do-package-update-on-init
(y-or-n-p "Update all packages?"))
(package-refresh-contents)
-
(let* ((packages
'(ac-geiser ; Auto-complete backend for geiser
ac-slime ; An auto-complete source using slime completions
@@ -160,7 +169,8 @@ PACKAGE is installed and the current version is deleted."
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
+ undo-tree ; Treat undo history as a tree
+ try)) ; Try out Emacs packages.
;; Fetch dependencies from all packages.
(reqs (mapcar 'dependencies packages))
;; Append these to the original list, and remove any duplicates.
@@ -336,14 +346,25 @@ PACKAGE is installed and the current version is deleted."
;; Visual
-;; Change the color-theme to =monokai= (downloaded using =package=).
+;; Change the color-theme to =leuven=.
-(load-theme 'monokai t)
+(load-theme 'leuven t)
+
+;; =leuven= is my preferred light theme, but =monokai= makes a very nice
+;; dark theme. I want to be able to cycle between these.
+
+(defun cycle-themes ()
+ "Returns a function that lets you cycle your themes."
+ (lexical-let ((themes '#1=(leuven monokai . #1#)))
+ (lambda ()
+ (interactive)
+ ;; Rotates the thme cycle and changes the current theme.
+ (load-theme (car (setq themes (cdr themes))) t))))
;; Use the [[http://www.levien.com/type/myfonts/inconsolata.html][Inconsolata]] font if it's installed on the system.
-(when (member "Inconsolata-g" (font-family-list))
- (set-face-attribute 'default nil :font "Inconsolata-g-11"))
+(when (member "Inconsolata" (font-family-list))
+ (set-face-attribute 'default nil :font "Inconsolata-13"))
;; Ido
@@ -509,7 +530,7 @@ the languages in ISPELL-LANGUAGES when invoked."
;; I use =org-agenda= for appointments and such.
(setq org-agenda-start-on-weekday nil ; Show agenda from today.
- org-agenda-files '("~/Dropbox/life.org") ; A list of agenda files.
+ org-agenda-files '("~/Dropbox/cal.org") ; A list of agenda files.
org-agenda-default-appointment-duration 120) ; 2 hours appointments.
;; When editing org-files with source-blocks, we want the source blocks to
@@ -521,9 +542,11 @@ the languages in ISPELL-LANGUAGES when invoked."
;; This is quite an ugly fix for allowing code markup for expressions like
;; ="this string"=, because the quotation marks causes problems.
-(require 'org)
-(setcar (nthcdr 2 org-emphasis-regexp-components) " \t\n,")
-(custom-set-variables `(org-emphasis-alist ',org-emphasis-alist))
+;;(require 'org)
+(eval-after-load "org"
+ '(progn
+ (setcar (nthcdr 2 org-emphasis-regexp-components) " \t\n,")
+ (custom-set-variables `(org-emphasis-alist ',org-emphasis-alist))))
;; Interactive functions
;; <>
@@ -627,15 +650,6 @@ the buffer is buried."
(whitespace-cleanup)
(untabify beg (if (< end (point-max)) end (point-max)))))
-;; If you have a link to a raw =.el=-file, run =M-x try= and yank an URL
-;; into the minibuffer, and the file will be evaluated.
-
-(defun try (url)
- "Takes an URL to a .el-file, and evaluates it."
- (interactive (list (read-from-minibuffer "url: ")))
- (with-current-buffer (url-retrieve-synchronously url)
- (eval-region (search-forward-regexp "^$") (point-max))))
-
;; Advice
;; An advice can be given to a function to make it behave differently. This
@@ -707,7 +721,7 @@ the buffer is buried."
;; does not remove anything. In Emacs removing stuff is less of a worry,
;; since we can always undo!
-(defun clear-shell ()
+(defun clear-comint ()
"Runs `comint-truncate-buffer' with the
`comint-buffer-maximum-size' set to zero."
(interactive)
@@ -718,7 +732,7 @@ the buffer is buried."
;; global binding (because we want to be able to switch to a shell from any
;; buffer), but the =clear-shell= should only affect =shell-mode=.
-(add-hook 'shell-mode-hook (lambda () (local-set-key (kbd "C-l") 'clear-shell)))
+(add-hook 'comint-mode-hook (lambda () (local-set-key (kbd "C-l") 'clear-comint)))
;; Lisp
@@ -756,8 +770,14 @@ the buffer is buried."
;; and you can install Slime following the instructions from the site along
;; with this snippet.
-(when (file-exists-p "~/.quicklisp/slime-helper.el")
- (load (expand-file-name "~/.quicklisp/slime-helper.el")))
+(defun activate-slime-helper ()
+ (when (file-exists-p "~/.quicklisp/slime-helper.elc")
+ (load (expand-file-name "~/.quicklisp/slime-helper.elc"))
+ (define-key slime-repl-mode-map (kbd "C-l")
+ 'slime-repl-clear-buffer))
+ (remove-hook 'lisp-mode-hook #'activate-slime-helper))
+
+(add-hook 'lisp-mode-hook #'activate-slime-helper)
;; We can specify what Common Lisp program Slime should use (I use SBCL).
@@ -778,7 +798,7 @@ the buffer is buried."
lisp-simple-loop-indentation 2
lisp-loop-keyword-indentation 6)
-(define-key slime-repl-mode-map (kbd "C-l") 'slime-repl-clear-buffer)
+
;; Scheme
@@ -925,7 +945,7 @@ math-block around the region."
;; Bindings for [[https://github.com/magnars/expand-region.el][expand-region]].
(define-key custom-bindings-map (kbd "C-'") 'er/expand-region)
-(define-key custom-bindings-map (kbd "C-;") 'er/contract-region)
+(define-key custom-bindings-map (kbd "C-\"") 'er/contract-region)
;; Bindings for [[https://github.com/magnars/multiple-cursors.el][multiple-cursors]].
@@ -963,8 +983,11 @@ math-block around the region."
;; Bind the functions defined [[sec:defuns][above]].
+(define-key global-map (kbd "M-p") 'jump-to-previous-like-this)
+(define-key global-map (kbd "M-n") 'jump-to-next-like-this)
(define-key custom-bindings-map (kbd "M-,") 'jump-to-previous-like-this)
(define-key custom-bindings-map (kbd "M-.") 'jump-to-next-like-this)
+(define-key custom-bindings-map (kbd "C-c .") (cycle-themes))
(define-key custom-bindings-map (kbd "C-x k") 'kill-this-buffer-unless-scratch)
(define-key custom-bindings-map (kbd "C-x t") 'toggle-shell)
(define-key custom-bindings-map (kbd "C-c j") 'cycle-spacing-delete-newlines)
diff --git a/init.org b/init.org
index 1f60c2a..05fa2e5 100644
--- a/init.org
+++ b/init.org
@@ -67,6 +67,18 @@
(add-hook 'after-save-hook 'tangle-init)
#+END_SRC
+ I'd like to keep a few settings private, so we load a =private.el= if it
+ exists after the init-file has loaded.
+
+ #+BEGIN_SRC emacs-lisp
+ (add-hook
+ 'after-init-hook
+ (lambda ()
+ (let ((private-file (concat user-emacs-directory "private.el")))
+ (when (file-exists-p private-file)
+ (load-file private-file)))))
+ #+END_SRC
+
** Package
Managing extensions for Emacs is simplified using =package= which is
@@ -192,7 +204,6 @@
(when (and do-package-update-on-init
(y-or-n-p "Update all packages?"))
(package-refresh-contents)
-
(let* ((packages
'(ac-geiser ; Auto-complete backend for geiser
ac-slime ; An auto-complete source using slime completions
@@ -221,7 +232,8 @@
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
+ undo-tree ; Treat undo history as a tree
+ try)) ; Try out Emacs packages.
;; Fetch dependencies from all packages.
(reqs (mapcar 'dependencies packages))
;; Append these to the original list, and remove any duplicates.
@@ -428,17 +440,31 @@
** Visual
- Change the color-theme to =monokai= (downloaded using =package=).
+ Change the color-theme to =leuven=.
#+BEGIN_SRC emacs-lisp
- (load-theme 'monokai t)
+ (load-theme 'leuven t)
+ #+END_SRC
+
+ =leuven= is my preferred light theme, but =monokai= makes a very nice
+ dark theme. I want to be able to cycle between these.
+
+ #+BEGIN_SRC emacs-lisp
+ (defun cycle-themes ()
+ "Returns a function that lets you cycle your themes."
+ (lexical-let ((themes '#1=(leuven monokai . #1#)))
+ (lambda ()
+ (interactive)
+ ;; Rotates the thme cycle and changes the current theme.
+ (load-theme (car (setq themes (cdr themes))) t))))
+
#+END_SRC
Use the [[http://www.levien.com/type/myfonts/inconsolata.html][Inconsolata]] font if it's installed on the system.
#+BEGIN_SRC emacs-lisp
- (when (member "Inconsolata-g" (font-family-list))
- (set-face-attribute 'default nil :font "Inconsolata-g-11"))
+ (when (member "Inconsolata" (font-family-list))
+ (set-face-attribute 'default nil :font "Inconsolata-13"))
#+END_SRC
@@ -666,7 +692,7 @@
#+BEGIN_SRC emacs-lisp
(setq org-agenda-start-on-weekday nil ; Show agenda from today.
- org-agenda-files '("~/Dropbox/life.org") ; A list of agenda files.
+ org-agenda-files '("~/Dropbox/cal.org") ; A list of agenda files.
org-agenda-default-appointment-duration 120) ; 2 hours appointments.
#+END_SRC
@@ -683,9 +709,11 @@
="this string"=, because the quotation marks causes problems.
#+BEGIN_SRC emacs-lisp
- (require 'org)
- (setcar (nthcdr 2 org-emphasis-regexp-components) " \t\n,")
- (custom-set-variables `(org-emphasis-alist ',org-emphasis-alist))
+ ;;(require 'org)
+ (eval-after-load "org"
+ '(progn
+ (setcar (nthcdr 2 org-emphasis-regexp-components) " \t\n,")
+ (custom-set-variables `(org-emphasis-alist ',org-emphasis-alist))))
#+END_SRC
** Interactive functions
@@ -802,17 +830,6 @@
(untabify beg (if (< end (point-max)) end (point-max)))))
#+END_SRC
- If you have a link to a raw =.el=-file, run =M-x try= and yank an URL
- into the minibuffer, and the file will be evaluated.
-
- #+BEGIN_SRC emacs-lisp
- (defun try (url)
- "Takes an URL to a .el-file, and evaluates it."
- (interactive (list (read-from-minibuffer "url: ")))
- (with-current-buffer (url-retrieve-synchronously url)
- (eval-region (search-forward-regexp "^$") (point-max))))
- #+END_SRC
-
** Advice
An advice can be given to a function to make it behave differently. This
@@ -896,7 +913,7 @@
since we can always undo!
#+BEGIN_SRC emacs-lisp
- (defun clear-shell ()
+ (defun clear-comint ()
"Runs `comint-truncate-buffer' with the
`comint-buffer-maximum-size' set to zero."
(interactive)
@@ -909,7 +926,7 @@
buffer), but the =clear-shell= should only affect =shell-mode=.
#+BEGIN_SRC emacs-lisp
- (add-hook 'shell-mode-hook (lambda () (local-set-key (kbd "C-l") 'clear-shell)))
+ (add-hook 'comint-mode-hook (lambda () (local-set-key (kbd "C-l") 'clear-comint)))
#+END_SRC
** Lisp
@@ -955,8 +972,14 @@
with this snippet.
#+BEGIN_SRC emacs-lisp
- (when (file-exists-p "~/.quicklisp/slime-helper.el")
- (load (expand-file-name "~/.quicklisp/slime-helper.el")))
+ (defun activate-slime-helper ()
+ (when (file-exists-p "~/.quicklisp/slime-helper.elc")
+ (load (expand-file-name "~/.quicklisp/slime-helper.elc"))
+ (define-key slime-repl-mode-map (kbd "C-l")
+ 'slime-repl-clear-buffer))
+ (remove-hook 'lisp-mode-hook #'activate-slime-helper))
+
+ (add-hook 'lisp-mode-hook #'activate-slime-helper)
#+END_SRC
We can specify what Common Lisp program Slime should use (I use SBCL).
@@ -985,7 +1008,7 @@
#+END_SRC
#+BEGIN_SRC emacs-lisp
- (define-key slime-repl-mode-map (kbd "C-l") 'slime-repl-clear-buffer)
+
#+END_SRC
*** Scheme
@@ -1174,7 +1197,7 @@
#+BEGIN_SRC emacs-lisp
(define-key custom-bindings-map (kbd "C-'") 'er/expand-region)
- (define-key custom-bindings-map (kbd "C-;") 'er/contract-region)
+ (define-key custom-bindings-map (kbd "C-\"") 'er/contract-region)
#+END_SRC
Bindings for [[https://github.com/magnars/multiple-cursors.el][multiple-cursors]].
@@ -1228,8 +1251,11 @@
Bind the functions defined [[sec:defuns][above]].
#+BEGIN_SRC emacs-lisp
+ (define-key global-map (kbd "M-p") 'jump-to-previous-like-this)
+ (define-key global-map (kbd "M-n") 'jump-to-next-like-this)
(define-key custom-bindings-map (kbd "M-,") 'jump-to-previous-like-this)
(define-key custom-bindings-map (kbd "M-.") 'jump-to-next-like-this)
+ (define-key custom-bindings-map (kbd "C-c .") (cycle-themes))
(define-key custom-bindings-map (kbd "C-x k") 'kill-this-buffer-unless-scratch)
(define-key custom-bindings-map (kbd "C-x t") 'toggle-shell)
(define-key custom-bindings-map (kbd "C-c j") 'cycle-spacing-delete-newlines)