Skip to content


Switch branches/tags

Latest commit


Git stats


Failed to load latest commit information.

Fastest auto-completion using Company and Ctags

This program enables the completion using Company mode and Ctags for Emacs. It’s fast because a new algorithm is used.

It shows the candidate immediately for huge project like Linux kernel.


Install and Setup

You could place company-ctags.el under Load Path, then add (require 'company-ctags) to your configuration.

But I recommend to use to install the package.

Setup is simple,

(with-eval-after-load 'company


Step 0, Make sure company-mode is already set up.

Step 1, create tags file in project root,

find . -name "*.[ch]" | ctags -e -L -

Step 2, enjoy!


Load extra tags files

You can set company-ctags-extra-tags-files to load extra tags files,

(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 counsel with company-ctags,

(require 'counsel)
(defun my-counsel-company ()
  "Input code from company backend using fuzzy matching."
  (let* ((company-backends '(company-ctags))
         (company-ctags-fuzzy-match-p t))

You can use 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 rusty-tags to generate tags file for Rust programming language.

Add below code into ~/.emacs,

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

Contact me

Report bugs at


This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.

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 GNU General Public License for more details.


Fastest Emacs auto-completion using Company and Ctags







No packages published