大家好,我正在开发 Neomacs,一个基于 Emacs 的 fork,目标是用 Rust 从底层重写 Emacs。
目前已实现(alpha 阶段, 很多地方还没打磨好)
- 底层窗口 —— 基于 Rust 的 winit
- GPU 文本渲染 —— 基于 Rust 的 wgpu(Vulkan/Metal/DX12/OpenGL)
- Buffer 内嵌 4K 图片 —— GPU 解码,零 CPU 开销,不阻塞 Emacs 主线程
- Buffer 内嵌 4K 视频 —— GStreamer + VA-API 硬件解码 + DMA-BUF 零拷贝
- Buffer 内嵌 WebKit 浏览器 —— WPE WebKit ,GPU 后端,DMA-BUF 零拷贝 (Emacs 上游用的 webkit2gtk 因为抛弃了 offscreen 支持不能用了, 而 WPE Webkit 就是为 embbed 环境而生,还不依赖 gtk,很适合集成到 emacs, 可以做到像将图片嵌入到 buffer 中一样,将 WPEWebkit 嵌入 emacs buffer 中)
- Buffer 内嵌 GPU 终端 —— 基于 Alacritty 的终端模拟器
- 光标动画 —— 8 种粒子模式、7 种运动风格(好多bug)
- 滚动动画 —— 21 种滚动效果、5 种缓动函数(好多bug)
- Buffer 切换动画 —— 10 种过渡效果(交叉淡入淡出、滑动、翻页等)
- 圆角 box face —— :box face 属性支持圆角
- 用 ~4,000 行 Rust 替换了显示引擎中 ~50,000 行 C 代码
长期目标
- 用 Rust 逐步重写 Emacs C 核心
- 真正的多线程 Elisp(真并发,不是协作式线程)
- Rust 优化的 Lisp 机器,目标 10 倍 Elisp 执行速度提升
- 跨平台:Linux(Vulkan)、macOS(Metal)、Windows(DX12)
现有的 Emacs 配置和插件包依然可以正常使用。
截图和视频演示
请查看 README 中的截图和视频。
仓库地址: GitHub - eval-exec/neomacs: 🚀 Neomacs — A GPU-powered Emacs written in 🦀Rust with a modern display engine. Effortlessly render tons of 🖼️4K images, 🎥4K videos, and 🌐WPEWebKit using GPU acceleration, DMA-BUF, ZERO-COPY and rich animation effects support for a super-level blazing-fast Emacs experience. 🎉
目前还是 alpha 阶段,完成了基本的 MVP, 很粗糙,欢迎反馈、建议和贡献!
如果你喜欢的话,帮忙给 neomacs 仓库一个 Star
支持一下 neomacs,谢谢!Make Emacs Great Again!
49 个赞
你对 neomacs 有什么期望吗?我想要收集一下大家的需求。
好强,不过想起来之前有个很火的 remacs 也是类似的想法,而且项目星数也不少,不过好像是遇到了很多坑就被放弃了。请问您有什么避免类似问题嘛,非常好奇这个项目。
1 个赞
可以支持命令在弹出的子窗口运行,很多时候并不想因为临时要做一些搜索或者执行命令就打开额外的buffer,影响了原来的布局。虽然知道有些包可以恢复布局,但是本身还是折衷方案。
1 个赞
我对 Rust 和 Emacs 是热爱,我不会放弃的!
而且 Remacs 本身没有引入突破性的功能,只是在语言层做重构,难以吸引足够长期维护的贡献者。(而 Neomacs 至少外观会是花里胡哨的,会有各种动画,GPU 支持的 image/video/webcontent, 外观是极具吸引力的, 。
8 个赞
我也觉得 Rust 很爽,前几周改了一个 Rust todo TUI 项目 basilk,加了三个功能。直接给 Claude Code 需求,改完之后 cargo check, cargo run,AI 自己写自己 check,几轮下来直接就完成了,我用了几个礼拜一点问题没有。Neomacs 项目目前代码量看起来没有很多,用户想要一些微调,完成可以用 AI 做修改。所以很看好。
org
8
编译没过。能先release个版本出来吗?好像卡在了
./temacs(+0x4a26f) [0x55555559e26f]
/usr/lib/libc.so.6(+0x27635) [0x7fffeaec1635]
/usr/lib/libc.so.6(__libc_start_main+0x89) [0x7fffeaec16e9]
./temacs(+0x4a7d5) [0x55555559e7d5]
make[2]: *** [Makefile:675: emacs.pdmp] Segmentation fault (core dumped)
1 个赞
太炫酷了,打开 readme 第一眼就被炫酷的中国龙吸引了。
1 个赞
能否做到突破行编辑器的限制,让 buffer 行高支持设置为比基础行高还要小的高度?比如任意像素宽度的行高。这样的话在水平和垂直方向都能够设置精确的定位。还有就是不同字体的行高不一致导致的抖动问题,不知道在底层能否有好的优化方案?
牛👍不过目前没有什么欲望试试。感觉最能吸引 Emacser 的还是对 Emacs 的性能提升。用 Emacs 编辑大点的项目 LSP 感觉挺卡(我用的 eglot, 补全是手动显示的)
最近在看 Zed 编辑器代码,想什么时候把 Zed 改成我现在 Emacs 的样子hh
sunng
13
已有的elisp包可以直接运行在neomacs上吗
2 个赞
长期目标来看,最重要的还是和 elisp 的 code 和 package 的兼容性。再保证兼容性的情况下提升性能,同时支持真正的多线程(多线程可以用新的 API )以及 UI 的流畅性。UI 的炫酷特效都是次要的。
2 个赞
区别在于现在有ai了
一个人开发大型项目变得可行了
2 个赞
听起来很屌的样子,虽然我看不懂,但是我很佩服行动力十足的道友
2 个赞
泼点冷水,因为 GNU Emacs 的开发周期特点,在特性冷静期的时候各种新出现 fork 能跟得上主线进度,在繁荣期的时候一旦引入各种不兼容,各种 fork 就会开始被拉爆了,一般这样的周期对应两个大版本。历史上这样的事情发生了不止一次,XEmacs 生命周期从 19 开始到 21 就结束了,Aquaemacs 从 22 开始,现在第四个大版本更新到 29 也有些力不从心了。
目前MPS特性还在合入,还算在冷静期。乐观一点看,撑过下一波繁荣期就能比 remacs 强。
8 个赞
我个人感觉单打独斗的 fork emacs,大概率会失败,不是人的能力不行,是随着时间的延长,人的精力跟不上了。
7 个赞
感觉最好是可以像nvim那样,前后端分离,后端逻辑和展示全完解耦,通过协议来进行,本机可以通过unixsocket或者其他的,远程可以通过socket远端通讯,这样前后端解耦后,可以分别开发和实现
4 个赞