将Emacs缓冲区固定到Windows(用于cscope)

时间:2020-03-05 18:47:36  来源:igfitidea点击:

对于我的日常工作,我住在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结果。