Pin Emacs buffers to windows (for cscope)
Asked Answered
K

2

24

For my day job, I live in Emacs. Utterly. I also have become pretty dependent on CScope to help me find things in the code.

Normally, I have 2 windows in a split (C-x 3): alt text http://bitthicket.com/files/emacs-2split.JPG

And I use the right window for code buffers and the left window for the CScope search buffer. When you do a CScope search and select a result, it automatically updates the right-side window to show the buffer referred to by the result. This is all well and good, except that it causes me to lose my place in some other buffer that I was studying. Sometimes this is no biggie, because [C-s u] gets me back to where I was.

What would be better, though, is to have 3 split windows like this ([C-x 2] in the left window): alt text http://bitthicket.com/files/emacs-3split.jpg

And have the bottom left window contain the CScope search buffer, and the top left window be the only buffer that CScope ever updates. That way, I can see my CScope searches and navigate around the code without losing the buffer I'm focused on.

Anyone know how I can do that?

Ketcham answered 4/9, 2008 at 13:31 Comment(1)
The pictures have disappeared, but the question is still utterly relevant. Would you mind updating them, or drawing what you meant directly in the post in ASCII? I think this question I just asked might be similar to yours.Lorrin
G
35

Put this in your .emacs file:

;; 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)))

Then bind it to some key - I use the Pause key:

(global-set-key [pause] 'toggle-window-dedicated)

And then use it to "dedicate" the window you want locked. then cscope can only open files from its result window in some OTHER window. Works a charm. I specifically use it for exactly this purpose - keeping one source file always on screen, while using cscope in a second buffer/window, and looking at cscope results in a third.

Greenland answered 15/9, 2008 at 19:31 Comment(2)
awesome! I knew it could be done...I'm usually just too pressed for time to dig into the elisp api. Thanks!Ketcham
Superb! I encounter the same situation, but it happenes with vc activites, it will use my precious window. Thanks.Charie
K
0

Well, I decided to not be a reputation-whore and find the answer myself. I looked in cscope.el as shown on the Emacs wiki, as well as the xcscope.el that comes with the cscope RPM package on RHEL.

Neither appear to give a way to do what I'm wanting. The way is probably to edit the ELisp by adding a package variable like *browse-buffer* or something and just initialize that variable if not already initialized the first time the user does [C-c C-s g] or whatever, and always have the resulting code shown in *browse-buffer*. Then the user can put the *browse-buffer* wherever he wants it.

Ketcham answered 4/9, 2008 at 19:27 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.