redguardtoo / company-ctags

Fastest Emacs auto-completion using Company and Ctags
GNU General Public License v3.0
56 stars 3 forks source link

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,

+BEGIN_SRC emacs-lisp

(with-eval-after-load 'company (company-ctags-auto-setup))

+END_SRC

Step 1, create tags file in project root ,

+begin_src sh

ctags -e -R .

+end_src

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,

+begin_src sh

ctags -R .

+end_src

Step 2, enjoy!

+begin_src elisp

(setq company-ctags-extra-tags-files '("$HOME/TAGS" "/usr/include/TAGS"))

+end_src

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=,

+begin_src elisp

(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)))

+end_src

You can use [[https://github.com/noctuid/general.el][general.el]] so you could press =rr= in insert mode to trigger =my-counsel-company=,

+begin_src elisp

;; 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))

+end_src

** 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,

+begin_src elisp

(setq company-ctags-tags-file-name "rusty-tags.emacs")

+end_src

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.