2011-01-17 3 views
10

В моей рабочей среде Lisp есть рама, разбитая на два окна, первая для основного кодирования, последняя для моей оценки слизи.Как я могу предотвратить изменение размера окна Emacs?

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

ДО:

_______ 
|  | 
|  | 
_______ 
|_____| 

ПОСЛЕ:

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

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

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

Спасибо! До свидания!

Alfredo

+5

Примечание: пользователь Emacs с твердым покрытием нарисовал бы с помощью 'M-x artist'. : P –

+1

Wow ... artist-mode ... Я понятия не имел, что такая аккуратная маленькая игрушка была встроена в Emacs ... Спасибо Трей! –

ответ

8

Вы можете вспомнить конфигурацию окна с помощью команды M-х оконного конфигурация-регистр (или С-х г ш) в начале.

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

+0

Спасибо всем, это ближе всего к тому, что я искал. Я не могу использовать режим победителя из-за конфликта с ECB (Emacs Code Browser), но окно-конфигурация к регистру получает грязную работу :) –

4

Если какой-то код вы вызываете изменения конфигурации окна вы можете обернуть код (за исключение окна-экскурсионное ТЕЛО ...)

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

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

5

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

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

+1

поддерживается для подсказки победителя, режим победителя является потрясающим. – monotux

2

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

(setq even-window-heights nil) 
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. это использует новый совет API, который был добавлен в Emacs 24.4. Старый совет API может делать то же самое с различным синтаксисом, если вам нужно использовать старую версию Emacs.

Смежные вопросы