Skip to content

redguardtoo/company-ctags

master
Switch branches/tags
Code

Latest commit

 

Git stats

Files

Permalink
Failed to load latest commit information.

Fastest auto-completion using Company and Ctags

https://github.com/redguardtoo/company-ctags/actions/workflows/test.yml/badge.svg http://melpa.org/packages/company-ctags-badge.svg http://stable.melpa.org/packages/company-ctags-badge.svg

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.

screenshot.png

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 http://melpa.org/ to install the package.

Setup is simple,

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

Usage

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!

Tips

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."
  (interactive)
  (company-abort)
  (let* ((company-backends '(company-ctags))
         (company-ctags-fuzzy-match-p t))
    (counsel-company)))

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 https://github.com/redguardtoo/company-ctags.

License

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.

About

Fastest Emacs auto-completion using Company and Ctags

Resources

License

Stars

Watchers

Forks

Packages

No packages published