Helm Gtags layer
Table of ContentsClose
1. Description
counsel-gtags
, 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. Adding the gtags
layer enables
both of these modes.
1.1. Features:
- Select any tag in a project retrieved 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
- Enables
eldoc
in modes that otherwise might not support it. - Enables
company complete
in modes that otherwise might not support it.
2. Install
2.2. Emacs Configuration
To use this configuration layer, add it to your ~/.spacemacs
file. You
will need to add gtags
to the existing dotspacemacs-configuration-layers
.
(setq dotspacemacs-configuration-layers '( ;; ... gtags ;; ... ))
2.2.1. Disabling by default
If ggtags-mode
is too intrusive you can disable it by default, by setting the
layer variable gtags-enable-by-default
to nil
.
(setq-default dotspacemacs-configuration-layers '((gtags :variables gtags-enable-by-default t)))
This variable can also be set as a file-local or directory-local variable for additional control on a per project basis.
3. Usage
Before using gtags
, remember to create a GTAGS database by one of the following
methods:
- From within Emacs, run either
counsel-gtags-create-tags
orhelm-gtags-create-tags
, which are bound toSPC m g C
. If the language is not directly supported by GNU Global, you can choosectags
orpygments
as a backend to generate the database. - From inside a terminal:
cd /path/to/project/root # If the language is not directly supported and GTAGSLABEL is not set gtags --gtagslabel=pygments # Otherwise gtags
3.1. Language Support
3.1.1. Built-in languages
If you do not have ctags
or pygments
enabled gtags will only produce
tags for the following languages:
- asm
- c/c++
- java
- php
- yacc
3.2. 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 definitions of the symbol under point. However, this feature is
only activated for languages which are not:
- C
- C++
- Common Lisp
- Emacs Lisp
- Python
- Ruby
Since these modes have better Eldoc integration already.
In addition gtags
commands are also supported for symbols in the
compile
, shell-command
and async-shell-command
buffers.
4. Key bindings
Key binding | Description |
---|---|
g d |
jump to definition or references of selected tag |
4.1. Helm
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 y |
find symbols |
SPC m g u |
manually update tag database |
4.2. Ivy
counsel-gtags
is currently missing a few minor features compared to
helm-gtags
.
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 d |
find definitions |
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 s |
select any tag in a project retrieved by gtags |
SPC m g y |
find symbols |
SPC m g u |
manually update tag database |