![emacs 专用完成窗口](https://linux22.com/image/23344/emacs%20%E4%B8%93%E7%94%A8%E5%AE%8C%E6%88%90%E7%AA%97%E5%8F%A3.png)
为了防止混淆,我只运行 emacs 的一个“窗口”,因此我在 emacs 意义上使用 window 。我正在寻找一个窗口分割,假设宽度为 70,当我启动 emacs 时,它包含新分割上的完成缓冲区。我想我需要有一个专门的窗口。我基本上想要实现的目标如下。
+-----+---+
| | A |
| |---|
| C | B |
+-----+---+
C = 我通常工作的地方。 A = 完成缓冲区(我也希望有消息以及 emacs 向我抛出的所有内容) B = 一个 shell。
为此,我现在在 .emacs 中添加了以下内容:
(split-window-horizontally) ;; want two windows at startup
(other-window 1) ;; move to other window
(shell) ;; start a shell
(other-window 1) ;; move back to first window
我想再次垂直分割右侧窗口,并且希望能够指定每个窗口的尺寸。另外,我希望完成、消息、...窗口 (A) 的专用属性为 true,以便 emacs 不会替换它。
我听说很多人都使用这个设置,但我似乎无法在任何地方找到它。
答案1
最终我能够通过 .emacs 文件中的以下内容获得我想要的内容。
(progn
(interactive)
(split-window-horizontally)
(other-window 1)
(split-window)
(other-window 1)
(eshell)
(other-window 1)) ;; finally change back to scratch window
;; open temporary buffers in a dedicated window split
(setq special-display-regexps
'("^\\*Completions\\*$"
"^\\*Help\\*$"
"^\\*grep\\*$"
"^\\*Apropos\\*$"
"^\\*elisp macroexpansion\\*$"
"^\\*local variables\\*$"
"^\\*Compile-Log\\*$"
"^\\*Quail Completions\\*$"
"^\\*Occur\\*$"
"^\\*frequencies\\*$"
"^\\*compilation\\*$"
"^\\*Locate\\*$"
"^\\*Colors\\*$"
"^\\*tumme-display-image\\*$"
"^\\*SLIME Description\\*$"
"^\\*.* output\\*$" ; tex compilation buffer
"^\\*TeX Help\\*$"
"^\\*Shell Command Output\\*$"
"^\\*Async Shell Command\\*$"
"^\\*Backtrace\\*$"))
(setq grb-temporary-window (nth 1 (window-list)))
(defun grb-special-display (buffer &optional data)
(let ((window grb-temporary-window))
(with-selected-window window
(switch-to-buffer buffer)
window)))
(setq special-display-function #'grb-special-display)
我在 github 上的这个 .emacs 文件中找到了我需要的东西。
https://github.com/garybernhardt/dotfiles/blob/master/.emacs