当我启动 emacs 时,我希望出现 4 个窗口,并且我希望每个窗口内都出现一个缓冲区,如我在 .emacs 文件中指定的那样。也许在左上角的窗口中会出现 emacs web 浏览器 w3m,在右上角的窗口中会出现 python 解释器,在左下角的窗口中会出现上次使用的窗口,而在右下角的窗口中会出现一个空白缓冲区。
- 我如何在 elisp 中为我的 .emacs 文件编写此功能?
- 您从哪里找到这些信息来回答这个问题?您是否使用了 emacs 帮助页面?
非常感谢所有帮助!
答案1
您要求的功能是 Emacs 用户的共同愿望。好消息是,有许多现有的软件包可以满足您的需求。我最喜欢的是 workgroups.el。它非常强大。您可以使用 ELPA 安装它;这是 GitHub 存储库,带有出色的自述文件。整个软件包的文档异常丰富。
https://github.com/tlh/workgroups.el
即使您想自己学习如何编写窗口和缓冲区操作,我认为通过研究现有的包,您可以学得更快、更好。
答案2
致谢
我根据在以下页面中找到的内容拼凑了一个解决方案:
笔记
您没有指定您使用的操作系统。我假设它是 *nix 的某种版本。如果我错了,请纠正我。如果您使用的是 Windows,您仍然可以使用
.emacs
我建议的调整,但不能使用解决方法(见下文)。我的解决方案加载时会
emacs
打开 4 个窗口,w3m
左上角显示 google,右上角显示 python shell,左下角显示最后打开的文件,scratch
右下角显示空缓冲区。如果您emacs
不使用参数启动,此方法可以正常工作,但如果您直接从命令行打开文件,则会破坏布局:emacs foo.txt
因此,我还建议一种解决方法,仅在未给出文件名时才加载布局。如果你总是想加载 4 个窗口布局,只需直接添加下面的 lisp 行,
~/.emacs
而不是创建新文件。如果您决定将这些行直接添加到文件中
~/.emacs
,请小心使用以下命令:;; Set the max number of recent files kept (custom-set-variables '(recentf-max-saved-items 10) '(inhibit-startup-screen t))
custom-set-variables
一个文件中只能有一个部分.emacs
,因此不需要将这些行添加到文件中,而是找到现有custom-set-variables
部分并添加变量:'(recentf-max-saved-items 10)
回答
$HOME
在您的文件中创建一个.my_emacs_layout
包含以下行的文件(或将它们添加到您的~/.emacs
文件中,请参阅上面的注释):
;; Activate recentf mode to get the list of
;; recent files
(recentf-mode 1)
;; Load the w3m browser, change this to the location of your `w3m` install.
;; You should be able to copy the relevant lines from your `~/.emacs`.
(add-to-list 'load-path "~/.emacs-lisp/emacs-w3m")
(require 'w3m-load)
;; Set the max number of recent files kept
(custom-set-variables
'(recentf-max-saved-items 10)
'(inhibit-startup-screen t))
;; Set up initial window layout.
(split-window-horizontally)
;; Open w3m in the main window, this
;; will be the top left
(w3m-goto-url "www.superuser.com")
;; Split the left window vertically
(split-window-vertically)
;; switch to the bottom left window
(other-window 1)
;; and load the most recent file
(recentf-open-most-recent-file 1)
;; I am sure there is a better way of doing this
;; but for some reason opening the python shell screws
;; around with the window focus and this ugly hack is
;; the best I could come up with.
(other-window 1)
(split-window-vertically)
(other-window 1)
(other-window 1)
(other-window 1)
;; open the python shell in what will be
;; the top right window
(py-shell)
就这样,你现在可以emacs
通过启动来加载你的新布局
emacs -l ~/.my_emacs_layout
解决方法
如果您想emacs
在明确打开文件时加载正常会话,并在简单运行时加载 4 个窗口布局emacs
,请将以下行添加到 shell 的配置文件中(~/.bashrc
如果您使用的是 bash):
function emacs(){
if [ $# -eq 0 ]
then
/usr/bin/emacs -l ~/.my_emacs_layout
else
/usr/bin/emacs "$@"
fi
}