Emacs切换到下一个窗口,而不考虑框架。

6

我希望C-x o(下一窗口)命令不仅包括当前框架中的窗口,还要包括其他框架中的窗口。

有人知道如何实现这个功能吗?是否应该使用另一个命令?是否有一些elisp魔法小片段可以轻松完成此操作?

7个回答

4

C-x oother-window,用于在窗口之间切换。要跳转到另一个框架,请使用 C-x 5 o,它是other-frame


谢谢,有没有一种方法可以循环浏览窗口,而不管它们在哪个框架中?那真的是我正在寻找的。不过,C-x 5 o 看起来很有用。 - Moses
你可以使用 C-x b 在同一个窗口中循环缓冲区。通过使用 C-x 4 b,循环缓冲区将出现在“其他”缓冲区中。希望这有所帮助。 - Nicolas Dudebout

1

这非常接近我所寻找的内容,但缓冲区不循环,并且在其中一个缓冲区上根本无法使用C-x o。虽然如此,这是一个不错的第一次尝试! - Moses
C-x o不起作用 - 焦点是否跳转到另一个框架?对我来说,如果我在窗口管理器中使所有框架可见,则可以正常工作。 - slitvinov
我正在使用Ubuntu,所以这可能是个问题。对我来说,在第一帧中它穿过了窗户,正确地跳到了第二帧,并在第二帧中穿过了窗户,但然后停在了第二帧中找到的最后一个缓冲区。似乎不知道如何返回原始帧中的第一个缓冲区。 - Moses

1

来自 C-h f next-window:

(next-window &optional WINDOW MINIBUF ALL-FRAMES) ...

ALL-FRAMES为nil或省略时,表示考虑WINDOW所在框架上的所有窗口,以及由MINIBUF参数指定的迷你缓冲区窗口。如果迷你缓冲区计数,则还要考虑共享该迷你缓冲区的所有框架上的所有窗口。以下非nil值的ALL-FRAMES具有特殊含义:

  • t表示考虑所有现有框架上的所有窗口。

  • `visible'表示考虑所有可见框架上的所有窗口。

  • 0(数字零)表示考虑所有可见和图标化框架上的所有窗口。

  • 一个框架表示仅考虑该框架上的所有窗口。

其他任何值都表示仅考虑WINDOW所在框架上的所有窗口。

有点讽刺的是,other-window也支持这一点,因为它使用了next-window。不幸的是,我不知道如何交互式地传递非数字参数,但是一个简单的函数应该可以解决问题:

(defun my-other-window (count)
  (interactive "p")
  (other-window count t))

1

我使用的是2.0版本的ace-jump-mode。理解它的工作原理只需要大约两分钟,自从2.0版本以来,它允许“跳转”到另一个框架。您可以在三到四个按键中跳转到屏幕上实际可见的任何缓冲区/框架/窗口中的任何字符。这真的很难被超越。

无论如何,这是一个巨大的时间节省器,所以我建议您检查一下,因为它非常方便。

http://www.emacswiki.org/emacs/AceJump

而且还有一个两分钟的视频展示了它的实际操作:"Emacs Rocks! Episode 10: Jumping around"

http://www.youtube.com/watch?v=UZkpmegySnc


1

不确定这是否是您的意思,但如果您只想在缓冲区列表中循环浏览缓冲区, 而不考虑框架:

Ctrl x

Ctrl x

这些分别绑定到(next-buffer)和(previous-buffer)。


这不是我要找的(请参见上面纠正后的问题),但这仍然非常有用,谢谢! - Moses

1

您必须按下 C-x 5 o C-h 来查看有关处理框架的所有功能。

其中一些功能是 other-frame。


0

你说:"有没有一种方法可以循环浏览窗口,而不管它们在哪个框架中?这真的是我正在寻找的东西?"

是的,有了Icicles

你所请求的就是当你使用前缀参数时icicle-select-window命令所执行的操作。如果你想始终如此,你可以定义自己的命令来执行它而不需要前缀参数:

 (defun my-select-window ()
   "Select window by name.  Windows of all visible frames are candidates."
   (interactive)
   (let ((current-prefix-arg  1)) (icicle-select-window)))

系统会要求你输入窗口名称。但是如果你只想循环浏览窗口,不希望通过输入部分名称来缩小候选范围,那么只需使用 C-下箭头 即可获取所需的窗口。

(窗口名称是其显示缓冲区的名称,但需要添加后缀[NUMBER] ,以确保名称唯一。例如,如果有两个显示缓冲区*Help* 的窗口,则其中一个窗口将被命名为 *Help*[2] ,以在使用此命令时进行区分。)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接