Как я могу предотвратить изменение размера окна Emacs?

my Lisp -working-environment имеет фрейм, разбитый на два окна, первый для основного кодирования, последний для моей оценки слизи.

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

ДО:

_______
|     |
|     |
_______
|_____|

ПОСЛЕ:

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

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

Как я могу это сделать?

Спасибо! Bye!

Alfredo

Ответ 1

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

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

Ответ 2

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

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

Ответ 3

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

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

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

Ответ 4

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

(setq even-window-heights nil)

Ответ 5

Чтобы отключить сокращение окна, shrink-window-if-larger-than-buffer должен быть не-op. Вы могли бы просто переопределить его, чтобы ничего не делать, но если вы посоветуете это, вы получите возможность включать и отключать его по своему усмотрению.

;; 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.