Windows下emacs的输入法体验提升patch(超越vim)

最主要的有一个问题 emacs里面经过缩放以后的字体 已经不是原来的字体了是被映射过的字体在c源码里面的线程是访问不到的 只有LIsp线程 这个特别头疼

你可以把patch里面的那个+ 0.5的代码给删掉然后自己编译看看 有这么一行代码 看看效果是不是正确的 lf.lfHeight *= (w32_system_caret_height / FRAME_LINE_HEIGHT (f)) + 0.5;

好的,我等下试试。

我重新写了一个patch效果和之前的那个线程不安全的一模一样好 你可以晚点测试一下 不过我不确定是不是线程安全的需要你测试

好的,你发给我试试这个新的。前面那个去掉 + 0.5 的还没试。

更新了

1 个赞

我在 emacs-31 上试了最新的 patch,完美解决问题了。在我个人配置上也不会出现崩溃的情况。 让我再试用2天 :rofl:

缩放后,也没问题:

而且还有小彩蛋:

preedit的字体竟然可以识别我的 variable 字体。绝了!

我想应该是没有问题了 之前会崩溃是因为线程问题 会访问到错误的内存 而且这个访问起码在我的电脑上特别难触发崩溃 我不知道为什么 我得测试很久很久才会触发崩溃 这回的patch是在Lisp线程里面更新数据然后通知w32消息的

这里说一下为什么emacs里面的线程问题这么麻烦 首先emacs里面可以简单的理解为有一个Lisp线程和一个输入线程 这个输入线程其实就是窗口事件 emacs搞了一套和窗口事件交互的队列

只有在这个队列里面交互和读写数据才是安全的 如果直接在窗口事件线程里面直接访问Lisp线程的对象就会崩溃也就是不安全

我这个patch是因为交互的数据不是从窗口事件里面获得数据发给Lisp线程读取 而是反过来要在窗口事件里面读取Lisp线程的对象 所以特别麻烦 如果emacs里面没有这个一个合适的更新时机 那这个patch估计就实现的不完美

所以得找一个合适更新数据的时机 所以特别特别麻烦 不过我找到了

3 个赞

我使用了最新的这个patch 一天了,很稳定,应该是没问题了。

等段时间吧那就 eli跟我说要等段时间才合并

1 个赞