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

前提提要

具体看这个帖子 Windows编程 如何改善 Emacs 系统中文输入法的拼音缩放问题 - #9,来自 zdn

还有这个帖子 windows下emacs这一点比不了vim

相关的报告 #68339 - 29.1; Emacs doesn't support Microsoft PinYin Input Method well - GNU bug report logs

Windows下的emacs 它的preedit窗口字体大小是不会跟着字体的缩放而缩放的 而vim可以 我本人是更喜欢内联在emacs里面的 我认为这样编辑体验更好 最近我有空了 给emacs的Windows输入法从源码方面给实现了preedit的渲染

这是示例

a

这个延迟比我之前通过命名管道通信的方案还高一点 是我没有想到的

最后仓库在这里

7 个赞

光看标题还以为仅对微软输入法(原生输入法)有效,其实所有用到输入框架的系统输入法都可以享受这个吧。

对 我试过小狼毫的也是可以的

我这个是改的窗口事件发给elisp

让elisp去绘制的

我马上再把标题改的离谱一点

已经提交了patch了

2 个赞

虽然自己发了前面那个帖子之后,看到万象输入法帖子就从微软拼音切换到万象了😄 但还是要为楼主点赞👍

能内联在emacs里面体验才会更好 我不习惯输入法自己去渲染 所以让emacs自己去渲染了 这个问题是elisp层面无能为力的 我这个patch如果合并不进去的话 我想我会把我之前用的动态模块方案 发到melpa上什么的了 希望能合并吧

1 个赞

感谢楼主,稍后编译试用下

楼主愿意看一看 emacs -nw Windows 系统 无法输入中文 是否有能力解决吗

是不是就解决掉 Windows 上输入法输入时显示奇怪的效果了?

如果是的话那就 :+1:

可以看仓库和示例 解决的话是解决了 通过窗口事件得到了输入法合成的字符串也就是拼音 然后发给elisp用overlay绘制出来 不是设置的字体大小什么的 不过这个延迟有点太高了 我之前通过动态模块用Windows的命名管道来通信的 比现在这个改emacs主线程快1倍 不知道为什么会延迟这么高

1 个赞

这个和终端有关系吧

上游是这么说的

AFIU the current code doesn’t support it, because it uses ReadConsoleInputW, which is too low-level to read the characters produced by multi-stage IME composition windows. AFAIU we need to switch to ReadConsole instead, but the question is how to do that and remain compatible with the current functionality, which you can fund in w32inevt.c, where we support the keyboard and the mouse events on the Windows console.

bug 81495(暂时没找到超链接)

这个是终端的吧 我的这个是gui的

1 个赞

终端的这个 我看过Windows terminal的源码 是terminal自己绘制的内联字符串 所以Windows termianl里面用emacs是直接支持内联编辑的

1 个赞

大佬,输入时能否保持候选窗口不动?

比如下面这样的:

没仔细研究过 应该可以 你可以去看一下具体的绘制el文件

1 个赞

如果要合并到上游的话,最好能实现这种输入时保持候选框不动的风格。输入法在系统中的其他应用上也是这样的效果,不然从其他应用切换到 Emacs 会有点不适应。

昨天晚上被审核拷打的有点狠 我今天在改patch了 给一并解决

2 个赞

这个东西改起来还要改c源码 让我多写了几行代码 不知道review的时候会不会被拷打

a

3 个赞

patch更新了

:+1: 牛,这效果和在其他应用中一样了。 期待合并到master,又多了一个用master的理由 :grinning_face_with_smiling_eyes: