2008-09-04 13 views
21

Para mi trabajo diario, vivo en Emacs. Absolutamente. También me he vuelto bastante dependiente de CScope para ayudarme a encontrar cosas en el código.Fijar buffers de Emacs en ventanas (para cscope)

Normalmente, tengo 2 ventanas en una fracción (C-x 3): alt text http://bitthicket.com/files/emacs-2split.JPG

Y uso la ventana derecha de memorias intermedias de código y la ventana de la izquierda para el búfer de búsqueda CSCOPE. Cuando hace una búsqueda de CScope y selecciona un resultado, automáticamente actualiza la ventana del lado derecho para mostrar el búfer al que hace referencia el resultado. Esto está muy bien, excepto que me causa perder mi lugar en otro buffer que estuve estudiando. A veces esto no es grave, porque [C-s u] me devuelve a donde estaba.

Lo que sería mejor, sin embargo, es tener 3 ventanas divididas como esto ([Cx 2] en la ventana izquierda): alt text http://bitthicket.com/files/emacs-3split.jpg

Y tener la ventana izquierda inferior contendrá el almacén intermedio de búsqueda CSCOPE, y el la ventana superior izquierda es el único búfer que CScope actualiza. De esta forma, puedo ver mis búsquedas de CScope y navegar por el código sin perder el búfer en el que estoy enfocado.

¿Alguien sabe cómo puedo hacer eso?

Respuesta

33

poner esto en el fichero .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))) 

A continuación, se unen a alguna clave - Yo uso la tecla de pausa:

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

Y luego usarlo para "dedicar" la ventana se querer bloqueado entonces cscope solo puede abrir archivos desde su ventana de resultados en alguna otra ventana. Funciona un encanto. Lo uso específicamente para este propósito: mantener un archivo fuente siempre en la pantalla, mientras uso cscope en un segundo buffer/ventana, y mirar los resultados del cscope en un tercero.

+0

¡increíble! Sabía que se podía hacer ... Por lo general, estoy demasiado presionado para encontrar la apis de elisp. ¡Gracias! –

+0

¡Magnífico! Encuentro la misma situación, pero sucede con las actividades de VC, usará mi preciosa ventana. Gracias. – swdev

0

Bueno, decidí no ser una puta de reputación y encontrar la respuesta yo mismo. Busqué en cscope.el como se muestra en el wiki de Emacs, así como el xcscope.el que viene con el paquete cscope RPM en RHEL.

Ninguno parece dar una manera de hacer lo que quiero. La manera es probablemente editar el ELisp agregando una variable de paquete como *browse-buffer* o algo así y solo inicializar esa variable si no se ha inicializado la primera vez que el usuario hace [C-c C-s g] o lo que sea, y siempre tener el código resultante en *browse-buffer*. Entonces el usuario puede poner el *browse-buffer* donde quiera que lo desee.

Cuestiones relacionadas