git clone 'git://github.com/syohex/emacs-helm-gtags.git'

helm-gtags.el travis badge melpa badge melpa stable badge


helm-gtags.el is GNU GLOBAL helm interface.

helm-gtags.el is not compatible anything-gtags.el. But helm-gtags.el is designed for faster search than anything-gtags.el.

anything-gtags.el is slow in large source tree such as Linux kernel, FreeBSD, Android etc. Because anything-gtags.el creates candidates by processing output of gtags.el. helm-gtags.el creates candidates by itself, so helm-gtags.el is faster than anything-gtags.el.




helm-gtags.el does not require gtags.el.


helm-gtags is available on MELPA and MELPA stable

You can install helm-gtags with the following command.

M-x package-install [RET] helm-gtags [RET]

Use Ctags with helm-gtags

You can use helm-gtags for languages which are supported by ctags with ctags backend feature of GNU global. You can generate ctags backend tags by following command.

 % gtags --gtagslabel=ctags

Basic Usage


Enable helm-gtags-mode.


Input tag name and move to the definition.


Find tag from here and move to its definition.


Input tag name and move to the referenced point.


Input symbol and move to the locations.


Input file name and open it.

You can use those searching commands with prefix key.

| Prefix Key | Description | |:————|:———————————:| | C-u | Searches from specified directory | | C-u C-u | Searches under current directory | | C– | Jump to symbol with other window |


Tag jump using gtags and helm


Find name by context.


Show tagnames which are referenced in this function and jump to them.


Update TAG file. Default is update only current file, You can update all files with C-u prefix.


Create TAG file. Please choose default as GTAGSLABEL if you don't enable --with-exuberant-ctags and plugin parser options. If you use homebrew on MacOSX, you can enable those features by following command.

# You should uninstall global at first if you already install global
% brew install global --with-exuberant-ctags --with-pygments


Show symbols in current file like gtags-parse-file. You can choose any files with C-u prefix.


Move to previous point on the stack. helm-gtags pushes current point to stack before executing each jump functions.


Move to next history on context stack.


Move to previous history on context stack.


Show context stack with helm interface. You can jump to the context.


Clear current context stack.


Clear all context stacks.


Clear current project cache for helm-gtags-select and helm-gtags-select-path


Clear all result cache for helm-gtags-select and helm-gtags-select-path


Resurrect previously invoked helm-gtags command. This is similar to helm-resume however this command resurrects helm gtags buffer if other helm commands are called.

Using Suggested Key Mapping

helm-gtags.el provides suggested key maps like gtags.el by setting helm-gtags-suggested-key-mapping to non-nil. Its prefix key is C-c as default. You can change prefix by setting helm-gtags-prefix-key.

These value must be set before loading helm-gtags.el. I recommend you to use custom-set-variables for setting this value.

 '(helm-gtags-prefix-key "C-t")
 '(helm-gtags-suggested-key-mapping t))

Default Key Mapping

|Key |Command | |:———–|:——————————–| |Prefix h | helm-gtags-display-browser | |Prefix C-]| helm-gtags-find-tag-from-here | |Prefix C-t| helm-gtags-pop-stack | |Prefix P | helm-gtags-find-files | |Prefix f | helm-gtags-parse-file | |Prefix g | helm-gtags-find-pattern | |Prefix s | helm-gtags-find-symbol | |Prefix r | helm-gtags-find-rtag | |Prefix t | helm-gtags-find-tag | |Prefix d | helm-gtags-find-tag | |M-* | helm-gtags-pop-stack | |M-. | helm-gtags-find-tag | |C-x 4 . | helm-gtags-find-tag-other-window|

Customize Variables

helm-gtags-path-style(Default 'root)

File path style, 'root or 'relative or 'absolute. You can only use 'absolute if you use Windows and set GTAGSLIBPATH environment variable. helm-gtags.el forces to use absolute style in such case.

helm-gtags-ignore-case(Default nil)

Ignore case for searching flag

helm-gtags-read-only(Default nil)

Open file as readonly, if this value is non-nil

helm-gtags-use-input-at-cursor(Default nil)

Use word at cursor as input if this value is non-nil

helm-gtags-highlight-candidate(Default t)

Highlighting candidates if this value is non-nil

helm-gtags-display-style(Default nil)

Show detail information if this value is 'detail, show reference point of function etc.

helm-gtags-auto-update(Default nil)

If this variable is non-nil, TAG file is updated after saving buffer

helm-gtags-update-interval-second(Default 60)

Tags are updated in `after-save-hook' if this seconds is passed from last update Always update if value of this variable is nil.

helm-gtags-cache-select-result(Default nil)

If this variable is non-nil, use cache for helm-gtags-select and helm-gtags-select-path

helm-gtags-cache-max-result-size(Default 10MB)

Max size(bytes) to cache for each select result

helm-gtags-pulse-at-cursor(Default nil)

If this variable is non-nil, pulse at point after jumping

helm-gtags-fuzzy-match(Default nil)

Enable fuzzy match. You should set this value before loading helm-gtags.el.


Maximum number of helm candidates in helm-gtags.el. Please set small number if you feel slow for large source tree such as Linux kernel.

Default value is - 9999(Disable fuzzy match) - 100(Enable fuzzy match)


If this variable is non-nil, preselect current file and line.



Face of file name of candidates


Face of line number of candidates

Sample Configuration

;;; Enable helm-gtags-mode
(add-hook 'c-mode-hook 'helm-gtags-mode)
(add-hook 'c++-mode-hook 'helm-gtags-mode)
(add-hook 'asm-mode-hook 'helm-gtags-mode)

;; customize
 '(helm-gtags-path-style 'relative)
 '(helm-gtags-ignore-case t)
 '(helm-gtags-auto-update t))

;; key bindings
(eval-after-load "helm-gtags"
     (define-key helm-gtags-mode-map (kbd "M-t") 'helm-gtags-find-tag)
     (define-key helm-gtags-mode-map (kbd "M-r") 'helm-gtags-find-rtag)
     (define-key helm-gtags-mode-map (kbd "M-s") 'helm-gtags-find-symbol)
     (define-key helm-gtags-mode-map (kbd "M-g M-p") 'helm-gtags-parse-file)
     (define-key helm-gtags-mode-map (kbd "C-c <") 'helm-gtags-previous-history)
     (define-key helm-gtags-mode-map (kbd "C-c >") 'helm-gtags-next-history)
     (define-key helm-gtags-mode-map (kbd "M-,") 'helm-gtags-pop-stack)))