X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~mdw/git/profile/blobdiff_plain/7a0620499d0e74ea3deae29045365e1ab8acd66f..e8532c79c42b256fe1db82e60fc70d6dc78a5ded:/dot/emacs diff --git a/dot/emacs b/dot/emacs index 89e9cf0..035d132 100644 --- a/dot/emacs +++ b/dot/emacs @@ -46,6 +46,11 @@ ;; Load some other bits of code. +;; Magic to make ELPA packages work. +(trap +(package-initialize) +) + (maybe-autoload 'cc-mode "cc-mode" nil t) (maybe-autoload 'rexx-mode "rexx-mode" nil t) (maybe-autoload 'cvs-update "pcl-cvs" nil t) @@ -88,9 +93,9 @@ (setq semanticdb-default-save-directory "~/.emacs.d/semanticdb/") (eval-after-load "senator" '(setq isearch-mode-hook - (remq 'senator-isearch-mode-hook isearch-mode-hook) + (remq 'senator-isearch-mode-hook isearch-mode-hook) isearch-mode-end-hook - (remq 'senator-isearch-mode-hook isearch-mode-end-hook))) + (remq 'senator-isearch-mode-hook isearch-mode-end-hook))) ;; Skeleton stuff. @@ -101,9 +106,10 @@ (require 'paren) (trap (show-paren-mode t)) (or window-system (mdw-emacs-version-p 22) (menu-bar-mode -1)) -(setq x-select-enable-clipboard nil - x-select-enable-primary t - mouse-drag-copy-region t) +(if (eq window-system 'x) + (setq x-select-enable-clipboard nil + x-select-enable-primary t)) +(setq mouse-drag-copy-region t) ;; Multiple cursors. @@ -130,11 +136,14 @@ (and (or window-system (mdw-emacs-version-p 23)) (not mdw-fast-startup) + (not (and (fboundp 'daemonp) (daemonp))) (progn (setq server-temp-file-regexp (concat "^" tmpdir "\\|/draft$") edit-server-new-frame nil gnuserv-frame t) (trap (let ((warning-suppress-types - (cons '(server) warning-suppress-types))) + (cons '(server) + (and (boundp 'warning-suppress-types) + warning-suppress-types)))) (server-start))) (trap (progn (require 'edit-server) @@ -155,27 +164,33 @@ (setq backup-by-copying-when-mismatch t) (setq mdw-backup-disable-regexps - '("/\\.git/COMMIT_EDITMSG$" - "/\\.stgit\\(-edit\\.txt\\|msg\\.txt\\|\\.msg\\)$" - "^/tmp/" "^/var/tmp/")) + '("/\\.git/COMMIT_EDITMSG$" + "/\\.stgit\\(-edit\\.txt\\|msg\\.txt\\|\\.msg\\)$" + "^/tmp/" "^/var/tmp/")) ;; Safe variables. (setq safe-local-variable-values - '((make-backup-files . nil))) + '((make-backup-files . nil))) ;; Calculator fiddling. (setq calc-settings-file "~/.emacs-calc") (load calc-settings-file) +;; Saving window-configuration state. + +(or mdw-fast-startup + (winner-mode 1)) + ;; Some mail and news configuration. (setq mail-from-style 'angles mail-signature t mail-yank-prefix "> " mail-archive-file-name nil - message-default-mail-headers "X-Auto-Response-Suppress: DR, RN, NRN, OOF\n" + message-default-mail-headers + "X-Auto-Response-Suppress: DR, RN, NRN, OOF\n" message-default-news-headers "" compose-mail-user-agent-warnings nil) @@ -185,13 +200,15 @@ (setq sendmail-program "~/bin/sendmail-hack" send-mail-function 'sendmail-send-it mail-interactive t + mail-specify-envelope-from t + mail-envelope-from 'header sendmail-error-reporting-interactive '("-odb" "-oee")) (autoload 'sendmail-send-it "sendmail") (autoload 'smtpmail-send-it "smtpmail") (setq mail-user-agent 'message-user-agent read-mail-command 'gnus) -(setq message-signature-separator "^-- \\(\\|\\[mdw\\]\\)$" +(setq message-signature-separator "^-- \\(\\[mdw\\]\\)?$" message-yank-prefix "> " message-yank-cited-prefix "> " message-send-mail-function 'message-send-mail-with-sendmail @@ -218,57 +235,64 @@ bbdb-north-american-phone-numbers-p nil bbdb-dwim-net-address-allow-redundancy t bbdb-extract-address-components-func 'bbdb-extract-address-components + bbdb-allow-duplicates t bbdb/news-auto-create-p - (lambda () - (let ((group gnus-newsgroup-name)) - (and (string-match "^nn\\(imap\\|folder\\)\\+" group) - (not (string-match ":\\(crap\\|spam\\|lists\\|corpus\\)\\." - group))))) + (lambda () + (let ((group gnus-newsgroup-name)) + (and (string-match "^nn\\(imap\\|folder\\)\\+" group) + (not (string-match (concat ":" "\\(" "\\(" "crap" + "\\|" "spam" + "\\|" "lists" + "\\|" "corpus" + "\\)" "\\." + "\\|" "Junk Email$" + "\\)") + group))))) bbdb-user-mail-names - (concat "^" - "\\(" "\\(mdw\\|markw\\|root\\|postmaster\\)" - "\\([-+][^@]*\\|\\)" - "@\\(\\(dist\\|esc\\)orted\\.org\\.uk\\|odin\\.gg\\)" - "\\|" "\\(" "\\(mdw\\|mwooding\\)" - "\\(\\+[^@]*\\)?" - "\\|" "0" "\\(mdw\\|mwooding\\)" "k\\.[^@]*" - "\\)" "@" - "\\(chiark\\|slimy\\|coriolis\\)\\.greenend\\.org\\.uk" - "\\|" "distorted\\.mdw@g\\(\\|oogle\\)mail.com" - "\\|" "mwooding@\\(good\\|blackberry\\)\\.com" - "\\|" "mark\\.wooding@trustonic\\.com" - "\\)$") + (concat "^" + "\\(" "\\(mdw\\|markw\\|root\\|postmaster\\)" + "\\([-+][^@]*\\)?" + "@\\(\\(dist\\|esc\\)orted\\.org\\.uk\\|odin\\.gg\\)" + "\\|" "\\(" "\\(mdw\\|mwooding\\)" + "\\(\\+[^@]*\\)?" + "\\|" "0" "\\(mdw\\|mwooding\\)" "k\\.[^@]*" + "\\)" "@" + "\\(chiark\\|slimy\\|coriolis\\)\\.greenend\\.org\\.uk" + "\\|" "distorted\\.mdw@g\\(oogle\\)?mail.com" + "\\|" "mwooding@\\(good\\|blackberry\\)\\.com" + "\\|" "mark\\.wooding@trustonic\\.com" + "\\)$") bbdb-canonicalize-net-hook - (lambda (addr) - (cond ((null addr) - nil) - ((or (string-match "^mailer-daemon@" addr) - (string-match "\.invalid$" addr) - (string-match (concat "^reply-[0-9a-f]+-[0-9a-f]+_" - "HTML-[0-9]+-[0-9]+-[0-9]+" - "@\\(nationwide-communications\\." - "co\\.uk\\)$") - addr) - (string-match (concat "^[0-9]+@bugs\\." - "\\(" "debian\\.org" - "\\|" "distorted\\.org\\.uk" - "\\)$") - addr) - (string-match (concat "^MicrosoftExchange[0-9a-f]*" - "@newincco\\.onmicrosoft\\.com") - addr) - (member (md5 addr) - '("8815c5583970856799c85a3ee0eb6a9f" ;work wiki spam - "0b94ab4d25dacaa5ac07243a09c9e22e" ;work bug spam - "35fb1633379a1e4d4be3b139cae20111" ;work crucible spam - )) - (and (string-match "^news\\([0-9]+\\)@\\(.*\\)$" addr) - (string= (md5 (match-string 2 addr)) - "879b795aed959b1a000e9f95c132b16c"))) - nil) - ((string-match "^\\([^@+]+\\)\\+[^@]*\\(@.*\\)$" addr) - (concat (match-string 1 addr) (match-string 2 addr))) - (t addr)))) + (lambda (addr) + (cond ((null addr) + nil) + ((or (string-match "^mailer-daemon@" addr) + (string-match "\.invalid$" addr) + (string-match (concat "^reply-[0-9a-f]+-[0-9a-f]+_" + "HTML-[0-9]+-[0-9]+-[0-9]+" + "@\\(nationwide-communications\\." + "co\\.uk\\)$") + addr) + (string-match (concat "^[0-9]+@bugs\\." + "\\(" "debian\\.org" + "\\|" "distorted\\.org\\.uk" + "\\)$") + addr) + (string-match (concat "^MicrosoftExchange[0-9a-f]*" + "@newincco\\.onmicrosoft\\.com") + addr) + (member (md5 addr) + '("8815c5583970856799c85a3ee0eb6a9f" ;work wiki spam + "0b94ab4d25dacaa5ac07243a09c9e22e" ;work bug spam + "35fb1633379a1e4d4be3b139cae20111" ;work crucible spam + )) + (and (string-match "^news\\([0-9]+\\)@\\(.*\\)$" addr) + (string= (md5 (match-string 2 addr)) + "879b795aed959b1a000e9f95c132b16c"))) + nil) + ((string-match "^\\([^@+]+\\)\\+[^@]*\\(@.*\\)$" addr) + (concat (match-string 1 addr) (match-string 2 addr))) + (t addr)))) ;; Customization. @@ -304,16 +328,29 @@ ;; Postscript printing. -(setq ps-paper-type 'a4 - ps-print-color-p nil - ps-landscape-mode t - ps-number-of-columns 2 - ps-font-family 'Courier - ps-font-size 6.5) +(let ((mm (/ 72 25.4))) + (setq ps-paper-type 'a4 + ps-print-only-one-header t + ps-print-color-p t + ps-landscape-mode t ps-number-of-columns 4 + ps-line-number t ps-line-number-step 5 ps-line-number-start 5 + ps-zebra-stripes nil ps-zebra-stripe-height 5 + ps-spool-duplex t ps-spool-tumble nil ps-spool-config 'setpagedevice + ps-top-margin (* 12 mm) + ps-bottom-margin (* 16 mm) + ps-header-offset (* 8 mm) + ps-left-margin (* 12 mm) + ps-right-margin (* 12 mm) + ps-inter-column (* 4 mm) + ps-font-family 'CourierCondensed ps-font-size '(4.5 . 5.16) + ps-line-number-font 'Palatino ps-line-number-font-size 3 + ps-header-font-family 'Helvetica + ps-header-title-font-size '(8 . 10) + ps-header-font-size '(6 . 8))) ;; Splash screen stuff. -(or window-system +(if (not mdw-splashy-startup) (setq inhibit-splash-screen t inhibit-startup-message t)) @@ -321,16 +358,17 @@ (trap (resize-minibuffer-mode 1)) ;Make minibuffer grow dynamically (auto-compression-mode 1) ;Enable automatic compression +(xterm-mouse-mode 1) (setq enable-local-variables :safe enable-local-eval nil) (setq dabbrev-case-replace nil) ;Retain case when completing (setq linum-format "%7d ") (setq next-line-add-newlines nil) ;Don't add weird newlines (setq split-height-threshold nil) ;Reuse windows where sensible -(setq display-buffer-reuse-frames nil ;Don't confuse me by showing buffers - iswitchb-default-method 'samewindow ;in other random frames - ido-default-file-method 'selected-window - ido-default-buffer-method 'selected-window) +(setq compilation-scroll-output 'first-error) +(setq iswitchb-default-method 'samewindow ;Don't confuse me by showing + ido-default-file-method 'selected-window ;buffers in other random + ido-default-buffer-method 'selected-window) ;frames (setq ido-enable-prefix t ido-enable-flex-matching t ido-everywhere t @@ -340,13 +378,16 @@ (setq pcomplete-cycle-completions nil ;Who thought that was a good idea? eshell-cmpl-cycle-completions nil) (setq dired-deletion-confirmer ;Make deletion easier in dired - (symbol-function 'y-or-n-p) - delete-by-moving-to-trash t + (symbol-function 'y-or-n-p) + delete-by-moving-to-trash (mdw-emacs-version-p 24) dired-listing-switches "-alF" ;Do `ls -F' things in dired windows wdired-allow-to-change-permissions 'advanced) (setq read-quoted-char-radix 16) ;C-q HEX-STUFF [RET] (setq case-fold-file-names nil) ;Don't translate file names (grr...) (setq scroll-step 5) ;Don't scroll too much at a time +(setq custom-unlispify-tag-names nil ;Display variable names properly + custom-unlispify-menu-entries nil + custom-buffer-done-kill t) (setq blink-cursor-blinks 0) ;Keep blinking the cursor (setq-default fill-column mdw-text-width) ;I use rather narrow windows (setq adaptive-fill-mode nil) ;I have my own machinery instead @@ -354,6 +395,8 @@ (setq-default comment-column 40) ;Set a standard comment column (setq-default truncate-partial-width-windows nil truncate-lines t) +(setq line-move-visual t + visual-order-cursor-movement t) (setq default-indicate-empty-lines t) (setq view-read-only t) (setq-default view-exit-action #'kill-buffer) @@ -371,12 +414,15 @@ (setq find-ls-option ;Build file lists efficiently '("-print0 | xargs -0r ls -ld" . "ld")) (setq bookmark-save-flag 0) ;Save bookmarks automatically -(setq vc-follow-symlinks t) +(setq ediff-grab-mouse nil) +(setq vc-follow-symlinks t + vc-git-resolve-conflicts nil) (setq x-gtk-file-dialog-help-text nil) (setq use-dialog-box nil) (setq Info-fontify-maximum-menu-size 100000) (setq set-mark-command-repeat-pop t) (setq password-cache-expiry nil) +(setq mouse-autoselect-window nil) (setq-default proced-filter 'all proced-sort 'user) (setq ispell-program-name "aspell-hack" @@ -386,6 +432,20 @@ '(("en_GB-ize-w_accents" "[[:alpha:]]" "[^[:alpha:]]" "'" t ("-d" "en_GB-ize-w_accents") nil utf-8)) ispell-silently-savep t) +(setq-default viper-case-fold-search t + viper-electric-mode t + viper-ex-style-motion nil + viper-ex-style-editing nil + viper-expert-level 5 + viper-inhibit-startup-message t + ;;viper-insert-state-cursor-color "red" + viper-no-multiple-ESC nil + viper-re-query-replace t + viper-re-search t + ;;viper-replace-overlay-cursor-color "red" + viper-shift-width 2 + viper-vi-style-in-minibuffer nil + viper-want-ctl-h-help t) (trap (require 'uniquify) (setq uniquify-buffer-name-style 'post-forward-angle-brackets) @@ -399,9 +459,17 @@ (tooltip-mode 0) (tool-bar-mode 0)) (trap (or mdw-fast-startup (global-auto-revert-mode t))) -(setq psgml-html-build-new-buffer nil) -(defvar mdw-black-background t) +(defun mdw-set-viper-cursor-colour () + ;; ?? doesn't seem to work + (set-frame-parameter nil 'cursor-color "green") + (message ";; %S" post-command-hook) + (sit-for 2)) +;;(add-hook 'viper-vi-state-hook 'mdw-set-viper-cursor-colour) + +(defcustom mdw-black-background t + "Whether the Emacs background is black (or dark, at any rate)." + :type 'boolean) (eval-after-load "outline" '(progn @@ -409,6 +477,10 @@ (define-key outline-mode-prefix-map [?\C-r] 'reveal-mode) (define-key outline-mode-prefix-map [?\C--] 'mdw-outline-collapse-all))) +(define-key isearch-mode-map [?\C-?] 'isearch-del-char) +(define-key isearch-mode-map [backspace] 'isearch-del-char) +(define-key isearch-mode-map [?\e ?\C-?] 'isearch-delete-char) + (setq imenu-auto-rescan t imenu-auto-rescan-maxout (* 128 1024) imenu-max-items 60) @@ -416,21 +488,23 @@ (setq cltl2-root-url (mdw-config 'cltl-url)) (setq common-lisp-hyperspec-root (mdw-config 'hyperspec-url)) +(setq ediff-split-window-function 'split-window-horizontally) + (setq rfcview-rfc-location-pattern - "/ftp@mirror.distorted.org.uk:/pub/mirrors/rfc/rfc%s.txt" + "/ftp@mirror.distorted.org.uk:/pub/mirrors/rfc/rfc%s.txt" rfcview-std-location-pattern - "/ftp@mirror.distorted.org.uk:/pub/mirrors/rfc/std/std%s.txt" + "/ftp@mirror.distorted.org.uk:/pub/mirrors/rfc/std/std%s.txt" rfcview-index-location - "/ftp@mirror.distorted.org.uk:/pub/mirrors/rfc/rfc-index.txt") + "/ftp@mirror.distorted.org.uk:/pub/mirrors/rfc/rfc-index.txt") ;;;-------------------------------------------------------------------------- ;;; W3 and URL fetching stuff. (let ((proxy (mdw-config 'http-proxy))) (setq url-proxy-services - `(("http" . ,proxy) - ("ftp" . ,proxy) - ("gopher" . ,proxy)))) + `(("http" . ,proxy) + ("ftp" . ,proxy) + ("gopher" . ,proxy)))) (setq url-cookie-untrusted-urls '(".")) (setq browse-url-browser-function (mdw-good-url-browser) @@ -445,8 +519,8 @@ ("application/x-pdf" "\\.pdf\\'" ("xdg-open" file) nil)))) (dolist (e entries) (setq w3m-content-type-alist - (cons e (remove* (car e) w3m-content-type-alist - :key #'car :test #'string=)))))) + (cons e (remove* (car e) w3m-content-type-alist + :key #'car :test #'string=)))))) (setq w3-do-incremental-display t w3-use-menus '(file edit view go bookmark options @@ -483,17 +557,17 @@ (setq european-calendar-style t calendar-date-style 'european calendar-time-display-form - '(24-hours ":" minutes - (if time-zone " (") time-zone (if time-zone ")"))) + '(24-hours ":" minutes + (if time-zone " (") time-zone (if time-zone ")"))) (setq diary-date-forms - '((day "[-/]" month "[^-/0-9]") - (day " *" monthname "[ \t]*\\(\^M\\|\n\\)") - (backup day " *" monthname "\\W+\\<\\([^*0-9]\\|[0-9]+[:aApP]\\)") - (day "[-/]" month "[-/]" year "[^0-9]") - (day " *" monthname " *" year "[^0-9]") - (year "[-/]" month "[-/]" day "[^0-9]") - (dayname "\\W"))) + '((day "[-/]" month "[^-/0-9]") + (day " *" monthname "[ \t]*\\(\^M\\|\n\\)") + (backup day " *" monthname "\\W+\\<\\([^*0-9]\\|[0-9]+[:aApP]\\)") + (day "[-/]" month "[-/]" year "[^0-9]") + (day " *" monthname " *" year "[^0-9]") + (year "[-/]" month "[-/]" day "[^0-9]") + (dayname "\\W"))) ;; Fancy diary handling. @@ -536,7 +610,7 @@ (display-time) (column-number-mode 1) (trap - (if (and window-system (not mdw-fast-startup)) + (if mdw-splashy-startup (let ((calendar-view-diary-initially-flag t)) (calendar)))) @@ -546,8 +620,8 @@ ;; Define more mode hooks for MailCrypt. (setq mdw-mc-modes - '((mdwmail-mode (encrypt . mdwmail-mc-encrypt) - (sign . mdwmail-mc-sign)))) + '((mdwmail-mode (encrypt . mdwmail-mc-encrypt) + (sign . mdwmail-mc-sign)))) ;; Load the MailCrypt support. @@ -570,46 +644,56 @@ (define-key mc-write-mode-map "\C-c/E" 'mc-encrypt-region) (add-hook 'text-mode-hook 'mc-install-write-mode)))) +(setq epa-pinentry-mode 'loopback) + ;;;-------------------------------------------------------------------------- ;;; Other common declarations. ;; Default frame size. (setq frame-background-mode (if mdw-black-background 'dark 'light) + frame-inhibit-implied-resize t default-frame-alist - `((width . ,(+ mdw-column-width - (if (>= emacs-major-version 21) 0 1))) - (height . 33) - (vertical-scroll-bars . right) - (cursor-type . bar) - (cursor-blink . t) - (left-fringe . 5) - (right-fringe . 5) - (scroll-bar-width . 15) - (tool-bar-lines . 0) - (menu-bar-lines . 1) - (cursor-color . "red") - (background-mode . ,frame-background-mode)) + `((width . ,(+ mdw-column-width mdw-frame-width-fudge)) + (height . 33) + (vertical-scroll-bars . right) + (cursor-type . bar) + (cursor-blink . t) + (left-fringe . 5) + (right-fringe . 5) + (scroll-bar-width . 15) + (tool-bar-lines . 0) + (menu-bar-lines . 1) + (cursor-color . "red") + (background-mode . ,frame-background-mode)) initial-frame-alist - `((width . ,(+ mdw-column-width - (if (>= emacs-major-version 21) 0 1))) - (menu-bar-lines . ,(if window-system 1 0))) + `((width . ,(+ mdw-column-width + (if (>= emacs-major-version 21) 0 1))) + (menu-bar-lines . ,(if window-system 1 0))) window-system-default-frame-alist - '((pm (font . "-os2-System VIO-medium-r-normal--*-40-*-*-m-*-cp850") - (menu-font . "8.Helv") - (background-color . "lightgrey")) - (w32 (font . "fixed613 10") - (background-color . "black") - (foreground-color . "white")) - (nil (menu-bar-lines . 0) - (background-color . nil)))) + '((pm (font . "-os2-System VIO-medium-r-normal--*-40-*-*-m-*-cp850") + (menu-font . "8.Helv") + (background-color . "lightgrey")) + (w32 (font . "fixed613 10") + (background-color . "black") + (foreground-color . "white")) + (nil (menu-bar-lines . 0) + (background-color . nil)))) (let ((backg (frame-parameter nil 'background-color))) (if (and backg window-system) (push (cons 'background-color backg) default-frame-alist))) ;; Other frame fiddling. -(setq frame-title-format '("" invocation-name "@" system-name ": %b")) +(defcustom mdw-hostname + (if (string-match "\\." system-name) + (substring system-name 0 (match-beginning 0)) + system-name) + "Unqualified hostname Emacs is running on." + :type 'string + :safe 'stringp) +(setq frame-title-format '("Emacs " user-login-name "@" mdw-hostname " – %b") + icon-title-format frame-title-format) ;; Global keymap changes. @@ -617,20 +701,31 @@ (windmove-default-keybindings)) (setq windmove-wrap-around t) (trap (require 'ido) (ido-mode 1) - (require 'ido-ubiquitous) (ido-ubiquitous-mode 1) - (setq ido-cr+-max-items nil - ido-ubiquitous-command-overrides - (append ido-ubiquitous-command-overrides - `((enable-old regexp ,(concat "\\`" - "gtags-find-" - "\\(" "tag" - "\\|file" - "\\|rtag" - "\\|symbol" - "\\)" - "\\(" "\\|-other-window" - "\\)" - "\\'"))))) + (require 'ido-completing-read+) + (unless (fboundp 'ido-ubiquitous-mode) (require 'ido-ubiquitous)) + (ido-ubiquitous-mode 1) + (setq ido-cr+-max-items nil) + (let ((excludes `(,(concat "\\`" + "gtags-find-" + "\\(" "tag" + "\\|file" + "\\|rtag" + "\\|symbol" + "\\)" + "\\(" "\\|-other-window" + "\\)" + "\\'")))) + (if (boundp 'ido-ubiquitous-command-overrides) + (setq ido-ubiquitous-command-overrides + (append ido-ubiquitous-command-overrides + (mapcar (lambda (exclude) + (if (symbolp exclude) + `(enable-old exact + ,(symbol-name exclude)) + `(enable-old regexp ,exclude))) + excludes))) + (setq ido-cr+-function-blacklist + (append ido-cr+-function-blacklist excludes)))) (setq magit-completing-read-function 'magit-ido-completing-read) (require 'smex) (smex-initialize) (global-set-key [?\M-x] 'smex)) @@ -638,8 +733,8 @@ (global-set-key [?\e ?\e] 'mdw-wrong) (global-set-key [?\e ?\C-\] ?\C-\]] 'keyboard-escape-quit) (global-set-key [?\C-c ?\M-x] 'execute-extended-command) - (global-set-key [?\C-c ?d ?w] 'devhelp-word-at-point) (global-set-key [?\C-c ?d ?a] 'devhelp-assistant-word-at-point) + (global-set-key [?\C-c ?d ?w] 'devhelp-word-at-point) (global-set-key [?\C-c ?g ?a] 'org-agenda) (global-set-key [?\C-c ?g ?b] 'org-iswitchb) (global-set-key [?\C-c ?g ?l] 'org-store-link) @@ -648,6 +743,7 @@ (global-set-key [?\C-c ?m ?b] 'magit-blame) (global-set-key [?\C-c ?m ?d] 'magit-dispatch-popup) (global-set-key [?\C-c ?m ?f] 'magit-find-file) + (global-set-key [?\C-c ?m ?l] 'magit-toggle-buffer-lock) (global-set-key [?\C-c ?m ?m] 'magit-status) (global-set-key [?\C-c ?m ?r] 'magit-list-repositories) (global-set-key [?\C-c ?m ?w] 'magit-wip-log) @@ -669,18 +765,30 @@ (global-set-key [?\C-c ?t ?s] 'timeclock-status-string) (global-set-key [?\C-c ?t ?t] 'gtags-find-tag-from-here) (global-set-key [?\C-c ?t ?w] 'timeclock-workday-remaining-string) + (global-set-key [?\C-c ?v ?f] 'view-file) + (global-set-key [?\C-c ?v ?i] 'vm-visit-imap-folder) + (global-set-key [?\C-c ?v ?m] 'vm-visit-folder) (global-set-key [?\C-c ?v ?v] 'mdw-auto-revert) + (global-set-key [?\C-c ?w ? ] 'mdw-designate-window) + (global-set-key [?\C-c ?w ?b] 'w3m-bookmark-view) + (global-set-key [?\C-c ?w ?c] 'mdw-set-frame-colour) (global-set-key [?\C-c ?w ?d] 'mdw-divvy-window) (global-set-key [?\C-c ?w ?h] 'windmove-left) (global-set-key [?\C-c ?w ?j] 'windmove-down) (global-set-key [?\C-c ?w ?k] 'windmove-up) (global-set-key [?\C-c ?w ?l] 'windmove-right) + (global-set-key [?\C-c ?w ?r] 'winner-redo) + (global-set-key [?\C-c ?w ?s] 'mdw-switch-window-configuration) + (global-set-key [?\C-c ?w ?u] 'winner-undo) (global-set-key [?\C-c ?w ?w] 'mdw-set-frame-width) (global-set-key [?\C-c ?w up] 'windmove-up) (global-set-key [?\C-c ?w down] 'windmove-down) (global-set-key [?\C-c ?w left] 'windmove-left) (global-set-key [?\C-c ?w right] 'windmove-right) (global-set-key [?\C-h ?\C-m] 'manual-entry) + (global-set-key [?\C-x ?4 ?\C-j] 'dired-jump-other-window) + (global-set-key [?\C-x ?4 ?j] 'dired-jump-other-window) + (global-set-key [?\C-x ?\C-j] 'dired-jump) (global-set-key [?\C-x ?\C-n] 'skel-create-file) (global-set-key [?\C-x ?4 ?n] 'skel-create-file-other-window) (global-set-key [?\C-x ?5 ?n] 'skel-create-file-other-frame) @@ -704,10 +812,13 @@ (eval-after-load "hippie-exp" '(setq hippie-expand-try-functions-list - (remove-if (lambda (name) - (memq name '(try-expand-list - try-expand-list-all-buffers))) - hippie-expand-try-functions-list))) + (remove-if (lambda (name) + (memq name '(try-expand-list + try-expand-list-all-buffers))) + hippie-expand-try-functions-list))) + +(autoload 'dired-jump "dired-x") +(autoload 'dired-jump-other-window "dired-x") (eval-after-load "dired" '(progn @@ -718,7 +829,7 @@ (and (fboundp 'dired-do-relsymlink) (define-key dired-mode-map [?\C-c ?\C-s] 'dired-do-relsymlink)))) (setq dired-guess-shell-alist-user - '(("\\.pdf\\'" "mupdf"))) + '(("\\.pdf\\'" "mupdf"))) (add-hook 'org-mode-hook #'(lambda () (mdw-clobber-evil-keymap org-mode-map))) @@ -732,99 +843,83 @@ ;; Minor mode listing (setq minor-mode-alist - (mdw-uniquify-alist '((reveal-mode (hs-minor-mode - " hs/r" - (global-reveal-mode - "" " Reveal"))) - (hs-minor-mode (reveal-mode "" " hs")) - (abbrev-mode "") - (gtags-mode "")) - minor-mode-alist)) + (mdw-uniquify-alist '((reveal-mode (hs-minor-mode + " hs/r" + (global-reveal-mode + "" " Reveal"))) + (hs-minor-mode (reveal-mode "" " hs")) + (abbrev-mode "") + (gtags-mode "")) + minor-mode-alist)) ;; Recognising types of files. (setq auto-mode-alist - (append `(("\\.p[lm]$" . cperl-mode) - ("\\.sage$" . python-mode) - ("\\.m$" . objc-mode) - ("\\.mxd$" . c-mode) - ("\\.cs$" . csharp-mode) - ("\\.go$" . go-mode) - ("\\.org$" . org-mode) - ("\\.make$" . makefile-mode) - ("\\.mk?d$" . markdown-mode) - ;; ("/[ch]/" . c-mode) - (,(concat "/\\(" - "\\.stgit\\.msg" "\\|" - "\\.topmsg" "\\|" - "\\.git/COMMIT_EDITMSG" "\\|" - "svn-commit\\.tmp" "\\|" - "svk-commit[^/.]*\\.tmp" - "\\)$") - . text-mode) - (,(concat "^" tmpdir "/\\(" - "svk-commit[^/.]*\\.tmp" "\\|" - "gitci\\.[^/.]*" "\\|" - "cvs[^/.]\\{6\\}" "\\|" - "quilt_header\.[^/.]\\{6\\}" - "\\)$") - . text-mode) - ("\\.calc?$" . apcalc-mode) - ("/\\(s\\|sh\\)/" . arm-assembler-mode) - ("\\.\\(cmd\\|exec\\|rexx\\)$" . rexx-mode) - ("\\.st$" . smalltalk-mode) - ("\\.msgs$" . messages-mode) - ("/all-cmds\\.in$" . cpp-messages-mode) - ("\\.\\(tex\\|dtx\\)$" . latex-mode) - ("\\.gc$" . haskell.-mode) - (,(concat "^" (getenv "HOME") "/News/") . mdwmail-mode) - (,(concat "^" tmpdir "/\\(SLRN\\|snd\\|pico\\|mutt\\)") - . mdwmail-mode)) - auto-mode-alist)) + (append `(("\\.p[lm]$" . cperl-mode) + ("\\.sage$" . python-mode) + ("\\.m$" . objc-mode) + ("\\.mxd$" . c-mode) + ("\\.cs$" . csharp-mode) + ("\\.go$" . go-mode) + ("\\.org$" . org-mode) + ("\\.make$" . makefile-mode) + ("\\.mk?d$" . markdown-mode) + ;; ("/[ch]/" . c-mode) + (,(concat "/\\(" + "\\.stgit\\.msg" "\\|" + "\\.topmsg" "\\|" + "\\.git/COMMIT_EDITMSG" "\\|" + "svn-commit\\.tmp" "\\|" + "svk-commit[^/.]*\\.tmp" + "\\)$") + . text-mode) + (,(concat "^" tmpdir "/\\(" + "svk-commit[^/.]*\\.tmp" "\\|" + "gitci\\.[^/.]*" "\\|" + "cvs[^/.]\\{6\\}" "\\|" + "quilt_header\.[^/.]\\{6\\}" + "\\)$") + . text-mode) + ("\\.calc?$" . apcalc-mode) + ("/\\(s\\|sh\\)/" . arm-assembler-mode) + ("\\.\\(cmd\\|exec\\|rexx\\)$" . rexx-mode) + ("\\.st$" . smalltalk-mode) + ("\\.msgs$" . messages-mode) + ("/all-cmds\\.in$" . cpp-messages-mode) + ("\\.\\(tex\\|dtx\\)$" . latex-mode) + ("\\.gc$" . haskell.-mode) + (,(concat "^" (getenv "HOME") "/News/") . mdwmail-mode) + (,(concat "^" tmpdir "/\\(SLRN\\|snd\\|pico\\|mutt\\)") + . mdwmail-mode)) + auto-mode-alist)) (setq interpreter-mode-alist - (append `(("runlisp" . lisp-mode) - ("@BASH@" . sh-mode) - ("@PYTHON@" . python-mode) - ("sage" . python-mode) - ("@PERL@" . cperl-mode) - ("perl" . cperl-mode) - ("@TCLSH@" . tcl-mode) - ("@WISH@" . tcl-mode) - ("tclsh" . tcl-mode) - ("wish" . tcl-mode)) - interpreter-mode-alist)) + (append `(("runlisp" . lisp-mode) + ("@BASH@" . sh-mode) + ("@PYTHON@" . python-mode) + ("sage" . python-mode) + ("@PERL@" . cperl-mode) + ("perl" . cperl-mode) + ("@TCLSH@" . tcl-mode) + ("@WISH@" . tcl-mode) + ("tclsh" . tcl-mode) + ("wish" . tcl-mode)) + interpreter-mode-alist)) (setq completion-ignored-extensions - (append `(".hc" ".hi") completion-ignored-extensions)) + (append `(".hc" ".hi") completion-ignored-extensions)) (dolist (dir (remove-if-not (lambda (ext) (= (aref ext (- (length ext) 1)) ?/)) completion-ignored-extensions)) (if (/= (aref dir 0) ?/) (setq completion-ignored-extensions - (cons (concat "/" dir) - (remove dir completion-ignored-extensions))))) + (cons (concat "/" dir) + (remove dir completion-ignored-extensions))))) ;; Some common local definitions. (make-variable-buffer-local 'mdw-auto-indent) -(mapc (lambda (hook) (add-hook hook 'mdw-misc-mode-config)) - '(c-mode-hook c++-mode-hook objc-mode-hook java-mode-hook - csharp-mode-hook perl-mode-hook cperl-mode-hook dylan-mode-hook - python-mode-hook pyrec-mode-hook icon-mode-hook awk-mode-hook - tcl-mode-hook go-mode-hook js-mode-hook javascript-mode-hook - conf-mode-hook m4-mode-hook autoconf-mode-hook autotest-mode-hook - a68-mode-hook a68-mode-hooks asm-mode-hook fsharp-mode-hook - scala-mode-hook rust-mode-hook TeX-mode-hook LaTeX-mode-hook - TeXinfo-mode-hook tex-mode-hook latex-mode-hook - texinfo-mode-hook emacs-lisp-mode-hook scheme-mode-hook - lisp-mode-hook lisp-interaction-mode-hook makefile-mode-hook - inferior-lisp-mode-hook slime-repl-mode-hook ielm-mode-hook - sml-mode-hook haskell-mode-hook erlang-mode-hook - smalltalk-mode-hook rexx-mode-hook lua-mode-hook - arm-assembler-mode-hook)) - (global-font-lock-mode t) ;;;-------------------------------------------------------------------------- @@ -834,43 +929,43 @@ '(let ((fix-args (if (mdw-version-< tramp-version "2.1") #'append #'list))) (setq tramp-methods - (mdw-uniquify-alist - `(("become" - (tramp-connection-function tramp-open-connection-su) - (tramp-remote-sh "/bin/sh") - (tramp-login-program "become") - (tramp-copy-program nil) - (tramp-copy-args nil) - (tramp-copy-keep-date-arg nil) - (tramp-login-args ,(funcall fix-args `("TERM=dumb" "%u")))) - ("really" - (tramp-connection-function tramp-open-connection-su) - (tramp-login-program "really") - (tramp-login-args ,(funcall fix-args - `("-u" "%u") - `("--") - `("env" "TERM=dumb" "/bin/sh"))) - (tramp-copy-program nil) - (tramp-copy-args nil) - (tramp-copy-keep-date-arg nil) - (tramp-remote-sh "/bin/sh")) - ,@tramp-methods))) + (mdw-uniquify-alist + `(("become" + (tramp-connection-function tramp-open-connection-su) + (tramp-remote-sh "/bin/sh") + (tramp-login-program "become") + (tramp-copy-program nil) + (tramp-copy-args nil) + (tramp-copy-keep-date-arg nil) + (tramp-login-args ,(funcall fix-args `("TERM=dumb" "%u")))) + ("really" + (tramp-connection-function tramp-open-connection-su) + (tramp-login-program "really") + (tramp-login-args ,(funcall fix-args + `("-u" "%u") + `("--") + `("env" "TERM=dumb" "/bin/sh"))) + (tramp-copy-program nil) + (tramp-copy-args nil) + (tramp-copy-keep-date-arg nil) + (tramp-remote-sh "/bin/sh")) + ,@tramp-methods))) (setq tramp-default-method "ssh") (let ((rootlyness (cond ((executable-find "really") "really") ((executable-find "become") "become") ((executable-find "sudo") "sudo") (t "su"))) (this-host (concat "\\`\\(localhost\\|" - (system-name) "\\|\\)\\'")) + (system-name) "\\)?\\'")) (this-user (concat "\\`\\(" (user-login-name) "\\|" - (user-real-login-name) "\\|\\)\\'"))) + (user-real-login-name) "\\)?\\'"))) (setq tramp-default-method-alist - `((,this-host nil ,rootlyness) - (nil ,this-user "ssh") - (nil "." ,rootlyness))) + `((,this-host nil ,rootlyness) + (nil ,this-user "ssh") + (nil "." ,rootlyness))) (setq tramp-default-proxies-alist - `((,this-host nil nil) - (nil "." "/ssh:%h:")))))) + `((,this-host nil nil) + (nil "." "/ssh:%h:")))))) ;;;-------------------------------------------------------------------------- ;;; General fontification. @@ -887,192 +982,18 @@ lazy-lock-stealth-lines 100 lazy-lock-stealth-verbose t) -(progn - (add-hook 'c-mode-hook 'mdw-fontify-c-and-c++ t) - (add-hook 'objc-mode-hook 'mdw-fontify-c-and-c++ t) - (add-hook 'c++-mode-hook 'mdw-fontify-c-and-c++ t) - (add-hook 'asm-mode-hook 'mdw-fontify-asm t) - (add-hook 'go-mode-hook 'mdw-fontify-go t) - (add-hook 'rust-mode-hook 'mdw-fontify-rust t) - - (add-hook 'lua-mode-hook 'mdw-fontify-lua t) - (add-hook 'icon-mode-hook 'mdw-fontify-icon t) - - (add-hook 'apcalc-mode-hook 'mdw-misc-mode-config t) - (add-hook 'apcalc-mode-hook 'mdw-fontify-apcalc t) - - (add-hook 'java-mode-hook 'mdw-fontify-java t) - (add-hook 'scala-mode-hook 'mdw-fontify-scala t) - (add-hook 'js-mode-hook 'mdw-fontify-javascript t) - (add-hook 'csharp-mode-hook 'mdw-fontify-csharp t) - (add-hook 'fsharp-mode-hook 'mdw-fontify-fsharp t) - (add-hook 'inferior-fsharp-mode-hooks 'mdw-fontify-inferior-fsharp t) - - (add-hook 'awk-mode-hook 'mdw-fontify-awk t) - - (add-hook 'perl-mode-hook 'mdw-fontify-perl t) - (add-hook 'cperl-mode-hook 'mdw-fontify-perl t)) - -(progn - (setq-default py-indent-offset 2 - python-indent 2 - python-indent-offset 2 - py-python-command-args - `("-i" "-colors" ,(if mdw-black-background - "Linux" "LightBG"))) - (add-hook 'python-mode-hook 'mdw-fontify-python t) - (add-hook 'pyrex-mode-hook 'mdw-fontify-pyrex t)) - -(setq-default tcl-indent-level 2) -(add-hook 'tcl-mode-hook 'mdw-fontify-tcl t) - -(add-hook 'rexx-mode-hook 'mdw-fontify-rexx t) - -(setq sml-nested-if-indent t - sml-case-indent nil - sml-indent-level 4 - sml-type-of-indent nil) -(add-hook 'sml-mode-hook 'mdw-fontify-sml t) - -(add-hook 'haskell-mode-hook 'mdw-fontify-haskell t) -(setq-default haskell-indent-offset 2) - -(add-hook 'erlang-mode-hook 'mdw-fontify-erlang t) - -(add-hook 'texinfo-mode-hook 'mdw-fontify-texinfo t) -(add-hook 'TeXinfo-mode-hook 'mdw-fontify-texinfo t) - -(setq LaTeX-table-label "tbl:") -(setq TeX-auto-untabify nil) -(add-hook 'TeX-mode-hook 'mdw-fontify-tex t) -(add-hook 'tex-mode-hook 'mdw-fontify-tex t) -(add-hook 'LaTeX-mode-hook 'mdw-fontify-tex t) -(add-hook 'latex-mode-hook 'mdw-fontify-tex t) - -(add-hook 'sh-mode-hook #'mdw-setup-sh-script-mode) -(add-hook 'autoconf-mode-hook #'mdw-setup-m4) -(add-hook 'autotest-mode-hook #'mdw-setup-m4) -(add-hook 'm4-mode-hook #'mdw-setup-m4) - -(add-hook 'smalltalk-mode-hook 'mdw-fontify-smalltalk t) -(add-hook 'smalltalk-mode-hook 'mdw-setup-smalltalk t) - -(add-hook 'a68-mode-hook 'mdw-fontify-algol-68 t) -(add-hook 'a68-mode-hooks 'mdw-fontify-algol-68 t) -(add-hook 'dylan-mode-hook 'mdw-fontify-dylan t) - -(progn - (add-hook 'emacs-lisp-mode-hook 'mdw-fontify-lispy t) - (add-hook 'scheme-mode-hook 'mdw-fontify-lispy t) - (add-hook 'lisp-mode-hook 'mdw-fontify-lispy t) - (add-hook 'inferior-lisp-mode-hook 'mdw-fontify-lispy t) - (add-hook 'lisp-interaction-mode-hook 'mdw-fontify-lispy t) - (add-hook 'ielm-mode-hook 'mdw-fontify-lispy t) - (add-hook 'slime-repl-mode-hook 'mdw-fontify-lispy t) - (add-hook 'lisp-mode-hook 'mdw-common-lisp-indent t) - (add-hook 'inferior-lisp-mode-hook - #'(lambda () - (local-set-key "\C-m" 'comint-send-and-indent)) t)) - -(add-hook 'text-mode-hook 'mdw-text-mode t) - -;;;-------------------------------------------------------------------------- -;;; TeX stuff. - -(setq TeX-output-view-style - '(("^dvi$" - ("^landscape$" "^pstricks$\\|^pst-\\|^psfrag$") - "%(o?)dvips -t landscape %d -o && xdg-open %f") - ("^dvi$" "^pstricks$\\|^pst-\\|^psfrag$" - "%(o?)dvips %d -o && xdg-open %f") - ("^dvi$" - ("^a4\\(?:dutch\\|paper\\|wide\\)\\|sem-a4$" "^landscape$") - "%(o?)xdvi %dS -paper a4r -s 0 %d") - ("^dvi$" "^a4\\(?:dutch\\|paper\\|wide\\)\\|sem-a4$" - "%(o?)xdvi %dS -paper a4 %d") - ("^dvi$" - ("^a5\\(?:comb\\|paper\\)$" "^landscape$") - "%(o?)xdvi %dS -paper a5r -s 0 %d") - ("^dvi$" "^a5\\(?:comb\\|paper\\)$" "%(o?)xdvi %dS -paper a5 %d") - ("^dvi$" "^b5paper$" "%(o?)xdvi %dS -paper b5 %d") - ("^dvi$" "^letterpaper$" "%(o?)xdvi %dS -paper us %d") - ("^dvi$" "^legalpaper$" "%(o?)xdvi %dS -paper legal %d") - ("^dvi$" "^executivepaper$" "%(o?)xdvi %dS -paper 7.25x10.5in %d") - ("^dvi$" "." "%(o?)xdvi %dS %d") - ("^pdf$" "." "xdg-open %o") - ("^html?$" "." "sensible-browser %o"))) - -(setq TeX-view-program-list - '(("mupdf" ("mupdf %o" (mode-io-correlate " %(outpage)"))))) - -(setq TeX-view-program-selection - '(((output-dvi style-pstricks) "dvips and gv") - (output-dvi "xdvi") - (output-pdf "mupdf") - (output-html "sensible-browser"))) - -(setq TeX-open-quote "\"" - TeX-close-quote "\"") - -(setq reftex-use-external-file-finders t - reftex-auto-recenter-toc t) - -(setq reftex-label-alist - '(("theorem" ?T "th:" "~\\ref{%s}" t ("theorems?" "th\\.") -2) - ("axiom" ?A "ax:" "~\\ref{%s}" t ("axioms?" "ax\\.") -2) - ("definition" ?D "def:" "~\\ref{%s}" t ("definitions?" "def\\.") -2) - ("proposition" ?P "prop:" "~\\ref{%s}" t - ("propositions?" "prop\\.") -2) - ("lemma" ?L "lem:" "~\\ref{%s}" t ("lemmas?" "lem\\.") -2) - ("example" ?X "eg:" "~\\ref{%s}" t ("examples?") -2) - ("exercise" ?E "ex:" "~\\ref{%s}" t ("exercises?" "ex\\.") -2) - ("enumerate" ?i "i:" "~\\ref{%s}" item ("items?")))) -(setq reftex-section-prefixes - '((0 . "part:") - (1 . "ch:") - (t . "sec:"))) - -(setq bibtex-field-delimiters 'double-quotes - bibtex-align-at-equal-sign t - bibtex-entry-format '(realign opts-or-alts required-fields - numerical-fields last-comma delimiters - unify-case sort-fields braces) - bibtex-sort-ignore-string-entries nil - bibtex-maintain-sorted-entries 'entry-class - bibtex-include-OPTkey t) - -;;;-------------------------------------------------------------------------- -;;; SLIME setup. - -(trap - (if (not mdw-fast-startup) - (progn - (require 'slime-autoloads) - (slime-setup '(slime-autodoc slime-c-p-c))))) - -(let ((stuff '((cmucl ("cmucl")) - (sbcl ("sbcl") :coding-system utf-8-unix) - (clisp ("clisp") :coding-system utf-8-unix)))) - (or (boundp 'slime-lisp-implementations) - (setq slime-lisp-implementations nil)) - (while stuff - (let* ((head (car stuff)) - (found (assq (car head) slime-lisp-implementations))) - (setq stuff (cdr stuff)) - (if found - (rplacd found (cdr head)) - (setq slime-lisp-implementations - (cons head slime-lisp-implementations)))))) -(setq slime-default-lisp 'sbcl) +;; Late, for `mdw-black-background'. +(setq-default py-python-command-args + `("-i" "-colors" ,(if mdw-black-background "Linux" "LightBG"))) ;;;-------------------------------------------------------------------------- ;;; Blogging. (setq weblogger-config-alist - '(("vox" - ("user" . "mdw") - ("server-url" . "http://vox.distorted.org.uk/admin/mt-xmlrpc.cgi") - ("weblog" . "1")))) + '(("vox" + ("user" . "mdw") + ("server-url" . "http://vox.distorted.org.uk/admin/mt-xmlrpc.cgi") + ("weblog" . "1")))) ;;;-------------------------------------------------------------------------- ;;; Shell mode. @@ -1081,8 +1002,8 @@ (setq shell-prompt-pattern "^[^]#$%>»}\n]*\\([]#$%»}]\\|>>?\\) *") (setq comint-password-prompt-regexp - (concat "\\(\\([Ee]nter \\|[Oo]ld \\|[Nn]ew \\|[a-zA-Z0-9_]*'s \\|^\\)" - "[Pp]assword\\|[Pp]ass ?phrase\\(\\| [-a-zA-Z0-9._]+\\)\\):") + (concat "\\(\\([Ee]nter \\|[Oo]ld \\|[Nn]ew \\|[a-zA-Z0-9_]*'s \\|^\\)" + "[Pp]assword\\|[Pp]ass ?phrase\\( [-a-zA-Z0-9._]+\\)?\\):") comint-file-name-chars "~/A-Za-z0-9+@:_.$#%,={}-" shell-file-name-chars comint-file-name-chars)