Mercurial > emacs
changeset 61307:0592ebb75598
(face): Derive from symbol widget. Display sample
of the current face on the fly.
(widget-face-sample-face-get, widget-face-notify): New functions.
(widget-face-value-create): Remove.
author | David Ponce <david@dponce.com> |
---|---|
date | Tue, 05 Apr 2005 06:40:12 +0000 |
parents | 497964065ff1 |
children | 8fc6a70b402a |
files | lisp/cus-edit.el |
diffstat | 1 files changed, 24 insertions(+), 52 deletions(-) [+] |
line wrap: on
line diff
--- a/lisp/cus-edit.el Tue Apr 05 06:38:49 2005 +0000 +++ b/lisp/cus-edit.el Tue Apr 05 06:40:12 2005 +0000 @@ -3296,65 +3296,37 @@ (defvar widget-face-prompt-value-history nil "History of input to `widget-face-prompt-value'.") -(define-widget 'face 'restricted-sexp - "A Lisp face name." +(define-widget 'face 'symbol + "A Lisp face name (with sample)." + :format "%t: (%{sample%}) %v" + :tag "Face" + :value 'default + :sample-face-get 'widget-face-sample-face-get + :notify 'widget-face-notify + :match (lambda (widget value) (facep value)) :complete-function (lambda () (interactive) (lisp-complete-symbol 'facep)) - :prompt-value 'widget-field-prompt-value - :prompt-internal 'widget-symbol-prompt-internal :prompt-match 'facep :prompt-history 'widget-face-prompt-value-history - :value-create 'widget-face-value-create - :action 'widget-field-action - :match-alternatives '(facep) :validate (lambda (widget) (unless (facep (widget-value widget)) - (widget-put widget :error (format "Invalid face: %S" - (widget-value widget))) - widget)) - :value 'ignore - :tag "Function") - - -;;; There is a bug here: the sample doesn't get redisplayed -;;; in the new font when you specify one. Does anyone know how to -;;; make that work? -- rms. - -(defun widget-face-value-create (widget) - "Create an editable face name field." - (let ((buttons (widget-get widget :buttons)) - (symbol (widget-get widget :value))) - ;; Sample. - (push (widget-create-child-and-convert widget 'item - :format "(%{%t%})" - :sample-face symbol - :tag "sample") - buttons) - (insert " ") - ;; Update buttons. - (widget-put widget :buttons buttons)) - - (let ((size (widget-get widget :size)) - (value (widget-get widget :value)) - (from (point)) - ;; This is changed to a real overlay in `widget-setup'. We - ;; need the end points to behave differently until - ;; `widget-setup' is called. - (overlay (cons (make-marker) (make-marker)))) - (widget-put widget :field-overlay overlay) - (insert value) - (and size - (< (length value) size) - (insert-char ?\ (- size (length value)))) - (unless (memq widget widget-field-list) - (setq widget-field-new (cons widget widget-field-new))) - (move-marker (cdr overlay) (point)) - (set-marker-insertion-type (cdr overlay) nil) - (when (null size) - (insert ?\n)) - (move-marker (car overlay) from) - (set-marker-insertion-type (car overlay) t))) + (widget-put widget + :error (format "Invalid face: %S" + (widget-value widget))) + widget))) + +(defun widget-face-sample-face-get (widget) + (let ((value (widget-value widget))) + (if (facep value) + value + 'default))) + +(defun widget-face-notify (widget child &optional event) + "Update the sample, and notify the parent." + (overlay-put (widget-get widget :sample-overlay) + 'face (widget-apply widget :sample-face-get)) + (widget-default-notify widget child event)) ;;; The `hook' Widget.