This program enables the completion using [[http://company-mode.github.io][Company mode]] and [[https://en.wikipedia.org/wiki/Ctags][Ctags]] for Emacs. It's fast because a new algorithm is used.
It shows the candidate immediately for huge project like Linux kernel.
[[screenshot.png]]
But I recommend to use [[http://melpa.org/]] to install the package.
Setup is simple,
(with-eval-after-load 'company (company-ctags-auto-setup))
Step 1, create tags file in project root ,
ctags -e -R .
Please note "-e" in ctags cli is not required because both Emacs and Vim tags file are supported since v0.1.0, so below cli is also fine,
ctags -R .
Step 2, enjoy!
(setq company-ctags-extra-tags-files '("$HOME/TAGS" "/usr/include/TAGS"))
Ignore case Set =company-ctags-ignore-case= to ignore case when fetching candidates. Use CLI program diff to improve performance Make sure CLI program =diff= is executable on Windows.
It's optional but highly recommended. It can speed up tags file updating.
This package uses diff through variable =diff-command=.
Linux/macOS needs no setup. ** Fuzzy match Set =company-ctags-fuzzy-match-p= to fuzzy match the candidates.
The input could match any part of the candidate instead of the beginning of the candidate.
Here is example how to combine [[https://github.com/abo-abo/swiper/blob/master/counsel.el][counsel]] with =company-ctags=,
(require 'counsel) (defun my-counsel-company () "Input code from company backend using fuzzy matching." (interactive) (company-abort) (let* ((company-backends '(company-ctags)) (company-ctags-fuzzy-match-p t)) (counsel-company)))
You can use [[https://github.com/noctuid/general.el][general.el]] so you could press =rr= in insert mode to trigger =my-counsel-company=,
;; In insert mode, press "rr" in 0.2 second to trigger my-counsel-company (require 'general) (general-imap "r" (general-key-dispatch 'self-insert-command :timeout 0.2 "r" 'my-counsel-company))
** Rust programming language Use [[https://github.com/dan-t/rusty-tags][rusty-tags]] to generate tags file for Rust programming language.
Add below code into ~/.emacs,
(setq company-ctags-tags-file-name "rusty-tags.emacs")
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the [[file:LICENSE][GNU General Public License]] for more details.