helm-gtags.el
Introduction
helm-gtags.el
is GNU GLOBAL helm interface.
Screenshot
Requirements
- Emacs 24 or higher.
- helm 1.7.7 or higher
- GNU Global 6.2.3 or higher
helm-gtags.el
does not require gtags.el
.
Installation
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
(Both exuberant ctags and universal ctags)
with ctags backend feature of GNU global
. You can generate ctags
backend
tags by following command.
# exuberant ctags
% gtags --gtagslabel=ctags
# universal ctags
% gtags --gtagslabel=new-ctags
Basic Usage
helm-gtags-mode
Enable helm-gtags-mode
.
helm-gtags-find-tag
Input tag name and move to the definition.
helm-gtags-find-tag-from-here
Find tag from here and move to its definition.
helm-gtags-find-rtag
Input tag name and move to the referenced point.
helm-gtags-find-symbol
Input symbol and move to the locations.
helm-gtags-find-files
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 |
helm-gtags-select
Tag jump using gtags and helm
helm-gtags-dwim
Find name by context.
- Jump to header file if cursor is on include statement
- Jump to tag definition if cursor is on tag reference
- Jump to tag reference if cursor is on tag definition
helm-gtags-tags-in-this-function
Show tagnames which are referenced in this function and jump to them.
helm-gtags-update-tags
Update TAG file. Default is update only current file,
You can update all files with C-u
prefix.
helm-gtags-create-tags
Create TAG file. Please choose default
as GTAGSLABEL
if you don't enable
--with-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-ctags --with-pygments
helm-gtags-parse-file
Show symbols in current file like gtags-parse-file
. You can choose
any files with C-u
prefix.
helm-gtags-pop-stack
Move to previous point on the stack. helm-gtags pushes current point to stack before executing each jump functions.
helm-gtags-push-stack
Push current location to the stack.
helm-gtags-next-history
Move to next history on context stack.
helm-gtags-previous-history
Move to previous history on context stack.
helm-gtags-show-stack
Show context stack with helm interface. You can jump to the context.
helm-gtags-clear-stack
Clear current context stack.
helm-gtags-clear-all-stacks
Clear all context stacks.
helm-gtags-clear-cache
Clear current project cache for helm-gtags-select
and helm-gtags-select-path
helm-gtags-clear-all-cache
Clear all result cache for helm-gtags-select
and helm-gtags-select-path
helm-gtags-resume
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
.
You have to set them 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))
If you use invalid modifier string
(like C-,
) as prefix key, please don't
escape Control prefix.(OK: C-,
, NG: \C-,
).
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
.
helm-gtags-direct-helm-completing
(Default nil
)
Use helm completion instead of normal Emacs completion if this value is non-nil.
helm-gtags-maximum-candidates
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)
helm-gtags-preselect
If this variable is non-nil, preselect current file and line.
helm-gtags-cygwin-use-global-w32-port
This variable is only for Cygwin users. If you use both Cygwin version Emacs
and GNU global, please set nil
to this variable.
Faces
helm-gtags-file
Face of file name of candidates
helm-gtags-lineno
Face of line number of candidates
anything-gtags.el
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
.
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
(custom-set-variables
'(helm-gtags-path-style 'relative)
'(helm-gtags-ignore-case t)
'(helm-gtags-auto-update t))
;; key bindings
(with-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))