Mar 09

GTAGS in Emacs

Tag: mediumoverdrive @ 10:27 pm

GTACS o mas conocido como Global TAGS o simplemente GLOBAL, es una herramienta de GNU (GNU Global).

Si no disponemos de la herramienta global debemos instalarla:

# apt-get install global

Ademas de esto, debemos haber bajado alli ggtags (que se puede descargar de http://www.emacswiki.org/emacs/GnuGlobal mediante wget):

$ wget http://elpa.gnu.org/packages/ggtags-0.7.12.el

Por ultimo, en nuestro .emacs debemos anadir lo siguiente:

(add-to-list ‘load-path «~/.emacs.d/ggtags/»)
(load-file «~/.emacs.d/ggtags/ggtags-0.7.12.el»)
     (add-hook ‘c-mode-common-hook
               (lambda ()
                 (when (derived-mode-p ‘c-mode ‘c++-mode ‘java-mode)
                   (ggtags-mode 1))))

Primero nos debemos posicionar en el directorio del proyecto y tan solo debemos ejecutar (con la opcion -v para verbose o con la opcion –statistics para mostrar estadisticas):

$ gtags –statistics

gtags1

Esto generara 4 ficheros:

  • GTAGS : TAGS para definiciones
  • GRTAGS : TAGS para referencias
  • GPATH : TAGS para ficheros
  • GTAGSROOT :  Si la variable de entorno GTAGSROOT no esta asignada y el fichero GTAGSROOT existe en el mismo directorio que el fichero GTAGS, entonces global asignara GTAGSROOT al contenido del fichero.

Ademas debemos tener en cuenta el fichero de configuracion de global, que pueden ser:

  1. ‘$HOME/.globalrc’ : fichero de configuracion de global para el usuario.
  2. ‘/etc/gtags.conf’ : fichero de configuracion de global para el sistema.
  3. ‘[sysconfdir]/gtags.conf’ : Ditto.

Tenemos distintas opciones utiles para este comando:

  • -i : actualiza los ficheros TAGS de manera incremental.
  • –single-update <fichero> : actualiza los TAGS para un solo fichero.
  • –acept-dotfiles : acepta ficheros ocultos que por defecto global ignora.
  • -v : modo verbose
  • –statistics : realiza estadisticas

gtags2

Auto-completion de funciones mediante abbrev con M-C-i

Una vez construidos los ficheros tags o bien podemos usar emacs para movernos entre ellos (tan solo debemos usar M-. y M-* para saltar dentro de la definicion o volver al punto anterior. Algunos de los keybindings de Emacs mas importantes son estos:

  • M-. : encuentra definiciones
  • M-] : encuentra referencias
  • M-* : aborta (vuelve al punto previo de la llamada de manera recursiva)
  • M-n o M-p : va al siguiente o al anterior TAG
  • M-o : hace toggle de abbrev completo (en mi caso me funciona ESC + soltar ESC + TAB o Meta+Control+i).
  • M-{ o M-} : previo o siguiente fichero

Ademas pulsando F10 podemos ver un nuevo menu para GTAGS.

gtags3

Usando GTAGS en emacs, en este caso M-] para encontrar referencias

gtags4

Menu mostrado para GTAGS en C-mode (puede realizarse para cualquier modo de programacion) mediante la tecla F10

Sin embargo si desde consola queremos hacer algunos queries tambien podemos hacerlo con global:

  • global <patron> -> imprime los TAGS que coinciden con el patron.
  • global -c <patron> -> imprime simbolos que comienzan por patron.
  • global -f <fichero> -> imprime todos los TAGS de ese fichero.
  • global -u -> actualiza los TAGS de manera incremental.
  • global -x <patron> -> muestra detalles
  • global -g <patron> -> muestra en que linea se encuentra el patron especificado
  • global -r <patron> -> muestra referencias

Para mas informacion se puede consultar la pagina man global, man gtags o el manual de global: http://www.gnu.org/software/global/manual/global.html

Leave a Reply

You must be logged in to post a comment.