【问题标题】:Emacs switch to the next window regardless of frameEmacs 切换到下一个窗口,不管框架
【发布时间】:2013-10-28 09:41:15
【问题描述】:

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

有谁知道如何解决这个问题?我应该使用另一个命令吗?是否有一些 elisp 魔法的 sn-p 可以轻松做到这一点?

【问题讨论】:

    标签: emacs elisp


    【解决方案1】:

    C-x oother-window。要转到另一个框架,请使用C-x 5 o,即other-frame

    【讨论】:

    • 谢谢,有没有办法在窗口中循环,而不管它们在哪个框架中?这就是我正在寻找的。不过 C-x 5 o 看起来很有用。
    • 您可以留在同一个窗口中并使用C-x b 使缓冲区循环。通过使用C-x 4 b,循环缓冲区将出现在“其他”缓冲区中。希望对您有所帮助。
    【解决方案2】:

    不确定这是不是你的意思,但如果你只想cycle through buffers in the buffer list,不管框架:

    Ctrl x

    Ctrl x

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

    【讨论】:

    • 这不是我要找的(见上面更正的问题)但这仍然非常有用,所以谢谢!
    【解决方案3】:

    这可以是第一个近似值。
    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 o 在其中一个缓冲区上根本不起作用。不过第一个近似值很好!
    • C-x o 不起作用 - 焦点会跳转到另一帧吗?对我来说,如果我让所有框架在 Windows 管理器中可见,它就可以工作。
    • 我使用的是 Ubuntu,所以这可能是问题所在。对我来说,它通过第一帧中的窗口,正确跳转到第二帧,并通过第二帧中的窗口,但如果在第二帧中找到,则在最后一个缓冲区上停止。似乎不知道如何回到原始帧中的第一个缓冲区。
    【解决方案4】:

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

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

    【讨论】:

      【解决方案5】:

      我使用 ace-jump-mode 的 2.0 版本。了解它的工作原理大约需要两分钟,并且从 2.0 版开始,它允许“跳转”到另一个帧。您可以从任何缓冲区/帧/窗口中跳转到您在屏幕上实际看到的任何字符,只需按三到四次按键即可。很难打败。

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

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

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

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

      【讨论】:

        【解决方案6】:

        来自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))
        

        【讨论】:

          【解决方案7】:

          你说“有没有办法在窗口中循环,不管它们在哪个框架中?这真的是我要找的吗?”

          是的,有,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] 用于此命令。)

          【讨论】:

            猜你喜欢
            • 2010-09-10
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2021-07-26
            相关资源
            最近更新 更多