Закрепить буферы Emacs в окнах (для cscope)

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

Обычно у меня есть 2 окна в сплите (C-x 3): альтернативный текст http://bitthicket.com/files/emacs-2split.JPG

И я использую правое окно для буферов кода и левое окно для буфера поиска CScope. Когда вы выполняете поиск CScope и выбираете результат, он автоматически обновляет правое окно, чтобы показать буфер, на который ссылается результат. Это все хорошо, за исключением того, что из-за этого я теряю свое место в каком-то другом буфере, который я изучал. Иногда это не важно, потому что [C-s u] возвращает меня туда, где я был.

Однако было бы лучше иметь 3 разделенных окна, как это ([C-x 2] в левом окне): альтернативный текст http://bitthicket.com/files/emacs-3split.jpg

И пусть нижнее левое окно содержит буфер поиска CScope, а верхнее левое окно будет единственным буфером, который когда-либо обновляет CScope. Таким образом, я могу видеть свои поисковые запросы CScope и перемещаться по коду, не теряя при этом буфер, на котором я сосредоточен.

Кто-нибудь знает, как я могу это сделать?

Картинки исчезли, но вопрос по-прежнему актуален. Не могли бы вы обновить их или нарисовать то, что вы имели в виду, прямо в посте в ASCII? Я думаю, что вопрос это, который я только что задал, может быть похож на ваш.

kotchwane 03.06.2020 14:10
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
24
1
5 592
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Что ж, я решил не быть репутационной шлюхой и найти ответ сам. Я просмотрел cscope.el, как показано в wiki Emacs, а также xcscope.el, который поставляется с пакетом cscope RPM на RHEL.

Кажется, что ни один из них не дает возможности делать то, что я хочу. Вероятно, способ состоит в том, чтобы отредактировать ELisp, добавив переменную пакета, такую ​​как *browse-buffer* или что-то в этом роде, и просто инициализировать эту переменную, если она еще не инициализирована, когда пользователь впервые выполняет [C-c C-s g] или что-то еще, и всегда иметь результирующий код, показанный в *browse-buffer*. Тогда пользователь может поставить *browse-buffer* где угодно.

Ответ принят как подходящий

Поместите это в свой файл .emacs:

;; Toggle window dedication

(defun toggle-window-dedicated ()

"Toggle whether the current active window is dedicated or not"

(interactive)

(message 

 (if (let (window (get-buffer-window (current-buffer)))

       (set-window-dedicated-p window 

        (not (window-dedicated-p window))))

    "Window '%s' is dedicated"

    "Window '%s' is normal")

 (current-buffer)))

Затем привяжите его к какой-нибудь клавише - я использую клавишу Pause:

(global-set-key [pause] 'toggle-window-dedicated)

А затем используйте его, чтобы «выделить» окно, которое вы хотите заблокировать. то cscope может открывать файлы только из своего окна результатов в каком-то ДРУГОМ окне. Работает шарм. Я специально использую его для этой цели - всегда держать один исходный файл на экране, используя cscope во втором буфере / окне и смотреть на результаты cscope в третьем.

классно! Я знал, что это можно сделать ... Обычно у меня слишком мало времени, чтобы копаться в elisp api. Спасибо!

Ben Collins 16.09.2008 06:21

Превосходно! Я сталкиваюсь с той же ситуацией, но это происходит с активностью vc, она будет использовать мое драгоценное окно. Спасибо.

swdev 23.02.2011 07:48

Другие вопросы по теме