2008-09-04 9 views
21

Für meinen Beruf, ich lebe in Emacs. Völlig. Ich bin auch ziemlich abhängig von CScope geworden, um mir zu helfen, Dinge im Code zu finden.Pin Emacs Puffern zu Windows (für Cscope)

Normalerweise, ich habe 2 Fenster in einem Split (C-x 3): alt text http://bitthicket.com/files/emacs-2split.JPG

Und ich benutze das rechte Fenster für die Code-Puffer und dem linken Fenster für den CScope Suchpuffer. Wenn Sie eine CScope-Suche durchführen und ein Ergebnis auswählen, wird das Fenster auf der rechten Seite automatisch aktualisiert, um den Puffer anzuzeigen, auf den sich das Ergebnis bezieht. Das ist alles gut und gut, außer dass ich dadurch meinen Platz in einem anderen Puffer, den ich studierte, verloren habe. Manchmal ist das kein großes Problem, denn [C-su] bringt mich dahin zurück, wo ich war.

Was wäre besser, aber ist 3 Split-Fenster wie diese haben ([Cx 2] im linken Fenster): alt text http://bitthicket.com/files/emacs-3split.jpg

Und haben die unteren linken Fenster enthalten die CScope Suchpuffer und die Das obere linke Fenster ist der einzige Puffer, den CScope jemals aktualisiert. Auf diese Weise kann ich meinen CScope durchsuchen und im Code navigieren, ohne den Puffer zu verlieren, auf den ich mich konzentriere.

Wer weiß, wie ich das tun kann?

Antwort

33

diese Datei in Ihrer .emacs Put:

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

Dann bindet sie bis zu einem gewissen Schlüssel - ich die Pause-Taste verwenden:

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

Und dann das Fenster verwenden, um "zu widmen" will gesperrt sein. Dann kann cscope nur Dateien aus seinem Ergebnisfenster in einem ANDEREN Fenster öffnen. Funktioniert ein Charme. Ich benutze es speziell für genau diesen Zweck - eine Quelldatei immer auf dem Bildschirm zu halten, während cscope in einem zweiten Puffer/Fenster verwendet wird, und cscope in einem dritten Puffer zu betrachten.

+0

genial! Ich wusste, dass es getan werden könnte ... Ich bin normalerweise einfach zu sehr auf Zeit bedrängt, um in die elisp api zu graben. Vielen Dank! –

+0

Hervorragend! Ich begegne der gleichen Situation, aber es passiert mit VC-Aktivitäten, es wird mein wertvolles Fenster benutzen. Vielen Dank. – swdev

0

Nun, ich beschloss, keine Reputations-Hure zu sein und die Antwort selbst zu finden. Ich schaute in cscope.el wie im Emacs-Wiki gezeigt, sowie die xcscope.el, die mit dem Cscope RPM-Paket auf RHEL kommt.

Keine scheinen zu geben, was ich will. Der Weg ist wahrscheinlich, die ELisp zu bearbeiten, indem man eine Paketvariable wie *browse-buffer* oder etwas hinzufügt und diese Variable initialisiert, wenn sie nicht bereits beim ersten Mal [C-c C-s g] oder was auch immer initialisiert wird und immer den resultierenden Code in *browse-buffer* anzeigt. Dann kann der Benutzer die *browse-buffer* wo immer er es will.