如何使此Emacs帧保持其缓冲区而不调整大小?

如何使此Emacs帧保持其缓冲区而不调整大小?,emacs,Emacs,我的Emacs框架如下所示: +---------------------------+ | | | | | | | | B | | A | | | | | | | | | |----------

我的Emacs框架如下所示:

+---------------------------+
|             |             |
|             |             |
|             |      B      |
|      A      |             |
|             |             |
|             |             |
|             |-------------|
|             |      C      |
+---------------------------+
C
通常是带有某种长时间运行的进程的终端,如web服务器或守护进程。不幸的是,各种各样的事情都喜欢在该窗口中切换缓冲区,有时它会被调整大小。如何锁定窗口的缓冲区和高度
C

您可以使用来撤消对窗口大小的更改

您也可以。

一种可能性是使用
set-window-indicated-p
将窗口专用于其缓冲区。这不会阻止手动调整窗口的大小,只会防止它被
显示缓冲区
撞击。比如说,

(add-hook 'shell-mode-hook (lambda () (interactive) (set-window-dedicated-p (selected-window) 1))) (添加钩子的壳模式钩子 (lambda() (互动) (设置窗口-专用窗口-p(选定窗口)1)))
必要时更换
外壳模式挂钩。

如果您不想被窗口窃取和调整大小所困扰,请在.emacs中添加以下行,以获得一个最终解决方案,该解决方案即使对于gud这样的库,也可以在无法窃取您的窗口时尝试打开新框架。:

(有关以下建议的信息,请参见)

并将
弹出窗口
变量自定义为
nil

您还可以使用Windows专用功能来代替它。

此功能也可以正常工作(适用于emacs 24)


我在功能方面运气最好。谢谢请注意,
pop to buffer
的参数在Emacs 24中已更改,该建议会造成一些破坏。对于那些仍然无法阻止Emacs拆分或调整缓冲区大小的人来说,这可能会有所帮助。使用“t”而不是“1”更有效。如:(设置窗口-专用窗口-p(选定窗口)t)…请参阅:
(defadvice pop-to-buffer (before cancel-other-window first)
  (ad-set-arg 1 nil))

(ad-activate 'pop-to-buffer)

;; Toggle window dedication
(defun toggle-window-dedicated ()
  "Toggle whether the current active window is dedicated or not"
  (interactive)
  (message
   (if (let (window (get-buffer-window (current-buffer)))
         (set-window-dedicated-p window 
                                 (not (window-dedicated-p window))))
       "Window '%s' is dedicated"
     "Window '%s' is normal")
   (current-buffer)))

;; Press [pause] key in each window you want to "freeze"
(global-set-key [pause] 'toggle-window-dedicated)
(define-minor-mode sticky-buffer-mode
  "Make the current window always display this buffer."
  nil " sticky" nil
  (set-window-dedicated-p (selected-window) sticky-buffer-mode))