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

24
对于我的日常工作,我完全依赖Emacs。我也已经相当依赖CScope来帮助我在代码中查找东西。
通常,我会在分裂窗口中有2个窗口(C-x 3): alt text http://bitthicket.com/files/emacs-2split.JPG 我使用右窗口来放置代码缓冲区,左窗口用于CScope搜索缓冲区。当您进行CScope搜索并选择结果时,它会自动更新右侧窗口以显示结果引用的缓冲区。这很好,但是它会导致我失去正在学习的其他缓冲区中的位置。有时这没什么大碍,因为[C-s u]可以让我回到之前的位置。
然而更好的方法是:有3个分裂窗口,如下所示(在左窗口中使用C-x 2): alt text http://bitthicket.com/files/emacs-3split.jpg 并且让左下角的窗口包含CScope搜索缓冲区,让左上角的窗口是唯一由CScope更新的缓冲区。这样,我就可以看到我的CScope搜索并在不失去重要缓冲区的情况下浏览代码。
有人知道我该怎么做吗?

图片已经消失了,但问题仍然极其相关。您介意更新它们,或者在文章中直接用ASCII绘制您的意思吗? 我认为我刚刚提出的这个问题可能与您的类似。 - kotchwane
2个回答

35

将下面的内容添加到您的.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结果,同时始终在屏幕上保留一个源文件。


太棒了!我知道它是可以完成的...通常我只是时间太紧,无法深入挖掘elisp api。谢谢! - Ben Collins
太棒了!我遇到了相同的情况,但是它发生在vc活动中,它会使用我的宝贵窗口。谢谢。 - swdev

0

好吧,我决定不再成为一个声望狂人,自己找答案。我查看了Emacs wiki上显示的cscope.el,以及RHEL上cscope RPM包附带的xcscope.el。

两者都似乎没有提供我想要的方法。可能的方法是通过添加类似于*browse-buffer*的包变量来编辑ELisp,并在用户第一次执行[C-c C-s g]或其他操作时初始化该变量,始终在*browse-buffer*中显示生成的代码。然后用户可以将*browse-buffer*放在任何他想要的地方。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接