想在emacs启动时自动split一个窗口打开某个buffer,查询了很多资料都提到display-buffer-alist,于是做了一些尝试:
方法1:
(setq
display-buffer-alist
'(("*scratch*" display-buffer-in-side-window
(side . bottom) (slot . 1))))
方法2:
(progn
(display-buffer-in-side-window
"*scratch*" '((side . right) (slot . 0))))
其中方法一没有效果,打开emacs后仍然只有一个窗口,方法二可以实现同时打开一个右侧窗口,内容为scratch。请问为什么方法一没有用,是写的不对还是我对display-buffer-alist的理解有偏差?
看文档就明白了。简单地说display-buffer-alist
是控制你用display-buffer
的时候Emacs的行为的,setq它并不会执行任何操作。启动Emacs显示scratch可以用下面的代码。
(add-hook 'after-init-hook
(lambda ()
(display-buffer-below-selected "*scratch*" nil)))
是否说 display-buffer-alist 里定义的buffer,在主动调用它的时候会以定义的方式显示出来?刚刚我试了这样的配置:
(add-hook 'after-init-hook
(lambda ()
(org-agenda-list)))
但是打开emacs后在我主页面的上面分出了一个scratch,好奇怪agenda去哪里了,这个scratch又是哪来的,我写的语法有错吗?
(setq display-buffer-alist
'(("\\*e?shell\\*"
(display-buffer-in-side-window)
(window-height . 0.25)
(side . bottom)
(slot . -1))
("\\*\\(Backtrace\\|Warnings\\|Compile-Log\\|[Hh]elp\\|Messages\\)\\*"
(display-buffer-in-side-window)
(window-height . 0.25)
(side . bottom)
(slot . 0))
("\\*scratch\\*"
(display-buffer-in-side-window)
(window-width . 0.4)
(side . right)
(slot . 1))))
上面是我的 display-buffer-alist 的配置,eshell Help 这样的buffer都可以正常显示,而 scratch 和 Ord Agenda 却不可以按配置方式显示,这是为什么?