Skip to content

Commit e2e26c4

Browse files
committed
feat: turtles-pop-to-buffer reuses any appropriate frame.
Before this change, turtles-pop-to-buffer-new-frame would always create a new frame. With this change, turtles-pop-to-buffer-new-frame looks for a frame on the same display and reuses that if possible.
1 parent cdf9f65 commit e2e26c4

File tree

2 files changed

+23
-9
lines changed

2 files changed

+23
-9
lines changed

test/turtles-test.el

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1065,11 +1065,11 @@
10651065
(should (equal (plist-get (cdr remote-buf) :name)
10661066
(plist-get (cdr win) :buffer))))))))
10671067

1068-
(ert-deftest turtles-pop-to-buffer-new-frame ()
1068+
(ert-deftest turtles-pop-to-buffer-other-frame ()
10691069
;; There isn't much that can be tested in batch mode; the action is
10701070
;; just not available.
10711071
(should (eq (alist-get 'window-system (frame-parameters))
1072-
(turtles-pop-to-buffer-new-frame 'check nil nil))))
1072+
(turtles-pop-to-buffer-other-frame 'check nil nil))))
10731073

10741074
(ert-deftest turtles--split-minibuffer-body ()
10751075
(should

turtles.el

Lines changed: 21 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@
4343
(defcustom turtles-pop-to-buffer-actions
4444
'(turtles-pop-to-buffer-copy
4545
turtles-pop-to-buffer-embedded
46-
turtles-pop-to-buffer-new-frame)
46+
turtles-pop-to-buffer-other-frame)
4747
"Set of possible handlers of instance buffers.
4848
4949
This are actions called by `turtles-pop-to-buffer' to display
@@ -1098,8 +1098,8 @@ This function is meant to be added to
10981098
(activate-mark)))))))))
10991099
(t (error "Unknown action %s" action))))
11001100

1101-
(defun turtles-pop-to-buffer-new-frame (action inst buffer-name &rest _ignored)
1102-
"Ask instance to open the buffer in a new frame.
1101+
(defun turtles-pop-to-buffer-other-frame (action inst buffer-name &rest _ignored)
1102+
"Open buffer on the instance, in another frame.
11031103
11041104
When called with ACTION set to \\='display, display BUFFER-NAME
11051105
in the Turtles instance INST, by asking the instance to create a
@@ -1110,15 +1110,29 @@ with action set to \\='check, answer nil when running in a
11101110
terminal.
11111111
11121112
This function is meant to be added to `turtles-pop-to-buffer-actions'"
1113-
(let ((params (frame-parameters)))
1113+
(let* ((params (frame-parameters))
1114+
(window-system (alist-get 'window-system params))
1115+
(display (alist-get 'display params)))
11141116
(cond
11151117
((eq 'check action) (alist-get 'window-system params))
11161118
((eq 'display action)
11171119
(turtles-instance-eval inst
11181120
`(let ((buf (get-buffer ,buffer-name)))
1119-
(select-frame (make-frame
1120-
'((window-system . ,(alist-get 'window-system params))
1121-
(display . ,(alist-get 'display params)))))
1121+
(select-frame
1122+
(or
1123+
(car (delq nil
1124+
(mapcar
1125+
(lambda (f)
1126+
(let ((params (frame-parameters f)))
1127+
(when (and (eq ',window-system
1128+
(alist-get 'window-system params))
1129+
(eq ',display
1130+
(alist-get 'display params)))
1131+
f)))
1132+
(frame-list))))
1133+
(make-frame
1134+
'((window-system . ,(alist-get 'window-system params))
1135+
(display . ,(alist-get 'display params))))))
11221136
(set-window-buffer (frame-root-window) buf)
11231137
(make-frame-visible))))
11241138
(t (error "Unknown action %s" action)))))

0 commit comments

Comments
 (0)