emacs-app: 一个新的 emacs macOS app,打包好可直接使用。

在 github 上发现了一个新的项目,该项目构建了 emacs macOS app。使用 github CI 自动构建,包含 30.2 release 以及 nightly builds。下载下来双击直接打开即可使用。比起使用 homebrew tap 的 emacs-plus 或者 emacs-mac 需要从源码在本地构建,自然还是方便不少。

优点:

  1. bundle 好了 native-comp
  2. bundle 了 xwidget (内置浏览器还是很方便的)
  3. bundle 好了 treesitter。
  4. 源代码在 build 前打了 emacs-plus 使用的 patch。
  5. 也提供了 homebrew cask 可以一键安装

缺点:

  1. 没有采用类似 emacs-plus 使用的 inject PATH 环境变量的技术,因此双击打开 GUI 客户端时,需要使用 exec-path 或者其他的环境变量注入的插件,或者自己糊一段简单的 elisp 代码。我因为不怎么用双击打开,都是从命令行启动 GUI,所以不需要类似的技术。
  2. 如果需要从命令行里使用 emacs 或者 emacsclient 需要手动的把 /Applications/Emacs.app/Contents/MacOS/bin/emacs symlink 到自己的 PATH 变量目录下。
  3. nativecomp 在后台编译代码的时候好像有点发热和卡?因为我以前使用 emacs-plus 并未开启 nativecomp 。主要原因是没有可感知的性能提升,而且因为要引入 libgccjit 库,构建会麻烦很多,在刚引入支持的 emacs28 时代有大量的 GitHub issue 是和构建失败有关。因为不想折腾,干脆就放弃了这个构建选项,并且再也没也启用过。

接下来多用几天,看看有没有其他优缺点,实时更新。

3 个赞

不知为何,我用emacs-plus构建,但是inject PATH不起作用,只好引入exec-path。

nativecomp可以关闭实时编译安装的第三方库。引入AOT最大的好处是builtin的包都已经编译好,对性能还是有提升的。

1 个赞

大清亡了(

如果你电脑编译速度慢可以用,如果速度可以那还得是 emacs plus 更方便加 patch 改分支

并非新项目哈哈 :laughing:

大清好像确实亡了 :joy: :joy:

原来这个项目已经有四年的历史了,但是我也是确实从未看见大家在本坛讨论过这个构建。emacs-plus emacs-mac 还有 emacsforosx 倒是经常看见。

这个构建我觉得还不错的啊。有 daily nightly builds,也包含了 xwidget 等比较好用的功能,也打了 emacs-plus 的 patch。好像也没有什么 missing 的构建选项了吧?除了需要体验 igc 等没合进主线的分支;或者自己本身就是 core 的开发者需要改代码。不然我感觉这个就挺好的了。

1 个赞

编译的时候有点卡,编译完成之后还是很快的。这个项目我已经使用几个月了,省去了自己本地构建的过程。

是这样的,从某个版本开始就这样了。

其实比起 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 个赞

刚刚下载了这个,在 M4 Mac mini 上运行非常卡……

第一次启动需要编译文件,可能是这个原因

nativecomp 在后台编译代码的时候好像有点发热和卡?

等 core 的 elisp 文件编译完成后,应该就和往常一样流畅了。

  • 我重新安装回来试试,有 NativeComponent 肯定比没有更好吧?一直没用过也很流畅,所以没在意
  • 我用 package-recompile-all 可以一次把所有的包都重新编译一遍吗?还是必须等待执行第一次执行某个命令时再编译对应的包呢?

没用过 native comp 也觉得足够流畅的情况,不建议用 native comp,体验上不会好多少

先试试吧,不行再回退;既然 Emacs 提供了,还是要试试的,万一以前的流畅只是我以为呢

你说的那个函数 byte compile 用的,不是 native comp。

最后我建议你要么启动 emacs 后打开一个代码的 buffer 一个 org 的 buffer 然后耐心等等,啥都不干挂个一个晚上,这样核心的 elisp 代码应该都大部分编译好了。

要么直接在 early-init 里把 native-comp-jit-compilation 设置成 nil 然后就不是后台编译了,会直接同步编译代码。

你们都用emacs 做啥? 我用emacs 基本上只是在工作中做,java, Javascript, typescript 的开发,今年是第6个年头了。