With some minor dependencies, it’s fairly straightforward in setting up your Emacs workflow to include IntelliSense-like auto-completion!
Assuming you’re running Linux, you’ll need to have the following packages installed:
If you already have ELPA/MELPA, feel free to skip this first part
To be able to easily fetch the packages, it’s highly recommended you use the
Emacs Lisp Package Archive (ELPA). To do this, all that’s required is to
simply add the following to your
(require 'package) (add-to-list 'package-archives '("melpa" . "https://melpa.org/packages/")) (package-initialize)
Emacs will need to be restarted or reloaded to load the package repository.
Install the following packages in Emacs (
company-irony-c-headers(Required if you want header auto-completion)
Company (company-mode) needs to be required,
added to the
after-init-hook (or similar / manually called), and the back ends
to be added to it’s list of usable back ends. This is done in the initialization
(require 'company) (add-hook 'after-init-hook 'global-company-mode) (add-to-list 'company-backends '(company-irony-c-headers company-irony))
Initial setup of
M-x irony-install-server to be run. If
errors are encountered, please ensure that you have the necessary system
irony-mode should be added to the relevant C/C++ mode hooks:
(add-hook 'c++-mode-hook 'irony-mode) (add-hook 'c-mode-hook 'irony-mode) (add-hook 'objc-mode-hook 'irony-mode)
Additionally, it’s a good idea to add the compile options auto setup helper
command to the
(add-hook 'irony-mode-hook 'irony-cdb-autosetup-compile-options)
There are several ways to make
irony-mode aware of what it should look for in
it’s completion. My preferred method, though not the only one, is to simply add
my compile flags in the special
.clang_complete file as part of the working
directory of the project.
For an STM32F0 project, the context of the
.clang_complete file would be:
The above assumes that
libopencm3 is also places within the project
NoteThere is a strange issue that is encountered with non-working completion for new header include statements.
The workaround for this includes running
M-x irony-server-killafter new header additions to your current working file. Irony's server is clever enough to restart itself after a completion request is triggered via
TABso this is a fairly uninvolved workaround.
Author Bastian de Byl