chiark / gitweb /
dot/emacs, el/dot-emacs.el: Fix font configuration.
authorMark Wooding <mdw@distorted.org.uk>
Mon, 9 Nov 2009 14:51:13 +0000 (14:51 +0000)
committerMark Wooding <mdw@distorted.org.uk>
Mon, 9 Nov 2009 15:10:53 +0000 (15:10 +0000)
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
el/dot-emacs.el

index 51b0470adc2984a8297452bdbf03f9c037abba5d..f5d3ce0184f68961015824a90d56a2f725fb5dd0 100644 (file)
--- a/dot/emacs
+++ b/dot/emacs
 (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)
index 7cca98a8ed83b2d58a2592aeae40d100e6ef03d0..b7a1cc24009c72fb8fb0b7d916aa1c6aee78179b 100644 (file)
@@ -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.