comparison lisp/wid-edit.el @ 59023:fa849ef3cf2c

(widget-specify-field, widget-specify-button): Map a :follow-link keyword into a follow-link property. (link): Add :follow-link keyword, map to RET binding.
author Kim F. Storm <storm@cua.dk>
date Fri, 17 Dec 2004 15:17:47 +0000
parents 4b3cfed7370f
children 52e7defa0669 eac554634bfa
comparison
equal deleted inserted replaced
59022:0b09c3970de0 59023:fa849ef3cf2c
325 (insert-and-inherit " "))) 325 (insert-and-inherit " ")))
326 (setq to (point))) 326 (setq to (point)))
327 (let ((keymap (widget-get widget :keymap)) 327 (let ((keymap (widget-get widget :keymap))
328 (face (or (widget-get widget :value-face) 'widget-field-face)) 328 (face (or (widget-get widget :value-face) 'widget-field-face))
329 (help-echo (widget-get widget :help-echo)) 329 (help-echo (widget-get widget :help-echo))
330 (follow-link (widget-get widget :follow-link))
330 (rear-sticky 331 (rear-sticky
331 (or (not widget-field-add-space) (widget-get widget :size)))) 332 (or (not widget-field-add-space) (widget-get widget :size))))
332 (if (functionp help-echo) 333 (if (functionp help-echo)
333 (setq help-echo 'widget-mouse-help)) 334 (setq help-echo 'widget-mouse-help))
334 (when (= (char-before to) ?\n) 335 (when (= (char-before to) ?\n)
343 (overlay-put overlay 'real-field widget) 344 (overlay-put overlay 'real-field widget)
344 ;; Use `local-map' here, not `keymap', so that normal editing 345 ;; Use `local-map' here, not `keymap', so that normal editing
345 ;; works in the field when, say, Custom uses `suppress-keymap'. 346 ;; works in the field when, say, Custom uses `suppress-keymap'.
346 (overlay-put overlay 'local-map keymap) 347 (overlay-put overlay 'local-map keymap)
347 (overlay-put overlay 'face face) 348 (overlay-put overlay 'face face)
349 (overlay-put overlay 'follow-link follow-link)
348 (overlay-put overlay 'help-echo help-echo)) 350 (overlay-put overlay 'help-echo help-echo))
349 (setq to (1- to)) 351 (setq to (1- to))
350 (setq rear-sticky t)) 352 (setq rear-sticky t))
351 (let ((overlay (make-overlay from to nil nil rear-sticky))) 353 (let ((overlay (make-overlay from to nil nil rear-sticky)))
352 (widget-put widget :field-overlay overlay) 354 (widget-put widget :field-overlay overlay)
353 ;;(overlay-put overlay 'detachable nil) 355 ;;(overlay-put overlay 'detachable nil)
354 (overlay-put overlay 'field widget) 356 (overlay-put overlay 'field widget)
355 (overlay-put overlay 'local-map keymap) 357 (overlay-put overlay 'local-map keymap)
356 (overlay-put overlay 'face face) 358 (overlay-put overlay 'face face)
359 (overlay-put overlay 'follow-link follow-link)
357 (overlay-put overlay 'help-echo help-echo))) 360 (overlay-put overlay 'help-echo help-echo)))
358 (widget-specify-secret widget)) 361 (widget-specify-secret widget))
359 362
360 (defun widget-specify-secret (field) 363 (defun widget-specify-secret (field)
361 "Replace text in FIELD with value of `:secret', if non-nil." 364 "Replace text in FIELD with value of `:secret', if non-nil."
376 (setq begin (1+ begin)))))))) 379 (setq begin (1+ begin))))))))
377 380
378 (defun widget-specify-button (widget from to) 381 (defun widget-specify-button (widget from to)
379 "Specify button for WIDGET between FROM and TO." 382 "Specify button for WIDGET between FROM and TO."
380 (let ((overlay (make-overlay from to nil t nil)) 383 (let ((overlay (make-overlay from to nil t nil))
384 (follow-link (widget-get widget :follow-link))
381 (help-echo (widget-get widget :help-echo))) 385 (help-echo (widget-get widget :help-echo)))
382 (widget-put widget :button-overlay overlay) 386 (widget-put widget :button-overlay overlay)
383 (if (functionp help-echo) 387 (if (functionp help-echo)
384 (setq help-echo 'widget-mouse-help)) 388 (setq help-echo 'widget-mouse-help))
385 (overlay-put overlay 'button widget) 389 (overlay-put overlay 'button widget)
387 (overlay-put overlay 'evaporate t) 391 (overlay-put overlay 'evaporate t)
388 ;; We want to avoid the face with image buttons. 392 ;; We want to avoid the face with image buttons.
389 (unless (widget-get widget :suppress-face) 393 (unless (widget-get widget :suppress-face)
390 (overlay-put overlay 'face (widget-apply widget :button-face-get))) 394 (overlay-put overlay 'face (widget-apply widget :button-face-get)))
391 (overlay-put overlay 'pointer 'hand) 395 (overlay-put overlay 'pointer 'hand)
396 (overlay-put overlay 'follow-link follow-link)
392 (overlay-put overlay 'help-echo help-echo))) 397 (overlay-put overlay 'help-echo help-echo)))
393 398
394 (defun widget-mouse-help (window overlay point) 399 (defun widget-mouse-help (window overlay point)
395 "Help-echo callback for widgets whose :help-echo is a function." 400 "Help-echo callback for widgets whose :help-echo is a function."
396 (with-current-buffer (overlay-buffer overlay) 401 (with-current-buffer (overlay-buffer overlay)
1703 1708
1704 (define-widget 'link 'item 1709 (define-widget 'link 'item
1705 "An embedded link." 1710 "An embedded link."
1706 :button-prefix 'widget-link-prefix 1711 :button-prefix 'widget-link-prefix
1707 :button-suffix 'widget-link-suffix 1712 :button-suffix 'widget-link-suffix
1713 :follow-link "\C-m"
1708 :help-echo "Follow the link." 1714 :help-echo "Follow the link."
1709 :format "%[%t%]") 1715 :format "%[%t%]")
1710 1716
1711 ;;; The `info-link' Widget. 1717 ;;; The `info-link' Widget.
1712 1718