diff options
| author | Mauro Aranda | 2020-08-14 16:40:40 +0200 |
|---|---|---|
| committer | Lars Ingebrigtsen | 2020-08-14 16:40:40 +0200 |
| commit | 5c39f6f1165a33f5714eedd3a413f786dffbb5a2 (patch) | |
| tree | 72fbfab0082764460f3f40a46655c7bba42f06ff | |
| parent | 93136b980ade2bdd1053128ce103c7ac53a2ad0e (diff) | |
| download | emacs-5c39f6f1165a33f5714eedd3a413f786dffbb5a2.tar.gz emacs-5c39f6f1165a33f5714eedd3a413f786dffbb5a2.zip | |
Make sure we only act on edited widgets in Custom-save
* lisp/cus-edit.el (Custom-save): Only act on edited widgets in the
buffer. If we attempt to redraw all widgets, we confuse
custom-variable-modified-p, or we end up drawing State buttons for
all options, including the hidden ones (bug#42801).
| -rw-r--r-- | lisp/cus-edit.el | 23 |
1 files changed, 13 insertions, 10 deletions
diff --git a/lisp/cus-edit.el b/lisp/cus-edit.el index 5ec5799f805..23ceb3a857a 100644 --- a/lisp/cus-edit.el +++ b/lisp/cus-edit.el | |||
| @@ -801,16 +801,19 @@ has been executed, nil otherwise." | |||
| 801 | If a setting was edited and set before, this saves it. If a | 801 | If a setting was edited and set before, this saves it. If a |
| 802 | setting was merely edited before, this sets it then saves it." | 802 | setting was merely edited before, this sets it then saves it." |
| 803 | (interactive) | 803 | (interactive) |
| 804 | (when (custom-command-apply | 804 | (let (edited-widgets) |
| 805 | (lambda (child) | 805 | (when (custom-command-apply |
| 806 | (when (memq (widget-get child :custom-state) | 806 | (lambda (child) |
| 807 | '(modified set changed rogue)) | 807 | (when (memq (widget-get child :custom-state) |
| 808 | (widget-apply child :custom-mark-to-save))) | 808 | '(modified set changed rogue)) |
| 809 | "Save all settings in this buffer? " t) | 809 | (push child edited-widgets) |
| 810 | ;; Save changes to buffer and redraw. | 810 | (widget-apply child :custom-mark-to-save))) |
| 811 | (custom-save-all) | 811 | "Save all settings in this buffer? " t) |
| 812 | (dolist (child custom-options) | 812 | ;; Save changes to buffer. |
| 813 | (widget-apply child :custom-state-set-and-redraw)))) | 813 | (custom-save-all) |
| 814 | ;; Redraw and recalculate the state when necessary. | ||
| 815 | (dolist (widget edited-widgets) | ||
| 816 | (widget-apply widget :custom-state-set-and-redraw))))) | ||
| 814 | 817 | ||
| 815 | (defun custom-reset (_widget &optional event) | 818 | (defun custom-reset (_widget &optional event) |
| 816 | "Select item from reset menu." | 819 | "Select item from reset menu." |