在 github 上发现了一个新的项目,该项目构建了 emacs macOS app。使用 github CI 自动构建,包含 30.2 release 以及 nightly builds。下载下来双击直接打开即可使用。比起使用 homebrew tap 的 emacs-plus 或者 emacs-mac 需要从源码在本地构建,自然还是方便不少。
优点:
- bundle 好了 native-comp
- bundle 了 xwidget (内置浏览器还是很方便的)
- bundle 好了 treesitter。
- 源代码在 build 前打了 emacs-plus 使用的 patch。
- 也提供了 homebrew cask 可以一键安装
缺点:
- 没有采用类似 emacs-plus 使用的 inject PATH 环境变量的技术,因此双击打开 GUI 客户端时,需要使用 exec-path 或者其他的环境变量注入的插件,或者自己糊一段简单的 elisp 代码。我因为不怎么用双击打开,都是从命令行启动 GUI,所以不需要类似的技术。
- 如果需要从命令行里使用
emacs 或者 emacsclient 需要手动的把 /Applications/Emacs.app/Contents/MacOS/bin/emacs symlink 到自己的 PATH 变量目录下。
- nativecomp 在后台编译代码的时候好像有点发热和卡?因为我以前使用 emacs-plus 并未开启 nativecomp 。主要原因是没有可感知的性能提升,而且因为要引入 libgccjit 库,构建会麻烦很多,在刚引入支持的 emacs28 时代有大量的 GitHub issue 是和构建失败有关。因为不想折腾,干脆就放弃了这个构建选项,并且再也没也启用过。
接下来多用几天,看看有没有其他优缺点,实时更新。
3 个赞
不知为何,我用emacs-plus构建,但是inject PATH不起作用,只好引入exec-path。
nativecomp可以关闭实时编译安装的第三方库。引入AOT最大的好处是builtin的包都已经编译好,对性能还是有提升的。
1 个赞
rua
3
大清亡了(
如果你电脑编译速度慢可以用,如果速度可以那还得是 emacs plus 更方便加 patch 改分支
大清好像确实亡了

原来这个项目已经有四年的历史了,但是我也是确实从未看见大家在本坛讨论过这个构建。emacs-plus emacs-mac 还有 emacsforosx 倒是经常看见。
这个构建我觉得还不错的啊。有 daily nightly builds,也包含了 xwidget 等比较好用的功能,也打了 emacs-plus 的 patch。好像也没有什么 missing 的构建选项了吧?除了需要体验 igc 等没合进主线的分支;或者自己本身就是 core 的开发者需要改代码。不然我感觉这个就挺好的了。
1 个赞
mmjx
6
编译的时候有点卡,编译完成之后还是很快的。这个项目我已经使用几个月了,省去了自己本地构建的过程。
其实比起 exec-path 的同步代码严重影响启动速度。倒不如利用 macOS自带的 automator 创建一个 shell script 并且把这个 shell script (直接 emacs "$@" 就行了) 保存成一个可以双击运行的 GUI app。然后把这个 GUI App 换成 emacs 的图标就可以当成 emacs GUI app 来用了。
2 个赞
直接把终端的 echo $PATH 的结果放在一个文件中进行加载就行了,非常快。
1 个赞
谢谢!我也是感觉从某个emacs-plus 开始,配置的环境不起作用。我还以为是我哪里搞错了。
应该是和系统版本有关,我上次换新电脑之后就不正常了,但是旧电脑还可以
查了下,升级 macOS Sequoia 后就失效了。
1 个赞
Lenic
13
刚刚下载了这个,在 M4 Mac mini 上运行非常卡……
nativecomp 在后台编译代码的时候好像有点发热和卡?
等 core 的 elisp 文件编译完成后,应该就和往常一样流畅了。
LdBeth
17
没用过 native comp 也觉得足够流畅的情况,不建议用 native comp,体验上不会好多少
Lenic
18
先试试吧,不行再回退;既然 Emacs 提供了,还是要试试的,万一以前的流畅只是我以为呢
你说的那个函数 byte compile 用的,不是 native comp。
最后我建议你要么启动 emacs 后打开一个代码的 buffer 一个 org 的 buffer 然后耐心等等,啥都不干挂个一个晚上,这样核心的 elisp 代码应该都大部分编译好了。
要么直接在 early-init 里把 native-comp-jit-compilation 设置成 nil 然后就不是后台编译了,会直接同步编译代码。
你们都用emacs 做啥? 我用emacs 基本上只是在工作中做,java, Javascript, typescript 的开发,今年是第6个年头了。