Emacs,启动时打开多个窗口

Emacs,启动时打开多个窗口

当我启动 emacs 时,我希望出现 4 个窗口,并且我希望每个窗口内都出现一个缓冲区,如我在 .emacs 文件中指定的那样。也许在左上角的窗口中会出现 emacs web 浏览器 w3m,在右上角的窗口中会出现 python 解释器,在左下角的窗口中会出现上次使用的窗口,而在右下角的窗口中会出现一个空白缓冲区。

  1. 我如何在 elisp 中为我的 .emacs 文件编写此功能?
  2. 您从哪里找到这些信息来回答这个问题?您是否使用了 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
}

相关内容