mirror of
https://git.savannah.gnu.org/git/emacs.git
synced 2024-11-29 07:58:28 +00:00
Fix reverting the default face to standard/themed state in GUIs
* lisp/cus-edit.el (custom-face-set, custom-face-mark-to-save) (custom-face-save): Record the default (standard or themed) attributes of the default face in a symbol property. (custom-face-reset-saved, custom-face-mark-to-reset-standard): When reverting the default face to the standard or themed state, use the default attributes we recorded, instead of relying in the defface spec of the default face, since that doesn't give enough information to reset all attributes, like foreground, family, etc (bug#14635).
This commit is contained in:
parent
eea93a8aaa
commit
6278c6a94e
@ -3976,6 +3976,18 @@ Optional EVENT is the location for the menu."
|
||||
(setq comment nil)
|
||||
;; Make the comment invisible by hand if it's empty
|
||||
(custom-comment-hide comment-widget))
|
||||
;; When modifying the default face, we need to save the standard or themed
|
||||
;; attrs, in case the user asks to revert to them in the future.
|
||||
;; In GUIs, when resetting the attributes of the default face, the frame
|
||||
;; parameters associated with this face won't change, unless explicitly
|
||||
;; passed a value. Storing this known attrs allows us to tell faces.el to
|
||||
;; set those attributes to specified values, making the relevant frame
|
||||
;; parameters stay in sync with the default face.
|
||||
(when (and (eq symbol 'default)
|
||||
(not (get symbol 'custom-face-default-attrs))
|
||||
(memq (custom-face-state symbol) '(standard themed)))
|
||||
(put symbol 'custom-face-default-attrs
|
||||
(custom-face-get-current-spec symbol)))
|
||||
(custom-push-theme 'theme-face symbol 'user 'set value)
|
||||
(face-spec-set symbol value 'customized-face)
|
||||
(put symbol 'face-comment comment)
|
||||
@ -3994,6 +4006,12 @@ Optional EVENT is the location for the menu."
|
||||
(setq comment nil)
|
||||
;; Make the comment invisible by hand if it's empty
|
||||
(custom-comment-hide comment-widget))
|
||||
;; See the comments in `custom-face-set'.
|
||||
(when (and (eq symbol 'default)
|
||||
(not (get symbol 'custom-face-default-attrs))
|
||||
(memq (custom-face-state symbol) '(standard themed)))
|
||||
(put symbol 'custom-face-default-attrs
|
||||
(custom-face-get-current-spec symbol)))
|
||||
(custom-push-theme 'theme-face symbol 'user 'set value)
|
||||
(face-spec-set symbol value (if standard 'reset 'saved-face))
|
||||
(put symbol 'face-comment comment)
|
||||
@ -4007,7 +4025,14 @@ Optional EVENT is the location for the menu."
|
||||
|
||||
(defun custom-face-save (widget)
|
||||
"Save the face edited by WIDGET."
|
||||
(let ((form (widget-get widget :custom-form)))
|
||||
(let ((form (widget-get widget :custom-form))
|
||||
(symbol (widget-value widget)))
|
||||
;; See the comments in `custom-face-set'.
|
||||
(when (and (eq symbol 'default)
|
||||
(not (get symbol 'custom-face-default-attrs))
|
||||
(memq (custom-face-state symbol) '(standard themed)))
|
||||
(put symbol 'custom-face-default-attrs
|
||||
(custom-face-get-current-spec symbol)))
|
||||
(if (memq form '(all lisp))
|
||||
(custom-face-mark-to-save widget)
|
||||
;; The user is working on only a selected terminal type;
|
||||
@ -4035,10 +4060,20 @@ uncustomized (themed or standard) face."
|
||||
(saved-face (get face 'saved-face))
|
||||
(comment (get face 'saved-face-comment))
|
||||
(comment-widget (widget-get widget :comment-widget)))
|
||||
;; If resetting the default face and there isn't a saved value,
|
||||
;; push a fake user setting, so that reverting to the default
|
||||
;; attributes works.
|
||||
(custom-push-theme 'theme-face face 'user
|
||||
(if saved-face 'set 'reset)
|
||||
saved-face)
|
||||
(if (or saved-face (eq face 'default)) 'set 'reset)
|
||||
(or saved-face
|
||||
;; If this is t, then MODE is 'reset,
|
||||
;; and `custom-push-theme' ignores this argument.
|
||||
(not (eq face 'default))
|
||||
(get face 'custom-face-default-attrs)))
|
||||
(face-spec-set face saved-face 'saved-face)
|
||||
(when (and (not saved-face) (eq face 'default))
|
||||
;; Remove the fake user setting.
|
||||
(custom-push-theme 'theme-face face 'user 'reset))
|
||||
(put face 'face-comment comment)
|
||||
(put face 'customized-face-comment nil)
|
||||
(widget-value-set child saved-face)
|
||||
@ -4060,8 +4095,15 @@ redraw the widget immediately."
|
||||
(comment-widget (widget-get widget :comment-widget)))
|
||||
(unless value
|
||||
(user-error "No standard setting for this face"))
|
||||
(custom-push-theme 'theme-face symbol 'user 'reset)
|
||||
;; If erasing customizations for the default face, push a fake user setting,
|
||||
;; so that reverting to the default attributes works.
|
||||
(custom-push-theme 'theme-face symbol 'user
|
||||
(if (eq symbol 'default) 'set 'reset)
|
||||
(or (not (eq symbol 'default))
|
||||
(get symbol 'custom-face-default-attrs)))
|
||||
(face-spec-set symbol value 'reset)
|
||||
;; Remove the fake user setting.
|
||||
(custom-push-theme 'theme-face symbol 'user 'reset)
|
||||
(put symbol 'face-comment nil)
|
||||
(put symbol 'customized-face-comment nil)
|
||||
(if (and custom-reset-standard-faces-list
|
||||
|
Loading…
Reference in New Issue
Block a user