Как я могу предотвратить изменение размеров моих окон в Emacs? - PullRequest
10 голосов
/ 17 января 2011

В моей рабочей среде на Лиспе фрейм разделен на два окна: первое для основного кодирования, второе для моего анализа слизи.

К сожалению, когда я допустил некоторые ошибки (потому что я все еще изучаю Lisp: P), отладчик слизи предупреждает меня, и при этом он отображается в нижнем окне, которое автоматически изменяется. Просто чтобы быть более точным:

ДО:

_______
|     |
|     |
_______
|_____|

ПОСЛЕ:

_______
|     | <- decreased in size!
_______
|_____| <- increased in size!

Как я могу предотвратить изменение размеров моих окон в Emacs? Я хочу, чтобы Emacs оставил размеры моего окна одинаковыми.

Как мне это сделать?

Спасибо! Bye!

Alfredo

Ответы [ 5 ]

8 голосов
/ 17 января 2011

Вы можете запомнить свою конфигурацию окна, используя команду M-x window-configuration-to-register (или C-x r w) в начале.

После того, как вы всегда сможете восстановить свои конфигурации, используя M-x Jump-to-Register (или C-x r j).

5 голосов
/ 18 января 2011

К сожалению, основная команда pop-to-buffer, которая используется почти каждой программой в emacs для переключения на буфер в другом окне, имеет описанный вами побочный эффект.

В дополнение ко всем остальным решениямдо сих пор существует режим победителя для отмены / восстановления любых изменений конфигурации окна в любой момент времени.

4 голосов
/ 17 января 2011

Если какой-то код, который вы вызываете, изменяет конфигурацию окна, вы можете заключить его в код (save-window-excursion BODY ...)

Если это отладчик, который изменяет конфигурацию - нажмите «q» истарая конфигурация будет восстановлена.

Если вы хотите, чтобы отладчик не изменял размер, попробуйте добавить обработчик режима отладчика, чтобы восстановить размер окна.

2 голосов
/ 12 июля 2012

winner-mode - спасатель, но для того, чтобы pop-to-buffer не изменил размер окна, сделайте

(setq even-window-heights nil)
1 голос
/ 01 июля 2015

Чтобы отключить сжатие окна, 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.

...