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

我安装emacs-rime后,不设置rime-show-candidate变量时,可以在minibuffer中显示候选词。但我想让候选词跟随显示,设置为posframe后没有候选词,经测试发现设置为其他任何值也不会显示候选。请问如何解决这问题呢? 我使用AUR上的emacs-git, 版本28,doom emacs配置

你需要的是 posframe, 如果不能正常显示的话,可能需要看一下 posframe 在你的 emacs 配置下是否工作正常。

doom emacs会安装posframe的,而且使用了posframeivy-posframe可以正常工作,使用pyim时也可以显示候选词。

请问该如何查看posframe是否正常工作呢,我按下M-x posframe可以查看到posframe的函数,也是可以执行的,应该算是没问题吧?

在我的环境里用posframe仓库中的代码来测试,感觉的确是没问题的。

那在 rime-show-candidates 用 posframe 中如果不成功,我觉得应该是发生了一些错误,如果 pyim 能用,那么 posframe 是没有问题的。

可以看看 Messages Buffer 里面有没有信息之类的。

上面的坛友,可以尝试一下重新设计smart-input-source

  • 支持紧凑中英文输入。中文^ 后面输入<space>english<return>会得到中文english
  • 支持中文和英文之间加空格。中文^ 后面输入<space><space>english<return>会得到中文 english

@aqua0210 谢谢你。正是你的设想给了我启发。

2 个赞

你手脚真快。这么快就实现了。赞一个。

有个疑问,为什么最后要来个回车?只用空格切换其实更顺手一些。中文后面加一个空格就切换为英文,英文后面连续输入两个空格就切换为中文。如果以中英文之间没有空格为前提的话,这样的逻辑更方便。如果加个回车,其实是用空格加回车来切换。

加个选项不删空格?

已完成,等melpa更新。
还没仔细评估好:是否一直启用这个特性
现在加了个选项,可以关闭这个特性

这个就不加了。
想前后有空格,直接前后都有两个空格就可以了,
前后各删掉一个都还剩一个,
连续输入两个空格不费事。

关于 smart-input-source 的,
请移步那边讨论。
打乱主贴就不好了。

另外,smart-input-source 的inline english
本身就是受到了emacs-rime的启发而开发的
不过现在应该走在了前面。

Message没有跟posframe相关的报错啊。。。

不过,在minibuffer里查看候选框也不错。不想折腾了。因为设置了比较大的词库,大部分时间不需要候选框,需要时再去看 minibuffer 也不错,可以降低干扰。

感谢开发了这么好用的工具。

我不太认同使用两个空格,一个空格来达到什么样的效果在 emacs-rime 中会是一个正确的选择。

对于 emacs-rime 这个输入法的方案来说,特别是在集成 rime 的目的下,项目应该有一个明确的边界,以支持输入法的功能为核心,弥补 emacs 自身输入法框架的缺陷为辅助。

让空格不再是空格,显然超出了这个边界。

赞同,我觉得中文后面加一个空格并不好看,太宽,不加空格也不好看,太紧凑了。像Word,Apple手机都是自动加半个空格。这个实现确实不应该是输入法端来做的。
不知道Emacs本身通过elisp能否实现中文后面如果有英文自动加半个空格?

用pangu-spacing?

一个方法是:忍耐

1 个赞

只能忍耐了!
楼上说的pangu-spacing也只是自动加空格,加空格这种方式如果后面需要放到Word或者其他排版软件,要去除空格反而麻烦了。

这个看来是需要Emacs 底层实现了,按目前Emacs对中文的支持程度来说,看来是遥遥无期。

补充:这个问题是是不是可以另外开帖讨论一下,在这里歪楼了 :smile:

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

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

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

1 个赞

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

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

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

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

1 个赞

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