branch: externals/bufferlo
commit febbdfb9ee4a1ef5c87cd711a609256589c5e41c
Author: shipmints <shipmi...@gmail.com>
Commit: Flo Rommel <m...@florommel.de>

    Improve 'bufferlo-mode-line' and mode on/off behavior
    
    The mode line entry toggles correctly when bufferlo-mode is disabled
    programmatically or interactively.
    
    When we know startup has succeeded, skip parsing the command line and
    loading startup bookmarks.
    
    Implement a simple cache in 'bufferlo-mode-line-format' to avoid
    redundant lookups.
---
 bufferlo.el | 89 +++++++++++++++++++++++++++++++++++++------------------------
 1 file changed, 54 insertions(+), 35 deletions(-)

diff --git a/bufferlo.el b/bufferlo.el
index 0b662d34a7..32f281ecb6 100644
--- a/bufferlo.el
+++ b/bufferlo.el
@@ -720,6 +720,7 @@ No delay seems needed on macOS."
 
 (defvar bufferlo-mode) ; byte compiler
 (defvar bufferlo-mode-line-menu) ; byte compiler
+
 (defun bufferlo--mode-line-format-helper (abm str face)
   "Bufferlo mode-line helper to add face and mouse features.
 Where ABM is the current active bookmark, STR is the mode-line
@@ -745,6 +746,7 @@ string, FACE is the face for STR."
              map)))
 
 (defvar bufferlo--active-sets) ; byte compiler
+
 (defun bufferlo-mode-line-format ()
   "Bufferlo mode-line format to display the current active frame or tab 
bookmark."
   (when bufferlo-mode
@@ -753,37 +755,51 @@ string, FACE is the face for STR."
                            (tab-bar--current-tab-find
                             (frame-parameter nil 'tabs))))
            (set-active (> (length bufferlo--active-sets) 0))
-           (abm (concat (when fbm (format "%s (Frame)" fbm))
-                        (when (and fbm tbm) ", ")
-                        (when tbm (format "%s (Tab)" tbm)))))
-      (concat
-       (bufferlo--mode-line-format-helper abm bufferlo-mode-line-prefix
-                                          'bufferlo-mode-line-face)
-       (when (and bufferlo-mode-line-left-prefix (or set-active fbm tbm))
-         (bufferlo--mode-line-format-helper
-          abm bufferlo-mode-line-left-prefix 'bufferlo-mode-line-face))
-       (when set-active
-         (bufferlo--mode-line-format-helper
-          abm
-          (concat bufferlo-mode-line-set-active-prefix
-                  (when (or fbm tbm) bufferlo-mode-line-delimiter))
-          'bufferlo-mode-line-set-face))
-       (when fbm
-         (bufferlo--mode-line-format-helper
-          abm
-          (concat bufferlo-mode-line-frame-prefix
-                  fbm (when tbm bufferlo-mode-line-delimiter))
-          'bufferlo-mode-line-frame-bookmark-face))
-       (when tbm
-         (bufferlo--mode-line-format-helper
-          abm
-          (concat bufferlo-mode-line-tab-prefix tbm)
-          'bufferlo-mode-line-tab-bookmark-face))
-       (when (and bufferlo-mode-line-right-suffix (or set-active fbm tbm))
-         (bufferlo--mode-line-format-helper
-          abm bufferlo-mode-line-right-suffix 'bufferlo-mode-line-face))))))
-
-(defcustom bufferlo-mode-line '(:eval (bufferlo-mode-line-format))
+           (cache (window-parameter nil 'bufferlo--mode-line-cache)))
+      (if (equal (cdr cache) (list fbm tbm set-active))
+          (car cache)
+        (let* ((abm (concat (when fbm (format "%s (Frame)" fbm))
+                            (when (and fbm tbm) ", ")
+                            (when tbm (format "%s (Tab)" tbm))))
+               (str (concat
+                     (bufferlo--mode-line-format-helper
+                      abm bufferlo-mode-line-prefix 'bufferlo-mode-line-face)
+                     (when (and bufferlo-mode-line-left-prefix
+                                (or set-active fbm tbm))
+                       (bufferlo--mode-line-format-helper
+                        abm
+                        bufferlo-mode-line-left-prefix
+                        'bufferlo-mode-line-face))
+                     (when set-active
+                       (bufferlo--mode-line-format-helper
+                        abm
+                        (concat bufferlo-mode-line-set-active-prefix
+                                (when (or fbm tbm) 
bufferlo-mode-line-delimiter))
+                        'bufferlo-mode-line-set-face))
+                     (when fbm
+                       (bufferlo--mode-line-format-helper
+                        abm
+                        (concat bufferlo-mode-line-frame-prefix
+                                fbm
+                                (when tbm bufferlo-mode-line-delimiter))
+                        'bufferlo-mode-line-frame-bookmark-face))
+                     (when tbm
+                       (bufferlo--mode-line-format-helper
+                        abm
+                        (concat bufferlo-mode-line-tab-prefix tbm)
+                        'bufferlo-mode-line-tab-bookmark-face))
+                     (when (and bufferlo-mode-line-right-suffix
+                                (or set-active fbm tbm))
+                       (bufferlo--mode-line-format-helper
+                        abm
+                        bufferlo-mode-line-right-suffix
+                        'bufferlo-mode-line-face))))
+               (str (if (string-empty-p str) "" (concat " " str))))
+          (set-window-parameter nil 'bufferlo--mode-line-cache
+                                (list str fbm tbm set-active))
+          str)))))
+
+(defcustom bufferlo-mode-line '(bufferlo-mode (:eval 
(bufferlo-mode-line-format)))
   "Bufferlo mode line definition."
   :type 'sexp
   :risky t)
@@ -855,11 +871,13 @@ string, FACE is the face for STR."
   :global t
   :require 'bufferlo
   :init-value nil
+  :lighter nil
   :keymap bufferlo-mode-map
   (setq mode-line-misc-info (delete bufferlo-mode-line mode-line-misc-info))
   (if bufferlo-mode
       (progn
-        (bufferlo--parse-command-line) ; parse user-provided settings first
+        (unless after-init-time
+          (bufferlo--parse-command-line)) ; parse user-provided settings first
         ;; Prefer local buffers
         (when bufferlo-prefer-local-buffers
           (dolist (frame (frame-list))
@@ -902,9 +920,10 @@ string, FACE is the face for STR."
         (when (not (eq bufferlo-bookmarks-save-at-emacs-exit 'nosave))
           (add-hook 'kill-emacs-hook #'bufferlo--bookmarks-save-at-emacs-exit))
         ;; load bookmarks at startup option
-        (when (and (not bufferlo--command-line-noload)
-                   (not (eq bufferlo-bookmarks-load-at-emacs-startup 'noload)))
-          (add-hook 'window-setup-hook #'bufferlo--bookmarks-load-startup))
+        (unless after-init-time
+          (when (and (not bufferlo--command-line-noload)
+                     (not (eq bufferlo-bookmarks-load-at-emacs-startup 
'noload)))
+            (add-hook 'window-setup-hook #'bufferlo--bookmarks-load-startup)))
         ;; Save bookmark on close-tab and delete-frame
         (add-hook 'tab-bar-tab-pre-close-functions
                   #'bufferlo-bookmark--tab-save-on-close)

Reply via email to