comparison lisp/wid-edit.el @ 290:c9fe270a4101 r21-0b43

Import from CVS: tag r21-0b43
author cvs
date Mon, 13 Aug 2007 10:36:47 +0200
parents 7df0dd720c89
children d1b52dcaa789
comparison
equal deleted inserted replaced
289:6e6992ccc4b6 290:c9fe270a4101
336 (set-extent-property extent 'detachable nil) 336 (set-extent-property extent 'detachable nil)
337 (set-extent-property extent 'field widget) 337 (set-extent-property extent 'field widget)
338 (set-extent-property extent 'button-or-field t) 338 (set-extent-property extent 'button-or-field t)
339 (set-extent-property extent 'keymap map) 339 (set-extent-property extent 'keymap map)
340 (set-extent-property extent 'face face) 340 (set-extent-property extent 'face face)
341 (widget-handle-help-echo extent help-echo))) 341 (widget-handle-help-echo extent help-echo))
342 (widget-specify-secret widget))
343
344 (defun widget-specify-secret (field)
345 "Replace text in FIELD with value of `:secret', if non-nil."
346 (let ((secret (widget-get field :secret))
347 (size (widget-get field :size)))
348 (when secret
349 (let ((begin (widget-field-start field))
350 (end (widget-field-end field)))
351 (when size
352 (while (and (> end begin)
353 (eq (char-after (1- end)) ?\ ))
354 (setq end (1- end))))
355 (while (< begin end)
356 (let ((old (char-after begin)))
357 (unless (eq old secret)
358 (subst-char-in-region begin (1+ begin) old secret)
359 (put-text-property begin (1+ begin) 'secret old))
360 (setq begin (1+ begin))))))))
342 361
343 (defun widget-specify-button (widget from to) 362 (defun widget-specify-button (widget from to)
344 "Specify button for WIDGET between FROM and TO." 363 "Specify button for WIDGET between FROM and TO."
345 (let ((face (widget-apply widget :button-face-get)) 364 (let ((face (widget-apply widget :button-face-get))
346 (help-echo (widget-get widget :help-echo)) 365 (help-echo (widget-get widget :help-echo))
1479 (let ((field (widget-field-find from)) 1498 (let ((field (widget-field-find from))
1480 (other (widget-field-find to))) 1499 (other (widget-field-find to)))
1481 (when field 1500 (when field
1482 (unless (eq field other) 1501 (unless (eq field other)
1483 (debug "Change in different fields")) 1502 (debug "Change in different fields"))
1484 (let ((size (widget-get field :size)) 1503 (let ((size (widget-get field :size)))
1485 (secret (widget-get field :secret)))
1486 (when size 1504 (when size
1487 (let ((begin (widget-field-start field)) 1505 (let ((begin (widget-field-start field))
1488 (end (widget-field-end field))) 1506 (end (widget-field-end field)))
1489 (cond ((< (- end begin) size) 1507 (cond ((< (- end begin) size)
1490 ;; Field too small. 1508 ;; Field too small.
1502 (save-excursion 1520 (save-excursion
1503 (goto-char end) 1521 (goto-char end)
1504 (while (and (eq (preceding-char) ?\ ) 1522 (while (and (eq (preceding-char) ?\ )
1505 (> (point) begin)) 1523 (> (point) begin))
1506 (delete-backward-char 1))))))) 1524 (delete-backward-char 1)))))))
1507 (when secret 1525 (widget-specify-secret field))
1508 (let ((begin (widget-field-start field))
1509 (end (widget-field-end field)))
1510 (when size
1511 (while (and (> end begin)
1512 (eq (char-after (1- end)) ?\ ))
1513 (setq end (1- end))))
1514 (while (< begin end)
1515 (let ((old (char-after begin)))
1516 (unless (eq old secret)
1517 (subst-char-in-region begin (1+ begin) old secret)
1518 (put-text-property begin (1+ begin) 'secret old))
1519 (incf begin))))))
1520 (widget-apply field :notify field))) 1526 (widget-apply field :notify field)))
1521 (error (debug "After Change")))) 1527 (error (debug "After Change"))))
1522 1528
1523 1529
1524 ;;; Widget Functions 1530 ;;; Widget Functions