Чтобы отключить сжатие окна, 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. здесь используется новый API рекомендаций, который был добавлен в Emacs 24.4. Старый совет API может делать то же самое с другим синтаксисом, если вам нужно использовать старую версию Emacs.