LINUX.ORG.RU

[emacs 23] Ограничить количество окон


0

1

В emacs 23 раздражает одна вещь: он делит фрейм на слишком большое количество окон. В емаксе 22 пространство сплитилось максимум на 2 окна, при открытии нового буфера он перекрывал одно из открытых окон. А 23 емакс делит фрейм, пока число окон не достигнет 4.
Это усложняет переключение и мешает нормальному восприятию.
Уважаемые знатоки, как ограничить максимальное количество окон на экране?
PS: Уже спрашивал в General, но там никто не ответил.

Уже спрашивал в General, но там никто не ответил.

Да, чё-то по emacs'у тут как-то глухо.

В emacs 23 раздражает одна вещь: он делит фрейм на слишком большое количество окон. В емаксе 22 пространство сплитилось максимум на 2 окна

Небыло такого. У меня делит до какого-то ограничения(вроде 5 строк и 8 столбцов). Может для этого какие-нить переменные есть, незнаю.
Сейчас у меня emacs 24.0.50.1

Это усложняет переключение

На всякий случай, вдруг ты не знаешь:

(windmove-default-keybindings 'meta)
После этого между окнами можно переключаться стрелочками с зажатой клавишей alt.

Bad_ptr ★★★★★
()

split-height-threshold

split-width-threshold

Zubok ★★★★★
()

И еще переменная display-buffer-reuse-frames. Это тоже относится к display-buffer

Zubok ★★★★★
()
Ответ на: комментарий от Bad_ptr

>Небыло такого.
Возможно, это был не общий случай, но два примера могу привести точно:
1. Отлаживаемся в gud, фрейм поделен пополам между gdb и текущим кодом. Останавливаемся по брейкпоинту, если новый текущий код не был открыт в одном из буферов, в 22 он отобразится в окне с кодом. В 23 появится третье окно, а не перекроет старый буфер с кодом.
2. M-x grep. Опять-таки два окна, результаты грепа и первый файл с шаблоном. Открываем еще один файл из результатов. В 22 перекроется старый буфер, в 23 откроется еще одно окно.

(windmove-default-keybindings 'meta)

Спасибо, конкретно о таком способе не знал, руками забиндил альт-стрелки на переключение между окнами. Но не понадобилось, в основном было всего два окна, хватало ^x o.

j-a-t-a
() автор топика
Ответ на: комментарий от Zubok

>Если что, то смотри сопроводительную документацию на display-buffer.
Спасибо, буду разбираться с кодом. В конце концов, вызывает же он где-то очередной сплит и создание нового окна, буду ловить в edebug :)

j-a-t-a
() автор топика
Ответ на: комментарий от j-a-t-a

Да не, зачем edebug-то? display-buffer описан в документации и все переменные, которые с ней связаны, тоже. В Emacs Lisp Reference Manual. Проще всего набрать эти split-...-threshold в Google. Наверняка сразу найдешь, какие значения разумно туда прописать.

Zubok ★★★★★
()
Ответ на: комментарий от Zubok

Что-то я перемудрил и не понял, что можно этими переменными ограничить число разрезаний. Подкрутил обе переменные до полного размера фрейма — получается, что разрезать его можно только один раз.

(setq split-height-threshold (frame-parameter nil 'height))
(setq split-width-threshold (frame-parameter nil 'width))
По-хорошему сюда надо было бы добавить хук на изменение размера фрейма, но у меня emacs всегда полностью развернут на весь экран, так что хватит и одной установки при запуске. Теперь вроде работает! Огромное Вам спасибо!

j-a-t-a
() автор топика
Ответ на: комментарий от j-a-t-a

>По-хорошему сюда надо было бы добавить хук на изменение размера фрейма, но у меня emacs всегда полностью развернут на весь экран, так что хватит и одной установки при запуске.

Чтобы не отслеживать хуком изменение размеров фрейма, можно, наверное, переменной split-height-threshold присвоить сразу достаточно большое фиксированное число. Например, в Emacs 22 этак переменная по умолчанию имеет значение 500.

Zubok ★★★★★
()
Ответ на: комментарий от Zubok

Кстати, решение все-таки не идеальное. В конце концов мне надо было ограничение в два окна в фрейме. Задание этих переменных почему-то решило проблему в случае грепа, но проблема все равно вылезает в gud (фрейм поделен пополам, при попытке дополнить имя метода верхнее окно режется еще пополам, получается три окна).

Видимо split-window-... смотрит только на ограничивающую его переменную, на вторую не обращает внимания. Поэтому в моем случае фрейм можно порезать на четыре части — каждая переменная позволяет одно разрезание по своей оси.

А мне надо ограничиться именно двумя окнами в любой конфигурации разрезов. Видимо, придется вставлять свои проверки в split-window-... на предмет количества видимых окон.

j-a-t-a
() автор топика
Ответ на: комментарий от j-a-t-a

Откровенно говоря, у меня сейчас еще Emacs 22 и я еще не обновился до Emacs 23, поэтому не знаю, что там происходит. Но мне кажется, что просто поменяли умолчательное поведение display-buffer. Выкрутасы с каким-то отслеживанием количеством окон мне кажутся излишне надуманными в данном случае. Наверняка поведение кастомизируется стандартными переменными, там много чего кастомизируется, надо только найти чем.

Zubok ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.