Emacs Plus is → GNU Emacs formulae for macOS → Homebrew package manager. It offers a wide rage of extra functionality over regular → Emacs package. Emacs Plus intent is to give the most of ‘plus’ stuff by default, leaving only controversial options as opt-in. Please refer to → Options section for more information.
$ brew tap d12frosted/emacs-plus
$ brew install emacs-plus [options] # install the latest release (Emacs 27)
$ brew install emacs-plus@26 [options] # install Emacs 26
$ brew install emacs-plus@27 [options] # install Emacs 27
$ brew install emacs-plus@28 [options] # install Emacs 28
Feel free to open an issue or contact me via email if you face any issues, questions or feature requests. I love pull requests, so do send them. You might want to check → Development guidelines to have better understanding on how to contribute.
- About
- Install
- Reinstall
- Emacs 26 options
- Emacs 27 and Emacs 28 options
- Icons
- Emacs configuration
- Known Issues
- Screenshots
- Acknowledgements
Emacs Plus contains separate formulas for different Emacs versions:
emacs-plus
install current release version (Emacs 27);emacs-plus@26
install Emacs 26, previous release version;emacs-plus@27
install Emacs 27, current release version;emacs-plus@28
install Emacs 28, development version.$ brew tap d12frosted/emacs-plus $ brew install emacs-plus [options] # install the latest release (Emacs 27) $ brew install emacs-plus@26 [options] # install Emacs 26 $ brew install emacs-plus@27 [options] # install Emacs 27 $ brew install emacs-plus@28 [options] # install Emacs 28
By default (without any addition options) this formula install Cocoa version of
Emacs with support of gnutls
, imagemagick
, librsvg
, libxml2
, dynamic
modules and multicolor fonts. Please see the list of available options to
disable any bit of default behaviour or add even more stuff.
If you wish to reinstall emacs-plus
with you should not use reinstall
command of brew
(not related to this formula, it’s a general advice). Instead,
you should uninstall
a package and then install
it with desired options.
Avoid reinstall
even if you want to reinstall
with the same set of options,
otherwise you will likely to get compilation errors! For example, #218 and #321.
In short, brew
doesn’t really support options. They break time to time
(brew#4793, brew#7397, brew#7498 to show a few).
$ brew uninstall emacs-plus
$ brew install emacs-plus [options]
Emacs 26 comes without any available options due to → #195.
Option | Description |
---|---|
--with-ctags | don’t remove the ctags executable that Emacs provides |
--with-dbus | build with dbus support |
--with-debug | build with debug symbols and debugger friendly optimizations |
--with-mailutils | build with mailutils support |
--with-no-frame-refocus | disables frame re-focus (ie. closing one frame does not refocus another one) |
--with-no-titlebar | build → without titlebar |
--with-x11 | build with x11 support |
--with-xwidgets | build → with xwidgets support |
--without-cocoa | build a non-Cocoa version of Emacs (terminal only) |
--without-imagemagick | build without imagemagick support |
--HEAD | build from emacs-27 branch (only for emacs-plus@27 ) |
--with-native-comp | build with native compilation aka → gccemacs (only for emacs-plus@28 ) |
By default emacs-plus
builds the Cocoa version of Emacs.
emacs-plus
unconditionally enables support for gnutls
, librsvg
, libxml2
,
little-cms2
and dynamic modules.
This patch is enabled with the --with-no-titlebar
option. It is meant for use
with window tiling applications like → yabai, → chunkwm or → amethyst so that
the titlebar you will never need to click on won’t take up screen real estate.
If you see gaps between your emacs frames and other windows, try this:
(setq frame-resize-pixelwise t)
Browse the web in Emacs as in modern browser.
The original → Emacs xwidgets builds and works on macOS however must be used
with X11 and hence not practical option on macOS. This version enables
xwidgets
on native macOS Cocoa via embedding a native webkit window.
More details can be seen here → Veshboo’s emacs branch.
This patch is enabled by default and can’t be disabled. It adds a hook,
ns-system-appearance-change-functions
, that is called once the system
appearance is changed. Functions added to this hook will be called with one
argument, a symbol that is either light
or dark
. This mainly allows loading
a different theme to better match the system appearance.
(defun my/apply-theme (appearance)
"Load theme, taking current system APPEARANCE into consideration."
(mapc #'disable-theme custom-enabled-themes)
(pcase appearance
('light (load-theme 'tango t))
('dark (load-theme 'tango-dark t))))
(add-hook 'ns-system-appearance-change-functions #'my/apply-theme)
Note that this hook is also run once when Emacs is initialized, so simply adding
the above to your init.el
will allow matching the system appearance upon
startup. You can also determine what the current system appearance is by
inspecting the value of the ns-system-appearance
variable.
The hook is NOT run in TTY Emacs sessions.
gccemacs is a modified Emacs capable of compiling and running Emacs Lisp as native code in form of re-loadable elf files. As the name suggests this is achieved blending together Emacs and the gcc infrastructure.
While gccemacs
gives performance boost in many scenarios, this feature is
still experimental and might require time and effort from your side for it to
work! Use at our own risk :)
Please see official → gccemacs documentation for more information.
Knows issues:
ld: library not found for -lSystem
. This only happens on older versions ofgcc
installed by Homebrew. Please execute$ brew reinstall gcc libgccjit
to resolve this issue.- Errors during compilation of your
init.el
. Try running Emacs with-Q
option and give it some time to compile everything (maybe runM-x
to force compilation) - you shall see buffer*Async-native-compile-log*
in the list of buffers.
Option | Author | Image | URL |
---|---|---|---|
--with-EmacsIcon1-icon | → Jason Milkins | ![]() | → Link |
--with-EmacsIcon2-icon | → Jason Milkins | ![]() | → Link |
--with-EmacsIcon3-icon | → Jason Milkins | ![]() | → Link |
--with-EmacsIcon4-icon | → Jason Milkins | ![]() | → Link |
--with-EmacsIcon5-icon | → Jason Milkins | ![]() | → Link |
--with-EmacsIcon6-icon | → Jason Milkins | ![]() | → Link |
--with-EmacsIcon7-icon | → Jason Milkins | ![]() | → Link |
--with-EmacsIcon8-icon | → Jason Milkins | ![]() | → Link |
--with-EmacsIcon9-icon | → Jason Milkins | ![]() | → Link |
--with-cacodemon-icon | → Christian Westrom | ![]() | → Link |
--with-elrumo1-icon | → Elias | ![]() | → Link |
--with-elrumo2-icon | → Elias | ![]() | → Link |
--with-emacs-card-blue-deep-icon | → Jason Milkins | ![]() | → Link |
--with-emacs-card-british-racing-green-icon | → Jason Milkins | ![]() | → Link |
--with-emacs-card-carmine-icon | → Jason Milkins | ![]() | → Link |
--with-emacs-card-green-icon | → Jason Milkins | ![]() | → Link |
--with-gnu-head-icon | → Aurélio A. Heckert | ![]() | → Link |
--with-modern-alecive-flatwoken-icon | → Alessandro Roncone | ![]() | → Link |
--with-modern-asingh4242-icon | → Asingh4242 | ![]() | → Link |
--with-modern-azhilin-icon | Andrew Zhilin | ![]() | → Link |
--with-modern-bananxan-icon | → BananXan | ![]() | → Link |
--with-modern-black-dragon-icon | → Osike | ![]() | → Link |
--with-modern-black-gnu-head-icon | → Aha-Soft | ![]() | → Link |
--with-modern-black-variant-icon | → BlackVariant | ![]() | → Link |
--with-modern-bokehlicia-captiva-icon | → Bokehlicia | ![]() | → Link |
--with-modern-cg433n-icon | → cg433n | ![]() | → Link |
--with-modern-doom-icon | → Eccentric J | ![]() | → Link |
--with-modern-doom3-icon | → Eccentric J | ![]() | → Link |
--with-modern-icon | Unknown | ![]() | Unknown |
--with-modern-mzaplotnik-icon | → Matjaz Zaplotnik | ![]() | → Link |
--with-modern-nuvola-icon | → David Vignoni | ![]() | → Link |
--with-modern-orange-icon | → Omar Jair Purata Funes | ![]() | → Link |
--with-modern-paper-icon | → Sam Hewitt | ![]() | → Link |
--with-modern-papirus-icon | → Papirus Development Team | ![]() | → Link |
--with-modern-pen-3d-icon | Unknown | ![]() | → Link |
--with-modern-pen-black-icon | → Cayetano Santos | ![]() | → Link |
--with-modern-pen-icon | → Kentaro Ohkouchi | ![]() | → Link |
--with-modern-pen-lds56-icon | → lds56 | ![]() | → Link |
--with-modern-purple-flat-icon | → Jeremiah Foster | ![]() | → Link |
--with-modern-sexy-v1-icon | → Emacs is Sexy | ![]() | → Link |
--with-modern-sexy-v2-icon | → Emacs is Sexy | ![]() | → Link |
--with-modern-sjrmanning-icon | → sjrmannings | ![]() | → Link |
--with-modern-vscode-icon | → Valentin Degenne | ![]() | → Link |
--with-modern-yellow-icon | Unknown | ![]() | → Link |
--with-retro-emacs-logo-icon | → Luis Fernandes | ![]() | → Link |
--with-retro-gnu-meditate-levitate-icon | Nevrax Design Team | ![]() | → Link |
--with-retro-sink-bw-icon | Unknown | ![]() | → Link |
--with-retro-sink-icon | → Erik Mugele | ![]() | → Link |
--with-spacemacs-icon | → Nasser Alshammari | ![]() | → Link |
--with-nobu417-big-sur-icon | → Nobuyuki Sato | ![]() | → Link |
Emacs is a journey. And for some of you these projects might be inspiring.
Please checkout → Issues page for a list of all known issues. But here are several you should be aware of.
In some cases (like when installing cask
) regular emacs
package will be
required. In such cases you might want to install all dependencies manually
(except for emacs
) and then install desired package with
--ignore-dependencies
option.
$ brew install cask --ignore-dependencies
Many thanks to all → contributors, issue reporters and bottle providers (→ Sudarshan Wadkar, → Jon Hermansen).
Special thanks to patrons supporting existence of this project: