Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

change buffer in other frame, multiple monitors

33 views
Skip to first unread message

Sam Halliday

unread,
May 27, 2015, 10:16:27 AM5/27/15
to
Hi all,

I have a setup with multiple monitors and when using Emacs I have a frame in each monitor.

I recently asked a question on this list and the solution was to set

(setq-default display-buffer-reuse-frames t)

so that 'next-error would not popup a new window (when the window was already open in a new frame).

That worked great! I've recently been extending my use of basic emacs commands to include the commands under `C-x 5 ...` (i.e. the "do in the other frame" commands)

However, when I type `C-x 5 b` and select a buffer name, I am expecting the buffer to be shown in the other frame. But instead, the buffer is opened in a new frame.

It would appear that setting 'display-buffer-reuse-frames is not enough to force re-use of existing frames and this function is popping up a new one.

Is there something else I must do to re-use frames? I note that display-buffer-reuse-frames is deprecated, but I'm not entirely sure how to migrate to the new world.

Best regards,
Sam

Sam Halliday

unread,
May 28, 2015, 7:22:25 AM5/28/15
to
I've updated the below with the newer display-buffer-alist approach with

(setq display-buffer-alist
'((".*" display-buffer-reuse-window (reusable-frames . t))
(".*" display-buffer-pop-up-frame (inhibit-switch-frame . t))))

The reuse-window entry seems to reproduce the behaviour of the legacy setting I was using.

I have added a display-buffer-pop-up-frame entry as per the documentation for display-buffer but it seems to be ignored.

Is my syntax perhaps incorrect? Maybe there should only be one ".*"?

Sam Halliday

unread,
May 28, 2015, 10:02:45 AM5/28/15
to
I'm starting to think there must be a bug somewhere. Setting the explicit action is still causing `C-x 5 b` to open a new frame even if one is already open:

(setq display-buffer--other-frame-action
'((display-buffer-reuse-window display-buffer-pop-up-frame)
(reusable-frames . t) (inhibit-same-window . t)))

I'm on Debian Jessie but some mac users have said that the out-of-the-box behaviour is for `C-x 5 b` to reuse the other frame.

I'm stumped. Any help appreciated.

Sam Halliday

unread,
May 28, 2015, 10:16:42 AM5/28/15
to
I'm starting to think that `C-x 5` commands are not really intended to reuse the other frame (despite their name). From the docs http://www.gnu.org/software/emacs/manual/html_node/emacs/Creating-Frames.html

> If an existing visible or iconified ("minimized") frame already displays the requested buffer, that frame is raised and deiconified ("un-minimized"); otherwise, a new frame is created on the current display terminal.


e.g. starting emacs24 (debian jessie) with -Q and type

C-x 5 2 ;; new frame
C-x 5 b ;; *Messages*

a THIRD frame is opened. I had expected the other frame to be reused.


Is there any way to get the `C-x 5` commands to reuse the other frame instead of creating a new one or am I going to have to rewrite my own functions that first call `other-frame`?

Michael Heerdegen

unread,
May 28, 2015, 10:25:49 AM5/28/15
to help-gn...@gnu.org
Sam Halliday <sam.ha...@gmail.com> writes:

> (setq display-buffer--other-frame-action
> '((display-buffer-reuse-window display-buffer-pop-up-frame)
> (reusable-frames . t) (inhibit-same-window . t)))

That makes the thing reuse a frame only when there is a window already
displaying the buffer - see doc of `display-buffer-reuse-window'.

This is seemingly not what you want. What do you want instead: that a
random window in a random frame is selected and forced to display the
buffer?


Michael.


Sam Halliday

unread,
May 28, 2015, 10:26:13 AM5/28/15
to
Workaround incase anybody else comes across this

(defun switch-to-buffer-other-frame--no-really (buffer-or-name)
"Switch to buffer BUFFER-OR-NAME in the other frame."
(interactive
(list (read-buffer-to-switch "Switch to buffer in other frame: ")))
(other-frame 1)
(switch-to-buffer buffer-or-name nil t)
(other-frame -1))

(global-set-key (kbd "C-x 5 b") 'switch-to-buffer-other-frame--no-really)

Yuri Khan

unread,
May 28, 2015, 11:03:51 AM5/28/15
to Michael Heerdegen, help-gn...@gnu.org
On Thu, May 28, 2015 at 8:25 PM, Michael Heerdegen
<michael_...@web.de> wrote:

> What do you want instead: that a
> random window in a random frame is selected and forced to display the
> buffer?

I think the implicit assumption is that there exists a unique frame
other than the current one, and that it contains a single window.

I find myself in such a setup quite often, although my normal workflow
is then to switch to the other frame (using windmove + framemove) and
then select whatever buffer I need in that frame.

0 new messages