欢迎尝试 emacs-rime,计划中功能已全部完成。

可以实现的,我觉得这个东西的实现应该在 UI 上而不是在内容上。

实现的方式就是在中英文的中间加一个 overlay 来显示一个的空格字符,不影响文本的内容,只影响看上去的样子。

一个样例就是 emacs-rime 的嵌入文本,那个就是用 overlay 实现的。

1 个赞

我感觉这个比较好解决,一个简单的方式是: advice 拷贝命令,把中文和英文之间的空格删除

大佬们讨论的是自动删空格么?
确实很简单,
我在smart-input-source里实现了。

另外,
很多人说偏好emacs内置输入法
而不使用外部输入法的原因是:
emacs不能记住不同文件使用的是不同外部输入法
这个,我也在smart-input-source里实现了

我想继续问下emacs-rime用户,
还有什么原因阻止了你们使用外置的OS输入法?

1 个赞

因为外部的输入会采集用户的输入信息,然后进行大数据分析,泄漏用户隐私。而Rime完全是自己养的输入法,客制化比较自由,词库也是自己定义。这是我喜欢Rime的主要原因。

这个是输入法本身的问题
不是emacs内置输入法和操作系统输入法的差别啊。

我记得Rime也有独立版本啊,
可以脱离emacs运行,成为系统输入法。 这样的话,
可以保持在所有软件中用户体验的一致性。

1 个赞

对啊,Rime的优势就是跨平台,可以保持一致性。Emacs-rime 就是直接使用系统的Rime,eamcs-rime相当于系统Rime的前端,所以体验是很好。

emacs-rime 使用 posframe显示的话,体验和系统rime是一样的了,甚至更好,可以搭配其他工具实现一些互动,比如和翻译软件实现互动

在使用上,我觉得Emacs-rime 没法实现Shift切换中/英文是一个遗憾,这个是Emacs本身的问题,不过可以通过按键模拟器曲线救国。

是的,输入法和翻译软件配合简直是变量函数命名完美的组合。

其实Shift单按键用x11技术完全可以实现,然后监控Emacs的窗口进行进程间通讯就可以做到告诉Emacs什么时候是单按键事件。

简单看了下 翻译软件实现互动, 好像结合外部输入法也可以啊。

内部输入法,翻译软件会启动自动输入中文,完成翻译后自动返回英文状态。

外部输入法,Emacs没法控制输入法状态,你就会手动在翻译时来回切换输入法。

插件可以实现的,我在 smart-input-source里面就这样做了。
当然非GUI EMP的话,需要调用外部工具来控制。

还没用过,孤陋寡闻了。

我觉得出发点不同吧,首先 emacs-rime 就是 rime 在 emacs 中的一个前端,简单来说就是

  1. Rime 的逻辑(librime)
  2. Emacs 的 UI

这是我做 emacs-rime 的初衷,因为 fcitx-rime 在 emacs 中的UI不协调,也没有嵌入预览。(当然 Mac 下也是)。emacs 输入法的框架本身可以提供状态管理的能力,非常实用。但是 emacs-rime 并不是单独为了这点而开发的。

这个个人因素很多,我喜欢全屏输词,所以[quote=“goumao, post:484, topic:12048”] 还有什么原因阻止了你们使用外置的OS输入法? [/quote]

我觉得不必过分纠结,毕竟每一个人的输入法使用习惯不同,比如我,我习惯全拼词组输入,不习惯长句输入,所以用 pyim 和 外部输入法效果差不多,但用 pyim 的同时,还附带拼音搜索中文的功能,这个功能对我相当重要

请问一下emacs-rime能否通过设置固定posframe左侧起点的位置,这样输入的时候,候选框就不会一直跟着往后移动,而只是后端延长。
这是目前emacs-rime:

这是系统rime的效果:

暂时不能,或许可以实现

多谢,那就先这么用着了。主要我输入时是一直盯着第一个候选位置,前面一直动的话,视觉焦点也要跟着跳。 :smile:

如果使用了overlay来显示待上屏幕词条,就可以实现,pyim以前也遇到类似问题,后来也通过设置偏移解决了

你说的是嵌入的文本吗?emacs-rime 是用的 overlay

overlay-start 就可以获取到 overlay 的开头

            (pyim-page-tooltip-show
             (let ((func (intern (format "pyim-page-style:%S" pyim-page-style))))
               (if (functionp func)
                   (funcall func page-info)
                 (pyim-page-style:two-lines page-info)))
             (overlay-start pyim-preview-overlay))

我这个 overlay 用的是 after-string,overlay-start 返回了嵌入文本末尾的位置。 :joy: