emacs-elpa-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[elpa] externals/nano-modeline 961065fe66 16/26: Added possibility to ha


From: ELPA Syncer
Subject: [elpa] externals/nano-modeline 961065fe66 16/26: Added possibility to have icon in buttons
Date: Fri, 2 Jun 2023 03:59:07 -0400 (EDT)

branch: externals/nano-modeline
commit 961065fe66f3d4fc49fe5a02cee332240517f03c
Author: Nicolas P. Rougier <Nicolas.Rougier@inria.fr>
Commit: Nicolas P. Rougier <Nicolas.Rougier@inria.fr>

    Added possibility to have icon in buttons
---
 nano-modeline.el | 55 +++++++++++++++++++++++++++++++++++++++++--------------
 1 file changed, 41 insertions(+), 14 deletions(-)

diff --git a/nano-modeline.el b/nano-modeline.el
index 8eacd849ef..229c7ea5e2 100644
--- a/nano-modeline.el
+++ b/nano-modeline.el
@@ -295,23 +295,48 @@ using the given FACE-PREFIX as the default."
                         :foreground ,foreground
                         :background ,background))))
 
+(defvar nano-modeline--cached-svg-buttons nil
+  "List of cached SVG buttons indexed with (label . face)")
+(setq nano-modeline--cached-svg-buttons nil)
+
 (defun nano-modeline--make-svg-button (label face)
   "Make a svg button from LABEL and FACE"
-
+    
   (require 'svg-lib)
-  (let ((foreground (face-foreground face nil 'default))
-        (background (face-background face nil 'default))
-        (weight (face-attribute face ':weight nil 'default))
-        (stroke (nano-modeline--stroke-width face))
-        (family (face-attribute face ':family nil 'default)))
-    (propertize (concat label " ")
-                'display (svg-lib-tag label nil :foreground foreground
-                                                :background background
-                                                :font-weight weight
-                                                :font-family family
-                                                :stroke stroke
-                                                :padding 1
-                                                :margin 0))))
+  (let* ((key (cons label face))
+         (cached (assoc key nano-modeline--cached-svg-buttons))
+         (foreground (face-foreground face nil 'default))
+         (background (face-background face nil 'default))
+         (weight (face-attribute face ':weight nil 'default))
+         (stroke (nano-modeline--stroke-width face))
+         (family (face-attribute face ':family nil 'default))
+         (button (cond (cached (cdr cached))
+                       ((string-match "\\([a-zA-Z0-9-]+\\):\\([a-zA-Z0-9]+\\)" 
label)
+                        (propertize "   "
+                                   'display (svg-lib-icon (match-string 1 
label) nil
+                                                          :foreground 
foreground
+                                                          :background 
background
+                                                          :font-weight weight
+                                                          :font-family family
+                                                          :stroke stroke
+                                                          :height 1.
+                                                          :padding 1
+                                                          :margin 0
+                                                          :collection 
(match-string 2 label))))
+                       (t
+                        (propertize (concat label " ")
+                                    'display (svg-lib-tag label nil
+                                                          :foreground 
foreground
+                                                          :background 
background
+                                                          :font-weight weight
+                                                          :font-family family
+                                                          :stroke stroke
+                                                          :padding 1
+                                                          :margin 0))))))
+    (unless cached
+      (add-to-list 'nano-modeline--cached-svg-buttons (cons key button)))
+    button))
+
 
 (defun nano-modeline--make-button (button &optional use-svg)
   "Make a button from a BUTTON decription. When USE-SVG is t and
@@ -368,6 +393,8 @@ other button states."
   "Install a header line made of LEFT and RIGHT parts. Line can be
 made DEFAULT."
 
+  (require 'tooltip)
+  
   (if default
       (setq-default header-line-format (nano-modeline--make left right 
'header))
     (setq-local header-line-format (nano-modeline--make left right 'header)))



reply via email to

[Prev in Thread] Current Thread [Next in Thread]