По работе я живу в 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 и перемещаться по коду, не теряя при этом буфер, на котором я сосредоточен.
Кто-нибудь знает, как я могу это сделать?





Что ж, я решил не быть репутационной шлюхой и найти ответ сам. Я просмотрел 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. Спасибо!
Превосходно! Я сталкиваюсь с той же ситуацией, но это происходит с активностью vc, она будет использовать мое драгоценное окно. Спасибо.
Картинки исчезли, но вопрос по-прежнему актуален. Не могли бы вы обновить их или нарисовать то, что вы имели в виду, прямо в посте в ASCII? Я думаю, что вопрос это, который я только что задал, может быть похож на ваш.