Закрепить буферы Emacs на окнах (для cscope)
Для моей дневной работы я живу в Emacs. Насквозь. Я также стал довольно зависимым от CScope, чтобы помочь мне найти вещи в коде.
Обычно у меня есть 2 окна в разделении (Cx 3): http://bitthicket.com/files/emacs-2split.JPG
И я использую правое окно для буферов кода и левое окно для буфера поиска CScope. Когда вы выполняете поиск CScope и выбираете результат, он автоматически обновляет правое окно, чтобы показать буфер, на который ссылается результат. Это все хорошо, за исключением того, что это заставляет меня терять свое место в каком-то другом буфере, который я изучал. Иногда это не так важно, потому что [Cs u] возвращает меня туда, где я был.
Что было бы лучше, тем не менее, это иметь 3 разделенных окна, как это ([Cx 2] в левом окне): http://bitthicket.com/files/emacs-3split.jpg
И нижнее левое окно содержит буфер поиска CScope, а верхнее левое окно - единственный буфер, который когда-либо обновляет CScope. Таким образом, я могу видеть свои поиски CScope и перемещаться по коду, не теряя буфера, на котором я сосредоточен.
Кто-нибудь знает, как я могу это сделать?
2 ответа
Поместите это в ваш файл.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 в третьем.
Ну, я решил не быть шлюхой с репутацией и найти ответ сам. Я посмотрел в cscope.el, как показано в вики Emacs, а также в xcscope.el, который поставляется с RPM-пакетом cscope на RHEL.
Ни один из них не дает возможности делать то, что я хочу. Вероятно, можно отредактировать ELisp, добавив переменную пакета, например *browse-buffer*
или что-то и просто инициализировать эту переменную, если еще не инициализирован в первый раз, когда пользователь делает [C-c C-s g]
или что-то еще, и всегда иметь результирующий код, показанный в *browse-buffer*
, Затем пользователь может поставить *browse-buffer*
где бы он этого не хотел.