Я использую sr-speedbar с emacs, и я часто делю фрейм на 2-3 разных окна, и всякий раз, когда я нажимаю на файл в sr-speedbar, он всегда открывает новый буфер в самом нижнем окне. Я пытаюсь сохранить крайнее правое окно в качестве относительно небольшого анси-термина, и emacs настаивает на открытии новых буферов в небольшом окне, а не в гораздо большей области, которую я хотел бы использовать для редактирования буферов.
Есть ли способ, которым я могу настроить логику создания буфера, чтобы предпочесть более высокие окна над более низкими окнами?
Я уже пытался взять мое самое низкое окно и пометить его как защищенное, и это просто заставило emacs разделить его на две неоправданно маленькие части. Затем я попытался включить window-size-fixed и вместо того, чтобы emacs открывал буфер над этим окном, он просто выдал ошибку, что окно было слишком маленьким, чтобы его можно было разделить. Хорошо, я думаю, что это перестало забивать мое самое нижнее окно, но глупо, что оно мешает мне открывать новые буферы.
В идеале я хотел бы иметь возможность заставить emacs выбирать самое верхнее правое окно для отображения вновь созданных буферов, а не пытаться разбить самое нижнее правое окно.
Ответы:
Я предполагаю, что вы используете Emacs 24; Я не проверял этот ответ ни в одной более ранней версии и не знаю, когда в Emacs была добавлена концепция выделенных окон. Я видел упоминания о его использовании, которые датируются 2011 годом, поэтому я предполагаю, что Emacs 23 (по крайней мере) также имеет такую возможность.
Вы можете запретить Emacs открывать новый буфер в данном окне, выделив окно его буферу .
В простейшем случае вы можете сделать это, выбрав окно, которое вы хотите выделить, убедившись, что оно в данный момент отображает буфер, которому вы хотите выделить его, и затем выполнить
M-: (set-window-dedicated-p (selected-window) t)
. Это предотвратит Emacs, учитывая, что окно было изменено при принятии решения, в каком окне показывать буфер. Чтобы удалить посвящение, оцените то же выражение, заменив второй аргумент наnil
.Вы можете запретить Emacs пытаться разбить окно, в котором отображается заданный буфер, устанавливая для локальной переменной буфера window-size-fixed значение, отличное от nil.
В простейшем случае вы можете сделать это, выбрав окно и выполнив
M-: (setq window-size-fixed t)
. Чтобы зафиксировать только высоту или ширину окон, отображающих буфер, оцените то же выражение, передавая'height
или'width
в качестве второго аргумента; чтобы снять ограничение, замените второй аргумент наnil
.В общем случае я нашел вашу проблему достаточно интересной, чтобы найти решение , которое вы можете добавить в свой путь загрузки
(require)
, и использовать:источник
В последних выпусках Emacs
display-buffer-alist
была добавлена опция . Он обеспечивает детальный контроль над отображением в буфере, используемыми окнами и т. Д. Однако, поскольку он позволяет вам делать так много вещей, он также довольно сложен и труден для описания. Обратитесь к документации:C-h v display-buffer-alist
.источник