comparison lisp/wid-edit.el @ 33893:8b25bc5d3aa4

(widget-field-buffer, widget-field-start) (widget-field-end): Handle widget field `pseudo-overlays'. (widget-field-value-delete): Delete WIDGET from `widget-field-new' if it's there instead of in `widget-field-list'.
author Miles Bader <miles@gnu.org>
date Mon, 27 Nov 2000 09:48:31 +0000
parents d65847dea2c0
children dd855bc086f3
comparison
equal deleted inserted replaced
33892:12f5fea864e1 33893:8b25bc5d3aa4
1091 field))) 1091 field)))
1092 1092
1093 (defun widget-field-buffer (widget) 1093 (defun widget-field-buffer (widget)
1094 "Return the start of WIDGET's editing field." 1094 "Return the start of WIDGET's editing field."
1095 (let ((overlay (widget-get widget :field-overlay))) 1095 (let ((overlay (widget-get widget :field-overlay)))
1096 (and overlay (overlay-buffer overlay)))) 1096 (cond ((overlayp overlay)
1097 (overlay-buffer overlay))
1098 ((consp overlay)
1099 (marker-buffer (car overlay))))))
1097 1100
1098 (defun widget-field-start (widget) 1101 (defun widget-field-start (widget)
1099 "Return the start of WIDGET's editing field." 1102 "Return the start of WIDGET's editing field."
1100 (let ((overlay (widget-get widget :field-overlay))) 1103 (let ((overlay (widget-get widget :field-overlay)))
1101 (and overlay (overlay-start overlay)))) 1104 (if (overlayp overlay)
1105 (overlay-start overlay)
1106 (car overlay))))
1102 1107
1103 (defun widget-field-end (widget) 1108 (defun widget-field-end (widget)
1104 "Return the end of WIDGET's editing field." 1109 "Return the end of WIDGET's editing field."
1105 (let ((overlay (widget-get widget :field-overlay))) 1110 (let ((overlay (widget-get widget :field-overlay)))
1106 ;; Don't subtract one if local-map works at the end of the overlay, 1111 ;; Don't subtract one if local-map works at the end of the overlay,
1107 ;; or if a special `boundary' field has been added after the widget 1112 ;; or if a special `boundary' field has been added after the widget
1108 ;; field. 1113 ;; field.
1109 (and overlay 1114 (if (overlayp overlay)
1110 (if (and (not (eq (get-char-property (overlay-end overlay) 1115 (if (and (not (eq (get-char-property (overlay-end overlay)
1111 'field 1116 'field
1112 (widget-field-buffer widget)) 1117 (widget-field-buffer widget))
1113 'boundary)) 1118 'boundary))
1114 (or widget-field-add-space 1119 (or widget-field-add-space
1115 (null (widget-get widget :size)))) 1120 (null (widget-get widget :size))))
1116 (1- (overlay-end overlay)) 1121 (1- (overlay-end overlay))
1117 (overlay-end overlay))))) 1122 (overlay-end overlay))
1123 (cdr overlay))))
1118 1124
1119 (defun widget-field-find (pos) 1125 (defun widget-field-find (pos)
1120 "Return the field at POS. 1126 "Return the field at POS.
1121 Unlike (get-char-property POS 'field) this, works with empty fields too." 1127 Unlike (get-char-property POS 'field) this, works with empty fields too."
1122 (let ((fields widget-field-list) 1128 (let ((fields widget-field-list)
1743 (set-marker-insertion-type (car overlay) t))) 1749 (set-marker-insertion-type (car overlay) t)))
1744 1750
1745 (defun widget-field-value-delete (widget) 1751 (defun widget-field-value-delete (widget)
1746 "Remove the widget from the list of active editing fields." 1752 "Remove the widget from the list of active editing fields."
1747 (setq widget-field-list (delq widget widget-field-list)) 1753 (setq widget-field-list (delq widget widget-field-list))
1754 (setq widget-field-new (delq widget widget-field-new))
1748 ;; These are nil if the :format string doesn't contain `%v'. 1755 ;; These are nil if the :format string doesn't contain `%v'.
1749 (let ((overlay (widget-get widget :field-overlay))) 1756 (let ((overlay (widget-get widget :field-overlay)))
1750 (when (overlayp overlay) 1757 (when (overlayp overlay)
1751 (delete-overlay overlay)))) 1758 (delete-overlay overlay))))
1752 1759