diff options
| author | Miles Bader | 2008-06-17 11:27:51 +0000 |
|---|---|---|
| committer | Miles Bader | 2008-06-17 11:27:51 +0000 |
| commit | d7ed971d66e88e94652a733670984ee6c8dd53a7 (patch) | |
| tree | 2ec18a96e55faab84e69b99e1e3653905bdba697 | |
| parent | d03d411d4a487dd690831a6d36be662f2f896989 (diff) | |
| download | emacs-d7ed971d66e88e94652a733670984ee6c8dd53a7.tar.gz emacs-d7ed971d66e88e94652a733670984ee6c8dd53a7.zip | |
Add buffer-face-mode
Revision: emacs@sv.gnu.org/emacs--devo--0--patch-1251
| -rw-r--r-- | lisp/ChangeLog | 7 | ||||
| -rw-r--r-- | lisp/face-remap.el | 91 |
2 files changed, 83 insertions, 15 deletions
diff --git a/lisp/ChangeLog b/lisp/ChangeLog index e638c2630c2..b225c8f8964 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog | |||
| @@ -1,5 +1,12 @@ | |||
| 1 | 2008-06-17 Miles Bader <miles@gnu.org> | 1 | 2008-06-17 Miles Bader <miles@gnu.org> |
| 2 | 2 | ||
| 3 | * face-remap.el (buffer-face-mode-face) | ||
| 4 | (buffer-face-mode-remapping): New variables. | ||
| 5 | (buffer-face-mode, buffer-face-set, buffer-face-toggle) | ||
| 6 | (buffer-face-mode-invoke): New functions. | ||
| 7 | (variable-pitch-mode-remapping): Variable removed. | ||
| 8 | (variable-pitch-mode): Rewrite as an interface to `buffer-face-mode'. | ||
| 9 | |||
| 3 | * face-remap.el (internal-lisp-face-attributes): New variable. | 10 | * face-remap.el (internal-lisp-face-attributes): New variable. |
| 4 | (face-attrs-more-relative-p, face-remap-order): New functions. | 11 | (face-attrs-more-relative-p, face-remap-order): New functions. |
| 5 | (face-remap-add-relative): Use `face-remap-order'. | 12 | (face-remap-add-relative): Use `face-remap-order'. |
diff --git a/lisp/face-remap.el b/lisp/face-remap.el index fce25af834b..2988e399161 100644 --- a/lisp/face-remap.el +++ b/lisp/face-remap.el | |||
| @@ -297,27 +297,88 @@ a top-level keymap, `text-scale-increase' or | |||
| 297 | 297 | ||
| 298 | 298 | ||
| 299 | ;; ---------------------------------------------------------------- | 299 | ;; ---------------------------------------------------------------- |
| 300 | ;; variable-pitch-mode | 300 | ;; buffer-face-mode |
| 301 | 301 | ||
| 302 | ;; suggested key binding: (global-set-key "\C-cv" 'variable-pitch-mode) | 302 | (defcustom buffer-face-mode-face 'variable-pitch |
| 303 | "The face specification used by `buffer-face-mode'. | ||
| 304 | It may contain any value suitable for a `face' text property, | ||
| 305 | including a face name, a list of face names, a face-attribute | ||
| 306 | plist, etc." | ||
| 307 | :group 'display) | ||
| 303 | 308 | ||
| 304 | ;; current remapping cookie for variable-pitch-mode | 309 | ;; current remapping cookie for buffer-face-mode |
| 305 | (defvar variable-pitch-mode-remapping nil) | 310 | (defvar buffer-face-mode-remapping nil) |
| 306 | (make-variable-buffer-local 'variable-pitch-mode-remapping) | 311 | (make-variable-buffer-local 'buffer-face-mode-remapping) |
| 307 | 312 | ||
| 308 | ;;;###autoload | 313 | ;;;###autoload |
| 309 | (define-minor-mode variable-pitch-mode | 314 | (define-minor-mode buffer-face-mode |
| 310 | "Variable-pitch default-face mode. | 315 | "Minor mode for a buffer-specific default face. |
| 311 | When active, causes the buffer text to be displayed using | 316 | When enabled, the face specified by the variable |
| 312 | the `variable-pitch' face." | 317 | `buffer-face-mode-face' is used to display the buffer text." |
| 313 | :lighter " VarPitch" | 318 | :lighter " BufFace" |
| 314 | (when variable-pitch-mode-remapping | 319 | (when buffer-face-mode-remapping |
| 315 | (face-remap-remove-relative variable-pitch-mode-remapping)) | 320 | (face-remap-remove-relative buffer-face-mode-remapping)) |
| 316 | (setq variable-pitch-mode-remapping | 321 | (setq buffer-face-mode-remapping |
| 317 | (and variable-pitch-mode | 322 | (and buffer-face-mode |
| 318 | (face-remap-add-relative 'default 'variable-pitch))) | 323 | (face-remap-add-relative 'default buffer-face-mode-face))) |
| 319 | (force-window-update (current-buffer))) | 324 | (force-window-update (current-buffer))) |
| 320 | 325 | ||
| 326 | ;;;###autoload | ||
| 327 | (defun buffer-face-set (face) | ||
| 328 | "Enable `buffer-face-mode', using the face FACE. | ||
| 329 | If FACE is nil, then `buffer-face-mode' is disabled. This | ||
| 330 | function will make the variable `buffer-face-mode-face' buffer | ||
| 331 | local, and set it to FACE." | ||
| 332 | (interactive (list (read-face-name "Set buffer face"))) | ||
| 333 | (if (null face) | ||
| 334 | (buffer-face-mode 0) | ||
| 335 | (set (make-local-variable 'buffer-face-mode-face) face) | ||
| 336 | (buffer-face-mode t))) | ||
| 337 | |||
| 338 | ;;;###autoload | ||
| 339 | (defun buffer-face-toggle (face) | ||
| 340 | "Toggle `buffer-face-mode', using the face FACE. | ||
| 341 | |||
| 342 | If `buffer-face-mode' is already enabled, and is currently using | ||
| 343 | the face FACE, then it is disabled; if buffer-face-mode is | ||
| 344 | disabled, or is enabled and currently displaying some other face, | ||
| 345 | then is left enabled, but the face changed to FACE. This | ||
| 346 | function will make the variable `buffer-face-mode-face' buffer | ||
| 347 | local, and set it to FACE." | ||
| 348 | (interactive (list buffer-face-mode-face)) | ||
| 349 | (if (or (null face) | ||
| 350 | (and buffer-face-mode (equal buffer-face-mode-face face))) | ||
| 351 | (buffer-face-mode 0) | ||
| 352 | (set (make-local-variable 'buffer-face-mode-face) face) | ||
| 353 | (buffer-face-mode t))) | ||
| 354 | |||
| 355 | (defun buffer-face-mode-invoke (face arg &optional interactive) | ||
| 356 | "Enable or disable `buffer-face-mode' using the face FACE, and argument ARG. | ||
| 357 | ARG is interpreted in the usual manner for minor-mode commands. | ||
| 358 | Besides the choice of face, this is the same as the `buffer-face-mode' command. | ||
| 359 | If INTERACTIVE is non-nil, a message will be displayed describing the result." | ||
| 360 | (let ((last-message (current-message))) | ||
| 361 | (if (or (eq arg 'toggle) (not arg)) | ||
| 362 | (buffer-face-toggle face) | ||
| 363 | (buffer-face-set (and (> (prefix-numeric-value arg) 0) face))) | ||
| 364 | (when interactive | ||
| 365 | (unless (and (current-message) | ||
| 366 | (not (equal last-message (current-message)))) | ||
| 367 | (message "Buffer-Face mode %sabled" | ||
| 368 | (if buffer-face-mode "en" "dis")))))) | ||
| 369 | |||
| 370 | |||
| 371 | ;; ---------------------------------------------------------------- | ||
| 372 | ;; variable-pitch-mode | ||
| 373 | |||
| 374 | ;;;###autoload | ||
| 375 | (defun variable-pitch-mode (&optional arg) | ||
| 376 | "Variable-pitch default-face mode. | ||
| 377 | An interface to `buffer-face-mode' which uses the `variable-pitch' face. | ||
| 378 | Besides the choice of face, it is the same as `buffer-face-mode'." | ||
| 379 | (interactive (list (or current-prefix-arg 'toggle))) | ||
| 380 | (buffer-face-mode-invoke 'variable-pitch arg (interactive-p))) | ||
| 381 | |||
| 321 | 382 | ||
| 322 | (provide 'face-remap) | 383 | (provide 'face-remap) |
| 323 | 384 | ||