diff options
| -rw-r--r-- | lisp/wid-edit.el | 38 |
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 | ||