From 1e7a9479476de03b7d9e5a31099716999bc3c239 Mon Sep 17 00:00:00 2001 Message-Id: <1e7a9479476de03b7d9e5a31099716999bc3c239.1718300485.git.mdw@distorted.org.uk> From: Mark Wooding Date: Mon, 9 Nov 2009 14:51:13 +0000 Subject: [PATCH] dot/emacs, el/dot-emacs.el: Fix font configuration. Organization: Straylight/Edgeware From: Mark Wooding Remove the unpleasant hacking with mdw-set-font and friends, and all of the repeated font setting. It doesn't work properly with Emacs 23, because it can run in native frames and terminals simultaneously. Instead, configure the fonts correctly at startup. Unfortunately, `defface' doesn't override the existing settings, so we hack the face properties the hard way. This actually seems to work, although it doesn't have a particular right to. --- dot/emacs | 3 - el/dot-emacs.el | 278 +++++++++++++++++++++++++----------------------- 2 files changed, 147 insertions(+), 134 deletions(-) diff --git a/dot/emacs b/dot/emacs index 51b0470..f5d3ce0 100644 --- a/dot/emacs +++ b/dot/emacs @@ -555,9 +555,6 @@ (setq lazy-lock-stealth-lines 100) (setq lazy-lock-stealth-verbose t) -(add-hook 'after-make-frame-functions 'mdw-do-set-font) -(add-hook 'term-setup-hook (lambda () (mdw-do-set-font (selected-frame)))) -(add-hook 'window-setup-hook (lambda () (mdw-do-set-font (selected-frame)))) (add-hook 'c-mode-hook 'mdw-fontify-c-and-c++ t) (add-hook 'objc-mode-hook 'mdw-fontify-c-and-c++ t) diff --git a/el/dot-emacs.el b/el/dot-emacs.el index 7cca98a..b7a1cc2 100644 --- a/el/dot-emacs.el +++ b/el/dot-emacs.el @@ -646,21 +646,12 @@ (defun mdw-misc-mode-config () (gtags-mode)) (outline-minor-mode t) (hs-minor-mode t) - (mdw-set-font)) + (trap (turn-on-font-lock))) (eval-after-load 'gtags '(dolist (key '([mouse-2] [mouse-3])) (define-key gtags-mode-map key nil))) -;; Set up all sorts of faces. - -(defvar mdw-set-font nil) - -(defvar mdw-punct-face 'mdw-punct-face "Face to use for punctuation") -(make-face 'mdw-punct-face) -(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 @@ -685,127 +676,152 @@ (setq backup-enable-predicate 'mdw-backup-enable-predicate) ;;;-------------------------------------------------------------------------- ;;; General fontification. -(defun mdw-set-fonts (frame faces) - (while faces - (let ((face (caar faces))) - (or (facep face) (make-face face)) - (set-face-attribute face frame - :family 'unspecified - :width 'unspecified - :height 'unspecified - :weight 'unspecified - :slant 'unspecified - :foreground 'unspecified - :background 'unspecified - :underline 'unspecified - :overline 'unspecified - :strike-through 'unspecified - :box 'unspecified - :inverse-video 'unspecified - :stipple 'unspecified - ;:font 'unspecified - :inherit 'unspecified) - (apply 'set-face-attribute face frame (cdar faces)) - (setq faces (cdr faces))))) - -(defun mdw-do-set-font (&optional frame) - (interactive) - (mdw-set-fonts (and (boundp 'frame) frame) `( - (default :foreground "white" :background "black" - ,@(cond ((eq window-system 'w32) - '(:family "courier new" :height 85)) - ((eq window-system 'x) - '(:family "misc-fixed" :height 130 :width semi-condensed)))) - (fixed-pitch) - (minibuffer-prompt) - (mode-line :foreground "blue" :background "yellow" - :box (:line-width 1 :style released-button)) - (mode-line-inactive :foreground "yellow" :background "blue" - :box (:line-width 1 :style released-button)) - (scroll-bar :foreground "black" :background "lightgrey") - (fringe :foreground "yellow" :background "black") - (show-paren-match-face :background "darkgreen") - (show-paren-mismatch-face :background "red") - (font-lock-warning-face :background "red" :weight bold) - (highlight :background "DarkSeaGreen4") - (holiday-face :background "red") - (calendar-today-face :foreground "yellow" :weight bold) - (comint-highlight-prompt :weight bold) - (comint-highlight-input) - (font-lock-builtin-face :weight bold) - (font-lock-type-face :weight bold) - (region :background ,(if window-system "grey30" "blue")) - (isearch :background "palevioletred2") - (mdw-punct-face :foreground ,(if window-system "burlywood2" "yellow")) - (mdw-number-face :foreground "yellow") - (font-lock-function-name-face :weight bold) - (font-lock-variable-name-face :slant italic) - (font-lock-comment-delimiter-face - :foreground ,(if window-system "SeaGreen1" "green") - :slant italic) - (font-lock-comment-face - :foreground ,(if window-system "SeaGreen1" "green") - :slant italic) - (font-lock-string-face :foreground ,(if window-system "SkyBlue1" "cyan")) - (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) - (p4-depot-added-face :foreground "green") - (p4-depot-branch-op-face :foreground "yellow") - (p4-depot-deleted-face :foreground "red") - (p4-depot-unmapped-face - :foreground ,(if window-system "SkyBlue1" "cyan")) - (p4-diff-change-face :foreground "yellow") - (p4-diff-del-face :foreground "red") - (p4-diff-file-face :foreground "SkyBlue1") - (p4-diff-head-face :background "grey10") - (p4-diff-ins-face :foreground "green") - (diff-index :weight bold) - (diff-file-header :weight bold) - (diff-hunk-header :foreground "SkyBlue1") - (diff-function :foreground "SkyBlue1" :weight bold) - (diff-header :background "grey10") - (diff-added :foreground "green") - (diff-removed :foreground "red") - (diff-context) - (whizzy-slice-face :background "grey10") - (whizzy-error-face :background "darkred") - (trailing-whitespace :background "red") -))) - -(defun mdw-set-font () - (trap - (turn-on-font-lock) - (if (not mdw-set-font) - (progn - (setq mdw-set-font t) - (mdw-do-set-font nil))))) +(defmacro mdw-define-face (name &rest body) + "Define a face, and make sure it's actually set as the definition." + (declare (indent 1) + (debug 0)) + `(progn + (make-face ',name) + (defvar ,name ',name) + (put ',name 'face-defface-spec ',body) + )) + +(mdw-define-face default + (((type w32)) :family "courier new" :height 85) + (((type x)) :family "6x13" :height 130) + (t :foreground "white" :background "black")) +(mdw-define-face fixed-pitch + (((type w32)) :family "courier new" :height 85) + (((type x)) :family "6x13" :height 130) + (t :foreground "white" :background "black")) +(mdw-define-face region + (((type tty)) :background "blue") (t :background "grey30")) +(mdw-define-face minibuffer-prompt + (t :weight bold)) +(mdw-define-face mode-line + (t :foreground "blue" :background "yellow" + :box (:line-width 1 :style released-button))) +(mdw-define-face mode-line-inactive + (t :foreground "yellow" :background "blue" + :box (:line-width 1 :style released-button))) +(mdw-define-face scroll-bar + (t :foreground "black" :background "lightgrey")) +(mdw-define-face fringe + (t :foreground "yellow")) +(mdw-define-face show-paren-match-face + (t :background "darkgreen")) +(mdw-define-face show-paren-mismatch-face + (t :background "red")) +(mdw-define-face highlight + (t :background "DarkSeaGreen4")) + +(mdw-define-face holiday-face + (t :background "red")) +(mdw-define-face calendar-today-face + (t :foreground "yellow" :weight bold)) + +(mdw-define-face comint-highlight-prompt + (t :weight bold)) +(mdw-define-face comint-highlight-input + (t :slant italic)) + +(mdw-define-face trailing-whitespace + (t :background "red")) +(mdw-define-face mdw-punct-face + (((type tty)) :foreground "yellow") (t :foreground "burlywood2")) +(mdw-define-face mdw-number-face + (t :foreground "yellow")) +(mdw-define-face font-lock-function-name-face + (t :weight bold)) +(mdw-define-face font-lock-keyword-face + (t :weight bold)) +(mdw-define-face font-lock-constant-face + (t :slant italic)) +(mdw-define-face font-lock-builtin-face + (t :weight bold)) +(mdw-define-face font-lock-reference-face + (t :weight bold)) +(mdw-define-face font-lock-variable-name-face + (t :slant italic)) +(mdw-define-face font-lock-comment-delimiter-face + (default :slant italic) + (((type tty)) :foreground "green") (t :foreground "SeaGreen1")) +(mdw-define-face font-lock-comment-face + (default :slant italic) + (((type tty)) :foreground "green") (t :foreground "SeaGreen1")) +(mdw-define-face font-lock-string-face + (t :foreground "SkyBlue1")) + +(mdw-define-face message-separator + (t :background "red" :foreground "white" :weight bold)) +(mdw-define-face message-cited-text + (default :slant italic) + (((type tty)) :foreground "green") (t :foreground "SeaGreen1")) +(mdw-define-face message-header-cc + (default :weight bold) + (((type tty)) :foreground "green") (t :foreground "SeaGreen1")) +(mdw-define-face message-header-newsgroups + (default :weight bold) + (((type tty)) :foreground "green") (t :foreground "SeaGreen1")) +(mdw-define-face message-header-subject + (default :weight bold) + (((type tty)) :foreground "green") (t :foreground "SeaGreen1")) +(mdw-define-face message-header-to + (default :weight bold) + (((type tty)) :foreground "green") (t :foreground "SeaGreen1")) +(mdw-define-face message-header-xheader + (default :weight bold) + (((type tty)) :foreground "green") (t :foreground "SeaGreen1")) +(mdw-define-face message-header-other + (default :weight bold) + (((type tty)) :foreground "green") (t :foreground "SeaGreen1")) +(mdw-define-face message-header-name + (((type tty)) :foreground "green") (t :foreground "SeaGreen1")) + +(mdw-define-face diff-index + (t :weight bold)) +(mdw-define-face diff-file-header + (t :weight bold)) +(mdw-define-face diff-hunk-header + (t :foreground "SkyBlue1")) +(mdw-define-face diff-function + (t :foreground "SkyBlue1" :weight bold)) +(mdw-define-face diff-header + (t :background "grey10")) +(mdw-define-face diff-added + (t :foreground "green")) +(mdw-define-face diff-removed + (t :foreground "red")) +(mdw-define-face diff-context) + +(mdw-define-face woman-bold + (t :weight bold)) +(mdw-define-face woman-italic + (t :slant italic)) + +(mdw-define-face p4-depot-added-face + (t :foreground "green")) +(mdw-define-face p4-depot-branch-op-face + (t :foreground "yellow")) +(mdw-define-face p4-depot-deleted-face + (t :foreground "red")) +(mdw-define-face p4-depot-unmapped-face + (t :foreground "SkyBlue1")) +(mdw-define-face p4-diff-change-face + (t :foreground "yellow")) +(mdw-define-face p4-diff-del-face + (t :foreground "red")) +(mdw-define-face p4-diff-file-face + (t :foreground "SkyBlue1")) +(mdw-define-face p4-diff-head-face + (t :background "grey10")) +(mdw-define-face p4-diff-ins-face + (t :foreground "green")) + +(mdw-define-face whizzy-slice-face + (t :background "grey10")) +(mdw-define-face whizzy-error-face + (t :background "darkred")) ;;;-------------------------------------------------------------------------- ;;; C programming configuration. -- [mdw]