Subject: bug#44154: 26.3; Customize Face buffer: be able to click an inherited face, to customize it

From: Mauro Aranda <[email-masked]>
Date: Tue, 27 Oct 2020 12:32:58 -0300

Lars Ingebrigtsen <[email-masked]> writes:

> Drew Adams <[email-masked]> writes:
>
>> In Customize Face, if attribute Inherit is checked then be able to click
>> the name of an inherited face, to customize it, or at least to see its
>> attributes/definition.
>>
>> That is, have a link on it, which invokes either `customize-face' or
>> `describe-face' for it.
>
> Makes sense.  I've now added this to Emacs 28.

> +(defun cus--face-link (widget _format)
> +  (let ((face (intern (widget-get widget :value))))
> +    (widget-create-child-and-convert
> +     widget 'face-link
> +     :button-face 'link
> +     :tag "link"
> +     :action (lambda (&rest _x)
> +               (customize-face face)))))
> +

I think this could become confusing if one edits the value of the
inherited face, because the link always points to the widget's value at
creation time.

I suggest making the link always point to the widget's current value,
like in the attached patch.
From 29a38679b6b135b16ddb71128f1da5fcf3f40518 Mon Sep 17 00:00:00 2001
From: Mauro Aranda <[email-masked]>
Date: Tue, 27 Oct 2020 12:24:27 -0300
Subject: [PATCH] Small fix to the new link for inherited faces in Customize

* lisp/cus-edit.el (cus--face-link): Link to the current value of the
widget, rather than to the widget's value upon creation.  (Bug#44154)
---
 lisp/cus-edit.el | 13 ++++++-------
 1 file changed, 6 insertions(+), 7 deletions(-)

diff --git a/lisp/cus-edit.el b/lisp/cus-edit.el
index ed0117e067..769a69a50f 100644
--- a/lisp/cus-edit.el
+++ b/lisp/cus-edit.el
@@ -3740,13 +3740,12 @@ custom-face-value-create
 	  (custom-face-state-set widget))))))
 
 (defun cus--face-link (widget _format)
-  (let ((face (intern (widget-get widget :value))))
-    (widget-create-child-and-convert
-     widget 'face-link
-     :button-face 'link
-     :tag "link"
-     :action (lambda (&rest _x)
-               (customize-face face)))))
+  (widget-create-child-and-convert
+   widget 'face-link
+   :button-face 'link
+   :tag "link"
+   :action (lambda (&rest _x)
+             (customize-face (widget-value widget)))))
 
 (defvar custom-face-menu nil
   "If non-nil, an alist of actions for the `custom-face' widget.
-- 
2.29.0