+ :popup -> set-popup-rule! + :popups -> set-popup-rules! + :company-backend -> set-company-backend! + :evil-state -> set-evil-initial-state! I am slowly phasing out the setting system (def-setting! and set!), starting with these. What are autodefs? These are functions that are always defined, whether or not their respective modules are enabled. However, when their modules are disabled, they are replaced with macros that no-op and don't waste time evaluating their arguments. The old set! function will still work, for a while. |
||
---|---|---|
.. | ||
autoload.el | ||
config.el | ||
doctor.el | ||
packages.el | ||
README.org |
:lang cc
This module adds support for the C-family of languages: C, C++, and Objective-C.
- Code completion (
company-irony
) - eldoc support (
irony-eldoc
) - Syntax-checking (
flycheck-irony
) - Code navigation (
rtags
) - File Templates (c-mode, c++-mode)
- Snippets (cc-mode, c-mode, c++-mode)
- Several improvements to C++11 indentation and syntax highlighting.
C contends with Haskell and Ruby for my favorite language. That said, it's more accurate to say I write C, but a C++ feature or three.
The module provides nominal support for Objective-C, which I really only use to inspect generated glue code for iOS mobile apps. Otherwise, I prefer Swift.
Table of Contents TOC
Install
This module requires:
- irony-server
- rtags
irony-server
Irony powers the code completion, eldoc and syntax checking systems.
MacOS
Due to linking issues, MacOS users must compile irony-server manually:
brew install cmake
brew install llvm # 1gb+ installation! May take a while!
git clone https://github.com/Sarcasm/irony-mode irony-mode
mkdir irony-mode/server/build
pushd irony-mode/server/build
DEST="$HOME/.emacs.d/.local/$(hostname)/etc/irony-server/"
cmake -DCMAKE_INSTALL_RPATH_USE_LINK_PATH=ON \
-DCMAKE_INSTALL_PREFIX="$DEST" ../
cmake --build . --use-stderr --config Release --target install
install_name_tool -change @rpath/libclang.dylib \
/usr/local/opt/llvm/lib/libclang.dylib \
"$DEST/bin/irony-server"
# cleanup
popd
rm -rf irony-mode
Arch Linux
sudo pacman --needed --noconfirm -S clang cmake
Then run M-x irony-install-server
in Emacs.
rtags
Code navigation requires an rtags server (rdm
) installed and running. This
should be available through your OS's package manager.
This module will auto-start rdm
when you open C/C++ buffers (so long as one
isn't already). If you prefer to run it yourself, outside of Emacs:
rdm &
rc -J $PROJECT_ROOT # loads PROJECT_ROOT's compile_commands.json
Configure
Compile settings
By default, a set of default compile settings are defined in
+cc-default-compiler-options
for C, C++ and Objective C. Irony, rtags and
flycheck will fall back to these.
To make these tools aware of project specific build settings, you need a JSON
compilation database present (i.e. a compile_commands.json
file).
There are many ways to generate one. I use CMake and bear:
# For CMake projects
cmake -DCMAKE_EXPORT_COMPILE_COMMANDS=ON .
# For non-CMake projects
make clean
bear make
Use
M-x +cc/reload-compile-db
to reload your compile db in an already-open C/C++/ObjC buffer.