emacs cscope

Búferes de Pin Emacs a Windows(para cscope)



(2)

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.

Normalmente, tengo 2 ventanas en una división (Cx 3): texto alt http://bitthicket.com/files/emacs-2split.JPG

Y utilizo la ventana derecha para los búferes de código y la ventana izquierda para el búfer de búsqueda de 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 [Cs u] me devuelve a donde estaba.

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

Y que la ventana inferior izquierda contenga el búfer de búsqueda de CScope, y que la ventana superior izquierda sea el único búfer que CScope haya actualizado. 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?


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.

Tampoco parecen dar una manera de hacer lo que quiero. La forma 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 [Cc Cs g] o lo que sea, y siempre tener el código resultante que se muestra en *browse-buffer* . Entonces el usuario puede poner *browse-buffer* donde quiera que lo desee.


Pon esto en tu archivo .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)))

Luego, agréguela a alguna tecla; utilizo la tecla Pausa:

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

Y luego úsalo para "dedicar" la ventana que deseas bloquear. 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.