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
80 #+BEGIN_SRC emacs-lisp
81 ;; (use-package eyebrowse
83 ;; :diminish eyebrowse-mode
84 ;; :init (setq eyebrowse-keymap-prefix (kbd "C-c C-\\"))
86 ;; (setq eyebrowse-wrap-around t)
89 ;; (defun my/eyebrowse-new-window-config ()
93 ;; ;; start at 1 run till 0
94 ;; (let ((j (mod (+ i 1) 10)))
95 ;; (when (and (not done)
96 ;; (not (eyebrowse--window-config-present-p j)))
97 ;; (eyebrowse-switch-to-window-config j)
98 ;; (call-interactively 'eyebrowse-rename-window-config2 j)
103 ;; ;; I don't use latex-preview-pane
104 ;; ;; (require 'latex-preview-pane)
105 ;; ;; (defun my/close-latex-preview-pane-before-eyebrowse-switch ()
106 ;; ;; ;; latex-preview-pane uses window-parameters which are
107 ;; ;; ;; not preserved by eyebrowse, so we close the preview
108 ;; ;; ;; pane before switching, it will be regenerated when we
109 ;; ;; ;; edit the TeX file.
110 ;; ;; (when (lpp/window-containing-preview)
111 ;; ;; (delete-window (lpp/window-containing-preview))))
113 ;; ;; (add-to-list 'eyebrowse-pre-window-switch-hook
114 ;; ;; #'my/close-latex-preview-pane-before-eyebrowse-switch)
116 ;; ;; (my/set-menu-key "[" #'my/eyebrowse-new-window-config)
117 ;; ;; (my/set-menu-key ";" #'eyebrowse-prev-window-config)
118 ;; ;; (my/set-menu-key "'" #'eyebrowse-next-window-config)
119 ;; ;; (my/set-menu-key "]" #'eyebrowse-close-window-config)
120 ;; ;; (my/set-menu-key "\\" #'eyebrowse-rename-window-config)
128 #+BEGIN_SRC emacs-lisp
129 (defun my/vsplit-last-buffer ()
130 "Split the window vertically and display the previous buffer."
132 (split-window-vertically)
134 (switch-to-next-buffer))
136 (defun my/hsplit-last-buffer ()
137 "Split the window horizontally and display the previous buffer."
139 (split-window-horizontally)
141 (switch-to-next-buffer))
143 (bind-key "C-x 2" 'my/vsplit-last-buffer)
144 (bind-key "C-x 3" 'my/hsplit-last-buffer)
146 (setq split-width-threshold 100)
147 (setq split-height-threshold 60)
149 (defun my/split-window-prefer-horizontally (window)
150 "If there's only one window (excluding any possibly active
151 minibuffer), then split the current window horizontally."
152 (if (and (one-window-p t)
153 (not (active-minibuffer-window))
154 ( > (frame-width) (frame-height))
156 (let ((split-height-threshold nil))
157 (split-window-sensibly window))
158 (split-window-sensibly window)))
160 (setq split-window-preferred-function #'my/split-window-prefer-horizontally)
161 (setq window-combination-resize t)
164 *** Compilation window
166 If there is no compilation window, open one at the bottom, spanning
167 the complete width of the frame. Otherwise, reuse existing window. In
168 the former case, if there was no error the window closes
171 #+BEGIN_SRC emacs-lisp
172 (add-to-list 'display-buffer-alist
173 `(,(rx bos "*compilation*" eos)
174 (display-buffer-reuse-window
175 display-buffer-in-side-window)
176 (reusable-frames . visible)
178 (window-height . 0.4)))
181 #+BEGIN_SRC emacs-lisp
182 (defun my/compilation-exit-autoclose (status code msg)
183 ;; If M-x compile exists with a 0
184 (when (and (eq status 'exit) (zerop code))
185 ;; and delete the *compilation* window
186 (let ((compilation-window (get-buffer-window (get-buffer "*compilation*"))))
187 (when (and (not (window-at-side-p compilation-window 'top))
188 (window-at-side-p compilation-window 'left)
189 (window-at-side-p compilation-window 'right))
190 (delete-window compilation-window))))
191 ;; Always return the anticipated result of compilation-exit-message-function
194 ;; Specify my function (maybe I should have done a lambda function)
195 (setq compilation-exit-message-function #'my/compilation-exit-autoclose)
198 If you change the variable ~compilation-scroll-output~ to a ~non-nil~
199 value, the compilation buffer scrolls automatically to follow the
200 output. If the value is ~first-error~, scrolling stops when the first
201 error appears, leaving point at that error. For any other non-nil
202 value, scrolling continues until there is no more output.
204 #+BEGIN_SRC emacs-lisp
205 (setq compilation-scroll-output 'first-error)
208 ** Mode line cleaning
210 #+BEGIN_SRC emacs-lisp
211 (use-package diminish
216 #+BEGIN_SRC emacs-lisp
223 #+BEGIN_SRC emacs-lisp
226 :bind ("C-c C-SPC" . avy-goto-word-1)
228 (setq avy-background t)
229 (key-chord-define-global "jj" #'avy-goto-word-1)))
235 #+BEGIN_SRC emacs-lisp
236 (use-package yasnippet
238 :diminish yas-minor-mode
241 (setq yas-verbosity 1)))
246 [[https://github.com/PythonNut/helm-flx][helm-flx]] implements intelligent helm fuzzy sorting, provided by [[https://github.com/lewang/flx][flx]].
248 #+BEGIN_SRC emacs-lisp
249 (use-package helm-flx
252 ;; these are helm configs, but they kind of fit here nicely
253 (setq helm-M-x-fuzzy-match t
254 helm-bookmark-show-location t
255 helm-buffers-fuzzy-matching t
256 helm-completion-in-region-fuzzy-match t
257 helm-file-cache-fuzzy-match t
258 helm-imenu-fuzzy-match t
259 helm-mode-fuzzy-match t
260 helm-locate-fuzzy-match nil
262 helm-recentf-fuzzy-match nil
263 helm-semantic-fuzzy-match t)
270 #+BEGIN_SRC emacs-lisp
272 (use-package tinyprocmail
274 :config (with-library 'tinyprocmail
275 ;; (setq tinyprocmail--procmail-version "v3.22")
276 (add-hook 'tinyprocmail--load-hook 'tinyprocmail-install))
281 #+BEGIN_SRC emacs-lisp :tangle don-configuration.el
285 ;; don't verify where we are pushing
286 (setq magit-push-always-verify nil)
287 ;; refine diffs always (hilight words)
288 (setq magit-diff-refine-hunk nil)
291 (append '("~/lib/emacs_el/magit-annex")
294 (use-package magit-annex
300 #+BEGIN_SRC emacs-lisp
301 (require 'cperl-mode)
302 ;; Use c-mode for perl .xs files
303 (add-to-list 'auto-mode-alist '("\\.xs\\'" . c-mode))
304 (add-to-list 'auto-mode-alist '("\\.\\([pP][Llm]\\|al\\)\\'" . cperl-mode))
305 (add-to-list 'interpreter-mode-alist '("perl" . cperl-mode))
306 (add-to-list 'interpreter-mode-alist '("perl5" . cperl-mode))
307 (add-to-list 'interpreter-mode-alist '("miniperl" . cperl-mode))
310 cperl-auto-newline nil
311 cperl-auto-newline-after-colon nil
312 cperl-continued-statement-offset 4
313 cperl-brace-offset -1
314 cperl-continued-brace-offset 0
315 cperl-label-offset -4
316 cperl-highlight-variables-indiscriminately t
317 cperl-electric-lbrace-space nil
318 cperl-indent-parens-as-block nil
319 cperl-close-paren-offset -1
320 cperl-tab-always-indent t)
321 ;(add-hook 'cperl-mode-hook (lambda () (cperl-set-style "PerlStyle")))
325 #+BEGIN_SRC emacs-lisp
330 (define-key global-map [remap find-file] 'helm-find-files)
331 (define-key global-map [remap occur] 'helm-occur)
332 (define-key global-map [remap list-buffers] 'helm-buffers-list)
333 (define-key global-map [remap dabbrev-expand] 'helm-dabbrev)
334 (global-set-key (kbd "M-x") 'helm-M-x)
335 (unless (boundp 'completion-in-region-function)
336 (define-key lisp-interaction-mode-map [remap completion-at-point] 'helm-lisp-completion-at-point)
337 (define-key emacs-lisp-mode-map [remap completion-at-point] 'helm-lisp-completion-at-point))
338 (add-hook 'kill-emacs-hook #'(lambda () (and (file-exists-p "$TMP") (delete-file "$TMP"))))
342 #+BEGIN_SRC emacs-lisp :tangle don-configuration.el
347 #+BEGIN_SRC emacs-lisp
348 (add-to-list 'tramp-methods '("vcsh"
349 (tramp-login-program "vcsh")
353 (tramp-remote-shell "/bin/sh")
354 (tramp-remote-shell-args
358 #+BEGIN_SRC emacs-lisp
359 (load "auctex.el" nil t t)
360 (load "preview-latex.el" nil t t)
361 (load "latex.el" nil t t)
363 ;; this is in the very newest auctex; avoid for now
364 (add-to-list 'LaTeX-fill-excluded-macros
366 (add-to-list 'TeX-style-path '"/home/don/lib/emacs_el/auctex/style")
367 ;; REFTEX (much enhanced management of cross-ref, labels, etc)
368 ;; http://www.strw.leidenuniv.nl/~dominik/Tools/reftex/
369 (autoload 'reftex-mode "reftex" "RefTeX Minor Mode" t)
370 (autoload 'turn-on-reftex "reftex" "RefTeX Minor Mode" nil)
371 (autoload 'reftex-citation "reftex-cite" "Make citation" nil)
372 (autoload 'reftex-index-phrase-mode "reftex-index" "Phrase mode" t)
373 (add-hook 'LaTeX-mode-hook 'turn-on-reftex) ; with AUCTeX LaTeX mode
374 (add-hook 'latex-mode-hook 'turn-on-reftex) ; with Emacs latex mode
375 (add-hook 'LaTeX-mode-hook 'outline-minor-mode) ; with AUCTeX LaTeX mode
376 (add-hook 'latex-mode-hook 'outline-minor-mode) ; with Emacs latex mode
378 ; use smart quotes by default instead of `` and ''
379 ; taken from http://kieranhealy.org/esk/kjhealy.html
380 (setq TeX-open-quote "“")
381 (setq TeX-close-quote "”")
383 ;; (TeX-add-style-hook
388 ;; (custom-set-variables
389 ;; '(font-latex-user-keyword-classes
392 ;; font-lock-function-name-face 2 (command 1 t))))
395 (require 'font-latex)
396 (setq font-latex-match-reference-keywords
412 ; (setq font-latex-match-warning-keywords
420 (setq-default TeX-parse-self t)
421 (setq-default TeX-auto-save t)
422 (setq-default TeX-master nil)
428 (if (boundp 'reftex-ref-style-alist)
430 'reftex-ref-style-alist
431 '("Cleveref" "cleveref"
432 (("\\cref" ?c) ("\\Cref" ?C) ("\\cpageref" ?d) ("\\Cpageref" ?D)))))
433 (reftex-ref-style-activate "Cleveref")
435 '("cref" TeX-arg-ref)
436 '("Cref" TeX-arg-ref)
437 '("cpageref" TeX-arg-ref)
438 '("Cpageref" TeX-arg-ref)))))
439 ;; this doesn't seem to work; not currently sure why
440 ; (setq font-latex-user-keyword-classes
441 ; '(("my-warning-commands"
448 ; (:foreground "red" :weight bold :underline (:color foreground-color :style line)))
451 (setq-default reftex-default-bibliography
452 '("~/projects/research/references.bib"))
457 #+BEGIN_SRC emacs-lisp
458 (require 'org-mode-configuration)
461 #+BEGIN_SRC emacs-lisp
464 :config (require 'ess_configuration))
468 From http://julien.danjou.info/projects/emacs-packages#rainbow-mode, this colorizes color strings
470 #+BEGIN_SRC emacs-lisp
471 (use-package rainbow-mode
473 ;; add ess to the x major mode
474 :config (add-to-list 'rainbow-x-colors-major-mode-list 'ESS[S])
475 (add-to-list 'rainbow-x-colors-major-mode-list 'ESS[R])
480 #+BEGIN_SRC emacs-lisp
481 (use-package polymode
484 (use-package poly-noweb)
485 (use-package poly-markdown)
486 :mode ("\\.Snw" . poly-noweb+r-mode)
487 :mode ("\\.Rnw" . poly-noweb+r-mode)
488 :mode ("\\.Rmd" . poly-markdown+r-mode)
494 #+BEGIN_SRC emacs-lisp
495 (use-package outline-magic)
498 ** Override other things
499 #+BEGIN_SRC emacs-lisp
500 ; apparently things like to step on C-;, so we'll use a hack from
501 ; http://stackoverflow.com/questions/683425/globally-override-key-binding-in-emacs/5340797#5340797 to fix this
503 (defvar my-keys-minor-mode-map (make-keymap) "my-keys-minor-mode keymap.")
505 ; use iedit everywhere
506 (define-key my-keys-minor-mode-map (kbd "C-;") 'iedit-mode)
507 ;; use outline mode keybindings everywhere
508 (define-key my-keys-minor-mode-map (kbd "C-;") 'my/mydra-outline/body)
510 (define-minor-mode my-keys-minor-mode
511 "A minor mode so that my key settings override annoying major modes."
512 t " my-keys" 'my-keys-minor-mode-map)
514 (my-keys-minor-mode 1)
515 (defun my-minibuffer-setup-hook ()
516 (my-keys-minor-mode 0))
518 (add-hook 'minibuffer-setup-hook 'my-minibuffer-setup-hook)
519 (defadvice load (after give-my-keybindings-priority)
520 "Try to ensure that my keybindings always have priority."
521 (if (not (eq (car (car minor-mode-map-alist)) 'my-keys-minor-mode))
522 (let ((mykeys (assq 'my-keys-minor-mode minor-mode-map-alist)))
523 (assq-delete-all 'my-keys-minor-mode minor-mode-map-alist)
524 (add-to-list 'minor-mode-map-alist mykeys))))
528 * Misc (uncharacterized)
529 #+BEGIN_SRC emacs-lisp
530 (setq bibtex-user-optional-fields (quote (("annote" "Personal annotation (ignored)") ("abstract" "") ("pmid" "") ("doi" ""))))
531 (setq calendar-latitude 40.11)
532 (setq calendar-longitude -88.24)
533 (setq case-fold-search t)
534 (setq confirm-kill-emacs (quote y-or-n-p))
535 (setq cperl-lazy-help-time nil)
536 (setq debian-changelog-mailing-address "don@debian.org")
538 (setq display-time-24hr-format t)
539 (setq display-time-day-and-date t)
540 (display-time-mode 1)
541 (setq font-latex-fontify-script nil)
542 (setq font-latex-fontify-sectioning (quote color))
543 (setq font-latex-script-display (quote (nil)))
544 (global-auto-revert-mode 1)
545 (global-font-lock-mode 1)
547 (setq log-edit-keep-buffer t)
548 (setq mail-user-agent (quote sendmail-user-agent))
549 (setq markdown-enable-math t)
550 (setq markdown-follow-wiki-link-on-enter nil)
551 (setq mutt-alias-file-list (quote ("~/.mutt/aliases" "~/.mail_aliases")))
552 (setq post-email-address "don@donarmstrong.com")
553 (setq post-kill-quoted-sig nil)
554 (setq post-mail-message "mutt\\(ng\\|\\)-[a-z0-9]+-[0-9]+-.*")
555 (setq post-uses-fill-mode nil)
556 (setq ps-footer-font-size (quote (8 . 10)))
557 (setq ps-header-font-size (quote (8 . 10)))
558 (setq ps-header-title-font-size (quote (10 . 10)))
559 (setq ps-line-number-color "blue")
560 (setq ps-print-footer t)
561 (setq ps-print-footer-frame nil)
562 (setq ps-print-only-one-header t)
563 (setq safe-local-variable-values (quote ((auto-save-default) (make-backup-files))))
564 (setq sentence-end "[.?!][]\"')]*\\($\\| \\| \\)[
566 (setq sentence-end-double-space nil)
567 ; enable matching parenthesis
570 (setq user-mail-address "don@donarmstrong.com")
571 (setq vc-delete-logbuf-window nil)
572 (setq vc-follow-symlinks t)
574 ;; use git before SVN; use CVS earlier, because I have CVS
575 ;; repositories inside of git directories
576 (setq vc-handled-backends (quote (CVS Git RCS SVN SCCS Bzr Hg Mtn Arch)))
578 ;; switch back to the old primary selection method
579 (setq x-select-enable-clipboard nil)
580 (setq x-select-enable-primary t)
581 ; (setq mouse-drag-copy-region t)
583 (fset 'perl-mode 'cperl-mode)
584 ;;(load-file "cperl-mode.el")
590 ;;(require 'ecasound)
591 ;;(require 'emacs-wiki)
595 ; (require 'google-weather)
596 ; (require 'org-google-weather)
597 ; (setq-default org-google-weather-format "%i %c, [%l,%h] %s %C")
599 (global-set-key "\C-xp" 'server-edit)
601 (setq-default auto-mode-alist (cons '("\.wml$" .
602 (lambda () (html-mode) (auto-fill-mode)))
606 ; use markdown mode for mdwn files
607 (add-to-list 'auto-mode-alist '("\\.mdwn$" . markdown-mode))
608 (add-to-list 'auto-mode-alist '("\\.md$" . markdown-mode))
611 ;; tramp configuration
612 (setq tramp-use-ssh-controlmaster-options nil)
615 (add-to-list 'auto-mode-alist '("muttng-[a-z0-9]+-[0-9]+-" . message-mode))
616 (add-to-list 'auto-mode-alist '("muttngrc" . muttrc-mode))
618 (add-to-list 'auto-mode-alist '("mutt-[a-z0-9]+-[0-9]+-" . message-mode))
619 (add-to-list 'auto-mode-alist '("muttrc" . muttrc-mode))
620 (defun my-message-mode-settings ()
621 (font-lock-add-keywords nil
622 '(("^[ \t]*>[ \t]*>[ \t]*>.*$"
623 (0 'message-multiply-quoted-text-face))
624 ("^[ \t]*>[ \t]*>.*$"
625 (0 'message-double-quoted-text-face))))
626 (local-set-key (kbd "C-c C-a") 'my-post-attach-file)
628 (add-hook 'message-mode-hook 'my-message-mode-settings)
630 (defun my-post-attach-file ()
631 "Prompt for an attachment."
633 (let ((file (read-file-name "Attach file: " nil nil t nil))
634 (description (string-read "Description: ")))
635 (my-header-attach-file file description)))
637 (symbol-function 'my-post-attach-file)
639 (defun my-header-attach-file (file description)
640 "Attach a FILE to the current message (works with Mutt).
641 Argument DESCRIPTION MIME description."
642 (interactive "fAttach file: \nsDescription: ")
643 (when (> (length file) 0)
648 (goto-char (point-min))
649 (search-forward-regexp "^$")
650 (insert (concat "Attach: " (replace-regexp-in-string "\\([[:space:]\\]\\)" "\\\\\\1" (file-truename file)) " "
652 (message (concat "Attached '" file "'."))
653 (setq post-has-attachment t))))))
657 (setq mail-yank-prefix "> ")
659 (global-unset-key "\M-g")
660 (global-set-key "\M-g" 'goto-line)
662 ;; self-insert-command hack.
663 ;; Without this, "if<SP>" expands to
666 ;; which really should be,
672 ;(load-library "php-mode")
674 (setq-default c-indent-level 4)
675 (setq-default c-brace-imaginary-offset 0)
676 (setq-default c-brace-offset -4)
677 (setq-default c-argdecl-indent 4)
678 (setq-default c-label-offset -4)
679 (setq-default c-continued-statement-offset 4)
681 (setq-default indent-tabs-mode nil)
682 (setq-default tab-width 4)
685 ;; (autoload 'php-mode "php-mode" "PHP editing mode" t)
686 ;; (add-to-list 'auto-mode-alist '("\\.php3?\\'" . php-mode))
687 ;; (add-to-list 'auto-mode-alist '("\\.phtml?\\'" . php-mode))
688 ;; (add-to-list 'auto-mode-alist '("\\.php?\\'" . php-mode))
689 ;; (add-to-list 'auto-mode-alist '("\\.php4?\\'" . php-mode))
692 (defun insert-date ()
693 "Insert date at point."
695 (insert (format-time-string "%A, %B %e, %Y %k:%M:%S %Z")))
696 (global-set-key "\C-[d" 'insert-date)
698 (defun unfill-paragraph (arg)
699 "Pull this whole paragraph up onto one line."
701 (let ((fill-column 10000))
702 (fill-paragraph arg))
705 (column-number-mode t)
706 (setq-default reftex-plug-into-AUCTeX t)
710 ; (require 'mode-compile)
712 (defadvice server-process-filter (after post-mode-message first activate)
713 "If the buffer is in post mode, overwrite the server-edit
714 message with a post-save-current-buffer-and-exit message."
715 (if (eq major-mode 'post-mode)
717 (substitute-command-keys "Type \\[describe-mode] for help composing; \\[post-save-current-buffer-and-exit] when done."))))
718 ; This is also needed to see the magic message. Set to a higher
719 ; number if you have a faster computer or read slower than me.
720 '(font-lock-verbose 1000)
721 ;(setq-default server-temp-file-regexp "mutt\(-\|ng-\)")
722 ; (add-hook 'server-switch-hook
723 ; (function (lambda()
724 ; (cond ((string-match "Post" mode-name)
726 ; set-buffer-file-coding-system 'utf-8
730 (add-hook 'post-mode-hook
733 ; abbrev mode settings
734 ; load abbreviations from
735 (setq abbrev-file-name
736 "~/.emacs_abbrev_def")
738 ; read the abbrev file if it exists
739 (if (file-exists-p abbrev-file-name)
740 (quietly-read-abbrev-file))
742 ; for now, use abbrev mode everywhere
743 (setq default-abbrev-mode t)
746 (defun insert-function-documentation ()
747 "Insert function documentation"
749 (insert-file-contents "/home/don/lib/templates/perl_function_documentation" nil))
750 (global-set-key "\M-f" 'insert-function-documentation)
752 (eval-after-load "lilypond-mode"
754 (load-library "lyqi-mode")
755 (define-key LilyPond-mode-map "\C-cq" 'lyqi-mode)))
757 (autoload 'spamassassin-mode "spamassassin-mode" nil t)
759 (desktop-load-default)
763 ;; custom-set-faces was added by Custom.
764 ;; If you edit it by hand, you could mess it up, so be careful.
765 ;; Your init file should contain only one such instance.
766 ;; If there is more than one, they won't work right.
767 '(menu ((((type x-toolkit)) (:background "black" :foreground "grey90")))))
770 (put 'upcase-region 'disabled nil)
771 (put 'downcase-region 'disabled nil)
772 (put 'narrow-to-region 'disabled nil)
774 (setq ispell-program-name "ispell")
775 (autoload 'flyspell-mode "flyspell" "On-the-fly spelling checker." t)
776 (add-hook 'message-mode-hook 'turn-on-flyspell)
777 (add-hook 'text-mode-hook 'turn-on-flyspell)
778 (add-hook 'c-mode-common-hook 'flyspell-prog-mode)
779 (add-hook 'cperl-mode-hook 'flyspell-prog-mode)
780 (add-hook 'tcl-mode-hook 'flyspell-prog-mode)
781 ; (defun turn-on-flyspell ()
782 ; "Force flyspell-mode on using a positive arg. For use in hooks."
787 ; Outline-minor-mode key map
788 (define-prefix-command 'cm-map nil "Outline-")
790 (define-key cm-map "q" 'hide-sublevels) ; Hide everything but the top-level headings
791 (define-key cm-map "t" 'hide-body) ; Hide everything but headings (all body lines)
792 (define-key cm-map "o" 'hide-other) ; Hide other branches
793 (define-key cm-map "c" 'hide-entry) ; Hide this entry's body
794 (define-key cm-map "l" 'hide-leaves) ; Hide body lines in this entry and sub-entries
795 (define-key cm-map "d" 'hide-subtree) ; Hide everything in this entry and sub-entries
797 (define-key cm-map "a" 'show-all) ; Show (expand) everything
798 (define-key cm-map "e" 'show-entry) ; Show this heading's body
799 (define-key cm-map "i" 'show-children) ; Show this heading's immediate child sub-headings
800 (define-key cm-map "k" 'show-branches) ; Show all sub-headings under this heading
801 (define-key cm-map "s" 'show-subtree) ; Show (expand) everything in this heading & below
803 (define-key cm-map "u" 'outline-up-heading) ; Up
804 (define-key cm-map "n" 'outline-next-visible-heading) ; Next
805 (define-key cm-map "p" 'outline-previous-visible-heading) ; Previous
806 (define-key cm-map "f" 'outline-forward-same-level) ; Forward - same level
807 (define-key cm-map "b" 'outline-backward-same-level) ; Backward - same level
808 (global-set-key "\M-o" cm-map)
812 (setq-default debian-changelog-mailing-address "don@debian.org")
813 (setq-default debian-changelog-full-name "Don Armstrong")
815 ; ediff configuration
816 ; don't use the multi-window configuration
817 (setq ediff-window-setup-function 'ediff-setup-windows-plain)
821 (define-key global-map (kbd "C-;") 'iedit-mode)
822 (global-set-key (kbd "C-;") 'iedit-mode)
824 ; fix up css mode to not be silly
825 ; from http://www.stokebloke.com/wordpress/2008/03/21/css-mode-indent-buffer-fix/
826 (setq cssm-indent-level 4)
827 (setq cssm-newline-before-closing-bracket t)
828 (setq cssm-indent-function #'cssm-c-style-indenter)
829 (setq cssm-mirror-mode nil)
831 (require 'multi-web-mode)
832 (setq mweb-default-major-mode 'html-mode)
833 (setq mweb-tags '((php-mode "<\\?php\\|<\\? \\|<\\?=" "\\?>")
834 (js-mode "<script +\\(type=\"text/javascript\"\\|language=\"javascript\"\\)[^>]*>" "</script>")
835 (css-mode "<style +type=\"text/css\"[^>]*>" "</style>")))
836 (setq mweb-filename-extensions '("php" "htm" "html" "ctp" "phtml" "php4" "php5"))
837 (multi-web-global-mode 1)
839 ;;; alias the new `flymake-report-status-slim' to
840 ;;; `flymake-report-status'
841 (defalias 'flymake-report-status 'flymake-report-status-slim)
842 (defun flymake-report-status-slim (e-w &optional status)
843 "Show \"slim\" flymake status in mode line."
845 (setq flymake-mode-line-e-w e-w))
847 (setq flymake-mode-line-status status))
848 (let* ((mode-line " Φ"))
849 (when (> (length flymake-mode-line-e-w) 0)
850 (setq mode-line (concat mode-line ":" flymake-mode-line-e-w)))
851 (setq mode-line (concat mode-line flymake-mode-line-status))
852 (setq flymake-mode-line mode-line)
853 (force-mode-line-update)))
855 ; load sql-indent when sql is loaded
856 (eval-after-load "sql"
857 '(load-library "sql-indent"))
859 ; fix up tmux xterm keys
860 ; stolen from http://unix.stackexchange.com/questions/24414/shift-arrow-not-working-in-emacs-within-tmux
863 (let ((x 2) (tkey ""))
883 ;; ctrl + alt + shift
885 (setq tkey "C-M-S-"))
888 (define-key key-translation-map (kbd (format "M-[ 1 ; %d A" x)) (kbd (format "%s<up>" tkey)))
889 (define-key key-translation-map (kbd (format "M-[ 1 ; %d B" x)) (kbd (format "%s<down>" tkey)))
890 (define-key key-translation-map (kbd (format "M-[ 1 ; %d C" x)) (kbd (format "%s<right>" tkey)))
891 (define-key key-translation-map (kbd (format "M-[ 1 ; %d D" x)) (kbd (format "%s<left>" tkey)))
893 (define-key key-translation-map (kbd (format "M-[ 1 ; %d H" x)) (kbd (format "%s<home>" tkey)))
895 (define-key key-translation-map (kbd (format "M-[ 1 ; %d F" x)) (kbd (format "%s<end>" tkey)))
897 (define-key key-translation-map (kbd (format "M-[ 5 ; %d ~" x)) (kbd (format "%s<prior>" tkey)))
899 (define-key key-translation-map (kbd (format "M-[ 6 ; %d ~" x)) (kbd (format "%s<next>" tkey)))
901 (define-key key-translation-map (kbd (format "M-[ 2 ; %d ~" x)) (kbd (format "%s<delete>" tkey)))
903 (define-key key-translation-map (kbd (format "M-[ 3 ; %d ~" x)) (kbd (format "%s<delete>" tkey)))
905 (define-key key-translation-map (kbd (format "M-[ 1 ; %d P" x)) (kbd (format "%s<f1>" tkey)))
907 (define-key key-translation-map (kbd (format "M-[ 1 ; %d Q" x)) (kbd (format "%s<f2>" tkey)))
909 (define-key key-translation-map (kbd (format "M-[ 1 ; %d R" x)) (kbd (format "%s<f3>" tkey)))
911 (define-key key-translation-map (kbd (format "M-[ 1 ; %d S" x)) (kbd (format "%s<f4>" tkey)))
913 (define-key key-translation-map (kbd (format "M-[ 15 ; %d ~" x)) (kbd (format "%s<f5>" tkey)))
915 (define-key key-translation-map (kbd (format "M-[ 17 ; %d ~" x)) (kbd (format "%s<f6>" tkey)))
917 (define-key key-translation-map (kbd (format "M-[ 18 ; %d ~" x)) (kbd (format "%s<f7>" tkey)))
919 (define-key key-translation-map (kbd (format "M-[ 19 ; %d ~" x)) (kbd (format "%s<f8>" tkey)))
921 (define-key key-translation-map (kbd (format "M-[ 20 ; %d ~" x)) (kbd (format "%s<f9>" tkey)))
923 (define-key key-translation-map (kbd (format "M-[ 21 ; %d ~" x)) (kbd (format "%s<f10>" tkey)))
925 (define-key key-translation-map (kbd (format "M-[ 23 ; %d ~" x)) (kbd (format "%s<f11>" tkey)))
927 (define-key key-translation-map (kbd (format "M-[ 24 ; %d ~" x)) (kbd (format "%s<f12>" tkey)))
929 (define-key key-translation-map (kbd (format "M-[ 25 ; %d ~" x)) (kbd (format "%s<f13>" tkey)))
931 (define-key key-translation-map (kbd (format "M-[ 26 ; %d ~" x)) (kbd (format "%s<f14>" tkey)))
933 (define-key key-translation-map (kbd (format "M-[ 28 ; %d ~" x)) (kbd (format "%s<f15>" tkey)))
935 (define-key key-translation-map (kbd (format "M-[ 29 ; %d ~" x)) (kbd (format "%s<f16>" tkey)))
937 (define-key key-translation-map (kbd (format "M-[ 31 ; %d ~" x)) (kbd (format "%s<f17>" tkey)))
939 (define-key key-translation-map (kbd (format "M-[ 32 ; %d ~" x)) (kbd (format "%s<f18>" tkey)))
941 (define-key key-translation-map (kbd (format "M-[ 33 ; %d ~" x)) (kbd (format "%s<f19>" tkey)))
943 (define-key key-translation-map (kbd (format "M-[ 34 ; %d ~" x)) (kbd (format "%s<f20>" tkey)))
950 ; procmailmode configuration
951 (load "procmail_mode")
953 (load "mode-line-cleaner")
955 (defadvice ask-user-about-supersession-threat (around ask-user-about-supersession-threat-if-necessary)
956 "Call ask-user-about-supersession-threat only if the buffer is actually obsolete."
957 (if (or (buffer-modified-p)
958 (verify-visited-file-modtime)
959 (< (* 8 1024 1024) (buffer-size))
960 (/= 0 (call-process-region 1 (+ 1 (buffer-size)) "diff" nil nil nil "-q" (buffer-file-name) "-")))
962 (clear-visited-file-modtime)
964 (ad-activate 'ask-user-about-supersession-threat)
966 ; apparently things like to step on C-;, so we'll use a hack from
967 ; http://stackoverflow.com/questions/683425/globally-override-key-binding-in-emacs/5340797#5340797 to fix this
969 (defvar my-keys-minor-mode-map (make-keymap) "my-keys-minor-mode keymap.")
971 ; use iedit everywhere
972 (define-key my-keys-minor-mode-map (kbd "C-;") 'iedit-mode)
974 (define-minor-mode my-keys-minor-mode
975 "A minor mode so that my key settings override annoying major modes."
976 t " my-keys" 'my-keys-minor-mode-map)
978 (my-keys-minor-mode 1)
979 (defun my-minibuffer-setup-hook ()
980 (my-keys-minor-mode 0))
982 (add-hook 'minibuffer-setup-hook 'my-minibuffer-setup-hook)
983 (defadvice load (after give-my-keybindings-priority)
984 "Try to ensure that my keybindings always have priority."
985 (if (not (eq (car (car minor-mode-map-alist)) 'my-keys-minor-mode))
986 (let ((mykeys (assq 'my-keys-minor-mode minor-mode-map-alist)))
987 (assq-delete-all 'my-keys-minor-mode minor-mode-map-alist)
988 (add-to-list 'minor-mode-map-alist mykeys))))
990 (global-set-key "\M- " 'hippie-expand)
995 #+BEGIN_SRC emacs-lisp
996 (provide 'don-configuration)