2008-09-04 6 views
21

Pour ma journée de travail, je vis à Emacs. Totalement. Je suis également devenu assez dépendant de CScope pour m'aider à trouver des choses dans le code.Pin tampons Emacs à windows (pour cscope)

Normalement, je possède 2 fenêtres en une fraction (C-x 3): alt text http://bitthicket.com/files/emacs-2split.JPG

J'utiliser la fenêtre de droite pour les tampons de code et la fenêtre de gauche de la mémoire tampon de recherche CScope. Lorsque vous effectuez une recherche CScope et sélectionnez un résultat, il met automatiquement à jour la fenêtre de droite pour afficher la mémoire tampon référencée par le résultat. Tout cela est bien, sauf que cela me fait perdre ma place dans un autre tampon que j'étudiais. Parfois, ce n'est pas un gros problème, parce que [C-s] me ramène à l'endroit où j'étais.

Quoi de mieux, cependant, est d'avoir 3 fenêtres fendus comme celui-ci ([CX2] dans la fenêtre de gauche): alt text http://bitthicket.com/files/emacs-3split.jpg

Et que la fenêtre en bas à gauche contient le tampon de recherche CScope, et La fenêtre en haut à gauche est le seul tampon que CScope met à jour. De cette façon, je peux voir mes recherches CScope et naviguer autour du code sans perdre le tampon sur lequel je me concentre.

Quelqu'un sait comment je peux faire ça?

Répondre

33

Mettez dans votre .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))) 

Rabattre ensuite à une touche - j'utiliser la touche Pause:

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

Et puis l'utiliser pour « consacrer » la fenêtre veux verrouillé. alors cscope peut seulement ouvrir des fichiers à partir de sa fenêtre de résultat dans une autre fenêtre. Fonctionne un charme. Je l'utilise spécifiquement dans ce but - en conservant un fichier source toujours à l'écran, en utilisant cscope dans un second tampon/fenêtre, et en regardant cscope dans un troisième.

+0

génial! Je savais que cela pouvait être fait ... Je suis habituellement trop pressé pour avoir le temps de creuser dans l'api elisp. Merci! –

+0

Superbe! Je rencontre la même situation, mais ça se passe avec des activités vc, ça va utiliser ma précieuse fenêtre. Merci. – swdev

0

Eh bien, j'ai décidé de ne pas être une pute de réputation et de trouver la réponse moi-même. J'ai regardé dans cscope.el comme indiqué sur le wiki d'Emacs, ainsi que le fichier xcscope.el fourni avec le paquet cscope RPM sur RHEL.

Ni l'un ni l'autre ne semblent donner un moyen de faire ce que je veux. Le chemin est probablement d'éditer l'ELisp en ajoutant une variable de paquet comme *browse-buffer* ou quelque chose et juste initialiser cette variable si pas déjà initialisée la première fois que l'utilisateur fait [C-c C-s g] ou n'importe quoi, et toujours le code résultant montré dans *browse-buffer*. Ensuite, l'utilisateur peut mettre le *browse-buffer* où il le veut.

Questions connexes