我的日常工作是使用 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)))
然后将其绑定到某个键 - 我使用暂停键:
(global-set-key [pause] 'toggle-window-dedicated)
然后用它来“专用”您想要锁定的窗口。那么 cscope 只能在其他窗口中打开其结果窗口中的文件。很有魅力。我专门将它用于此目的 - 将一个源文件始终显示在屏幕上,同时在第二个缓冲区/窗口中使用 cscope,并在第三个缓冲区/窗口中查看 cscope 结果。
好吧,我决定不做一个名誉妓女,自己去寻找答案。我查看了 Emacs wiki 上显示的 cscope.el,以及 RHEL 上 cscope RPM 包附带的 xcscope.el。
似乎都没有提供一种方法来完成我想要的事情。方法可能是通过添加像
*browse-buffer*
之类的包变量来编辑 ELisp,如果用户第一次执行 [C-c C-s g]
或其他操作时尚未初始化该变量,则只需初始化该变量,并且始终将结果代码显示在 *browse-buffer*
中
。然后用户可以将 *browse-buffer*
放在任何他想要的地方。
这有点旧,但我想出了一种适合我的方法,使用一些自定义代码行。
它使用挂钩到 GUD 用于显示源代码的函数中的建议,即
gud-display-line
加上一个 var 来保存最后使用的缓冲区。这样,GUD 就能够为源代码回收相同的缓冲区。
如果没有,它会抢占一个缓冲区,但通常在我的情况下,我已经用我正在调试的程序的源代码打开了缓冲区。
;; Change gud behaviour when acquiring buffers to display source code
;; Define a variable to keep track of the last source code window
(defvar last-source-window nil)
;; Advice to run before displaying source code in GUD buffer
(defadvice gud-display-line (before reuse-source-window activate)
"Reuse the same window for displaying source code in GUD."
(let ((source-buffer (ad-get-arg 1)))
(if (bufferp source-buffer)
(setq last-source-window (get-buffer-window source-buffer)))))
;; Advice to run before creating a new source code window
(defadvice gud-display-line (after reuse-source-window activate)
"Reuse the same window for displaying source code in GUD."
(when last-source-window
(with-selected-window last-source-window
(switch-to-buffer (ad-get-arg 1)))))
;; Hook to add the advice
(add-hook 'gud-mode-hook
(lambda ()
(ad-activate 'gud-display-line 'before)
(ad-activate 'gud-display-line 'after)))