Subject: bug#73178: 31.0.50; [PATCH] Improve the widget to customize icon

From: Eli Zaretskii <[email-masked]>
Date: Thu, 09 Jan 2025 09:07:53 +0200

> Date: Wed, 8 Jan 2025 10:59:27 -0300
> Cc: Eli Zaretskii <[email-masked]>
> From: Mauro Aranda <[email-masked]>
> 
> David Ponce <[email-masked]> writes:
> 
>  > On 11/09/2024 5:19 PM, David Ponce wrote:
>  >> Attached the correct patch.
>  >> Sorry
>  > Should be the good one this time.
>  > Sorry again.
>  >
>  > diff --git a/lisp/cus-edit.el b/lisp/cus-edit.el
>  > index 3ab5f11532e..fd790b18630 100644
>  > --- a/lisp/cus-edit.el
>  > +++ b/lisp/cus-edit.el
>  > @@ -5525,6 +5525,53 @@ custom-icon-extended-menu
>  >    "A menu for `custom-icon' widgets.
>  >  Used in `custom-icon-action' to show a menu to the user.")
>  >
>  > +(defconst custom-icon--images-sub-type
>  > +  '(list :format "%{%t%}:\n%v\n"
>  > +         :tag "Images"
>  > +         (const  :tag "" image)
>  > +         (repeat :tag "Values"
>  > +                 (string :tag "Image filename"))
>  > +         (plist  :tag "Image attributes")))
>  > +
>  > +(defconst custom-icon--emojis-sub-type
>  > +  '(list :format "%{%t%}:\n%v\n"
>  > +         :tag "Colorful Emojis"
>  > +         (const  :tag "" emoji)
>  > +         (repeat :tag "Values"
>  > +                 (string :tag "Emoji text"))
>  > +         (plist  :tag "Emoji text properties")))
>  > +
>  > +(defconst custom-icon--symbols-sub-type
>  > +  '(list :format "%{%t%}:\n%v\n"
>  > +         :tag "Monochrome Symbols"
>  > +         (const  :tag "" symbol)
>  > +         (repeat :tag "Values"
>  > +                 (string :tag "Symbol text"))
>  > +         (plist  :tag "Symbol text properties")))
>  > +
>  > +(defconst custom-icon--texts-sub-type
>  > +  '(list :format "%{%t%}:\n%v\n"
>  > +         :tag "Texts Only"
>  > +         (const  :tag "" text)
>  > +         (repeat :tag "Values"
>  > +                 (string :tag "Text"))
>  > +         (plist  :tag "Text properties")))
>  > +
>  > +(defconst custom-icon--type
>  > +  `(repeat :format ,(concat "%{%t%}"
>  > +                            (propertize ":" 'display "")
>  > +                            "\n\n%v%i\n")
>  > +           :tag "Icon elements:
>  > +- Only the first occurrence of a same element counts.
>  > +- Missing elements will take their default value.
>  > +- At least one element should be provided with a valid value."
>  > +    (choice :void ,custom-icon--texts-sub-type
>  > +            :extra-offset -3
>  > +            ,custom-icon--images-sub-type
>  > +            ,custom-icon--emojis-sub-type
>  > +            ,custom-icon--symbols-sub-type
>  > +            ,custom-icon--texts-sub-type)))
>  > +
>  >  (defun custom-icon-value-create (widget)
>  >    "Here is where you edit the icon's specification."
>  >    (custom-load-widget widget)
>  > @@ -5535,13 +5582,7 @@ custom-icon-value-create
>  >  	 (form (widget-get widget :custom-form))
>  >  	 (symbol (widget-get widget :value))
>  >  	 (tag (widget-get widget :tag))
>  > -	 (type '(repeat
>  > -                 (list (choice (const :tag "Images" image)
>  > -                               (const :tag "Colorful Emojis" emoji)
>  > -                               (const :tag "Monochrome Symbols" symbol)
>  > -                               (const :tag "Text Only" text))
>  > -                       (repeat string)
>  > -                       plist)))
>  > +	 (type custom-icon--type)
>  >  	 (prefix (widget-get widget :custom-prefix))
>  >  	 (last (widget-get widget :custom-last))
>  >  	 (style (widget-get widget :custom-style))
> 
> I think this is an improvement.  Thanks David.

Thanks for the review.

I wanted to install this, but byte-compiler produces a warning:

    ELC      cus-edit.elc

  In toplevel form:
  cus-edit.el:5595:20: Warning: reference to free variable `custom-icon--texts-widget'

Is that a typo, and you actually meant custom-icon--texts-sub-type?

Also, could you please accompany the patch with the ChangeLog-style
commit log message (see CONTRIBUTE for the details)?  Otherwise, I
will have to write the log message manually when installing your
changes.

Thanks.