将Emacs缓冲区固定到Windows(用于cscope)
对于我的日常工作,我住在Emacs。完全是。我也非常依赖CScope来帮助我在代码中查找内容。
通常,我在拆分(C-x 3)中有2个窗口:
替代文字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 Wiki上显示的cscope.el,以及RHEL上cscope RPM软件包随附的xcscope.el。
似乎都没有给我一种方法来做我想要的。方法可能是通过添加一个软件包变量(如* browse-buffer )或者类似内容来编辑ELisp,并且如果用户在第一次执行Cc Cs g或者其他操作时尚未初始化该变量,则可以对其进行初始化,并且始终将结果代码显示在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)))
然后将其绑定到我使用"暂停"键的某些键:
(global-set-key [pause] 'toggle-window-dedicated)
然后使用它"专用"我们要锁定的窗口。那么cscope只能在其他窗口中从其结果窗口中打开文件。很有魅力。我专门将它用于此目的,以便始终在屏幕上显示一个源文件,而在第二个缓冲区/窗口中使用cscope,而在第三个缓冲区/窗口中使用cscope结果。