[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-7909":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":9,"language":10,"languages":9,"totalLinesOfCode":9,"stars":11,"forks":12,"watchers":13,"openIssues":14,"contributorsCount":15,"subscribersCount":15,"size":15,"stars1d":16,"stars7d":17,"stars30d":18,"stars90d":15,"forks30d":15,"starsTrendScore":14,"compositeScore":19,"rankGlobal":9,"rankLanguage":9,"license":20,"archived":21,"fork":21,"defaultBranch":22,"hasWiki":21,"hasPages":21,"topics":23,"createdAt":9,"pushedAt":9,"updatedAt":29,"readmeContent":30,"aiSummary":31,"trendingCount":15,"starSnapshotCount":15,"syncStatus":32,"lastSyncTime":33,"discoverSource":34},7909,"homebrew-emacs-plus","d12frosted\u002Fhomebrew-emacs-plus","d12frosted","Emacs Plus formulae for the Homebrew package manager",null,"Ruby",2876,214,44,5,0,1,9,21,67.6,"MIT License",false,"master",[24,25,26,27,28],"brew","doom-emacs","emacs","homebrew","spacemacs","2026-06-12 04:00:36","#+begin_html\n\u003Cp align=\"center\">\n  \u003Cimg width=\"256px\" src=\"images\u002Femacs.png\" alt=\"Banner\">\n\u003C\u002Fp>\n\u003Ch1 align=\"center\">Emacs Plus\u003C\u002Fh1>\n\u003Cp align=\"center\">\n  \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fd12frosted\u002Fhomebrew-emacs-plus\u002Factions\u002Fworkflows\u002Fbuild.yml\">\n    \u003Cimg src=\"https:\u002F\u002Fgithub.com\u002Fd12frosted\u002Fhomebrew-emacs-plus\u002Factions\u002Fworkflows\u002Fbuild.yml\u002Fbadge.svg\" alt=\"Build Status\">\n  \u003C\u002Fa>\n  \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fd12frosted\u002Fhomebrew-emacs-plus\u002Factions\u002Fworkflows\u002Fnightly.yml\">\n    \u003Cimg src=\"https:\u002F\u002Fgithub.com\u002Fd12frosted\u002Fhomebrew-emacs-plus\u002Factions\u002Fworkflows\u002Fnightly.yml\u002Fbadge.svg\" alt=\"Nightly Status\">\n  \u003C\u002Fa>\n  \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fd12frosted\u002Fhomebrew-emacs-plus\u002Factions\u002Fworkflows\u002Fbuild-app.yml\">\n    \u003Cimg src=\"https:\u002F\u002Fgithub.com\u002Fd12frosted\u002Fhomebrew-emacs-plus\u002Factions\u002Fworkflows\u002Fbuild-app.yml\u002Fbadge.svg\" alt=\"Cask Build Status\">\n  \u003C\u002Fa>\n\n  \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fsponsors\u002Fd12frosted\">\u003Cimg alt=\"Sponsor\" src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FSponsor-d12frosted-pink?logo=githubsponsors&logoColor=white\"\u002F>\u003C\u002Fa>\n\u003C\u002Fp>\n#+end_html\n\n** About\n\nEmacs+ is [[https:\u002F\u002Fwww.gnu.org\u002Fsoftware\u002Femacs\u002Femacs.html][→ GNU Emacs]] formulae for macOS [[https:\u002F\u002Fbrew.sh][→ Homebrew]] package manager. It offers a wide range of extra functionality over regular [[https:\u002F\u002Fformulae.brew.sh\u002Fformula\u002Femacs#default][→ Emacs]] package. Emacs+ intent is to give the most of 'plus' stuff by default, leaving only controversial options as opt-in. Please refer to [[#options][→ Options]] section for more information.\n\n#+begin_src bash\n  $ brew tap d12frosted\u002Femacs-plus\n\n  # Pre-built binaries (fast, ~1 min)\n  $ brew install --cask emacs-plus-app          # latest stable\n  $ brew install --cask emacs-plus-app@master   # nightly from master\n\n  # Build from source (customizable, ~30 min)\n  $ brew install emacs-plus        [options]    # latest stable\n  $ brew install emacs-plus@master [options]    # from master\n#+end_src\n\n#+begin_html\n\u003Cp align=\"center\">\n  \u003Cimg width=\"60%\" src=\"images\u002Fscreenshot-01.png\" alt=\"Screenshot\">\n\u003C\u002Fp>\n#+end_html\n\nFeel 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 [[docs\u002Fdevelopment-guidelines.org][→ Development guidelines]] to have better understanding on how to contribute.\n\nFor recent changes, see [[.\u002FNEWS.org][→ News]].\n\n** Table of Contents :TOC_3:\n  - [[#about][About]]\n  - [[#install][Install]]\n    - [[#pre-built-binaries-cask][Pre-built binaries (Cask)]]\n    - [[#build-from-source-formula][Build from source (Formula)]]\n    - [[#installing-from-feature-branch][Installing from feature branch]]\n  - [[#reinstall][Reinstall]]\n  - [[#build-configuration][Build Configuration]]\n    - [[#available-options][Available Options]]\n    - [[#native-compilation-environment-cask][Native Compilation Environment (Cask)]]\n  - [[#emacs-31][Emacs 31]]\n    - [[#included][Included]]\n    - [[#options][Options]]\n    - [[#no-title-bar][No title bar]]\n  - [[#emacs-30][Emacs 30]]\n    - [[#included-1][Included]]\n    - [[#options-1][Options]]\n    - [[#no-title-bar-1][No title bar]]\n  - [[#emacs-29][Emacs 29]]\n    - [[#included-2][Included]]\n    - [[#options-2][Options]]\n    - [[#no-title-bar-2][No title bar]]\n  - [[#features-explained][Features explained]]\n    - [[#injected-path][Injected PATH]]\n    - [[#detecting-emacs-plus][Detecting Emacs Plus]]\n    - [[#emacs-clientapp][Emacs Client.app]]\n    - [[#no-titlebar][No Titlebar]]\n    - [[#xwidgets-webkit][Xwidgets (webkit)]]\n    - [[#system-appearance-change][System appearance change]]\n    - [[#gccemacs][gccemacs]]\n  - [[#community-features][Community Features]]\n  - [[#icons][Icons]]\n  - [[#emacs-configuration][Emacs configuration]]\n  - [[#known-issues][Known Issues]]\n    - [[#emacs-dependency-in-other-formulas][=emacs= dependency in other formulas]]\n  - [[#old-versions][Old versions]]\n    - [[#emacs-28][Emacs 28]]\n    - [[#emacs-27][Emacs 27]]\n    - [[#emacs-26][Emacs 26]]\n  - [[#faq][FAQ]]\n    - [[#how-to-pin-a-specific-commit][How to pin a specific commit]]\n  - [[#screenshots][Screenshots]]\n  - [[#acknowledgements][Acknowledgements]]\n\n** Install\n\n*** Pre-built binaries (Cask)\n\nFor fast installation without compilation (~1 min), pre-built binaries are available:\n\n#+begin_src bash\n  $ brew tap d12frosted\u002Femacs-plus\n  $ brew install --cask emacs-plus-app           # latest stable\n  $ brew install --cask emacs-plus-app@master    # nightly from master\n#+end_src\n\nCask builds are self-contained applications with all dependencies bundled. They include:\n\n- Native compilation (AOT)\n- =xwidgets=, =tree-sitter=, =imagemagick=, =mailutils=\n- =Emacs.app= and =Emacs Client.app=\n- Default Emacs icon\n\n*Cask vs Formula:*\n\n| Feature              | Cask (=--cask=)        | Formula                   |\n|----------------------+------------------------+---------------------------|\n| Install time         | ~1 minute (download)   | ~30 minutes (compile)     |\n| Custom build options | No                     | Yes (icons, patches, etc) |\n| macOS versions       | ARM64: 13+, Intel: 15+ | Any supported             |\n| Architectures        | ARM64 and Intel        | Any                       |\n\n*Note:* Cask builds are architecture and macOS version specific. ARM64 has dedicated builds for Sonoma (14), Sequoia (15), and Tahoe (26); Ventura (13) users get the Sonoma build. Intel has a single Sequoia (15) build.\n\nUse the *formula* if you need custom icons, patches, or specific build options. Use the *cask* for quick installation with sensible defaults.\n\n*** Build from source (Formula)\n\nFor custom build options (~30 min compile time):\n\n#+begin_src bash\n  $ brew tap d12frosted\u002Femacs-plus\n  $ brew install emacs-plus        [options]    # latest stable\n  $ brew install emacs-plus@master [options]    # from master\n#+end_src\n\nVersioned formulas are also available: =emacs-plus@30=, =emacs-plus@29=, etc.\n\nBy default, formulas build Cocoa Emacs with =gnutls=, =librsvg=, =libxml2=, =tree-sitter=, =webp=, native compilation, dynamic modules, and multicolor fonts. See [[#options][→ Options]] for customization.\n\n*** Installing from feature branch\n\nSometimes you might want to install from a feature branch. In that case you can switch the branch in the tap and install Emacs+ again.\n\nPrerequisites are:\n\n- Emacs+ is tapped (e.g. =brew tap d12frosted\u002Femacs-plus=).\n- =jq= is available (e.g. =brew install jq=).\n\nOpen terminal and type the following commands (don't forget to use correct Emacs+ version, branch and options):\n\n#+begin_src bash\n  $ brew uninstall emacs-plus@29\n  $ cd $(brew tap-info --json d12frosted\u002Femacs-plus@29 | jq -r '.[0].path') && git switch BRANCH\n  $ brew install emacs-plus@29 [OPTIONS]\n#+end_src\n\n** Reinstall\n\nIf 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.\n\nAvoid =reinstall= even if you want to =reinstall= with the same set of options, otherwise you will likely to get compilation errors! For example, [[https:\u002F\u002Fgithub.com\u002Fd12frosted\u002Fhomebrew-emacs-plus\u002Fissues\u002F218][#218]] and [[https:\u002F\u002Fgithub.com\u002Fd12frosted\u002Fhomebrew-emacs-plus\u002Fissues\u002F321][#321]].\n\nIn short, =brew= doesn't really support options. They break time to time ([[https:\u002F\u002Fgithub.com\u002FHomebrew\u002Fbrew\u002Fissues\u002F4793][brew#4793]], [[https:\u002F\u002Fgithub.com\u002FHomebrew\u002Fbrew\u002Fissues\u002F7397][brew#7397]], [[https:\u002F\u002Fgithub.com\u002FHomebrew\u002Fbrew\u002Fissues\u002F7498][brew#7498]] to show a few).\n\n#+BEGIN_SRC bash\n  $ brew uninstall emacs-plus\n  $ brew install emacs-plus [options]\n#+END_SRC\n\n** Build Configuration\n\nEmacs+ can be configured using =~\u002F.config\u002Femacs-plus\u002Fbuild.yml=. This file controls options that are applied during installation (formula) or post-installation (cask).\n\nThe configuration file is searched in this order:\n1. Path specified by =HOMEBREW_EMACS_PLUS_BUILD_CONFIG= environment variable\n2. =~\u002F.config\u002Femacs-plus\u002Fbuild.yml=\n3. =~\u002F.emacs-plus-build.yml= (fallback)\n\n#+begin_src yaml\n# Example build.yml\nicon: dragon-plus\npatches:\n  - fix-window-role\ninject_path: true\n#+end_src\n\n*** Available Options\n\n| Option        | Default | Description                                                                  |\n|---------------+---------+------------------------------------------------------------------------------|\n| =icon=        | \u002Fnone\u002F  | Custom icon to apply. See [[.\u002Fcommunity\u002Ficons\u002FREADME.md][→ Icons Gallery]] for available icons.               |\n| =patches=     | \u002Fnone\u002F  | (Formula only) List of community patches to apply. See [[#community-features][→ Community Features]]. |\n| =revision=    | \u002Fnone\u002F  | (Formula only) Pin Emacs source to a specific git revision.                  |\n| =inject_path= | =true=  | (Formula only) Inject user's PATH into Emacs.app. See [[#injected-path][→ Injected PATH]].     |\n\nFor more customization options, see [[#community-features][→ Community Features]] for patches and [[#icons][→ Icons]] for icon customization.\n\n** Emacs 31\n\n*** Included\n\nBy default =emacs-plus@31= uses the following features.\n\n- Injected =PATH= value from user shell (see separate section explaining this feature).\n- Cocoa version, e.g. builds =Emacs.app= and =Emacs Client.app= (see [[#emacs-clientapp][→ Emacs Client.app]] for details).\n- Unconditional support for =gnutls=, =librsvg=, =webp=, =libxml2=, =little-cms2=, =tree-sitter= and dynamic modules.\n- Build with native compilation.\n\n*** Options\n\n| Option                    | Description                                                               |\n|---------------------------+---------------------------------------------------------------------------|\n| =--with-compress-install= | build with compressed install optimization                                |\n| =--with-dbus=             | build with dbus support                                                   |\n| =--with-debug=            | build with debug symbols and debugger friendly optimizations              |\n| =--with-mailutils=        | build with mailutils support                                              |\n| =--with-x11=              | build with x11 support (disables Cocoa, no =Emacs.app= bundle)            |\n| =--with-xwidgets=         | build [[#xwidgets-webkit][→ with xwidgets]] support                                             |\n| =--without-cocoa=         | build a non-Cocoa version of Emacs (terminal only, no =Emacs.app= bundle) |\n\n*Note:* Options =--with-x11= and =--without-cocoa= produce terminal\u002FX11 builds that do not include =Emacs.app=. Icon options are ignored for these builds.\n\n*** No title bar\nPlease note, that ~--with-no-titlebar~ is no longer needed in Emacs 30+, since the same can be achieved natively using [[https:\u002F\u002Fgithub.com\u002Fd12frosted\u002Fhomebrew-emacs-plus#emacs-29-1][this method]].\n\n** Emacs 30\n\n*** Included\n\nBy default =emacs-plus@30= uses the following features.\n\n- Injected =PATH= value from user shell (see separate section explaining this feature).\n- Cocoa version, e.g. builds =Emacs.app= and =Emacs Client.app= (see [[#emacs-clientapp][→ Emacs Client.app]] for details).\n- Unconditional support for =gnutls=, =librsvg=, =webp=, =libxml2=, =little-cms2=, =tree-sitter= and dynamic modules.\n- Build with native compilation.\n\n*** Options\n\n| Option                    | Description                                                               |\n|---------------------------+---------------------------------------------------------------------------|\n| =--with-compress-install= | build with compressed install optimization                                |\n| =--with-ctags=            | don't remove the ctags executable that Emacs provides                     |\n| =--with-dbus=             | build with dbus support                                                   |\n| =--with-debug=            | build with debug symbols and debugger friendly optimizations              |\n| =--with-imagemagick=      | build with =imagemagick= support                                          |\n| =--with-mailutils=        | build with mailutils support                                              |\n| =--with-x11=              | build with x11 support (disables Cocoa, no =Emacs.app= bundle)            |\n| =--with-xwidgets=         | build [[#xwidgets-webkit][→ with xwidgets]] support                                             |\n| =--without-cocoa=         | build a non-Cocoa version of Emacs (terminal only, no =Emacs.app= bundle) |\n\n*Note:* Options =--with-x11= and =--without-cocoa= produce terminal\u002FX11 builds that do not include =Emacs.app=. Icon options are ignored for these builds.\n\n*** No title bar\nPlease note, that ~--with-no-titlebar~ is no longer needed in Emacs 30, since the same can be achieved natively using [[https:\u002F\u002Fgithub.com\u002Fd12frosted\u002Fhomebrew-emacs-plus#emacs-29-1][this method]].\n\n** Emacs 29\n\n*** Included\n\nBy default =emacs-plus@29= uses the following features.\n\n- Injected =PATH= value from user shell (see separate section explaining this feature).\n- Cocoa version, e.g. builds =Emacs.app=.\n- Unconditional support for =gnutls=, =librsvg=, =libxml2=, =little-cms2=, =tree-sitter= and dynamic modules.\n\n*** Options\n\n| Option                    | Description                                                                  |\n|---------------------------+------------------------------------------------------------------------------|\n| =--with-compress-install= | build with compressed install optimization                                   |\n| =--with-ctags=            | don't remove the ctags executable that Emacs provides                        |\n| =--with-dbus=             | build with dbus support                                                      |\n| =--with-debug=            | build with debug symbols and debugger friendly optimizations                 |\n| =--with-imagemagick=      | build with =imagemagick= support                                             |\n| =--with-mailutils=        | build with mailutils support                                                 |\n| =--with-native-comp=      | build with native compilation aka [[#gccemacs][→ gccemacs]]                                 |\n| =--with-no-frame-refocus= | disables frame re-focus (ie. closing one frame does not refocus another one) |\n| =--with-x11=              | build with x11 support (disables Cocoa, no =Emacs.app= bundle)               |\n| =--with-xwidgets=         | build [[#xwidgets-webkit][→ with xwidgets]] support                                                |\n| =--without-cocoa=         | build a non-Cocoa version of Emacs (terminal only, no =Emacs.app= bundle)    |\n\n*Note:* Options =--with-x11= and =--without-cocoa= produce terminal\u002FX11 builds that do not include =Emacs.app=. Icon options are ignored for these builds.\n\n*** No title bar\nPlease note, that ~--with-no-titlebar~ is no longer needed in Emacs 29, since the same can be achieved natively using [[https:\u002F\u002Fgithub.com\u002Fd12frosted\u002Fhomebrew-emacs-plus#emacs-29-1][this method]].\n\n** Features explained\n\n*** Injected PATH\n\n#+begin_quote\nEver find that a command works in your shell, but not in Emacs?\n\n(c) @purcell\n#+end_quote\n\nIn macOS applications are started in the login environment, meaning that all user defined environment variables are not available in application process. In the most cases it's not a big deal, but in Emacs it becomes a source of troubles as we want to use binaries from the non-standard locations (for example, those installed via package managers).\n\nThere is a wonderful solution to overcome this problem, [[https:\u002F\u002Fgithub.com\u002Fpurcell\u002Fexec-path-from-shell][purcell\u002Fexec-path-from-shell]]. As with any package that is not preinstalled with Emacs, you need to discover it first, and then install it. And while being a well known package and popular package (top 100 on MELPA), not everyone install it. In addition, with =native-comp= feature you might need it's functionality before any package is bootstrapped.\n\n**** Formula builds\n\nFor formula builds (=brew install emacs-plus@30=), Emacs+ captures your shell's PATH at install time and injects it into =Emacs.app=. This makes your PATH available whenever you start =Emacs.app= from Finder, Dock, Spotlight, =open= command, or =launchd=. This solves a wide range of problems for GUI users without the need to use [[https:\u002F\u002Fgithub.com\u002Fpurcell\u002Fexec-path-from-shell][purcell\u002Fexec-path-from-shell]].\n\nTo disable PATH injection for formula builds, set =inject_path: false= in your =build.yml= and reinstall:\n\n#+begin_src yaml\ninject_path: false\n#+end_src\n\nIn case you have a non-trivial setup relying on specific value of =PATH= inherited from current terminal session, it is advised to start Emacs using =\u002Fopt\u002Fhomebrew\u002Fbin\u002Femacs= instead of =open -n -a \u002Fpath\u002Fto\u002FEmacs.app=, because =open= messes around with =PATH= value even without Emacs+ injection. You can find more information in [[https:\u002F\u002Fgithub.com\u002Fd12frosted\u002Fhomebrew-emacs-plus\u002Fissues\u002F469][#469]].\n\n**** Cask builds\n\nFor cask builds (=brew install --cask emacs-plus-app=), PATH injection is *not available* due to a Homebrew limitation - cask postflight doesn't have access to the user's shell environment. Native compilation still works because =CC= and =LIBRARY_PATH= are injected.\n\nCask users who need their shell PATH in Emacs should use [[https:\u002F\u002Fgithub.com\u002Fpurcell\u002Fexec-path-from-shell][purcell\u002Fexec-path-from-shell]]:\n\n#+begin_src elisp\n(exec-path-from-shell-initialize)\n#+end_src\n\nIf you need full PATH injection, use the formula instead of the cask.\n\n*** Detecting Emacs Plus\n\nStarting with =emacs-plus@30= and =emacs-plus@31=, the following variables are defined in =site-start.el=:\n\n| Variable                      | Description                                                           |\n|-------------------------------+-----------------------------------------------------------------------|\n| =ns-emacs-plus-version=       | Major version of Emacs Plus (e.g., 30 or 31)                          |\n| =ns-emacs-plus-injected-path= | Non-nil if user PATH was injected (formula with =inject_path: true=)  |\n\nThis allows you to detect Emacs Plus and conditionally configure your init.el:\n\n#+begin_src elisp\n(when (bound-and-true-p ns-emacs-plus-version)\n  ;; Emacs Plus specific configuration\n  )\n\n;; Skip exec-path-from-shell if PATH was already injected\n(unless (bound-and-true-p ns-emacs-plus-injected-path)\n  (exec-path-from-shell-initialize))\n\n;; Check specific version\n(when (and (bound-and-true-p ns-emacs-plus-version)\n           (>= ns-emacs-plus-version 31))\n  ;; Emacs Plus 31+ specific\n  )\n#+end_src\n\nThis is useful for conditionally enabling features that are specific to Emacs Plus, such as the =ns-system-appearance-change-functions= hook.\n\n*** Emacs Client.app\n\nStarting with =emacs-plus@30= and =emacs-plus@31=, the formula includes a companion application called =Emacs Client.app=. This application provides a user-friendly way to open files in Emacs from Finder, Spotlight, and other macOS applications.\n\n**** When to use Emacs.app vs Emacs Client.app\n\n| Application        | Use Case                                                                                          |\n|--------------------+---------------------------------------------------------------------------------------------------|\n| *Emacs.app*        | Launch Emacs directly, start a new Emacs session, or when you want full control over the instance |\n| *Emacs Client.app* | Open files from Finder, set as default application for file types, quick file editing             |\n\n**** How it works\n\n=Emacs Client.app= connects to an existing Emacs daemon (or starts one automatically) using =emacsclient=. This means:\n\n- *Fast startup* - No need to launch a full Emacs instance for each file\n- *Shared session* - All files opened via Emacs Client appear in the same Emacs session\n- *Seamless integration* - Works with \"Open With\" in Finder, drag-and-drop, and can be set as the default application for text files\n- *org-protocol support* - Handles =org-protocol:\u002F\u002F= URLs for org-capture, org-roam, and other integrations\n\n**** Usage\n\nAfter installation, create aliases in =\u002FApplications= (the formula will suggest these commands in the caveats):\n\n#+begin_src bash\n  # Get the installation prefix (use emacs-plus@30 or emacs-plus@31)\n  PREFIX=$(brew --prefix emacs-plus@30)\n\n  # Create aliases in \u002FApplications\n  osascript -e 'tell application \"Finder\" to make alias file to posix file \"'$PREFIX'\u002FEmacs.app\" at posix file \"\u002FApplications\" with properties {name:\"Emacs.app\"}'\n  osascript -e 'tell application \"Finder\" to make alias file to posix file \"'$PREFIX'\u002FEmacs Client.app\" at posix file \"\u002FApplications\" with properties {name:\"Emacs Client.app\"}'\n#+end_src\n\nYou can then:\n- Right-click files in Finder → \"Open With\" → \"Emacs Client\"\n- Drag files onto the Emacs Client.app icon\n- Set Emacs Client as the default application for specific file types\n- Launch from Spotlight to create a new Emacs frame\n- Use =org-protocol:\u002F\u002F= URLs from browser extensions (requires =(require 'org-protocol)= in your init file)\n\nThe implementation uses AppleScript to properly handle macOS AppleEvents, ensuring files opened from Finder are correctly passed to =emacsclient=. PATH injection works the same as in =Emacs.app= (see [[#injected-path][→ Injected PATH]]).\n\nFor more details, see [[file:docs\u002Femacs-client-app.md][→ docs\u002Femacs-client-app.md]].\n\n*** No Titlebar\n\n| square corners                                    | round corners                                    |\n|---------------------------------------------------+--------------------------------------------------|\n| [[\u002Fimages\u002Fscreenshot-no-titlebar-square-corners.png]] | [[\u002Fimages\u002Fscreenshot-no-titlebar-round-corners.png]] |\n\n**** Emacs 28 and Emacs 27\n\nThis patch is enabled with the =--with-no-titlebar= option for =emacs-plus@27= and =emacs-plus@28=. It is meant for use with window tiling applications like [[https:\u002F\u002Fgithub.com\u002Fkoekeishiya\u002Fyabai][→ yabai]] or [[https:\u002F\u002Fgithub.com\u002Fianyh\u002FAmethyst][→ amethyst]] so that the titlebar won't take up screen real estate.\n\nUse =--with-no-titlebar-and-round-corners= option (instead of =--with-no-titlebar=), if you want to keep round corners (for example, to be consistent with other macOS applications).\n\nIf you see gaps between your emacs frames and other windows, try this:\n\n#+BEGIN_SRC emacs-lisp\n  (setq frame-resize-pixelwise t)\n#+END_SRC\n\n**** Emacs 29+\n\nIn =emacs-plus@29=, =emacs-plus@30=, and =emacs-plus@31= this option is not available anymore as you can achieve the same result using Emacs Lisp by adding the following line in your =early-init.el= file:\n\n#+begin_src emacs-lisp\n  (add-to-list 'default-frame-alist '(undecorated . t))\n#+end_src\n\nAdd the following line instead for round corners:\n\n#+begin_src emacs-lisp\n  (add-to-list 'default-frame-alist '(undecorated-round . t))\n#+end_src\n\n*** Xwidgets (webkit)\n\nBrowse the web in Emacs as in modern browser.\n\nThe original [[https:\u002F\u002Fwww.emacswiki.org\u002Femacs\u002FEmacsXWidgets][→ 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.\n\nMore details can be seen here [[https:\u002F\u002Fgithub.com\u002Fveshboo\u002Femacs][→ Veshboo's emacs branch]].\n\n*** System appearance change\n\nThis 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.\n\n#+begin_src emacs-lisp\n  (defun my\u002Fapply-theme (appearance)\n    \"Load theme, taking current system APPEARANCE into consideration.\"\n    (mapc #'disable-theme custom-enabled-themes)\n    (pcase appearance\n      ('light (load-theme 'tango t))\n      ('dark (load-theme 'tango-dark t))))\n\n  (add-hook 'ns-system-appearance-change-functions #'my\u002Fapply-theme)\n#+end_src\n\nNote 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.\n\nThe hook is NOT run in TTY Emacs sessions.\n\n*** gccemacs\n\n#+begin_quote\ngccemacs 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.\n\n[[https:\u002F\u002Fakrl.sdf.org\u002Fgccemacs.html][→ Andrea Corallo]]\n#+end_quote\n\nWhile =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 :)\n\nPlease see official [[https:\u002F\u002Fakrl.sdf.org\u002Fgccemacs.html][→ gccemacs documentation]] for more information.\n\nKnows issues:\n\n- =ld: library not found for -lSystem=. This only happens on older versions of =gcc= installed by Homebrew. Please execute =$ brew reinstall gcc libgccjit= to resolve this issue.\n- Errors during compilation of your =init.el=. Try running Emacs with =-Q= option and give it some time to compile everything (maybe run =M-x= to force compilation) - you shall see buffer =*Async-native-compile-log*= in the list of buffers.\n\n** Community Features\n\nEmacs+ supports custom patches and icons through a configuration file. This allows you to use community-maintained features or your own external resources.\n\nCreate =~\u002F.config\u002Femacs-plus\u002Fbuild.yml=:\n\n#+begin_src yaml\n# Use a community icon (see community\u002Fregistry.json for available options)\nicon: modern-purple-flat\n\n# Use an external icon (requires SHA256 verification)\n# icon:\n#   url: https:\u002F\u002Fexample.com\u002Fmy-icon.icns\n#   sha256: abc123...\n\n# Pin to a specific git revision (version-specific)\n# revision:\n#   \"30\": abc123def456\n#   \"31\": 789abcdef123\n\n# Apply community patches\n# patches:\n#   - patch-name-from-registry\n#   - my-patch:\n#       url: https:\u002F\u002Fexample.com\u002Fexternal.patch\n#       sha256: abc123...\n#   - local-patch:\n#       url: ~\u002F.config\u002Femacs-plus\u002Fmy-local.patch\n#       sha256: abc123...\n#+end_src\n\nThen rebuild Emacs:\n\n#+begin_src bash\n$ brew reinstall emacs-plus@30\n#+end_src\n\nFor more information, see [[.\u002Fcommunity\u002FREADME.md][→ Community Documentation]].\n\n** Icons\n\nEmacs+ supports 76 custom icons. To use one, add it to your =~\u002F.config\u002Femacs-plus\u002Fbuild.yml=:\n\n#+begin_src yaml\nicon: dragon-plus\n#+end_src\n\nSee the [[.\u002Fcommunity\u002Ficons\u002FREADME.md][→ Icons Gallery]] for all available icons with previews.\n\n#+begin_quote\n*Note*: The =--with-*-icon= command line options are deprecated and will be removed on 2026-03-14. Please migrate to using =build.yml=.\n#+end_quote\n\n** Emacs configuration\n\nEmacs is a journey. And for some of you these projects might be inspiring.\n\n- [[https:\u002F\u002Fgithub.com\u002Fpurcell\u002Femacs.d][→ Steve Purcell's .emacs.d]]\n- [[https:\u002F\u002Fgithub.com\u002Fsyl20bnr\u002Fspacemacs\u002F][→ Spacemacs]]\n- [[https:\u002F\u002Fgithub.com\u002Fhlissner\u002Fdoom-emacs][→ doom-emacs]]\n- [[https:\u002F\u002Fgithub.com\u002Fbbatsov\u002Fprelude][→ Prelude]]\n- [[https:\u002F\u002Fgithub.com\u002Fseagle0128\u002F.emacs.d][→ Centuar Emacs]]\n\n** Known Issues\n\nPlease checkout [[https:\u002F\u002Fgithub.com\u002Fd12frosted\u002Fhomebrew-emacs-plus\u002Fissues][→ Issues]] page for a list of all known issues. But here are several you should be aware of.\n\n*** =emacs= dependency in other formulas\n\nIn 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.\n\n#+BEGIN_SRC bash\n$ brew install cask --ignore-dependencies\n#+END_SRC\n\n** Old versions\n\nThis repository provides formulas for some older version. Feel free to use them, but they are not really supported anymore.\n\n  #+begin_src bash\n  $ brew tap d12frosted\u002Femacs-plus\n  $ brew install emacs-plus@28 [options] # install Emacs 28\n  $ brew install emacs-plus@27 [options] # install Emacs 27\n  $ brew install emacs-plus@26 [options] # install Emacs 26\n#+end_src\n\n*** Emacs 28\n\n**** Included\n\nBy default =emacs-plus@28= uses the following features.\n\n- Injected =PATH= value from user shell (see separate section explaining this feature).\n- Cocoa version, e.g. builds =Emacs.app=.\n- Unconditional support for =gnutls=, =librsvg=, =libxml2=, =little-cms2= and dynamic modules.\n\n**** Options\n\n| Option                                 | Description                                                                  |\n|----------------------------------------+------------------------------------------------------------------------------|\n| =--with-ctags=                         | don't remove the ctags executable that Emacs provides                        |\n| =--with-dbus=                          | build with dbus support                                                      |\n| =--with-debug=                         | build with debug symbols and debugger friendly optimizations                 |\n| =--with-mailutils=                     | build with mailutils support                                                 |\n| =--with-no-frame-refocus=              | disables frame re-focus (ie. closing one frame does not refocus another one) |\n| =--with-no-titlebar=                   | build [[#no-titlebar][→ without titlebar]]                                                     |\n| =--with-no-titlebar-and-round-corners= | build [[#no-titlebar][→ without titlebar]], but round corners instead of square                |\n| =--with-x11=                           | build with x11 support (disables Cocoa, no =Emacs.app= bundle)               |\n| =--with-xwidgets=                      | build [[#xwidgets-webkit][→ with xwidgets]] support                                                |\n| =--without-cocoa=                      | build a non-Cocoa version of Emacs (terminal only, no =Emacs.app= bundle)    |\n| =--with-imagemagick=                   | build with =imagemagick= support                                             |\n| =--HEAD=                               | build from =emacs-28= branch                                                 |\n| =--with-native-comp=                   | build with native compilation aka [[#gccemacs][→ gccemacs]]                                 |\n|                                        |                                                                              |\n\n*Note:* Options =--with-x11= and =--without-cocoa= produce terminal\u002FX11 builds that do not include =Emacs.app=. Icon options are ignored for these builds.\n\n*** Emacs 27\n\n**** Included\n\nBy default =emacs-plus@27= uses the following features.\n\n- Cocoa version, e.g. builds =Emacs.app=.\n- Unconditional support for =gnutls=, =librsvg=, =libxml2=, =little-cms2= and dynamic modules.\n\n**** Options\n\n| Option                    | Description                                                                  |\n|---------------------------+------------------------------------------------------------------------------|\n| =--with-ctags=            | don't remove the ctags executable that Emacs provides                        |\n| =--with-dbus=             | build with dbus support                                                      |\n| =--with-debug=            | build with debug symbols and debugger friendly optimizations                 |\n| =--with-mailutils=        | build with mailutils support                                                 |\n| =--with-no-frame-refocus= | disables frame re-focus (ie. closing one frame does not refocus another one) |\n| =--with-no-titlebar=      | build [[#no-titlebar][→ without titlebar]]                                                     |\n| =--with-x11=              | build with x11 support (disables Cocoa, no =Emacs.app= bundle)               |\n| =--with-xwidgets=         | build [[#xwidgets-webkit][→ with xwidgets]] support                                                |\n| =--without-cocoa=         | build a non-Cocoa version of Emacs (terminal only, no =Emacs.app= bundle)    |\n| =--without-imagemagick=   | build without =imagemagick= support                                          |\n| =--HEAD=                  | build from =emacs-27= branch                                                 |\n\n*Note:* Options =--with-x11= and =--without-cocoa= produce terminal\u002FX11 builds that do not include =Emacs.app=. Icon options are ignored for these builds.\n\n*** Emacs 26\n\nEmacs 26 comes without any available options due to [[https:\u002F\u002Fgithub.com\u002Fd12frosted\u002Fhomebrew-emacs-plus\u002Fissues\u002F195][→ #195]].\n\n** FAQ\n\n*** How to pin a specific commit\n\nDevelopment versions (=emacs-plus@30=, =emacs-plus@31=) are built from their respective branches (=emacs-30=, =master=). Ordinarily, =brew= will update to the latest commit during installation.\n\nAs development versions are less stable than official releases, you may want to pin a specific commit. The recommended way is to use =~\u002F.config\u002Femacs-plus\u002Fbuild.yml=:\n\n#+begin_src yaml\nrevision:\n  \"30\": 6abea4d98d1d964c68a78cb9b5321071da851654\n  \"31\": abc123def456789\n#+end_src\n\nThen install or reinstall:\n\n#+begin_src bash\n  $ brew reinstall emacs-plus@30\n#+end_src\n\nThe build will display the pinned revision during installation.\n\n#+begin_quote\n*Deprecated*: Environment variables =HOMEBREW_EMACS_PLUS_30_REVISION= and =HOMEBREW_EMACS_PLUS_31_REVISION= still work but are deprecated. Please migrate to =build.yml=.\n#+end_quote\n\n** Screenshots\n\n#+BEGIN_HTML\n\u003Cp align=\"center\">\n  \u003Cimg src=\"images\u002Fscreenshot-01.png\">\n\u003C\u002Fp>\n#+END_HTML\n\n#+BEGIN_HTML\n\u003Cp align=\"center\">\n  \u003Cimg src=\"images\u002Fscreenshot-02.png\">\n\u003C\u002Fp>\n#+END_HTML\n\n** Acknowledgements\n\nMany thanks to all [[https:\u002F\u002Fgithub.com\u002Fd12frosted\u002Fhomebrew-emacs-plus\u002Fgraphs\u002Fcontributors][→ contributors]], issue reporters and bottle providers ([[https:\u002F\u002Fgithub.com\u002Fwadkar][→ Sudarshan Wadkar]], [[https:\u002F\u002Fgithub.com\u002Fjonhermansen][→ Jon Hermansen]]).\n\n* Support\n\nIf you enjoy this project, you can support its development via [[https:\u002F\u002Fgithub.com\u002Fsponsors\u002Fd12frosted][GitHub Sponsors]] or [[https:\u002F\u002Fwww.patreon.com\u002Fd12frosted][Patreon]].\n","Emacs Plus 是一个为 macOS Homebrew 包管理器提供的 GNU Emacs 公式，它在标准 Emacs 基础上提供了广泛的额外功能。该项目使用 Ruby 语言编写，其核心功能包括通过 Homebrew 安装预编译的 Emacs 应用程序或从源代码构建自定义版本，支持多种安装选项以满足不同用户需求。此外，Emacs Plus 默认启用多项增强特性，如原生编译支持等，同时保留了一些争议性较大的选项供用户自行选择是否启用。此项目非常适合需要高度定制化编辑环境的开发者以及希望轻松获取最新稳定版或开发版 Emacs 的用户。",2,"2026-06-11 03:15:02","top_language"]