求助:关于display-buffer-aliast的疑问

想在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都可以正常显示,而 scratchOrd Agenda 却不可以按配置方式显示,这是为什么?