X-Git-Url: https://git.distorted.org.uk/~mdw/profile/blobdiff_plain/4bebeeae49c6da45ffe5930ae1c21d84daa571f5..c14d77930a7a09295b24c5145c6bc304c1fb971d:/dot-emacs.el diff --git a/dot-emacs.el b/dot-emacs.el index 7ced779..0376bad 100644 --- a/dot-emacs.el +++ b/dot-emacs.el @@ -313,23 +313,26 @@ get itself into a twist." (defadvice write-file (after mdw-autorevert activate) (mdw-check-autorevert)) -(defun mdwmail-mode () +(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." - (interactive) - (kill-all-local-variables) - (use-local-map text-mode-map) - (setq local-abbrev-table text-mode-abbrev-table) - (setq major-mode 'mdwmail-mode) - (setq mode-name "[mdw] mail") - (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)) - (run-hooks 'text-mode-hook 'mdwmail-mode-hook 'mail-setup-hook)) + :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 --- @@ -541,40 +544,6 @@ doesn't cope with anything approximating a complicated case." ;;;----- Other common declarations ------------------------------------------ -(defun mdw-set-frame-transparency (&optional n) - (interactive "P") - (let* ((alist (frame-parameters)) - (trans (assq 'transparency alist))) - (if trans - (rplacd trans (not (if n (zerop n) (cdr trans)))) - (setq trans (cons 'transparency (not (equal 0 n))))) - (modify-frame-parameters (selected-frame) (list trans)))) - -;; --- Mouse wheel support --- - -(defconst mdw-wheel-scroll-amount 15) -(defun mdw-wheel-up (click) - (interactive "@e") - (mdw-wheel-scroll click (function scroll-down))) -(defun mdw-wheel-down (click) - (interactive "@e") - (mdw-wheel-scroll click (function scroll-up))) - -(defun mdw-wheel-scroll (click func) - (let ((win (selected-window))) - (unwind-protect - (progn - (select-window (posn-window (event-start click))) - (let ((arg 2)) - (funcall func (/ (window-height) 2)))) - (select-window win)))) - -;; --- Going backwards --- - -(defun other-window-backwards (arg) - (interactive "p") - (other-window (- arg))) - ;; --- Common mode settings --- (defvar mdw-auto-indent t @@ -590,14 +559,13 @@ doesn't cope with anything approximating a complicated case." (t (local-set-key "\C-m" 'newline-and-indent)))) (local-set-key [C-return] 'newline) - (or (eq major-mode 'asm-mode) - (local-set-key [?\;] 'self-insert-command)) - (local-set-key [?\#] 'self-insert-command) - (local-set-key [?\"] 'self-insert-command) + (make-variable-buffer-local 'page-delimiter) + (setq page-delimiter "\f\\|^.*-\\{6\\}.*$") (setq comment-column 40) (auto-fill-mode 1) (setq fill-column 77) (setq show-trailing-whitespace t) + (outline-minor-mode t) (mdw-set-font)) ;; --- Set up all sorts of faces --- @@ -609,6 +577,26 @@ doesn't cope with anything approximating a complicated case." (defvar mdw-number-face 'mdw-number-face "Face to use for numbers") (make-face 'mdw-number-face) +;; --- Backup file handling --- + +(defvar mdw-backup-disable-regexps nil + "*List of regular expressions: if a file name matches any of these then the +file is not backed up.") + +(defun mdw-backup-enable-predicate (name) + "[mdw]'s default backup predicate: allows a backup if the +standard predicate would allow it, and it doesn't match any of +the regular expressions in `mdw-backup-disable-regexps'." + (and (normal-backup-enable-predicate name) + (let ((answer t) (list mdw-backup-disable-regexps)) + (save-match-data + (while list + (if (string-match (car list) name) + (setq answer nil)) + (setq list (cdr list))) + answer)))) +(setq backup-enable-predicate 'mdw-backup-enable-predicate) + ;;;----- General fontification ---------------------------------------------- (defun mdw-set-fonts (frame faces) @@ -660,7 +648,7 @@ doesn't cope with anything approximating a complicated case." (comint-highlight-input) (font-lock-builtin-face :weight bold) (font-lock-type-face :weight bold) - (region :background "grey30") + (region :background ,(if window-system "grey30" "blue")) (isearch :background "palevioletred2") (mdw-punct-face :foreground ,(if window-system "burlywood2" "yellow")) (mdw-number-face :foreground "yellow") @@ -676,6 +664,30 @@ doesn't cope with anything approximating a complicated case." (font-lock-keyword-face :weight bold) (font-lock-constant-face :weight bold) (font-lock-reference-face :weight bold) + (message-cited-text + :foreground ,(if window-system "SeaGreen1" "green") + :slant italic) + (message-separator :background "red" :foreground "white" :weight bold) + (message-header-cc + :foreground ,(if window-system "SeaGreen1" "green") + :weight bold) + (message-header-newsgroups + :foreground ,(if window-system "SeaGreen1" "green") + :weight bold) + (message-header-subject + :foreground ,(if window-system "SeaGreen1" "green") + :weight bold) + (message-header-to + :foreground ,(if window-system "SeaGreen1" "green") + :weight bold) + (message-header-xheader + :foreground ,(if window-system "SeaGreen1" "green") + :weight bold) + (message-header-other + :foreground ,(if window-system "SeaGreen1" "green") + :weight bold) + (message-header-name + :foreground ,(if window-system "SeaGreen1" "green")) (woman-bold :weight bold) (woman-italic :slant italic) (diff-index :weight bold) @@ -714,10 +726,14 @@ doesn't cope with anything approximating a complicated case." ;; --- Make C indentation nice --- +(eval-after-load "cc-mode" + '(progn + (define-key c-mode-map "*" nil) + (define-key c-mode-map "/" nil))) + (defun mdw-c-style () (c-add-style "[mdw] C and C++ style" '((c-basic-offset . 2) - (c-tab-always-indent . nil) (comment-column . 40) (c-class-key . "class") (c-offsets-alist (substatement-open . 0) @@ -734,7 +750,6 @@ doesn't cope with anything approximating a complicated case." ;; --- Fiddle with some syntax codes --- - (modify-syntax-entry ?_ "w") (modify-syntax-entry ?* ". 23") (modify-syntax-entry ?/ ". 124b") (modify-syntax-entry ?\n "> b") @@ -916,7 +931,6 @@ doesn't cope with anything approximating a complicated case." ;; --- Fiddle with some syntax codes --- - (modify-syntax-entry ?_ "w") (modify-syntax-entry ?* ". 23") (modify-syntax-entry ?/ ". 14") @@ -973,7 +987,6 @@ doesn't cope with anything approximating a complicated case." (defun mdw-java-style () (c-add-style "[mdw] Java style" '((c-basic-offset . 2) - (c-tab-always-indent . nil) (c-offsets-alist (substatement-open . 0) (label . +) (case-label . +) @@ -989,7 +1002,6 @@ doesn't cope with anything approximating a complicated case." ;; --- Other stuff --- (mdw-java-style) - (modify-syntax-entry ?_ "w") (setq c-hanging-comment-ender-p nil) (setq c-backslash-column 72) (setq comment-start "/* ") @@ -1048,7 +1060,6 @@ doesn't cope with anything approximating a complicated case." (defun mdw-csharp-style () (c-add-style "[mdw] C# style" '((c-basic-offset . 2) - (c-tab-always-indent . nil) (c-offsets-alist (substatement-open . 0) (label . 0) (case-label . +) @@ -1064,7 +1075,6 @@ doesn't cope with anything approximating a complicated case." ;; --- Other stuff --- (mdw-csharp-style) - (modify-syntax-entry ?_ "w") (setq c-hanging-comment-ender-p nil) (setq c-backslash-column 72) (setq comment-start "/* ") @@ -1136,7 +1146,6 @@ doesn't cope with anything approximating a complicated case." (defun mdw-awk-style () (c-add-style "[mdw] Awk style" '((c-basic-offset . 2) - (c-tab-always-indent . nil) (c-offsets-alist (substatement-open . 0) (statement-cont . 0) (statement-case-intro . +))) @@ -1148,7 +1157,6 @@ doesn't cope with anything approximating a complicated case." ;; --- Miscellaneous fiddling --- - (modify-syntax-entry ?_ "w") (mdw-awk-style) (setq c-backslash-column 72) (mdw-standard-fill-prefix "\\([ \t]*#+[ \t]*\\)") @@ -1197,8 +1205,6 @@ doesn't cope with anything approximating a complicated case." ;; --- Perl indentation style --- -(setq cperl-tab-always-indent nil) - (setq cperl-indent-level 2) (setq cperl-continued-statement-offset 2) (setq cperl-continued-brace-offset 0) @@ -1212,7 +1218,6 @@ doesn't cope with anything approximating a complicated case." ;; --- Miscellaneous fiddling --- - (modify-syntax-entry ?_ "w") (modify-syntax-entry ?$ "\\") (modify-syntax-entry ?$ "\\" font-lock-syntax-table) (mdw-standard-fill-prefix "\\([ \t]*#+[ \t]*\\)") @@ -1270,7 +1275,6 @@ strip numbers instead." ;; --- Miscellaneous fiddling --- - (modify-syntax-entry ?_ "w") (mdw-standard-fill-prefix "\\([ \t]*#+[ \t]*\\)") ;; --- Now define fontification things --- @@ -1437,7 +1441,7 @@ strip numbers instead." (local-set-key [?\C-m] 'mdw-rexx-indent-newline-indent) (local-set-key [?*] 'mdw-rexx-electric-*) (mapcar #'(lambda (ch) (modify-syntax-entry ch "w")) - '(?. ?! ?? ?_ ?# ?@ ?$)) + '(?! ?? ?# ?@ ?$)) (mdw-standard-fill-prefix "\\([ \t]*/?\*[ \t]*\\)") ;; --- Set up keywords and things for fontification --- @@ -1447,7 +1451,6 @@ strip numbers instead." (setq rexx-indent 2) (setq rexx-end-indent rexx-indent) - (setq rexx-tab-always-indent nil) (setq rexx-cont-indent rexx-indent) (make-local-variable 'font-lock-keywords) @@ -1500,7 +1503,6 @@ strip numbers instead." ;; --- Make underscore an honorary letter --- - (modify-syntax-entry ?_ "w") (modify-syntax-entry ?' "w") ;; --- Set fill prefix --- @@ -1556,7 +1558,6 @@ strip numbers instead." ;; --- Fiddle with syntax table to get comments right --- - (modify-syntax-entry ?_ "w") (modify-syntax-entry ?' "\"") (modify-syntax-entry ?- ". 123") (modify-syntax-entry ?{ ". 1b") @@ -1590,6 +1591,41 @@ strip numbers instead." (list "\\(\\s.\\|\\s(\\|\\s)\\|\\s\\\\|\\s/\\)" '(0 mdw-punct-face)))))) +;;;----- Erlang configuration ----------------------------------------------- + +(setq erlang-electric-commannds + '(erlang-electric-newline erlang-electric-semicolon)) + +(defun mdw-fontify-erlang () + + ;; --- Set fill prefix --- + + (mdw-standard-fill-prefix "\\([ \t]*{?%*[ \t]*\\)") + + ;; --- Fiddle with fontification --- + + (make-local-variable 'font-lock-keywords) + (let ((erlang-keywords + (mdw-regexps "after" "and" "andalso" + "band" "begin" "bnot" "bor" "bsl" "bsr" "bxor" + "case" "catch" "cond" + "div" "end" "fun" "if" "let" "not" + "of" "or" "orelse" + "query" "receive" "rem" "try" "when" "xor"))) + + (setq font-lock-keywords + (list + (list "%.*$" + '(0 font-lock-comment-face)) + (list (concat "\\<\\(" erlang-keywords "\\)\\>") + '(0 font-lock-keyword-face)) + (list (concat "^-\\sw+\\>") + '(0 font-lock-keyword-face)) + (list "\\<[0-9]+\\(\\|#[0-9a-zA-Z]+\\|[eE][+-]?[0-9]+\\)\\>" + '(0 mdw-number-face)) + (list "\\(\\s.\\|\\s(\\|\\s)\\|\\s\\\\|\\s/\\)" + '(0 mdw-punct-face)))))) + ;;;----- Texinfo configuration ---------------------------------------------- (defun mdw-fontify-texinfo () @@ -1763,8 +1799,6 @@ strip numbers instead." (defun message-mode-guts () (setq messages-mode-syntax-table (make-syntax-table)) (set-syntax-table messages-mode-syntax-table) - (modify-syntax-entry ?_ "w" messages-mode-syntax-table) - (modify-syntax-entry ?- "w" messages-mode-syntax-table) (modify-syntax-entry ?0 "w" messages-mode-syntax-table) (modify-syntax-entry ?1 "w" messages-mode-syntax-table) (modify-syntax-entry ?2 "w" messages-mode-syntax-table) @@ -2012,6 +2046,17 @@ strip numbers instead." "\\([ \t]*\\([>#|:] ?\\)*[ \t]*\\)" 3) (auto-fill-mode 1)) +;;;----- Outline mode ------------------------------------------------------- + +(defun mdw-outline-collapse-all () + "Completely collapse everything in the entire buffer." + (interactive) + (save-excursion + (goto-char (point-min)) + (while (< (point) (point-max)) + (hide-subtree) + (forward-line)))) + ;;;----- Shell mode --------------------------------------------------------- (defun mdw-sh-mode-setup ()