2014-03-02 55 views
4

当我想自定义的行为,当我在Emacs分割窗口:控制Emacs的行为分割窗口

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

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

我最终做所有的下列分别:

  1. C-×3到水平分割。

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

  3. C-x C-b调用electric-buffer-list所以我可以选择我想查看的缓冲区。

好像我应该能够写一个elisp的功能,会做这一切时,我按C-×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时得到的所有缓冲区的正常列表。

+0

这里是一个类似的线程在那里我修改'拆分窗口below' - 你可以创建自己的函数,水平分割:http://stackoverflow.com/a/19300409/2112489你不必须使用'defalias' - 也就是说,您可以通过名称来调用您自己修改的函数。在你想要的窗口中,你可以使用'switch-to-buffer' - 在我们使用'select-window'的窗口之间移动。 。 ' – lawlist

+0

这些链接中的任何一个如何在分离窗口中显示标准缓冲区列表?如果您愿意,可以修改示例以显示不同类型的缓冲区列表。此链接是一个左或右拆分示例:http://stackoverflow.com/a/21544307/2112489此链接是一个拆分下面的示例:http://stackoverflow.com/a/21591259/2112489 – lawlist

回答

2

一些非常小的修改,你想出了这个功能会做你想要什么:

(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的函数(并不用于其他任何东西)。此功能的文档包含上面提到的缺少的信息。

1

如果你不介意自定义命令你想尝试以下功能

(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)) 

它们绑定到你喜欢的钥匙是什么。我宁愿通过重新定义/建议我没有写过的函数。