https://github.com/syohex/emacs-helm-gtags.git
git clone 'git://github.com/syohex/emacs-helm-gtags.git'
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]
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
helm-gtags-modeEnable helm-gtags-mode.
helm-gtags-find-tagInput tag name and move to the definition.
helm-gtags-find-tag-from-hereFind tag from here and move to its definition.
helm-gtags-find-rtagInput tag name and move to the referenced point.
helm-gtags-find-symbolInput symbol and move to the locations.
helm-gtags-find-filesInput 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 |
helm-gtags-selectTag jump using gtags and helm
helm-gtags-dwimFind name by context.
helm-gtags-tags-in-this-functionShow tagnames which are referenced in this function and jump to them.
helm-gtags-update-tagsUpdate TAG file. Default is update only current file,
You can update all files with C-u prefix.
helm-gtags-create-tagsCreate 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
helm-gtags-parse-fileShow symbols in current file like gtags-parse-file. You can choose
any files with C-u prefix.
helm-gtags-pop-stackMove to previous point on the stack. helm-gtags pushes current point to stack before executing each jump functions.
helm-gtags-next-historyMove to next history on context stack.
helm-gtags-previous-historyMove to previous history on context stack.
helm-gtags-show-stackShow context stack with helm interface. You can jump to the context.
helm-gtags-clear-stackClear current context stack.
helm-gtags-clear-all-stacksClear all context stacks.
helm-gtags-clear-cacheClear current project cache for helm-gtags-select and helm-gtags-select-path
helm-gtags-clear-all-cacheClear all result cache for helm-gtags-select and helm-gtags-select-path
helm-gtags-resumeResurrect previously invoked helm-gtags command.
This is similar to helm-resume however this command resurrects helm gtags
buffer if other helm commands are called.
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.
(custom-set-variables
'(helm-gtags-prefix-key "C-t")
'(helm-gtags-suggested-key-mapping t))
|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|
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.
helm-gtags-maximum-candidatesMaximum 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)
helm-gtags-preselectIf this variable is non-nil, preselect current file and line.
helm-gtags-fileFace of file name of candidates
helm-gtags-linenoFace of line number of candidates
;;; 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
(custom-set-variables
'(helm-gtags-path-style 'relative)
'(helm-gtags-ignore-case t)
'(helm-gtags-auto-update t))
;; key bindings
(eval-after-load "helm-gtags"
'(progn
(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)))