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

StackOverflow https://stackoverflow.com/questions/43765

  •  09-06-2019
  •  | 
  •  

Вопрос

Что касается моей повседневной работы, я живу в 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 и перемещаться по коду, не теряя буфер, на котором я сосредоточен.

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

Это было полезно?

Решение

Поместите это в свой файл .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 в третьем.

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top