【问题标题】:Control Emacs behavior when splitting windows拆分窗口时控制 Emacs 行为
【发布时间】:2014-03-02 20:19:21
【问题描述】:

我想自定义在 Emacs 中拆分窗口时的行为:

我总是拆分,因为我想与我当前正在编辑的缓冲区并排查看一个单独的缓冲区。

我使用electric-buffer-list(绑定到C-x C-b)来导航缓冲区。

我最终分别做以下所有事情:

  1. C-x 3 水平分割。

  2. C-x o 切换到另一个窗口。

  3. C-x C-b 调用electric-buffer-list,这样我就可以选择要查看的缓冲区。

似乎我应该能够编写一个 Elisp 函数,当我按下 C-x 3 时它会完成所有这些操作。

我发现 this post 描述了我想要的行为的焦点切换部分,但我不明白如何扩展该答案以实现我想要做的所有事情。


编辑:在查看了@lawlist 的帖子并调试了我的语法之后,我想我想做这样的事情:

(defun split-right-and-buffer-list ()
  (interactive)
  (split-window-horizontally)
  (other-window 0)
  (electric-buffer-list 0))

(global-set-key (kbd "C-x 3") 'split-right-and-buffer-list)

这可以满足我的所有需求,除了出现的缓冲区列表仅列出当前缓冲区,而不是当我从其键绑定调用 electric-buffer-list 时获得的所有缓冲区的正常列表。

【问题讨论】:

  • 这是一个类似的线程,我修改了split-window-below——你可以创建自己的水平分割函数:stackoverflow.com/a/19300409/2112489你不必使用defalias——也就是说,你可以通过名称调用您自己修改后的函数。在你想要的窗口中,你可以使用switch-to-buffer——在我们使用select-window . . .的窗口之间移动
  • 这些链接中的任何一个怎么样,它在拆分窗口中显示标准缓冲区列表 - 如果您愿意,可以修改示例以显示不同类型的缓冲区列表。此链接为左或右拆分示例:stackoverflow.com/a/21544307/2112489 此链接为以下拆分示例:stackoverflow.com/a/21591259/2112489

标签: emacs elisp


【解决方案1】:

通过一些非常小的修改,您想出的功能将满足您的需求:

(defun split-right-and-buffer-list ()
  (interactive)
  (split-window-horizontally)
  (other-window 1)
  (electric-buffer-list nil))

(global-set-key (kbd "C-x 3") 'split-right-and-buffer-list)
  1. 1 而不是 0 作为参数传递给 other-window 会导致 Emacs 选择由于调用 split-window-horizontally 而创建的新窗口。

  2. nil 而不是0 作为参数传递给electric-buffer-list 会导致Emacs 显示所有 缓冲区,而不仅仅是文件访问 缓冲区。

    这里可能会让您感到困惑的是,electric-buffer-list 的文档中没有提到这一点(其中不包含有关 ARG 所需的任何信息)。但是当您查看此命令的source code 时,您会注意到它只是将参数的值传递给一个名为list-buffers-noselect 的函数(并且不会将其用于其他任何事情)。此函数的文档包含上述缺失的信息。

【讨论】:

    【解决方案2】:

    如果您不介意使用自定义命令来执行您想要的操作,请尝试以下功能

    (require 'ido)
    
    (defun my-split-window-open-buffer-right (buffer)
      (interactive (list (ido-read-buffer "Please select a buffer: ")))
      (select-window (split-window-right))
      (switch-to-buffer buffer))
    
    (defun my-split-window-open-buffer-below (buffer)
      (interactive (list (ido-read-buffer "Please select a buffer: ")))
      (select-window (split-window-below))
      (switch-to-buffer buffer))
    

    将它们绑定到您喜欢的键上。我更喜欢这个,而不是重新定义/建议我没有写过的函数。

    【讨论】:

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