我正在尝试自定义我的Emacs init文件,以便Emacs打开时会分割两个窗口并且ansi-term在一侧打开,而我的init文件在另一侧打开。现在,如果Emacs已经打开,我编写的函数(switch-to-next-window
)可以正常工作。
我希望将光标切换到另一个窗口,然后在那里打开我的init文件。但是,如果我尝试在启动时运行它(实际上在启动之后,至少这是我的想法)我收到以下错误:window-live-p, nil
我认为没有"下一个窗口"。但我只是不知道在这里工作,因为我认为我只是在Emacs完全启动后才调用我的功能?如果有人能指出我在逻辑中出错的地方,那就太棒了!
(split-window-horizontally)
(setq initial-buffer-choice "*ansi-term*")
(defun switch-to-next-window ()
(interactive)
(let* ((next-window (get-buffer-window (other-buffer (current-buffer) t))))
(select-window next-window)))
(add-hook 'emacs-startup-hook (lambda ()(ansi-term "/bin/bash")))
(with-eval-after-load "~/.emacs.d/init.el"
(switch-to-next-window)
(setq initial-buffer-choice "~/.emacs.d/init.el"))
答案 0 :(得分:0)
在初始缓冲区打开后更改initial-buffer-choice
不会产生任何影响。
将所有内容放入emacs-startup-hook
并使用find-file-other-window
函数:
(add-hook 'emacs-startup-hook
(lambda ()
(ansi-term "/bin/bash")
(split-window-horizontally)
(find-file-other-window "~/.emacs.d/init.el")))