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