【发布时间】:2013-10-28 09:41:15
【问题描述】:
我希望 C-x o 命令(下一个窗口)包括其他框架中的窗口以及当前框架中的窗口。
有谁知道如何解决这个问题?我应该使用另一个命令吗?是否有一些 elisp 魔法的 sn-p 可以轻松做到这一点?
【问题讨论】:
我希望 C-x o 命令(下一个窗口)包括其他框架中的窗口以及当前框架中的窗口。
有谁知道如何解决这个问题?我应该使用另一个命令吗?是否有一些 elisp 魔法的 sn-p 可以轻松做到这一点?
【问题讨论】:
C-x o 是 other-window。要转到另一个框架,请使用C-x 5 o,即other-frame。
【讨论】:
C-x b 使缓冲区循环。通过使用C-x 4 b,循环缓冲区将出现在“其他”缓冲区中。希望对您有所帮助。
不确定这是不是你的意思,但如果你只想cycle through buffers in the buffer list,不管框架:
Ctrl x→
Ctrl x←
它们分别绑定到(下一个缓冲区)和(上一个缓冲区)。
【讨论】:
这可以是第一个近似值。
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))))
【讨论】:
您必须按 C-x 5 o C-h 才能查看有关使用框架的所有功能。
其中一些功能是其他框架。
【讨论】:
我使用 ace-jump-mode 的 2.0 版本。了解它的工作原理大约需要两分钟,并且从 2.0 版开始,它允许“跳转”到另一个帧。您可以从任何缓冲区/帧/窗口中跳转到您在屏幕上实际看到的任何字符,只需按三到四次按键即可。很难打败。
无论如何,它可以节省大量时间,所以我建议您检查一下,因为它真的很方便。
http://www.emacswiki.org/emacs/AceJump
“Emacs Rocks!第 10 集:跳跃”两分钟的截屏视频展示了它的实际效果:
【讨论】:
来自C-h f next-window:
(next-window &optional WINDOW MINIBUF ALL-FRAMES) ...
ALL-FRAMES nil 或省略表示考虑 WINDOW 上的所有窗口 帧,加上 minibuffer 窗口(如果由 MINIBUF 指定) 争论。如果 minibuffer 很重要,请考虑所有窗口 也共享该迷你缓冲区的帧。以下非零值 ALL-FRAMES 有特殊含义:
t 表示考虑所有现有框架上的所有窗口。
`visible' 表示考虑所有可见框架上的所有窗口。
0(数字零)表示考虑所有可见和图标化框架上的所有窗口。
一个框架意味着只考虑该框架上的所有窗口。
任何其他意味着考虑WINDOW框架上的所有窗口并且没有 其他人。
有点讽刺的是,other-window 也支持这一点,因为它使用了next-window。不幸的是,我不知道以交互方式传递非数字参数的方法,但一个简单的函数应该可以解决问题:
(defun my-other-window (count)
(interactive "p")
(other-window count t))
【讨论】:
你说“有没有办法在窗口中循环,不管它们在哪个框架中?这真的是我要找的吗?”
是的,有,Icicles。
您要求的是当您使用前缀 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 window name 是其显示缓冲区的名称,但后缀为
[NUMBER] 需要,以使名称唯一。例如,如果您有
两个窗口显示缓冲区*Help*,其中一个窗口将被调用
*Help*[2] 用于此命令。)
【讨论】: