spacemacs/layers/gtags
syl20bnr 33ead6fc42 Deprecation of extensions and <pkg>-excluded-packages variables
As announced in previous releases, see CHANGELOG.next for more info
in the Breaking Changes section.
2016-01-17 22:06:04 -05:00
..
funcs.el Clean copyrights and update for year 2016 2016-01-11 21:42:17 -05:00
packages.el Clean copyrights and update for year 2016 2016-01-11 21:42:17 -05:00
README.org Update install layer section in REAMDE.org files 2016-01-06 00:21:55 -05:00

Helm Gtags layer

Description

helm-gtags and ggtags are clients for GNU Global. GNU Global is a source code tagging system that allows querying symbol locations in source code, such as definitions or references.

Features

  • Select any tag in a project retrieves by gtags
  • Resume previous helm-gtags session
  • Jump to a location based on context
  • Find definitions
  • Find references
  • Present tags in current function only
  • Create a tag database
  • Jump to definitions in file
  • Show stack of visited locations
  • Manually update tag database
  • Jump to next location in context stack
  • Jump to previous location in context stack
  • Jump to a file in tag database

Install

GNU Global

You can install helm-gtags from the software repository of your OS. For example, in Ubuntu:

  sudo apt-get install global

To use helm-gtags, you first have to install GNU Global.

Download the latest tar.gz archive, then run these commands:

  tar xvf global-6.4.tar.gz
  cd global-6.4
  ./configure
  make
  sudo make install

To be able to use ctags and other backends, you need to copy the sample gtags.conf either to /etc/gtags.conf or $HOME/.globalrc. For example:

  cp gtags.conf ~/.globalrc

To use this configuration layer, add it to your ~/.spacemacs. You will need to add gtags to the existing dotspacemacs-configuration-layers list in this file.

Usage

Before using the helm-gtags, remember to create a GTAGS database by the following methods:

  • From within Emacs, runs the command helm-gtags-create-tags, which is bound to SPC m g c. If the language is not directly supported by GNU Global, you can choose ctags or pygment as a backend to generate tag database.
  • From inside terminal, runs gtags at your project root in terminal:
  cd /path/to/project/root
  gtags

If the language is not directly supported by gtags but ctags, use this command instead:

  gtags --gtagslabel=ctags

Eldoc integration

This layer also integrates ggtags for its Eldoc feature. That means, when writing code, you can look at the minibuffer (at the bottom) and see variable and function definition of the symbol the cursor is on. However, this feature is only activated for programming modes that are not one of these languages:

  • C mode
  • C++ mode
  • Common Lisp
  • Emacs Lisp
  • Python
  • Ruby-mode

In addition, if output from compile (bound to SPC c C), shell-command (bound to SPC ! and M-!) or async-shell-command (bound to M-&) commands contains symbol in your project, you move cursor on such symbol and use any of the gtags commands.

Since these modes have better Eldoc integration already.

Key bindings

Key Binding Description
SPC m g c create a tag database
SPC m g f jump to a file in tag database
SPC m g g jump to a location based on context
SPC m g G jump to a location based on context (open another window)
SPC m g d find definitions
SPC m g i present tags in current function only
SPC m g l jump to definitions in file
SPC m g n jump to next location in context stack
SPC m g p jump to previous location in context stack
SPC m g r find references
SPC m g R resume previous helm-gtags session
SPC m g s select any tag in a project retrieved by gtags
SPC m g S show stack of visited locations
SPC m g u manually update tag database