branch: externals/bufferlo
commit ee7db7237b152a06b01375bbf57b2965a354ba9f
Author: Stéphane Marks <[email protected]>
Commit: Flo Rommel <[email protected]>

    Refine frame handler logic for frame name and geometry
    
    Change logic to explicitly test for
    bufferlo--bookmark-set-loading and the explicit values of
    bufferlo-bookmark-frame-load-make-frame rather than assuming
    bufferlo-bookmark-frame-load-make-frame will always be nil while
    loading a set.
    
    Add bufferlo-bookmark-frame-load-make-frame
    'reuse-restore-geometry to accommodate the case where a user
    does not want a new frame but does want to restore a frame
    bookmark's geometry.
    
    Update documentation.
---
 README.org  |  6 ++++--
 bufferlo.el | 54 +++++++++++++++++++++++++++++++++++-------------------
 2 files changed, 39 insertions(+), 21 deletions(-)

diff --git a/README.org b/README.org
index 1b4ad59898..d519a406c7 100644
--- a/README.org
+++ b/README.org
@@ -556,9 +556,11 @@ bufferlo. Refer to each option's documentation for 
additional
 settings.
 
 #+begin_src emacs-lisp
-  ;; make a new frame to hold loaded frame bookmarks
+  ;; make a new frame, or reuse the current frame to hold loaded frame 
bookmarks
+  (setq bufferlo-bookmark-frame-load-make-frame nil) ; reuse the current frame
   (setq bufferlo-bookmark-frame-load-make-frame t) ; default is nil for 
backward compatibility
-  (setq bufferlo-bookmark-frame-load-make-frame 'restore-geometry)
+  (setq bufferlo-bookmark-frame-load-make-frame 'restore-geometry) ; make a 
new frame and restore geometry
+  (setq bufferlo-bookmark-frame-load-make-frame 'reuse-restore-geometry) ; 
reuse the current frame and restore geometry
 #+end_src
 #+begin_src emacs-lisp
   ;; policy when loading onto an already bookmarked frame
diff --git a/bufferlo.el b/bufferlo.el
index 7f8afd79e3..d1320226e0 100644
--- a/bufferlo.el
+++ b/bufferlo.el
@@ -192,13 +192,22 @@ This overrides buffers excluded by 
`bufferlo-bookmark-buffers-exclude-filters'."
   :type '(repeat regexp))
 
 (defcustom bufferlo-bookmark-frame-load-make-frame nil
-  "If non-nil, create a new frame to hold a loaded frame bookmark.
-Set to \\='restore-geometry to restore the frame geometry to that
-when it was last saved."
+  "Frame bookmark loading frame and geometry policy.
+If nil, reuse the existing frame.
+
+If non-nil, create a new frame to hold a loaded frame bookmark.
+
+If \\='restore-geometry, create a new frame and restore the frame
+geometry to that when it was last saved.
+
+If \\='reuse-restore-geometry, reuse the existing frame and restore the
+frame geometry to that when it was last saved."
   :package-version '(bufferlo . "1.1")
   :type '(radio (const :tag "Make a new frame" t)
                 (const :tag "Make a new frame and restore its geometry"
                        restore-geometry)
+                (const :tag "Reuse the current frame, and restore its geometry"
+                       reuse-restore-geometry)
                 (const :tag "Reuse the current frame" nil)))
 
 (defcustom bufferlo-delete-frame-kill-buffers-prompt nil
@@ -2981,7 +2990,12 @@ Returns nil on success, non-nil on abort."
     (let* ((bookmark-name (bookmark-name-from-full-record bookmark))
            (abm (assoc bookmark-name (bufferlo--active-bookmarks)))
            (fbm (frame-parameter nil 'bufferlo-bookmark-frame-name))
-           (new-frame-p (and bufferlo-bookmark-frame-load-make-frame ; nil if 
set loading
+           (new-frame-p (and (not bufferlo--bookmark-set-loading)
+                             (or
+                              (eq bufferlo-bookmark-frame-load-make-frame
+                                  'restore-geometry)
+                              (eq bufferlo-bookmark-frame-load-make-frame
+                                  t))
                              ;; User make-frame suppression
                              (not (consp current-prefix-arg))
                              ;; make-frame implied by functions like
@@ -3040,17 +3054,20 @@ Returns nil on success, non-nil on abort."
                                'restore-geometry))
                         (selected-frame))))
            (with-selected-frame frame
-             (when new-frame-p
-               ;; Restore name
-               (when bufferlo-bookmark-frame-persist-frame-name
-                 (when-let* ((frame-name (alist-get 'bufferlo--frame-name 
bookmark)))
-                   (set-frame-name frame-name)))
-               ;; Restore geometry
-               (when (and (display-graphic-p)
-                          (eq bufferlo-bookmark-frame-load-make-frame
-                              'restore-geometry))
-                 (when-let* ((fg (alist-get 'bufferlo--frame-geometry 
bookmark)))
-                   (funcall bufferlo-set-frame-geometry-function fg))))
+             ;; Restore name
+             (when bufferlo-bookmark-frame-persist-frame-name
+               (when-let* ((frame-name (alist-get 'bufferlo--frame-name 
bookmark)))
+                 (set-frame-name frame-name)))
+             ;; Restore geometry
+             (when (and (display-graphic-p)
+                        (or (and new-frame-p
+                                 (eq bufferlo-bookmark-frame-load-make-frame
+                                     'restore-geometry))
+                            (and (not new-frame-p)
+                                 (eq bufferlo-bookmark-frame-load-make-frame
+                                     'reuse-restore-geometry))))
+               (when-let* ((fg (alist-get 'bufferlo--frame-geometry bookmark)))
+                 (funcall bufferlo-set-frame-geometry-function fg)))
 
              ;; Clear existing tabs unless merging
              (unless (eq load-policy 'merge)
@@ -3106,10 +3123,10 @@ Returns nil on success, non-nil on abort."
             'bufferlo-bookmark-frame-handler-functions
             bookmark-name
             fbm
-            new-frame-p
+            (or new-frame-p bufferlo--bookmark-set-loading)
             frame)))
 
-        (unless (or new-frame-p pop-up-frames)
+        (unless (or new-frame-p bufferlo--bookmark-set-loading pop-up-frames)
           ;; Switch to the to-be-selected buffer in the current frame.
           ;; This is a workaround for bookmark-jump if called with display-func
           ;; set to something like pop-to-buffer-same-window (the default).
@@ -3489,8 +3506,7 @@ Returns nil on success, non-nil on abort."
               (if (and ignore-already-active
                        (member fbm-name already-abm-names))
                   (delete-frame)
-                (let ((bufferlo-bookmark-frame-load-make-frame nil)
-                      (bufferlo-bookmark-frame-load-policy
+                (let ((bufferlo-bookmark-frame-load-policy
                        'replace-frame-adopt-loaded-bookmark)
                       (bufferlo--bookmark-handler-no-message t))
                   ;; NOTE: bufferlo--bookmark-frame-handler disallows raise

Reply via email to