]> git.eshelyaron.com Git - emacs.git/commitdiff
Improve UI of customizing icons
authorDavid Ponce <da_vid@orange.fr>
Thu, 9 Jan 2025 10:01:40 +0000 (11:01 +0100)
committerEshel Yaron <me@eshelyaron.com>
Sat, 11 Jan 2025 11:18:23 +0000 (12:18 +0100)
* lisp/cus-edit.el (custom-icon--images-sub-type)
(custom-icon--emojis-sub-type, custom-icon--symbols-sub-type)
(custom-icon--texts-sub-type, custom-icon--type): New defconst's.
(custom-icon-value-create): Use them.  (Bug#73178)

(cherry picked from commit 6d02539dd48255e1b53f48dbdc8069b50be63767)

lisp/cus-edit.el

index 2346d1643f254f02806140367af4e9f0af37b672..8b9a101cecd3bdb9d1312ff8b9cb21fde9e7bcfe 100644 (file)
@@ -5602,6 +5602,53 @@ its standard value."
   "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)
@@ -5612,13 +5659,7 @@ Used in `custom-icon-action' to show a menu to the user.")
         (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))