1 #+PROPERTY: header-args:emacs-lisp :tangle don-configuration.el
4 # if for some reason, things get pear-shaped, we want to be able to
5 # enter the debugger by sending -USR2 to emacs
8 (setq debug-on-event 'siguser2)
12 #+BEGIN_SRC emacs-lisp
13 (add-to-list 'load-path '"~/lib/emacs_el/")
14 (add-to-list 'load-path '"~/lib/emacs_el/helm")
15 (add-to-list 'load-path '"~/lib/emacs_el/tiny-tools/lisp/tiny")
16 (add-to-list 'load-path '"~/lib/emacs_el/tiny-tools/lisp/other")
17 (add-to-list 'load-path '"~/lib/emacs_el/auctex/lisp")
18 (add-to-list 'load-path '"~/lib/emacs_el/auctex")
19 (add-to-list 'load-path '"~/lib/emacs_el/ESS/lisp")
20 (add-to-list 'load-path '"~/lib/emacs_el/org-mode/lisp")
21 (add-to-list 'load-path '"~/lib/emacs_el/auctex-beamer")
22 (add-to-list 'load-path '"~/lib/emacs_el/magit-annex")
23 (add-to-list 'load-path '"~/lib/emacs_el/polymode")
27 ** package repositories and package manager
28 #+BEGIN_SRC emacs-lisp
30 (setq package-archives '(("gnu" . "https://elpa.gnu.org/packages/")
31 ("melpa" . "https://melpa.org/packages/")
32 ("org" . "http://orgmode.org/elpa/") ))
34 ** [[https://github.com/jwiegley/use-package/][use-package]]
35 #+BEGIN_SRC emacs-lisp
36 (require 'use-package)
40 #+BEGIN_SRC emacs-lisp
48 #+BEGIN_SRC emacs-lisp
49 ;; From http://www.emacswiki.org/emacs/LoadingLispFiles
50 ;; execute conditional code when loading libraries
51 (defmacro with-library (symbol &rest body)
52 `(when (require ,symbol nil t)
54 (put 'with-library 'lisp-indent-function 1)
59 #+BEGIN_SRC emacs-lisp
60 (setq global-mark-ring-max 128
64 (defun don/minibuffer-setup-hook ()
65 (setq gc-cons-threshold most-positive-fixnum))
67 (defun don/minibuffer-exit-hook ()
68 (setq gc-cons-threshold 1048576))
70 (add-hook 'minibuffer-setup-hook #'don/minibuffer-setup-hook)
71 (add-hook 'minibuffer-exit-hook #'don/minibuffer-exit-hook)
75 #+BEGIN_SRC emacs-lisp
78 :diminish flyspell-mode 🐝
80 (add-hook 'message-mode-hook 'turn-on-flyspell)
81 (add-hook 'text-mode-hook 'turn-on-flyspell)
82 (add-hook 'c-mode-common-hook 'flyspell-prog-mode)
83 (add-hook 'cperl-mode-hook 'flyspell-prog-mode)
84 (add-hook 'tcl-mode-hook 'flyspell-prog-mode)
86 (setq ispell-program-name "ispell")
91 #+BEGIN_SRC emacs-lisp
96 #+BEGIN_SRC emacs-lisp
97 ;; (use-package eyebrowse
99 ;; :diminish eyebrowse-mode
100 ;; :init (setq eyebrowse-keymap-prefix (kbd "C-c C-\\"))
102 ;; (setq eyebrowse-wrap-around t)
103 ;; (eyebrowse-mode t)
105 ;; (defun my/eyebrowse-new-window-config ()
109 ;; ;; start at 1 run till 0
110 ;; (let ((j (mod (+ i 1) 10)))
111 ;; (when (and (not done)
112 ;; (not (eyebrowse--window-config-present-p j)))
113 ;; (eyebrowse-switch-to-window-config j)
114 ;; (call-interactively 'eyebrowse-rename-window-config2 j)
119 ;; ;; I don't use latex-preview-pane
120 ;; ;; (require 'latex-preview-pane)
121 ;; ;; (defun my/close-latex-preview-pane-before-eyebrowse-switch ()
122 ;; ;; ;; latex-preview-pane uses window-parameters which are
123 ;; ;; ;; not preserved by eyebrowse, so we close the preview
124 ;; ;; ;; pane before switching, it will be regenerated when we
125 ;; ;; ;; edit the TeX file.
126 ;; ;; (when (lpp/window-containing-preview)
127 ;; ;; (delete-window (lpp/window-containing-preview))))
129 ;; ;; (add-to-list 'eyebrowse-pre-window-switch-hook
130 ;; ;; #'my/close-latex-preview-pane-before-eyebrowse-switch)
132 ;; ;; (my/set-menu-key "[" #'my/eyebrowse-new-window-config)
133 ;; ;; (my/set-menu-key ";" #'eyebrowse-prev-window-config)
134 ;; ;; (my/set-menu-key "'" #'eyebrowse-next-window-config)
135 ;; ;; (my/set-menu-key "]" #'eyebrowse-close-window-config)
136 ;; ;; (my/set-menu-key "\\" #'eyebrowse-rename-window-config)
144 #+BEGIN_SRC emacs-lisp
145 (defun my/vsplit-last-buffer ()
146 "Split the window vertically and display the previous buffer."
148 (split-window-vertically)
150 (switch-to-next-buffer))
152 (defun my/hsplit-last-buffer ()
153 "Split the window horizontally and display the previous buffer."
155 (split-window-horizontally)
157 (switch-to-next-buffer))
159 (bind-key "C-x 2" 'my/vsplit-last-buffer)
160 (bind-key "C-x 3" 'my/hsplit-last-buffer)
162 (setq split-width-threshold 100)
163 (setq split-height-threshold 60)
165 (defun my/split-window-prefer-vertically (window)
166 "If there's only one window (excluding any possibly active
167 minibuffer), then split the current window horizontally."
168 (if (and (one-window-p t)
169 (not (active-minibuffer-window))
170 ( < (frame-width) (frame-height))
172 (let ((split-width-threshold nil))
173 (split-window-sensibly window))
174 (split-window-sensibly window)))
176 (setq split-window-preferred-function #'my/split-window-prefer-vertically)
177 (setq window-combination-resize t)
180 *** Compilation window
182 If there is no compilation window, open one at the bottom, spanning
183 the complete width of the frame. Otherwise, reuse existing window. In
184 the former case, if there was no error the window closes
187 #+BEGIN_SRC emacs-lisp
188 (add-to-list 'display-buffer-alist
189 `(,(rx bos "*compilation*" eos)
190 (display-buffer-reuse-window
191 display-buffer-in-side-window)
192 (reusable-frames . visible)
194 (window-height . 0.4)))
197 #+BEGIN_SRC emacs-lisp
198 (defun my/compilation-exit-autoclose (status code msg)
199 ;; If M-x compile exists with a 0
200 (when (and (eq status 'exit) (zerop code))
201 ;; and delete the *compilation* window
202 (let ((compilation-window (get-buffer-window (get-buffer "*compilation*"))))
203 (when (and (not (window-at-side-p compilation-window 'top))
204 (window-at-side-p compilation-window 'left)
205 (window-at-side-p compilation-window 'right))
206 (delete-window compilation-window))))
207 ;; Always return the anticipated result of compilation-exit-message-function
210 ;; Specify my function (maybe I should have done a lambda function)
211 (setq compilation-exit-message-function #'my/compilation-exit-autoclose)
214 If you change the variable ~compilation-scroll-output~ to a ~non-nil~
215 value, the compilation buffer scrolls automatically to follow the
216 output. If the value is ~first-error~, scrolling stops when the first
217 error appears, leaving point at that error. For any other non-nil
218 value, scrolling continues until there is no more output.
220 #+BEGIN_SRC emacs-lisp
221 (setq compilation-scroll-output 'first-error)
224 ** Mode line cleaning
226 #+BEGIN_SRC emacs-lisp
227 (use-package diminish
232 #+BEGIN_SRC emacs-lisp
239 #+BEGIN_SRC emacs-lisp
242 :bind ("C-c C-SPC" . avy-goto-word-1)
244 (setq avy-background t)
245 (key-chord-define-global "jj" #'avy-goto-word-1)))
251 #+BEGIN_SRC emacs-lisp
252 (use-package yasnippet
254 :diminish yas-minor-mode
257 (setq yas-verbosity 1)
258 (define-key yas-minor-mode-map (kbd "<tab>") nil)
259 (define-key yas-minor-mode-map (kbd "TAB") nil)
260 (define-key yas-minor-mode-map (kbd "<backtab>") 'yas-expand)
266 [[https://github.com/PythonNut/helm-flx][helm-flx]] implements intelligent helm fuzzy sorting, provided by [[https://github.com/lewang/flx][flx]].
268 #+BEGIN_SRC emacs-lisp
269 (use-package helm-flx
272 ;; these are helm configs, but they kind of fit here nicely
273 (setq helm-M-x-fuzzy-match t
274 helm-bookmark-show-location t
275 helm-buffers-fuzzy-matching t
276 helm-completion-in-region-fuzzy-match t
277 helm-file-cache-fuzzy-match t
278 helm-imenu-fuzzy-match t
279 helm-mode-fuzzy-match t
280 helm-locate-fuzzy-match nil
282 helm-recentf-fuzzy-match nil
283 helm-semantic-fuzzy-match t)
290 #+BEGIN_SRC emacs-lisp
292 (use-package tinyprocmail
294 :config (with-library 'tinyprocmail
295 ;; (setq tinyprocmail--procmail-version "v3.22")
296 (add-hook 'tinyprocmail--load-hook 'tinyprocmail-install))
301 #+BEGIN_SRC emacs-lisp :tangle don-configuration.el
304 :bind (("C-x g" . magit-status)
305 ("C-x C-g" . magit-status))
307 ;; don't verify where we are pushing
308 (setq magit-push-always-verify nil)
309 ;; refine diffs always (hilight words)
310 (setq magit-diff-refine-hunk nil)
313 (append '("~/lib/emacs_el/magit-annex")
317 (append '("~/lib/emacs_el/magit-vcsh")
320 (use-package magit-annex
323 (use-package magit-vcsh
324 :ensure f ; currently not in melpa, so don't try to install
329 #+BEGIN_SRC emacs-lisp
330 (require 'cperl-mode)
331 ;; Use c-mode for perl .xs files
332 (add-to-list 'auto-mode-alist '("\\.xs\\'" . c-mode))
333 (add-to-list 'auto-mode-alist '("\\.\\([pP][Llm]\\|al\\)\\'" . cperl-mode))
334 (add-to-list 'interpreter-mode-alist '("perl" . cperl-mode))
335 (add-to-list 'interpreter-mode-alist '("perl5" . cperl-mode))
336 (add-to-list 'interpreter-mode-alist '("miniperl" . cperl-mode))
339 cperl-auto-newline nil
340 cperl-auto-newline-after-colon nil
341 cperl-continued-statement-offset 4
342 cperl-brace-offset -1
343 cperl-continued-brace-offset 0
344 cperl-label-offset -4
345 cperl-highlight-variables-indiscriminately t
346 cperl-electric-lbrace-space nil
347 cperl-indent-parens-as-block nil
348 cperl-close-paren-offset -1
349 cperl-tab-always-indent t)
350 ;(add-hook 'cperl-mode-hook (lambda () (cperl-set-style "PerlStyle")))
354 #+BEGIN_SRC emacs-lisp
359 (define-key global-map [remap find-file] 'helm-find-files)
360 (define-key global-map [remap occur] 'helm-occur)
361 (define-key global-map [remap list-buffers] 'helm-buffers-list)
362 (define-key global-map [remap dabbrev-expand] 'helm-dabbrev)
363 (global-set-key (kbd "M-x") 'helm-M-x)
364 (unless (boundp 'completion-in-region-function)
365 (define-key lisp-interaction-mode-map [remap completion-at-point] 'helm-lisp-completion-at-point)
366 (define-key emacs-lisp-mode-map [remap completion-at-point] 'helm-lisp-completion-at-point))
367 (add-hook 'kill-emacs-hook #'(lambda () (and (file-exists-p "$TMP") (delete-file "$TMP"))))
371 #+BEGIN_SRC emacs-lisp :tangle don-configuration.el
376 #+BEGIN_SRC emacs-lisp
377 (add-to-list 'tramp-methods '("vcsh"
378 (tramp-login-program "vcsh")
382 (tramp-remote-shell "/bin/sh")
383 (tramp-remote-shell-args
387 #+BEGIN_SRC emacs-lisp
391 (setq-default reftex-default-bibliography
392 '("~/projects/research/references.bib")))
395 #+BEGIN_SRC emacs-lisp
400 ; (add-to-list 'TeX-style-path '"/home/don/lib/emacs_el/auctex/style")
401 ;; REFTEX (much enhanced management of cross-ref, labels, etc)
402 ;; http://www.strw.leidenuniv.nl/~dominik/Tools/reftex/
403 ; (autoload 'reftex-mode "reftex" "RefTeX Minor Mode" t)
404 ; (autoload 'turn-on-reftex "reftex" "RefTeX Minor Mode" nil)
405 ; (autoload 'reftex-citation "reftex-cite" "Make citation" nil)
406 ; (autoload 'reftex-index-phrase-mode "reftex-index" "Phrase mode" t)
407 (add-hook 'LaTeX-mode-hook 'turn-on-reftex) ; with AUCTeX LaTeX mode
408 (add-hook 'latex-mode-hook 'turn-on-reftex) ; with Emacs latex mode
409 (add-hook 'LaTeX-mode-hook 'outline-minor-mode) ; with AUCTeX LaTeX mode
410 (add-hook 'latex-mode-hook 'outline-minor-mode) ; with Emacs latex mode
412 (setq-default reftex-plug-into-AUCTeX t)
413 ;; support fake section headers
414 (setq TeX-outline-extra
420 ;; add font locking to the headers
421 (font-lock-add-keywords
423 '(("^%\\(chapter\\|\\(sub\\|subsub\\)?section\\|paragraph\\)"
424 0 'font-lock-keyword-face t)
425 ("^%chapter{\\(.*\\)}" 1 'font-latex-sectioning-1-face t)
426 ("^%section{\\(.*\\)}" 1 'font-latex-sectioning-2-face t)
427 ("^%subsection{\\(.*\\)}" 1 'font-latex-sectioning-3-face t)
428 ("^%subsubsection{\\(.*\\)}" 1 'font-latex-sectioning-4-face t)
429 ("^%paragraph{\\(.*\\)}" 1 'font-latex-sectioning-5-face t)))
431 ;; use smart quotes by default instead of `` and ''
432 ;; taken from http://kieranhealy.org/esk/kjhealy.html
433 (setq TeX-open-quote "“")
434 (setq TeX-close-quote "”")
436 ;; (TeX-add-style-hook
441 ;; (custom-set-variables
442 ;; '(font-latex-user-keyword-classes
445 ;; font-lock-function-name-face 2 (command 1 t))))
447 (setq-default TeX-parse-self t)
448 (setq-default TeX-auto-save t)
449 (setq-default TeX-master nil)
455 (if (boundp 'reftex-ref-style-alist)
457 'reftex-ref-style-alist
458 '("Cleveref" "cleveref"
459 (("\\cref" ?c) ("\\Cref" ?C) ("\\cpageref" ?d) ("\\Cpageref" ?D)))))
460 (reftex-ref-style-activate "Cleveref")
462 '("cref" TeX-arg-ref)
463 '("Cref" TeX-arg-ref)
464 '("cpageref" TeX-arg-ref)
465 '("Cpageref" TeX-arg-ref)))))
468 '(add-to-list 'LaTeX-fill-excluded-macros
471 (use-package font-latex
473 (setq font-latex-match-reference-keywords
499 #+BEGIN_SRC emacs-lisp
500 (require 'org-mode-configuration)
503 #+BEGIN_SRC emacs-lisp
507 (use-package calfw-org
510 (use-package org-gcal
512 :config '((if (file-readable-p "~/.hide/org_gcal.el")
513 (load-file "~/.hide/org_gcal.el"))
518 #+BEGIN_SRC emacs-lisp
521 :config (require 'ess_configuration))
525 From http://julien.danjou.info/projects/emacs-packages#rainbow-mode, this colorizes color strings
527 #+BEGIN_SRC emacs-lisp
528 (use-package rainbow-mode
529 ;; add ess to the x major mode
530 :config (add-to-list 'rainbow-x-colors-major-mode-list 'ESS[S])
531 (add-to-list 'rainbow-x-colors-major-mode-list 'ESS[R])
536 #+BEGIN_SRC emacs-lisp
537 (use-package polymode
540 (use-package poly-noweb)
541 (use-package poly-markdown)
542 :mode ("\\.Snw" . poly-noweb+r-mode)
543 :mode ("\\.Rnw" . poly-noweb+r-mode)
544 :mode ("\\.Rmd" . poly-markdown+r-mode)
550 #+BEGIN_SRC emacs-lisp
551 (use-package outline-magic)
554 #+BEGIN_SRC emacs-lisp
555 (use-package writeroom-mode
556 :config (add-hook 'writeroom-mode-hook 'auto-fill-mode)
560 ** Override other things
561 #+BEGIN_SRC emacs-lisp
562 ; apparently things like to step on C-;, so we'll use a hack from
563 ; http://stackoverflow.com/questions/683425/globally-override-key-binding-in-emacs/5340797#5340797 to fix this
565 (defvar my-keys-minor-mode-map (make-keymap) "my-keys-minor-mode keymap.")
567 ; use iedit everywhere
568 (define-key my-keys-minor-mode-map (kbd "C-;") 'iedit-mode)
569 ;; use outline mode keybindings everywhere
570 ;; (define-key my-keys-minor-mode-map (kbd "C-;") 'my/mydra-outline/body)
572 (define-minor-mode my-keys-minor-mode
573 "A minor mode so that my key settings override annoying major modes."
574 t " my-keys" 'my-keys-minor-mode-map)
576 (my-keys-minor-mode 1)
577 (defun my-minibuffer-setup-hook ()
578 (my-keys-minor-mode 0))
580 (add-hook 'minibuffer-setup-hook 'my-minibuffer-setup-hook)
581 (defadvice load (after give-my-keybindings-priority)
582 "Try to ensure that my keybindings always have priority."
583 (if (not (eq (car (car minor-mode-map-alist)) 'my-keys-minor-mode))
584 (let ((mykeys (assq 'my-keys-minor-mode minor-mode-map-alist)))
585 (assq-delete-all 'my-keys-minor-mode minor-mode-map-alist)
586 (add-to-list 'minor-mode-map-alist mykeys))))
590 * Misc (uncharacterized)
591 #+BEGIN_SRC emacs-lisp
592 (setq bibtex-user-optional-fields (quote (("annote" "Personal annotation (ignored)") ("abstract" "") ("pmid" "") ("doi" ""))))
593 (setq calendar-latitude 40.11)
594 (setq calendar-longitude -88.24)
595 (setq case-fold-search t)
596 (setq confirm-kill-emacs (quote y-or-n-p))
597 (setq cperl-lazy-help-time nil)
598 (setq debian-changelog-mailing-address "don@debian.org")
600 (setq display-time-24hr-format t)
601 (setq display-time-day-and-date t)
602 (display-time-mode 1)
603 (setq font-latex-fontify-script nil)
604 (setq font-latex-fontify-sectioning (quote color))
605 (setq font-latex-script-display (quote (nil)))
606 (global-auto-revert-mode 1)
607 (global-font-lock-mode 1)
609 (setq log-edit-keep-buffer t)
610 (setq mail-user-agent (quote sendmail-user-agent))
611 (setq markdown-enable-math t)
612 (setq markdown-follow-wiki-link-on-enter nil)
613 (setq mutt-alias-file-list (quote ("~/.mutt/aliases" "~/.mail_aliases")))
614 (setq post-email-address "don@donarmstrong.com")
615 (setq post-kill-quoted-sig nil)
616 (setq post-mail-message "mutt\\(ng\\|\\)-[a-z0-9]+-[0-9]+-.*")
617 (setq post-uses-fill-mode nil)
618 (setq ps-footer-font-size (quote (8 . 10)))
619 (setq ps-header-font-size (quote (8 . 10)))
620 (setq ps-header-title-font-size (quote (10 . 10)))
621 (setq ps-line-number-color "blue")
622 (setq ps-print-footer t)
623 (setq ps-print-footer-frame nil)
624 (setq ps-print-only-one-header t)
625 (setq safe-local-variable-values (quote ((auto-save-default) (make-backup-files))))
626 (setq sentence-end "[.?!][]\"')]*\\($\\| \\| \\)[
628 (setq sentence-end-double-space nil)
629 ; enable matching parenthesis
632 (setq user-mail-address "don@donarmstrong.com")
633 (setq vc-delete-logbuf-window nil)
634 (setq vc-follow-symlinks t)
636 ;; use git before SVN; use CVS earlier, because I have CVS
637 ;; repositories inside of git directories
638 (setq vc-handled-backends (quote (CVS Git RCS SVN SCCS Bzr Hg Mtn Arch)))
640 ;; switch back to the old primary selection method
641 (setq x-select-enable-clipboard nil)
642 (setq x-select-enable-primary t)
643 ; (setq mouse-drag-copy-region t)
645 (fset 'perl-mode 'cperl-mode)
646 ;;(load-file "cperl-mode.el")
652 ;;(require 'ecasound)
653 ;;(require 'emacs-wiki)
657 ; (require 'google-weather)
658 ; (require 'org-google-weather)
659 ; (setq-default org-google-weather-format "%i %c, [%l,%h] %s %C")
661 (global-set-key "\C-xp" 'server-edit)
663 (setq-default auto-mode-alist (cons '("\.wml$" .
664 (lambda () (html-mode) (auto-fill-mode)))
668 ; use markdown mode for mdwn files
669 (add-to-list 'auto-mode-alist '("\\.mdwn$" . markdown-mode))
670 (add-to-list 'auto-mode-alist '("\\.md$" . markdown-mode))
673 ;; tramp configuration
674 (setq tramp-use-ssh-controlmaster-options nil)
677 (add-to-list 'auto-mode-alist '("muttng-[a-z0-9]+-[0-9]+-" . message-mode))
678 (add-to-list 'auto-mode-alist '("muttngrc" . muttrc-mode))
680 (add-to-list 'auto-mode-alist '("mutt-[a-z0-9]+-[0-9]+-" . message-mode))
681 (add-to-list 'auto-mode-alist '("muttrc" . muttrc-mode))
682 (defun my-message-mode-settings ()
683 (font-lock-add-keywords nil
684 '(("^[ \t]*>[ \t]*>[ \t]*>.*$"
685 (0 'message-multiply-quoted-text-face))
686 ("^[ \t]*>[ \t]*>.*$"
687 (0 'message-double-quoted-text-face))))
688 (local-set-key (kbd "C-c C-a") 'my-post-attach-file)
690 (add-hook 'message-mode-hook 'my-message-mode-settings)
692 (defun my-post-attach-file ()
693 "Prompt for an attachment."
695 (let ((file (read-file-name "Attach file: " nil nil t nil))
696 (description (string-read "Description: ")))
697 (my-header-attach-file file description)))
699 (symbol-function 'my-post-attach-file)
701 (defun my-header-attach-file (file description)
702 "Attach a FILE to the current message (works with Mutt).
703 Argument DESCRIPTION MIME description."
704 (interactive "fAttach file: \nsDescription: ")
705 (when (> (length file) 0)
710 (goto-char (point-min))
711 (search-forward-regexp "^$")
712 (insert (concat "Attach: " (replace-regexp-in-string "\\([[:space:]\\]\\)" "\\\\\\1" (file-truename file)) " "
714 (message (concat "Attached '" file "'."))
715 (setq post-has-attachment t))))))
719 (setq mail-yank-prefix "> ")
721 (global-unset-key "\M-g")
722 (global-set-key "\M-g" 'goto-line)
724 ;; self-insert-command hack.
725 ;; Without this, "if<SP>" expands to
728 ;; which really should be,
734 ;(load-library "php-mode")
736 (setq-default c-indent-level 4)
737 (setq-default c-brace-imaginary-offset 0)
738 (setq-default c-brace-offset -4)
739 (setq-default c-argdecl-indent 4)
740 (setq-default c-label-offset -4)
741 (setq-default c-continued-statement-offset 4)
743 (setq-default indent-tabs-mode nil)
744 (setq-default tab-width 4)
747 ;; (autoload 'php-mode "php-mode" "PHP editing mode" t)
748 ;; (add-to-list 'auto-mode-alist '("\\.php3?\\'" . php-mode))
749 ;; (add-to-list 'auto-mode-alist '("\\.phtml?\\'" . php-mode))
750 ;; (add-to-list 'auto-mode-alist '("\\.php?\\'" . php-mode))
751 ;; (add-to-list 'auto-mode-alist '("\\.php4?\\'" . php-mode))
754 (defun insert-date ()
755 "Insert date at point."
757 (insert (format-time-string "%A, %B %e, %Y %k:%M:%S %Z")))
758 (global-set-key "\C-[d" 'insert-date)
760 (defun unfill-paragraph (arg)
761 "Pull this whole paragraph up onto one line."
763 (let ((fill-column 10000))
764 (fill-paragraph arg))
767 (column-number-mode t)
771 ; (require 'mode-compile)
773 (defadvice server-process-filter (after post-mode-message first activate)
774 "If the buffer is in post mode, overwrite the server-edit
775 message with a post-save-current-buffer-and-exit message."
776 (if (eq major-mode 'post-mode)
778 (substitute-command-keys "Type \\[describe-mode] for help composing; \\[post-save-current-buffer-and-exit] when done."))))
779 ; This is also needed to see the magic message. Set to a higher
780 ; number if you have a faster computer or read slower than me.
781 '(font-lock-verbose 1000)
782 ;(setq-default server-temp-file-regexp "mutt\(-\|ng-\)")
783 ; (add-hook 'server-switch-hook
784 ; (function (lambda()
785 ; (cond ((string-match "Post" mode-name)
787 ; set-buffer-file-coding-system 'utf-8
791 (add-hook 'post-mode-hook
794 ; abbrev mode settings
795 ; load abbreviations from
796 (setq abbrev-file-name
797 "~/.emacs_abbrev_def")
799 ; read the abbrev file if it exists
800 (if (file-exists-p abbrev-file-name)
801 (quietly-read-abbrev-file))
803 ; for now, use abbrev mode everywhere
804 (setq default-abbrev-mode t)
807 (defun insert-function-documentation ()
808 "Insert function documentation"
810 (insert-file-contents "/home/don/lib/templates/perl_function_documentation" nil))
811 (global-set-key "\M-f" 'insert-function-documentation)
813 (eval-after-load "lilypond-mode"
815 (load-library "lyqi-mode")
816 (define-key LilyPond-mode-map "\C-cq" 'lyqi-mode)))
818 (autoload 'spamassassin-mode "spamassassin-mode" nil t)
820 (desktop-load-default)
824 ;; custom-set-faces was added by Custom.
825 ;; If you edit it by hand, you could mess it up, so be careful.
826 ;; Your init file should contain only one such instance.
827 ;; If there is more than one, they won't work right.
828 '(menu ((((type x-toolkit)) (:background "black" :foreground "grey90")))))
831 (put 'upcase-region 'disabled nil)
832 (put 'downcase-region 'disabled nil)
833 (put 'narrow-to-region 'disabled nil)
835 ; (defun turn-on-flyspell ()
836 ; "Force flyspell-mode on using a positive arg. For use in hooks."
841 ; Outline-minor-mode key map
842 (define-prefix-command 'cm-map nil "Outline-")
844 (define-key cm-map "q" 'hide-sublevels) ; Hide everything but the top-level headings
845 (define-key cm-map "t" 'hide-body) ; Hide everything but headings (all body lines)
846 (define-key cm-map "o" 'hide-other) ; Hide other branches
847 (define-key cm-map "c" 'hide-entry) ; Hide this entry's body
848 (define-key cm-map "l" 'hide-leaves) ; Hide body lines in this entry and sub-entries
849 (define-key cm-map "d" 'hide-subtree) ; Hide everything in this entry and sub-entries
851 (define-key cm-map "a" 'show-all) ; Show (expand) everything
852 (define-key cm-map "e" 'show-entry) ; Show this heading's body
853 (define-key cm-map "i" 'show-children) ; Show this heading's immediate child sub-headings
854 (define-key cm-map "k" 'show-branches) ; Show all sub-headings under this heading
855 (define-key cm-map "s" 'show-subtree) ; Show (expand) everything in this heading & below
857 (define-key cm-map "u" 'outline-up-heading) ; Up
858 (define-key cm-map "n" 'outline-next-visible-heading) ; Next
859 (define-key cm-map "p" 'outline-previous-visible-heading) ; Previous
860 (define-key cm-map "f" 'outline-forward-same-level) ; Forward - same level
861 (define-key cm-map "b" 'outline-backward-same-level) ; Backward - same level
862 (global-set-key "\M-o" cm-map)
866 (setq-default debian-changelog-mailing-address "don@debian.org")
867 (setq-default debian-changelog-full-name "Don Armstrong")
869 ; ediff configuration
870 ; don't use the multi-window configuration
871 (setq ediff-window-setup-function 'ediff-setup-windows-plain)
875 (define-key global-map (kbd "C-;") 'iedit-mode)
876 (global-set-key (kbd "C-;") 'iedit-mode)
878 ; fix up css mode to not be silly
879 ; from http://www.stokebloke.com/wordpress/2008/03/21/css-mode-indent-buffer-fix/
880 (setq cssm-indent-level 4)
881 (setq cssm-newline-before-closing-bracket t)
882 (setq cssm-indent-function #'cssm-c-style-indenter)
883 (setq cssm-mirror-mode nil)
885 (require 'multi-web-mode)
886 (setq mweb-default-major-mode 'html-mode)
887 (setq mweb-tags '((php-mode "<\\?php\\|<\\? \\|<\\?=" "\\?>")
888 (js-mode "<script +\\(type=\"text/javascript\"\\|language=\"javascript\"\\)[^>]*>" "</script>")
889 (css-mode "<style +type=\"text/css\"[^>]*>" "</style>")))
890 (setq mweb-filename-extensions '("php" "htm" "html" "ctp" "phtml" "php4" "php5"))
891 (multi-web-global-mode 1)
893 ;;; alias the new `flymake-report-status-slim' to
894 ;;; `flymake-report-status'
895 (defalias 'flymake-report-status 'flymake-report-status-slim)
896 (defun flymake-report-status-slim (e-w &optional status)
897 "Show \"slim\" flymake status in mode line."
899 (setq flymake-mode-line-e-w e-w))
901 (setq flymake-mode-line-status status))
902 (let* ((mode-line " Φ"))
903 (when (> (length flymake-mode-line-e-w) 0)
904 (setq mode-line (concat mode-line ":" flymake-mode-line-e-w)))
905 (setq mode-line (concat mode-line flymake-mode-line-status))
906 (setq flymake-mode-line mode-line)
907 (force-mode-line-update)))
909 ; load sql-indent when sql is loaded
910 (eval-after-load "sql"
911 '(load-library "sql-indent"))
913 ; fix up tmux xterm keys
914 ; stolen from http://unix.stackexchange.com/questions/24414/shift-arrow-not-working-in-emacs-within-tmux
915 (defun fix-up-tmux-keys ()
916 "Fix up tmux xterm keys"
919 (let ((x 2) (tkey ""))
939 ;; ctrl + alt + shift
941 (setq tkey "C-M-S-"))
944 (define-key key-translation-map (kbd (format "M-[ 1 ; %d A" x)) (kbd (format "%s<up>" tkey)))
945 (define-key key-translation-map (kbd (format "M-[ 1 ; %d B" x)) (kbd (format "%s<down>" tkey)))
946 (define-key key-translation-map (kbd (format "M-[ 1 ; %d C" x)) (kbd (format "%s<right>" tkey)))
947 (define-key key-translation-map (kbd (format "M-[ 1 ; %d D" x)) (kbd (format "%s<left>" tkey)))
949 (define-key key-translation-map (kbd (format "M-[ 1 ; %d H" x)) (kbd (format "%s<home>" tkey)))
951 (define-key key-translation-map (kbd (format "M-[ 1 ; %d F" x)) (kbd (format "%s<end>" tkey)))
953 (define-key key-translation-map (kbd (format "M-[ 5 ; %d ~" x)) (kbd (format "%s<prior>" tkey)))
955 (define-key key-translation-map (kbd (format "M-[ 6 ; %d ~" x)) (kbd (format "%s<next>" tkey)))
957 (define-key key-translation-map (kbd (format "M-[ 2 ; %d ~" x)) (kbd (format "%s<delete>" tkey)))
959 (define-key key-translation-map (kbd (format "M-[ 3 ; %d ~" x)) (kbd (format "%s<delete>" tkey)))
961 (define-key key-translation-map (kbd (format "M-[ 1 ; %d P" x)) (kbd (format "%s<f1>" tkey)))
963 (define-key key-translation-map (kbd (format "M-[ 1 ; %d Q" x)) (kbd (format "%s<f2>" tkey)))
965 (define-key key-translation-map (kbd (format "M-[ 1 ; %d R" x)) (kbd (format "%s<f3>" tkey)))
967 (define-key key-translation-map (kbd (format "M-[ 1 ; %d S" x)) (kbd (format "%s<f4>" tkey)))
969 (define-key key-translation-map (kbd (format "M-[ 15 ; %d ~" x)) (kbd (format "%s<f5>" tkey)))
971 (define-key key-translation-map (kbd (format "M-[ 17 ; %d ~" x)) (kbd (format "%s<f6>" tkey)))
973 (define-key key-translation-map (kbd (format "M-[ 18 ; %d ~" x)) (kbd (format "%s<f7>" tkey)))
975 (define-key key-translation-map (kbd (format "M-[ 19 ; %d ~" x)) (kbd (format "%s<f8>" tkey)))
977 (define-key key-translation-map (kbd (format "M-[ 20 ; %d ~" x)) (kbd (format "%s<f9>" tkey)))
979 (define-key key-translation-map (kbd (format "M-[ 21 ; %d ~" x)) (kbd (format "%s<f10>" tkey)))
981 (define-key key-translation-map (kbd (format "M-[ 23 ; %d ~" x)) (kbd (format "%s<f11>" tkey)))
983 (define-key key-translation-map (kbd (format "M-[ 24 ; %d ~" x)) (kbd (format "%s<f12>" tkey)))
985 (define-key key-translation-map (kbd (format "M-[ 25 ; %d ~" x)) (kbd (format "%s<f13>" tkey)))
987 (define-key key-translation-map (kbd (format "M-[ 26 ; %d ~" x)) (kbd (format "%s<f14>" tkey)))
989 (define-key key-translation-map (kbd (format "M-[ 28 ; %d ~" x)) (kbd (format "%s<f15>" tkey)))
991 (define-key key-translation-map (kbd (format "M-[ 29 ; %d ~" x)) (kbd (format "%s<f16>" tkey)))
993 (define-key key-translation-map (kbd (format "M-[ 31 ; %d ~" x)) (kbd (format "%s<f17>" tkey)))
995 (define-key key-translation-map (kbd (format "M-[ 32 ; %d ~" x)) (kbd (format "%s<f18>" tkey)))
997 (define-key key-translation-map (kbd (format "M-[ 33 ; %d ~" x)) (kbd (format "%s<f19>" tkey)))
999 (define-key key-translation-map (kbd (format "M-[ 34 ; %d ~" x)) (kbd (format "%s<f20>" tkey)))
1006 ; (add-hook 'tty-setup-hook 'fix-up-tmux-keys)
1008 ; procmailmode configuration
1009 (load "procmail_mode")
1011 (load "mode-line-cleaner")
1013 (defadvice ask-user-about-supersession-threat (around ask-user-about-supersession-threat-if-necessary)
1014 "Call ask-user-about-supersession-threat only if the buffer is actually obsolete."
1015 (if (or (buffer-modified-p)
1016 (verify-visited-file-modtime)
1017 (< (* 8 1024 1024) (buffer-size))
1018 (/= 0 (call-process-region 1 (+ 1 (buffer-size)) "diff" nil nil nil "-q" (buffer-file-name) "-")))
1020 (clear-visited-file-modtime)
1022 (ad-activate 'ask-user-about-supersession-threat)
1024 ; apparently things like to step on C-;, so we'll use a hack from
1025 ; http://stackoverflow.com/questions/683425/globally-override-key-binding-in-emacs/5340797#5340797 to fix this
1027 (defvar my-keys-minor-mode-map (make-keymap) "my-keys-minor-mode keymap.")
1029 ; use iedit everywhere
1030 (define-key my-keys-minor-mode-map (kbd "C-;") 'iedit-mode)
1032 (define-minor-mode my-keys-minor-mode
1033 "A minor mode so that my key settings override annoying major modes."
1034 t " my-keys" 'my-keys-minor-mode-map)
1036 (my-keys-minor-mode 1)
1037 (defun my-minibuffer-setup-hook ()
1038 (my-keys-minor-mode 0))
1040 (add-hook 'minibuffer-setup-hook 'my-minibuffer-setup-hook)
1041 (defadvice load (after give-my-keybindings-priority)
1042 "Try to ensure that my keybindings always have priority."
1043 (if (not (eq (car (car minor-mode-map-alist)) 'my-keys-minor-mode))
1044 (let ((mykeys (assq 'my-keys-minor-mode minor-mode-map-alist)))
1045 (assq-delete-all 'my-keys-minor-mode minor-mode-map-alist)
1046 (add-to-list 'minor-mode-map-alist mykeys))))
1048 (global-set-key "\M- " 'hippie-expand)
1053 #+BEGIN_SRC emacs-lisp
1054 (provide 'don-configuration)