X-Git-Url: https://git.distorted.org.uk/~mdw/profile/blobdiff_plain/253f61b46421fbab8407131635f7bbab739a322a..c08211aa9838ecdb251e5df62f9c6394676349ee:/dot-emacs.el diff --git a/dot-emacs.el b/dot-emacs.el index d24b364..5b9408f 100644 --- a/dot-emacs.el +++ b/dot-emacs.el @@ -188,6 +188,115 @@ symbols `sunday', `monday', etc. (or a mixture). If the date stored in (nth 2 when)))))))) (eq w d))) +;; --- Fighting with Org-mode's evil key maps --- + +(defvar mdw-evil-keymap-keys + '(([S-up] . [?\C-c up]) + ([S-down] . [?\C-c down]) + ([S-left] . [?\C-c left]) + ([S-right] . [?\C-c right]) + (([M-up] [?\e up]) . [C-up]) + (([M-down] [?\e down]) . [C-down]) + (([M-left] [?\e left]) . [C-left]) + (([M-right] [?\e right]) . [C-right])) + "Defines evil keybindings to clobber in `mdw-clobber-evil-keymap'. +The value is an alist mapping evil keys (as a list, or singleton) +to good keys (in the same form).") + +(defun mdw-clobber-evil-keymap (keymap) + "Replace evil key bindings in the KEYMAP. +Evil key bindings are defined in `mdw-evil-keymap-keys'." + (dolist (entry mdw-evil-keymap-keys) + (let ((binding nil) + (keys (if (listp (car entry)) + (car entry) + (list (car entry)))) + (replacements (if (listp (cdr entry)) + (cdr entry) + (list (cdr entry))))) + (catch 'found + (dolist (key keys) + (setq binding (lookup-key keymap key)) + (when binding + (throw 'found nil)))) + (when binding + (dolist (key keys) + (define-key keymap key nil)) + (dolist (key replacements) + (define-key keymap key binding)))))) + +;;;----- Mail and news hacking ---------------------------------------------- + +(define-derived-mode mdwmail-mode mail-mode "[mdw] mail" + "Major mode for editing news and mail messages from external programs +Not much right now. Just support for doing MailCrypt stuff." + :syntax-table nil + :abbrev-table nil + (run-hooks 'mail-setup-hook)) + +(define-key mdwmail-mode-map [?\C-c ?\C-c] 'disabled-operation) + +(add-hook 'mdwail-mode-hook + (lambda () + (set-buffer-file-coding-system 'utf-8) + (make-local-variable 'paragraph-separate) + (make-local-variable 'paragraph-start) + (setq paragraph-start + (concat "[ \t]*[-_][-_][-_]+$\\|^-- \\|-----\\|" + paragraph-start)) + (setq paragraph-separate + (concat "[ \t]*[-_][-_][-_]+$\\|^-- \\|-----\\|" + paragraph-separate)))) + +;; --- How to encrypt in mdwmail --- + +(defun mdwmail-mc-encrypt (&optional recip scm start end from sign) + (or start + (setq start (save-excursion + (goto-char (point-min)) + (or (search-forward "\n\n" nil t) (point-min))))) + (or end + (setq end (point-max))) + (mc-encrypt-generic recip scm start end from sign)) + +;; --- How to sign in mdwmail --- + +(defun mdwmail-mc-sign (key scm start end uclr) + (or start + (setq start (save-excursion + (goto-char (point-min)) + (or (search-forward "\n\n" nil t) (point-min))))) + (or end + (setq end (point-max))) + (mc-sign-generic key scm start end uclr)) + +;; --- Some signature mangling --- + +(defun mdwmail-mangle-signature () + (save-excursion + (goto-char (point-min)) + (perform-replace "\n-- \n" "\n-- " nil nil nil))) +(add-hook 'mail-setup-hook 'mdwmail-mangle-signature) +(add-hook 'message-setup-hook 'mdwmail-mangle-signature) + +;; --- Insert my login name into message-ids, so I can score replies --- + +(defadvice message-unique-id (after mdw-user-name last activate compile) + "Ensure that the user's name appears at the end of the message-id string, +so that it can be used for convenient filtering." + (setq ad-return-value (concat ad-return-value "." (user-login-name)))) + +;; --- Tell my movemail hack where movemail is --- +;; +;; This is needed to shup up warnings about LD_PRELOAD. + +(let ((path exec-path)) + (while path + (let ((try (expand-file-name "movemail" (car path)))) + (if (file-executable-p try) + (setenv "REAL_MOVEMAIL" try)) + (setq path (cdr path))))) + ;;;----- Utility functions -------------------------------------------------- (or (fboundp 'line-number-at-pos) @@ -324,57 +433,6 @@ get itself into a twist." (defadvice write-file (after mdw-autorevert activate) (mdw-check-autorevert)) -(define-derived-mode mdwmail-mode mail-mode "[mdw] mail" - "Major mode for editing news and mail messages from external programs -Not much right now. Just support for doing MailCrypt stuff." - :syntax-table nil - :abbrev-table nil - (run-hooks 'mail-setup-hook)) - -(define-key mdwmail-mode-map [?\C-c ?\C-c] 'disabled-operation) - -(add-hook 'mdwail-mode-hook - (lambda () - (set-buffer-file-coding-system 'utf-8) - (make-local-variable 'paragraph-separate) - (make-local-variable 'paragraph-start) - (setq paragraph-start - (concat "[ \t]*[-_][-_][-_]+$\\|^-- \\|-----\\|" - paragraph-start)) - (setq paragraph-separate - (concat "[ \t]*[-_][-_][-_]+$\\|^-- \\|-----\\|" - paragraph-separate)))) - -;; --- How to encrypt in mdwmail --- - -(defun mdwmail-mc-encrypt (&optional recip scm start end from sign) - (or start - (setq start (save-excursion - (goto-char (point-min)) - (or (search-forward "\n\n" nil t) (point-min))))) - (or end - (setq end (point-max))) - (mc-encrypt-generic recip scm start end from sign)) - -;; --- How to sign in mdwmail --- - -(defun mdwmail-mc-sign (key scm start end uclr) - (or start - (setq start (save-excursion - (goto-char (point-min)) - (or (search-forward "\n\n" nil t) (point-min))))) - (or end - (setq end (point-max))) - (mc-sign-generic key scm start end uclr)) - -;; --- Some signature mangling --- - -(defun mdwmail-mangle-signature () - (save-excursion - (goto-char (point-min)) - (perform-replace "\n-- \n" "\n-- " nil nil nil))) -(add-hook 'mail-setup-hook 'mdwmail-mangle-signature) - ;;;----- Dired hacking ------------------------------------------------------ (defadvice dired-maybe-insert-subdir @@ -1814,7 +1872,7 @@ strip numbers instead." ;;;----- Messages-file mode ------------------------------------------------- -(defun message-mode-guts () +(defun messages-mode-guts () (setq messages-mode-syntax-table (make-syntax-table)) (set-syntax-table messages-mode-syntax-table) (modify-syntax-entry ?0 "w" messages-mode-syntax-table) @@ -1833,7 +1891,7 @@ strip numbers instead." (setq indent-line-function 'indent-relative) (mdw-standard-fill-prefix "\\([ \t]*\\(;\\|/?\\*\\)+[ \t]*\\)") (make-local-variable 'font-lock-defaults) - (make-local-variable 'message-mode-keywords) + (make-local-variable 'messages-mode-keywords) (let ((keywords (mdw-regexps "array" "bitmap" "callback" "docs[ \t]+enum" "export" "enum" "fixed-octetstring" "flags" @@ -1842,7 +1900,7 @@ strip numbers instead." "primitive-nullfree" "relaxed[ \t]+enum" "set" "table" "tagged-optional" "union" "variadic" "vector" "version" "version-tag"))) - (setq message-mode-keywords + (setq messages-mode-keywords (list (list (concat "\\<\\(" keywords "\\)\\>:") '(0 font-lock-keyword-face)) @@ -1853,7 +1911,7 @@ strip numbers instead." '("\\(\\s.\\|\\s(\\|\\s)\\|\\s\\\\|\\s/\\)" (0 mdw-punct-face))))) (setq font-lock-defaults - '(message-mode-keywords nil nil nil nil)) + '(messages-mode-keywords nil nil nil nil)) (run-hooks 'messages-file-hook)) (defun messages-mode () @@ -1861,7 +1919,7 @@ strip numbers instead." (fundamental-mode) (setq major-mode 'messages-mode) (setq mode-name "Messages") - (message-mode-guts) + (messages-mode-guts) (modify-syntax-entry ?# "<" messages-mode-syntax-table) (modify-syntax-entry ?\n ">" messages-mode-syntax-table) (setq comment-start "# ") @@ -1874,7 +1932,7 @@ strip numbers instead." (fundamental-mode) (setq major-mode 'cpp-messages-mode) (setq mode-name "CPP Messages") - (message-mode-guts) + (messages-mode-guts) (modify-syntax-entry ?* ". 23" messages-mode-syntax-table) (modify-syntax-entry ?/ ". 14" messages-mode-syntax-table) (setq comment-start "/* ") @@ -1883,7 +1941,7 @@ strip numbers instead." (mdw-regexps "assert" "define" "elif" "else" "endif" "error" "ident" "if" "ifdef" "ifndef" "import" "include" "line" "pragma" "unassert" "undef" "warning"))) - (setq message-mode-keywords + (setq messages-mode-keywords (append (list (list (concat "^[ \t]*\\#[ \t]*" "\\(include\\|import\\)" "[ \t]*\\(<[^>]+\\(>\\|\\)\\)") @@ -1892,7 +1950,7 @@ strip numbers instead." preprocessor-keywords "\\)\\>\\|[0-9]+\\|$\\)\\)") '(1 font-lock-keyword-face))) - message-mode-keywords))) + messages-mode-keywords))) (turn-on-font-lock-if-enabled) (run-hooks 'cpp-messages-mode-hook)) @@ -2032,6 +2090,10 @@ strip numbers instead." (make-variable-buffer-local 'lisp-indent-function) (setq lisp-indent-function 'common-lisp-indent-function)) +(setq lisp-simple-loop-indentation 2 + lisp-loop-keyword-indentation 6 + lisp-loop-forms-indentation 6) + (defun mdw-fontify-lispy () ;; --- Set fill prefix ---