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

正在努力理解这个功能,现在可能已经习惯了现有的逻辑了,后续多注意一下关于标点的问题

我想可能是我们的出发点不同。你是站在输入法设计者的角度看问题,你的考虑没错。我是在使用者的角度看问题,我的需求应该要在输入法的范畴之外寻求解决方案。不过就目前情况看来,已经很好用了。先继续用吧。我自己在rime–inline-ascii后面加advice做点定制就好了。多谢你的工作。

有了这个,可以在中文下使用中文标点了。也不影响 inline ascii 的进入。

请教下,在这种模式下,因为(defun rime--display-preedit ()) 已经清空了函数,如果输入的是大写字母开头的话,就没法显示了。

我目前的配置如下,可以解决一半这个问题。但是输入完一个大写的英文单词后必须加空格才能恢复中文。

(setq rime-show-preedit t)
(defun rime--display-preedit ())
(setq rime-disable-predicates '(rime-predicate-prog-in-code-p
                                rime-predicate-current-uppercase-letter-p
                                rime-predicate-after-alphabet-char-p
                                ))

@DogLooksGood 报个小问题。readme里面predicate没列全。下面这两个没列出来:

  • rime-predicate-auto-english-p
  • rime-predicate-org-latex-mode-p
  • rime-predicate-org-in-src-block-p

容我研究研究正经的解决办法,简单的来说就是能让这个rime–display-preedit实现相同效果,但不需要用 overlay 的办法。

1 个赞

@DogLooksGood 能不能帮我看下我哪里弄错了,不生效啊。

(advice-add 'rime--inline-ascii :before
            '(lambda ()
                "Delete a blank before entering inline-ascii state"
                (when (rime-predicate-space-after-cc-p)
                    (delete-char -1))))

显示临时文本一般用overlay

(let ((ov (make-overlay (point-max) (point-max))))
  (overlay-put ov 'after-string "Fake News!")
  ov)

image

我就是用的这个方式,但是这个 overlay 放置的 point 在屏幕上实际的位置是 overlay 中最后一个字符的位置。所以就没有办法指定一个 point 把 posframe 放在那个位置。

对于这个问题,有什么解决的思路吗?

我打算研究一下emacs-rime,
看看如何让smart-input-source把emacs-rime当作一个input-source.
看有没有冲突
空格这类的脏活,让smart-input-source来做

3 个赞

这个思路太好了。

请教一个关于颜色设置的问题。
我想修改一下候选框的颜色,但是测试下来发现目前最新版本emcs-rime是自动适应主题颜色的,不知道有什么设置还可以定义颜色吗?还是只能通过主题入手修改?

这是我目前的颜色设置,但显示的还是主题的效果:

      (setq rime-posframe-properties
            (list :background-color "#333333"
                  :foreground-color "#dcdccc"
                  :font "Microsoft Yahei"
                  :internal-border-width 15))

所有的 face 都可以设置,不需要改 posframe 的参数。

这个感觉不难实现,我有时间试试…

多谢指教,通过custom -set-faces 可以生效了。

我用这个方式的话,如果在 insert 一些字符之后停留很久的话,会产生 undo 的 boundary ,有什么处理来避免这个吗?

(setq rime-posframe-fixed-position t)

最新版添加了这个选项,让候选固定不动,默认 nil,还在测试中。

没有仔细研究过,这种方式是从eim继承过来的

效果很好,赞 :+1:

更新:
Org-mode下如果采用inline模式,显示位置会跑到前头,不知道是什么原因。Org-mode没加载其他包。 其他prog-mode是显示正常的。

好像需要更多信息来重现这个问题 rime-show-preedit 是 t 的话也有这个问题吗