我的Lisp工作环境将框架拆分为两个窗口,前者用于主编码,后者用于我的粘贴评估。
不幸的是,当我犯了一些错误(因为我还在学习Lisp:P)时,slime调试器警告我,并且这样做会显示在自动调整大小的底部窗口中。 只是为了更明确:
在:
_______
| |
| |
_______
|_____|
在:
_______
| | <- decreased in size!
_______
|_____| <- increased in size!
如何阻止Emacs调整窗口大小?我希望Emacs让我的窗口尺寸保持不变。
我该如何实现?
谢谢!再见!
阿尔弗雷
答案 0 :(得分:8)
您可以在开头使用命令M-x window-configuration-to-register(或C-x r w)记住您的窗口配置。
您可以随时使用M-x跳转到寄存器(或C-x r j)恢复配置。
答案 1 :(得分:5)
不幸的是,主要命令pop-to-buffer
几乎被emacs中的每个程序用来切换到不同窗口中的缓冲区,它具有你所描述的副作用。
到目前为止,除了所有其他解决方案之外,还有winner mode可以随时撤消/重做窗口配置中的任何更改。
答案 2 :(得分:4)
如果您调用的某些代码更改了窗口配置,则可以 用(save-window-excursion BODY ...)
包装你的代码如果是更改配置的调试器 - 点击“q”,将重新保留旧配置。
如果您希望调试器不更改大小,请尝试添加调试器模式挂钩以恢复窗口大小。
答案 3 :(得分:2)
winner-mode
是救星,但要让pop-to-buffer
不首先调整窗口大小,请执行
(setq even-window-heights nil)
答案 4 :(得分:1)
要禁用窗口缩小,shrink-window-if-larger-than-buffer
必须是无操作。你可以重新定义它什么都不做,但如果你建议它,你就可以随意启用和禁用它。
;; never shrink windows
(defvar allow-window-shrinking nil
"If non-nil, effectively disable shrinking windows by making `shrink-window-if-larger-than-buffer' a no-op.")
(advice-add 'shrink-window-if-larger-than-buffer
:before-while
(lambda (&rest args)
"Do nothing if `allow-window-shrinking' is nil."
allow-window-shrinking))
您可以建议其他致电shrink-window-if-larger-than-buffer
以启用或禁用收缩的功能:
(advice-add 'some-function-that-resizes-windows
:around
(lambda (orig &rest args)
"enable shrinkage"
(let ((allow-window-shrinking t))
(apply orig args))))
我有一段旧的代码,基本上就是上面的内容,并且由于某些被遗忘的原因我ignore-errors
缠绕(apply orig args)
,但它可能并非普遍需要。
N.B。这使用了在Emacs 24.4中添加的新建议API。如果您需要使用旧的Emacs版本,旧的建议API可以使用不同的语法执行相同的操作。
答案 5 :(得分:0)
通过配置文件(〜/ .emacs等)将'frame-inhibit-implied-resize'变量设置为'true'[1]:
(custom-set-variables'(frame-inhibit-implied-resize t))
或通过GUI使用:
选项>自定义Emacs>特定选项>'禁止框架暗示调整大小'>值菜单='始终'并应用并保存
对于后一种方法,“自定义选项:禁止显示隐式调整大小”缓冲区中的“状态”应指示“已保存并设置”,而不是“标准”。
来自[{1]:
“如果{Frame Inhibit Impliced Resize}为零,则设置特定框架的字体,菜单栏,工具栏,内部边框,边缘或滚动条可能会调整框架的大小,以保留其显示的列数或行数。如果此选项为t,则不会进行任何大小调整。(..)“