aboutsummaryrefslogtreecommitdiffstats
path: root/lisp
diff options
context:
space:
mode:
Diffstat (limited to 'lisp')
-rw-r--r--lisp/wid-edit.el38
1 files changed, 22 insertions, 16 deletions
diff --git a/lisp/wid-edit.el b/lisp/wid-edit.el
index 2c9b6e9ddd5..9951501685d 100644
--- a/lisp/wid-edit.el
+++ b/lisp/wid-edit.el
@@ -339,7 +339,26 @@ new value."
339 (overlay-put overlay 'keymap map) 339 (overlay-put overlay 'keymap map)
340 (overlay-put overlay 'face face) 340 (overlay-put overlay 'face face)
341 (overlay-put overlay 'balloon-help help-echo) 341 (overlay-put overlay 'balloon-help help-echo)
342 (overlay-put overlay 'help-echo help-echo))) 342 (overlay-put overlay 'help-echo help-echo))
343 (widget-specify-secret widget))
344
345(defun widget-specify-secret (field)
346 "Replace text in FIELD with value of `:secret', if non-nil."
347 (let ((secret (widget-get field :secret))
348 (size (widget-get field :size)))
349 (when secret
350 (let ((begin (widget-field-start field))
351 (end (widget-field-end field)))
352 (when size
353 (while (and (> end begin)
354 (eq (char-after (1- end)) ?\ ))
355 (setq end (1- end))))
356 (while (< begin end)
357 (let ((old (char-after begin)))
358 (unless (eq old secret)
359 (subst-char-in-region begin (1+ begin) old secret)
360 (put-text-property begin (1+ begin) 'secret old))
361 (setq begin (1+ begin))))))))
343 362
344(defun widget-specify-button (widget from to) 363(defun widget-specify-button (widget from to)
345 "Specify button for WIDGET between FROM and TO." 364 "Specify button for WIDGET between FROM and TO."
@@ -1236,8 +1255,7 @@ Unlike (get-char-property POS 'field) this, works with empty fields too."
1236 (when field 1255 (when field
1237 (unless (eq field other) 1256 (unless (eq field other)
1238 (debug "Change in different fields")) 1257 (debug "Change in different fields"))
1239 (let ((size (widget-get field :size)) 1258 (let ((size (widget-get field :size)))
1240 (secret (widget-get field :secret)))
1241 (when size 1259 (when size
1242 (let ((begin (widget-field-start field)) 1260 (let ((begin (widget-field-start field))
1243 (end (widget-field-end field))) 1261 (end (widget-field-end field)))
@@ -1259,19 +1277,7 @@ Unlike (get-char-property POS 'field) this, works with empty fields too."
1259 (while (and (eq (preceding-char) ?\ ) 1277 (while (and (eq (preceding-char) ?\ )
1260 (> (point) begin)) 1278 (> (point) begin))
1261 (delete-backward-char 1))))))) 1279 (delete-backward-char 1)))))))
1262 (when secret 1280 (widget-specify-secret field))
1263 (let ((begin (widget-field-start field))
1264 (end (widget-field-end field)))
1265 (when size
1266 (while (and (> end begin)
1267 (eq (char-after (1- end)) ?\ ))
1268 (setq end (1- end))))
1269 (while (< begin end)
1270 (let ((old (char-after begin)))
1271 (unless (eq old secret)
1272 (subst-char-in-region begin (1+ begin) old secret)
1273 (put-text-property begin (1+ begin) 'secret old))
1274 (setq begin (1+ begin)))))))
1275 (widget-apply field :notify field))) 1281 (widget-apply field :notify field)))
1276 (error (debug "After Change")))) 1282 (error (debug "After Change"))))
1277 1283