X-Git-Url: https://git.distorted.org.uk/~mdw/profile/blobdiff_plain/61d632068158706b1c3740f0c0a5a8e27244602d..ca2eac75cbed9c8e9df76aeff10fc1e1dea41465:/el/dot-emacs.el diff --git a/el/dot-emacs.el b/el/dot-emacs.el index 82ff4b3..ed1103a 100644 --- a/el/dot-emacs.el +++ b/el/dot-emacs.el @@ -124,6 +124,14 @@ library." (and (library-exists-p file) (autoload symbol file docstring interactivep type))) +(defun mdw-kick-menu-bar (&optional frame) + "Regenerate FRAME's menu bar so it doesn't have empty menus." + (interactive) + (unless frame (setq frame (selected-frame))) + (let ((old (frame-parameter frame 'menu-bar-lines))) + (set-frame-parameter frame 'menu-bar-lines 0) + (set-frame-parameter frame 'menu-bar-lines old))) + ;; Splitting windows. (unless (fboundp 'scroll-bar-columns) @@ -824,12 +832,12 @@ doesn't match any of the regular expressions in (mdw-define-face default (((type w32)) :family "courier new" :height 85) - (((type x)) :family "6x13" :height 130) + (((type x)) :family "6x13" :foundry "trad" :height 130) (((type color)) :foreground "white" :background "black") (t nil)) (mdw-define-face fixed-pitch (((type w32)) :family "courier new" :height 85) - (((type x)) :family "6x13" :height 130) + (((type x)) :family "6x13" :foundry "trad" :height 130) (t :foreground "white" :background "black")) (if (>= emacs-major-version 23) (mdw-define-face variable-pitch @@ -861,7 +869,8 @@ doesn't match any of the regular expressions in (((class color)) :background "red") (t :inverse-video t)) (mdw-define-face highlight - (((class color)) :background "DarkSeaGreen4") + (((type x) (class color)) :background "DarkSeaGreen4") + (((type tty) (class color)) :background "cyan") (t :inverse-video t)) (mdw-define-face holiday-face @@ -941,6 +950,8 @@ doesn't match any of the regular expressions in (mdw-define-face which-func (t nil)) +(mdw-define-face diff-header + (t nil)) (mdw-define-face diff-index (t :weight bold)) (mdw-define-face diff-file-header @@ -957,6 +968,18 @@ doesn't match any of the regular expressions in (t :foreground "red")) (mdw-define-face diff-context (t nil)) +(mdw-define-face diff-refine-change + (((class color) (type x)) :background "RoyalBlue4") + (t :underline t)) + +(mdw-define-face magit-diff-add + (t :foreground "green")) +(mdw-define-face magit-diff-del + (t :foreground "red")) +(mdw-define-face magit-diff-file-header + (t :weight bold)) +(mdw-define-face magit-diff-hunk-header + (t :foreground "SkyBlue1")) (mdw-define-face erc-input-face (t :foreground "red")) @@ -966,6 +989,21 @@ doesn't match any of the regular expressions in (mdw-define-face woman-italic (t :slant italic)) +(eval-after-load "rst" + '(progn + (mdw-define-face rst-level-1-face + (t :foreground "SkyBlue1" :weight bold)) + (mdw-define-face rst-level-2-face + (t :foreground "SeaGreen1" :weight bold)) + (mdw-define-face rst-level-3-face + (t :weight bold)) + (mdw-define-face rst-level-4-face + (t :slant italic)) + (mdw-define-face rst-level-5-face + (t :underline t)) + (mdw-define-face rst-level-6-face + ()))) + (mdw-define-face p4-depot-added-face (t :foreground "green")) (mdw-define-face p4-depot-branch-op-face @@ -993,9 +1031,15 @@ doesn't match any of the regular expressions in ;; Ellipses used to indicate hidden text (and similar). (mdw-define-face mdw-ellipsis-face (((type tty)) :foreground "blue") (t :foreground "grey60")) -(let ((dot (make-glyph-code ?. 'mdw-ellipsis-face))) +(let ((dollar (make-glyph-code ?$ 'mdw-ellipsis-face)) + (backslash (make-glyph-code ?\ 'mdw-ellipsis-face)) + (dot (make-glyph-code ?. 'mdw-ellipsis-face)) + (bar (make-glyph-code ?| mdw-ellipsis-face))) + (set-display-table-slot standard-display-table 0 dollar) + (set-display-table-slot standard-display-table 1 backslash) (set-display-table-slot standard-display-table 4 - (vector dot dot dot))) + (vector dot dot dot)) + (set-display-table-slot standard-display-table 5 bar)) ;;;-------------------------------------------------------------------------- ;;; C programming configuration. @@ -1572,6 +1616,7 @@ doesn't match any of the regular expressions in ;; Perl indentation style. +(fset 'perl-mode 'cperl-mode) (setq cperl-indent-level 2) (setq cperl-continued-statement-offset 2) (setq cperl-continued-brace-offset 0) @@ -1646,12 +1691,12 @@ strip numbers instead." (list ;; Set up the keywords defined above. - (list (concat "\\<\\(" keywords "\\)\\>") + (list (concat "\\_<\\(" keywords "\\)\\_>") '(0 font-lock-keyword-face)) ;; At least numbers are simpler than C. - (list (concat "\\<0\\([xX][0-9a-fA-F_]+\\|[0-7_]+\\)\\|" - "\\<[0-9][0-9_]*\\(\\.[0-9_]*\\|\\)" + (list (concat "\\_<0\\([xX][0-9a-fA-F_]+\\|[0-7_]+\\)\\|" + "\\_<[0-9][0-9_]*\\(\\.[0-9_]*\\|\\)" "\\([eE]\\([-+]\\|\\)[0-9_]+\\|[lL]\\|\\)") '(0 mdw-number-face)) @@ -1772,6 +1817,7 @@ strip numbers instead." "<" arm-assembler-mode-syntax-table) (modify-syntax-entry ?\n ">" arm-assembler-mode-syntax-table) (modify-syntax-entry ?_ "_" arm-assembler-mode-syntax-table) + (modify-syntax-entry ?' "\"'" arm-assembler-mode-syntax-table) (make-local-variable 'comment-start) (setq comment-start ";") @@ -2174,6 +2220,48 @@ strip numbers instead." (run-hooks 'mdw-sgml-mode-hook)) ;;;-------------------------------------------------------------------------- +;;; Configuration files. + +(defvar mdw-conf-quote-normal nil + "*Control syntax category of quote characters `\"' and `''. +If this is `t', consider quote characters to be normal +punctuation, as for `conf-quote-normal'. If this is `nil' then +leave quote characters as quotes. If this is a list, then +consider the quote characters in the list to be normal +punctuation. If this is a single quote character, then consider +that character only to be normal punctuation.") +(defun mdw-conf-quote-normal-acceptable-value-p (value) + "Is the VALUE is an acceptable value for `mdw-conf-quote-normal'?" + (or (booleanp value) + (every (lambda (v) (memq v '(?\" ?'))) + (if (listp value) value (list value))))) +(put 'mdw-conf-quote-normal 'safe-local-variable ' + mdw-conf-quote-normal-acceptable-value-p) + +(defun mdw-fix-up-quote () + "Apply the setting of `mdw-conf-quote-normal'." + (let ((flag mdw-conf-quote-normal)) + (cond ((eq flag t) + (conf-quote-normal t)) + ((not flag) + nil) + (t + (let ((table (copy-syntax-table (syntax-table)))) + (mapc (lambda (ch) (modify-syntax-entry ch "." table)) + (if (listp flag) flag (list flag))) + (set-syntax-table table) + (and font-lock-mode (font-lock-fontify-buffer))))))) +(defun mdw-fix-up-quote-hack () + "Unpleasant hack to call `mdw-fix-up-quote' at the right time. +Annoyingly, `hack-local-variables' is done after `set-auto-mode' +so we wouldn't see a local-variable setting of +`mdw-conf-quote-normal' in `conf-mode-hook'. Instead, wire +ourselves onto `hack-local-variables-hook' here, and check the +setting once it's actually been made." + (add-hook 'hack-local-variables-hook 'mdw-fix-up-quote t t)) +(add-hook 'conf-mode-hook 'mdw-fix-up-quote-hack t) + +;;;-------------------------------------------------------------------------- ;;; Shell scripts. (defun mdw-setup-sh-script-mode () @@ -2200,6 +2288,44 @@ strip numbers instead." (setq sh-indentation 2) (setq sh-basic-offset 2)) +(setq sh-shell-file "/bin/sh") + +;; Awful hacking to override the shell detection for particular scripts. +(defmacro define-custom-shell-mode (name shell) + `(defun ,name () + (interactive) + (set (make-local-variable 'sh-shell-file) ,shell) + (sh-mode))) +(define-custom-shell-mode bash-mode "/bin/bash") +(define-custom-shell-mode rc-mode "/usr/bin/rc") +(put 'sh-shell-file 'permanent-local t) + +;; Hack the rc syntax table. Backquotes aren't paired in rc. +(eval-after-load "sh-script" + '(or (assq 'rc sh-mode-syntax-table-input) + (let ((frag '(nil + ?# "<" + ?\n ">#" + ?\" "\"\"" + ?\' "\"\'" + ?$ "'" + ?\` "." + ?! "_" + ?% "_" + ?. "_" + ?^ "_" + ?~ "_" + ?, "_" + ?= "." + ?< "." + ?> ".")) + (assoc (assq 'rc sh-mode-syntax-table-input))) + (if assoc + (rplacd assoc frag) + (setq sh-mode-syntax-table-input + (cons (cons 'rc frag) + sh-mode-syntax-table-input)))))) + ;;;-------------------------------------------------------------------------- ;;; Emacs shell mode.