Emacs 无论框架如何都会切换到下一个窗口

问题描述 投票:0回答:8

我希望 C-x o 命令(下一个窗口)包含其他帧中的窗口以及当前帧中的窗口。

有人知道如何实现这一点吗?我应该使用另一个命令吗?有没有一些 elisp 魔法片段可以轻松做到这一点?

emacs elisp
8个回答
4
投票

C-x o
other-window
。要转到其他帧,请使用
C-x 5 o
,即
other-frame


1
投票

不确定这是否是您的意思,但如果您只想循环缓冲区列表中的缓冲区,而不管帧如何:

Ctrl x

Ctrl x

它们分别绑定到(下一个缓冲区)和(上一个缓冲区)。


1
投票

这可以是第一个近似值。
http://www.gnu.org/software/emacs/manual/html_node/elisp/Cyclic-Window-Ordering.html
http://www.gnu.org/software/emacs/manual/html_node/elisp/Frames.html

other-window
有一个参数来控制它如何处理帧。

(global-set-key (kbd "C-x o")  (lambda ()
                 (interactive)
                 (other-window 1 t)
         (let ((nframe (window-frame (selected-window))))
           (select-frame-set-input-focus nframe)
           (make-frame-visible nframe))))

1
投票

您必须按 C-x 5 o C-h 才能查看有关使用框架的所有功能。

其中一些功能是其他框架的。


1
投票

我使用2.0版本的ace-jump-mode。 大约需要两分钟才能理解它是如何工作的,从 2.0 版本开始,它允许“跳转”到另一个框架。 您可以通过三到四次按键从任何缓冲区/帧/窗口跳转到您在屏幕上实际看到的任何字符。 这是很难被击败的。

无论如何,这可以节省大量时间,所以我建议您检查一下,因为它真的很方便。

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

还有 “Emacs Rocks!第 10 集:跳来跳去” 两分钟的截屏视频展示了它的实际效果:

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


1
投票

来自

C-h f next-window

(下一个窗口和可选的 WINDOW MINIBUF 全框)...

ALL-FRAMES nil 或省略意味着考虑 WINDOW 上的所有窗口 帧,加上迷你缓冲区窗口(如果由 MINIBUF 指定) 争论。 如果迷你缓冲区很重要,请考虑所有窗口 也共享该迷你缓冲区的帧。 以下非零值 ALL-FRAMES 有特殊含义:

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

  • `可见'意味着考虑所有可见框架上的所有窗口。

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

  • 框架意味着仅考虑该框架上的所有窗口。

任何其他方式都意味着考虑 WINDOW 框架上的所有窗口,而不是 其他。

有点讽刺的是,

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

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

0
投票

你说“有没有一种方法可以循环浏览窗口,无论它们位于什么框架中?这确实是我正在寻找的?”

是的,有,有冰柱

您请求的是当您使用前缀arg时命令

icicle-select-window
执行的操作。 如果您始终希望这种行为,您可以定义自己的命令来执行此操作,无需前缀 arg:

 (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-down
即可获得您想要的窗口。

(A 窗口名称 是其显示缓冲区的名称,但后缀为

[NUMBER]
需要使名称独一无二。 例如,如果您有 两个窗口显示缓冲区
*Help*
,其中一个窗口将被调用
*Help*[2]
与此命令一起使用。)


0
投票

现在,您可以使用一个不同的命令来完全满足您的需求:

(global-set-key (kbd "C-x o") 'next-window-any-frame)
© www.soinside.com 2019 - 2024. All rights reserved.