(overlay-put overlay 'evaporate t)
;; We want to avoid the face with image buttons.
(unless (widget-get widget :suppress-face)
- (overlay-put overlay 'face (widget-apply widget :button-face-get))
- (overlay-put overlay 'mouse-face widget-mouse-face))
+ (overlay-put overlay 'face (widget-apply widget :button-face-get)))
+ (overlay-put overlay 'pointer 'hand)
(overlay-put overlay 'help-echo help-echo)))
(defun widget-mouse-help (window overlay point)
:type 'function
:group 'widgets)
+(defun widget-narrow-to-field ()
+ "Narrow to field"
+ (interactive)
+ (let ((field (widget-field-find (point))))
+ (if field
+ (narrow-to-region (line-beginning-position) (line-end-position)))))
+
(defun widget-complete ()
"Complete content of editable field from point.
When not inside a field, move to the previous button or field."
(interactive)
(let ((field (widget-field-find (point))))
(if field
- (widget-apply field :complete)
- (error "Not in an editable field"))))
+ (save-restriction
+ (widget-narrow-to-field)
+ (widget-apply field :complete))
+ (error "Not in an editable field"))))
;;; Setting up the buffer.
field)))
(defun widget-field-buffer (widget)
- "Return the start of WIDGET's editing field."
+ "Return the buffer of WIDGET's editing field."
(let ((overlay (widget-get widget :field-overlay)))
(cond ((overlayp overlay)
(overlay-buffer overlay))
The value of the :type attribute should be an unconverted widget type."
(let ((value (widget-get widget :value))
(type (widget-get widget :type)))
- (widget-put widget :children
- (list (widget-create-child-value widget
+ (widget-put widget :children
+ (list (widget-create-child-value widget
(widget-convert type)
value)))))
(defun widget-radio-button-notify (widget child &optional event)
;; Tell daddy.
- (widget-apply (widget-get widget :parent) :action event))
+ (widget-apply (widget-get widget :parent) :action widget event))
;;; The `radio-button-choice' Widget.
(setq err "Empty sexp -- use `nil'?")
(unless (widget-apply widget :match (read (current-buffer)))
(setq err (widget-get widget :type-error))))
+ ;; Allow whitespace after expression.
+ (skip-syntax-forward "\\s-")
(if (and (not (eobp))
(not err))
(setq err (format "Junk at end of expression: %s"
nil, or a cons-cell containing a sexp and my-lisp. This will not work
because the `choice' widget does not allow recursion.
-Using the `lazy' widget you can overcome this problem, as in this
-example:
+Using the `lazy' widget you can overcome this problem, as in this
+example:
(define-widget 'sexp-list 'lazy
\"A list of sexps.\"
:format "%{%t%}: %v"
;; We don't convert :type because we want to allow recursive
;; datastructures. This is slow, so we should not create speed
- ;; critical widgets by deriving from this.
+ ;; critical widgets by deriving from this.
:convert-widget 'widget-value-convert-widget
:value-create 'widget-type-value-create
:value-get 'widget-child-value-get