modern-cpp-font-lock
modern-cpp-font-lock copied to clipboard
C++ font-lock for Emacs

Syntax highlighting support for "Modern C++" - until C++20 and Technical Specification. This package aims to provide a simple highlight of the C++ language without dependency.
It is recommended to use it in addition with the c++-mode major mode for extra highlighting (user defined types, functions, etc.) and indentation.
Preview
With modern-c++-font-lock-mode:

Using GNU Emacs 27.0.50 and CC Mode version 5.33.2.
Installation
Melpa
modern-cpp-font-lock is available on the major package.el community maintained repo - MELPA.
You can install it with the following command:
M-x package-install [RET] modern-cpp-font-lock [RET]
In your init Emacs file add:
(add-hook 'c++-mode-hook #'modern-c++-font-lock-mode)
or:
(modern-c++-font-lock-global-mode t)
use-package
In your init Emacs file add:
(use-package modern-cpp-font-lock
:ensure t)
Manual
Global setup
Download modern-cpp-font-lock.el into a directory of your load-path. Place the following lines in a suitable init file:
(require 'modern-cpp-font-lock)
(modern-c++-font-lock-global-mode t)
modern-c++-font-lock-mode will be activated for buffers using the c++-mode major-mode.
Local
For the current buffer, the minor-mode can be turned on/off via the command:
M-x modern-c++-font-lock-mode [RET]
Configuration
C++ Language
You can modify the following lists to recognize more words or set it to nil to partially disable font locking:
modern-c++-attributes-[[deprecated]],[[noreturn]], etc.modern-c++-keywords-if,constexpr,noexcept, etc.modern-c++-operators-...modern-c++-preprocessors-#define,__LINE__,__cplusplus, etc.modern-c++-types-bool,char,double, etc.
Set to t (default value) to enable the following options or otherwise to nil:
modern-c++-literal-boolean-false,truemodern-c++-literal-integer-0b101010,18446744073709550592LLU,0XdeadBABEu, etc.modern-c++-literal-null-pointer-nullptrmodern-c++-literal-string-R"xyz()")xyz",L"hello\ngoodbye","abcd", etc.
Configure the following list to customize font locking for literal integers:
modern-c++-literal-binary-prefix-facemodern-c++-literal-binary-infix-facemodern-c++-literal-binary-suffix-facemodern-c++-literal-octal-prefix-facemodern-c++-literal-octal-infix-facemodern-c++-literal-octal-suffix-facemodern-c++-literal-hex-prefix-facemodern-c++-literal-hex-infix-facemodern-c++-literal-hex-suffix-facemodern-c++-literal-dec-infix-facemodern-c++-literal-dec-suffix-face
C++ standard library
Set to t (default value) to enable the following font lock options. Otherwise use nil:
modern-c++-stl-cstdint- Define the header<cstdint>
Mode line
When modern-c++-font-lock-mode is activated, mc++fl is displayed.

Wiki
The Wiki is available: https://github.com/ludwigpacifici/modern-cpp-font-lock/wiki
Testing
Font-lock keywords are tested with the faceup package of Anders Lindgren.
Feedback
If you find a bug, please check if you can reproduce with c++-mode only. If it is the case, send your bug upstream to CC Mode
Do not hesitate to ask questions or share suggestions.
Happy coding!