branch: externals/bufferlo
commit a6257e095cf82ca9cc8f34d121318b6ab2edcad8
Author: shipmints <shipmi...@gmail.com>
Commit: shipmints <shipmi...@gmail.com>

    Adjust one-shot idle timer and avoid prompting on bookmark auto saves
---
 bufferlo.el | 60 +++++++++++++++++++++++++++++++++++++++---------------------
 1 file changed, 39 insertions(+), 21 deletions(-)

diff --git a/bufferlo.el b/bufferlo.el
index c2521f5f46..0e8a6d664c 100644
--- a/bufferlo.el
+++ b/bufferlo.el
@@ -468,7 +468,9 @@ This is controlled by 
`bufferlo-bookmarks-auto-save-idle-interval'.")
   (bufferlo--bookmarks-auto-save-timer-maybe-cancel)
   (when (> bufferlo-bookmarks-auto-save-idle-interval 0)
     (setq bufferlo--bookmarks-auto-save-timer
-          (run-with-idle-timer bufferlo-bookmarks-auto-save-idle-interval nil 
#'bufferlo--bookmarks-save-timer-cb))))
+          (run-with-timer
+           bufferlo-bookmarks-auto-save-idle-interval
+           nil #'bufferlo--bookmarks-save-timer-cb))))
 
 (defcustom bufferlo-bookmarks-auto-save-idle-interval 0
   "Save bufferlo bookmarks when Emacs has been idle this many seconds.
@@ -1403,7 +1405,7 @@ If the buffer is already visible in a non-selected 
window, select it."
                     (generate-new-buffer-name 
bufferlo-local-scratch-buffer-name)))
       (with-current-buffer buffer
         (when (eq major-mode 'fundamental-mode)
-    (funcall (or bufferlo-local-scratch-buffer-initial-major-mode
+          (funcall (or bufferlo-local-scratch-buffer-initial-major-mode
                        initial-major-mode
                        #'ignore)))))
     buffer))
@@ -1477,7 +1479,7 @@ If the prefix argument is given, include all buffers."
                               (buffer-name b)))
                            (bufferlo-buffer-list))
                  (generate-new-buffer-name "*Local Buffer List*")))
-    (buffer (get-buffer-create name)))
+          (buffer (get-buffer-create name)))
      (with-current-buffer buffer
        (Buffer-menu-mode)
        (setq bufferlo--buffer-menu-this-frame (selected-frame))
@@ -2402,6 +2404,19 @@ This closes their associated bookmarks and kills their 
buffers."
       (tab-bar--current-tab-find)
     (assq 'current-tab (funcall tab-bar-tabs-function nil))))
 
+(defun bufferlo--bookmark-tab-save (name &optional no-overwrite no-message msg)
+  "Save the current tab as a bookmark.
+NAME is the bookmark's name. If NO-OVERWRITE is non-nil, record
+the new bookmark without throwing away the old one. NO-MESSAGE
+inhibits the save status message. If MSG is non-nil, it is added
+to the save message."
+  (bookmark-store name (bufferlo--bookmark-set-location 
(bufferlo--bookmark-tab-make)) no-overwrite)
+  (setf (alist-get 'bufferlo-bookmark-tab-name
+                   (cdr (bufferlo--current-tab)))
+        name)
+  (unless no-message
+    (message "Saved bufferlo tab bookmark: %s%s" name (if msg msg ""))))
+
 (defun bufferlo-bookmark-tab-save (name &optional no-overwrite no-message)
   "Save the current tab as a bookmark.
 NAME is the bookmark's name. If NO-OVERWRITE is non-nil, record
@@ -2473,12 +2488,7 @@ is not recommended."
              (set-frame-parameter nil 'bufferlo-bookmark-frame-name nil)
              (setq msg (concat msg "; cleared frame bookmark")))
             (_ ))))
-      (bookmark-store name (bufferlo--bookmark-set-location 
(bufferlo--bookmark-tab-make)) no-overwrite)
-      (setf (alist-get 'bufferlo-bookmark-tab-name
-                       (cdr (bufferlo--current-tab)))
-            name)
-      (unless no-message
-        (message "Saved bufferlo tab bookmark: %s%s" name (if msg msg ""))))))
+      (bufferlo--bookmark-tab-save name no-overwrite no-message msg))))
 
 (defun bufferlo-bookmark-tab-load (name)
   "Load a tab bookmark.
@@ -2507,7 +2517,7 @@ associated bookmark exists."
   (bufferlo--warn)
   (if-let (bm (alist-get 'bufferlo-bookmark-tab-name
                          (cdr (bufferlo--current-tab))))
-      (bufferlo-bookmark-tab-save bm)
+      (bufferlo--bookmark-tab-save bm)
     (call-interactively #'bufferlo-bookmark-tab-save)))
 
 (defun bufferlo-bookmark-tab-load-current ()
@@ -2542,6 +2552,17 @@ This reuses the current tab even if
     (when (equal bookmark-name (frame-parameter frame 
'bufferlo-bookmark-frame-name))
       (set-frame-parameter frame 'bufferlo-bookmark-frame-name nil))))
 
+(defun bufferlo--bookmark-frame-save (name &optional no-overwrite no-message 
msg)
+  "Save the current frame as a bookmark.
+NAME is the bookmark's name. If NO-OVERWRITE is non-nil, record
+the new bookmark without throwing away the old one. If NO-MESSAGE
+is non-nil, inhibit the save status message. If MSG is non-nil,
+it is added to the save message."
+  (bookmark-store name (bufferlo--bookmark-set-location 
(bufferlo--bookmark-frame-make)) no-overwrite)
+  (set-frame-parameter nil 'bufferlo-bookmark-frame-name name)
+  (unless no-message
+    (message "Saved bufferlo frame bookmark: %s%s" name (if msg msg ""))))
+
 (defun bufferlo-bookmark-frame-save (name &optional no-overwrite no-message)
   "Save the current frame as a bookmark.
 NAME is the bookmark's name. If NO-OVERWRITE is non-nil, record
@@ -2613,10 +2634,7 @@ but is not recommended."
                (bufferlo-clear-active-bookmarks (list (selected-frame))))
              (setq msg (concat msg "; cleared tab bookmarks")))
             ('allow))))
-      (bookmark-store name (bufferlo--bookmark-set-location 
(bufferlo--bookmark-frame-make)) no-overwrite)
-      (set-frame-parameter nil 'bufferlo-bookmark-frame-name name)
-      (unless no-message
-        (message "Saved bufferlo frame bookmark: %s%s" name (if msg msg 
""))))))
+      (bufferlo--bookmark-frame-save name no-overwrite no-message msg))))
 
 (defun bufferlo-bookmark-frame-load (name)
   "Load a frame bookmark.
@@ -2641,7 +2659,7 @@ associated bookmark exists."
   (interactive)
   (bufferlo--warn)
   (if-let (bm (frame-parameter nil 'bufferlo-bookmark-frame-name))
-      (bufferlo-bookmark-frame-save bm)
+      (bufferlo--bookmark-frame-save bm)
     (call-interactively #'bufferlo-bookmark-frame-save)))
 
 (defun bufferlo-bookmark-frame-load-current ()
@@ -2724,11 +2742,11 @@ Specify NO-MESSAGE to inhibit the bookmark save status 
message."
           (with-selected-frame abm-frame
             (cond
              ((eq abm-type 'fbm)
-              (bufferlo-bookmark-frame-save abm-name nil t))
+              (bufferlo--bookmark-frame-save abm-name nil t))
              ((eq abm-type 'tbm)
               (let ((orig-tab-number (1+ (tab-bar--current-tab-index))))
                 (tab-bar-select-tab (alist-get 'tab-number (cadr abm)))
-                (bufferlo-bookmark-tab-save abm-name nil t)
+                (bufferlo--bookmark-tab-save abm-name nil t)
                 (tab-bar-select-tab orig-tab-number))))
             (push abm-name bookmarks-saved)))))
     (cond
@@ -2748,9 +2766,9 @@ Specify NO-MESSAGE to inhibit the bookmark save status 
message."
   "Save active bufferlo bookmarks per an optional idle timer.
 `bufferlo-bookmarks-auto-save-idle-interval' is treated as a
 one-shot timer to prevent reentrancy."
-  (bufferlo-bookmarks-save)
-  ;; reschedule the save timer as soon as Emacs allows
-  (run-with-timer 0 nil #'bufferlo--bookmarks-auto-save-timer-maybe-start))
+  (when (current-idle-time)
+    (bufferlo-bookmarks-save))
+  (bufferlo--bookmarks-auto-save-timer-maybe-start))
 
 (defun bufferlo-bookmarks-save (&optional all)
   "Save active bufferlo bookmarks.
@@ -3072,7 +3090,7 @@ save a new bookmark."
       (bufferlo-bookmark-frame-save bm)
     (if-let (bm (alist-get 'bufferlo-bookmark-tab-name
                            (cdr (bufferlo--current-tab))))
-        (bufferlo-bookmark-tab-save bm)
+        (bufferlo--bookmark-tab-save bm)
       (message "No active bufferlo frame or tab bookmark to save."))))
 
 (defun bufferlo-bookmark-load-curr ()

Reply via email to