我觉得这篇文章关于 Emacs 界面交互的观点很深刻

可以再加一个 认为操作系统就只有linux

这篇文本全文看下来我根本没搞懂他的最终目的是什么, GTK was a mistake for Emacs 这一段提到的emacs原生包实际上没怎么用到GTK的问题在我看来根本不是问题。plain text 是一种mind set,只有在你认为内容远大于形式的时候plain text才有意义。在emacs buffer里面任何object都首先是text,哪怕是光标不能移动到的地方,甚至图片也只是加了特殊text property的text。所以我不理解这里的问题是啥,是因为emacs提供的text property不够多?不够fancy?可是这似乎根GTK都不直接相关啊,把GTK换成Lucid只是menu-bar的样式发生了变化而已。

至于后面提到的关于QML的问题,default theme之所以那么乱是因为emacs没有提供一组大而全的basic face,大家都是把font-lock-face拿来凑合,凑合还不够就自己瞎写一个face导致的,face本身的支持继承,换了QML别人不遵守也没用。

作者在 reddit 上回复:

可能涉及的,是 buffer 内图形的绘制?

可以再加一个 认为操作系统就只有linux

如果把这句话改成“操作系统只有 linux 和 BSD。” 这点我认为并不是问题。 emacs 本身就是 GNU 的自由软件,自由软件当然就应该主要为自由的操作系统设计。目前来看 emacs 在 bsd 上应该是没有性能问题。emacs对 windows / macOS 的支持本身就应该是交给社区爱好者自己努力去做 best effort,而不应该投入主要的维护精力。macOS 是得益于它的根基就是 BSD,所以性能表现还好。至于 Windows 上的表现性能不佳,有能力去提交改进 windows 性能的人就提及补丁,而不应该要求开发者去花费精力研究怎样把代码写的能够在 windows 上也运行的高效。

1 个赞

我希望是只有 POSIX 。。

毕竟原文里用了一半的篇幅来批判 GTK/PGTK,我翻译的评论和上面的内容也主要是针对这一部分。

我觉得这是很好的使用反馈呀?感觉是不是可以发到 emacs-devel 上面去反馈一下意见?(HN 的评论里也有人提到了 Emacs Widget 的文档比较简陋,感觉 Emacs Widget 的确开发者体验不会太好。)另外“觉得 Emacs 很缺一个类似 CSS 的框架”是指什么?因为 CSS 其实包括了一大堆东西,比如行内格式、排版(flex, grid, float, …)、动画等等。如果是指排版的话,那的确非常 nice-to-have,但感觉实现起来又得回到重写 Emacs 的 display engine 了。

最关键的,是缺排版。

emacs 不缺样式,text properties 已经玩出花了。

1 个赞

你说的是这种排版嘛

换不同字体的效果:

简单的说,排版主要分为两块:1.将字符串形成指定宽度的文本块;2. 将文本块按照需求组合布局。

前者 etaf 已经基本实现啦。同时还实现了文本块的像素级裁切,用来模拟文本块覆盖堆叠的效果等。

但是要想让文本块的单词间隔看起来舒服(不会太大或太小),最完美的方案是使用 knuth-plass 折行算法,结合行尾的hypen断词。看了高德纳老爷子的论文,目前还没搞定,不过会继续死磕的。

11 个赞

其实除了这个之外,最需要的是边框

边框也实现了,还有padding,文本块的背景色。不过边框有个问题就是,只能用下一行的 overline属性来模拟下边框。emacs的underline不是严格的一行的底部,这个问题我之前在论坛也问过,源码层面的无法解决。

1 个赞

我觉得那已经很足够了,不用再苛求,可以发布了。

然鹅搞posix那帮人自己都不知道什么是posix

其实真正应该考虑的是一套单独的编辑器通知协议,类似lsp,前后端分离,前端只负责展示和交互,后端负责其他逻辑,默认只有tui

1 个赞

这个我比较有兴趣,但没用过lsp,大佬能否说一下你了解的这个协议是大概是怎么实现的?

verminniu 大佬的意思是不是这样:

比如在 Emacs 中编辑 LaTeX 代码,用 TeX 引擎实时或按需渲染(如渲染成 PDF文件),并显示在 Emacs 的另一窗口。这样就做到了前后端分离。

当然也可以用 typst 或是 texmacs 引擎做实时渲染,也做到了前后端分离。

不知理解的对不对,仅供参考。

界面交互方面, 最自由和灵活的是自己实现界面, 和gtk关系不大, 即使TUI也可以有很好的交互.

Emacs最大的瓶颈是单线程包袱, 前后端不分离, 限制了很多. 比如高负载的异步只能通过多进程方式实现.而多进程就会遇到跨平台问题(emacs以及elisp本身是统一了多平台的, 多进程又给它打破了).

关于字体渲染,真是很难的,之前用了一个 Go 的有名的 GUI 库,不支持系统字体配置,不支持 font fallback,吃内存巨大。

Go 啊 Rust 啊好多 GUI 库轮子,实际光字体渲染就是个大坑。

1 个赞

牛逼,晚上刚在一个群里说要不要来个 30 天挑战:不用 win 不用 mac 不用 X 不用 wayland,要能正常处理普通人日常电脑使用,包括听歌、看片、看图、看 pdf、聊天、看新闻等。

不要求网购,可以用手机,因为有手机,不是要脱离社会苦修。目的只是看一下没了现代垃圾 UI 和 app 还能干多少事还留有什么好用的软件。

为什么会是垃圾UI :joy:,有好看的UI还是很舒服的。emacs的问题不就是UI太丑了又没有好的开发包,只能文本替代了嘛,哈哈哈。如果 emacs 能有 vscode 那样更现代化的UI,而且可定制,我会更爱。

除了看图片/视频必须要有一个显示协议以外、别的都可以实现。

听歌可以用 emms emacs 也有网易云客户端。看 pdf 可以转成 markdown 看。聊天的话 emacs 都有 twitter mastodon telegram 的前端。

上网的话,lynx w3m,emacs 内置的 eww 都是很经典的浏览器,看基本的 html 是够的。

现在也有基于终端的全功能浏览器 (支持 css 和 javascript,也能将图片和视频用字符集来渲染)。列举两个,browsh 是基于 firefox ,carbinyl 是基于 chromium 的浏览器。

最后是看邮件和新闻,gnus elfeed mu4e notmuch,太多的选择了。

最后,如果把你的命题从不使用 X 和 wayland 改成不使用 X 和 Wayland 的桌面环境 / WM / compositor 的话。那么只需要安装 kitty 终端就可以满足所有的需求。因为 kitty image protocol 无论是图片/视频还是 pdf 都支持正常显示。

1 个赞