Закрепить буферы Emacs на окнах (для cscope) - PullRequest
23 голосов
/ 04 сентября 2008

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

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

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

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

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

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

Ответы [ 2 ]

35 голосов
/ 15 сентября 2008

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

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

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

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

0 голосов
/ 04 сентября 2008

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

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

...