Подтвердить что ты не робот

Штыревые буферы Emacs для окон (для cscope)

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

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

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

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

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

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

4b9b3361

Ответ 1

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

Ответ 2

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

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