哈哈,那就需要想其他办法了
pyim 的嵌入文本是怎么实现的?或者说有没有边法让 posframe 出现在行列的默个位置?
应该就是直接在 point 出插入字符串,
(insert preview)
;; Highlight new preview string.
(move-overlay pyim-preview-overlay
(overlay-start pyim-preview-overlay) (point))))
posframe 定位功能可以是一个座标或者 point,也可以是一个 poshandler 函数,所以关键是如何计算出位置
用当前 point - 高亮文本的长度 ? 估计就可以了吧?
并不可以,那个
TEXTTEXT|OVERLAY|
a--------^
横线的这几个位置和最后 ^ 的位置是同一个位置,只能定在后面。 这个位置 -1 就变成了 a,如果再 +1 就回到了 ^ 所以这个可能大概率实现不了。
如果插入真实文本的话,会不会影响 undo?
好像没影响 undo 吧
添加一个不显示嵌入文本的选项是一个办法,不过我更在意有什么好办法能直接解决问题。
实现你需要的效果可以做个这样的 patch
(defun rime--display-preedit ())
把这个函数重定义成空实现就可以了
我暂时先这样用,期待大佬直接解决这个问题。
有件事我不确定,就是如果我用插入文本的方式做嵌入文本的话,我插入文本,上屏之后清空文件,如果这个时候 undo 的话,好像是会把之前插入的文本给还原回来。
如果有办法解决这个问题的话,就可以实现这个功能。
如果是正常删除的话肯定是会影响Undo的,不知道有没有用特殊的删除方法? 另外我想能否在当前行光标后面再弹一个posframe用于显示嵌入文本,并且这个弹窗是透明的,这样也就能达到同样效果了吧?
不行的。
这种情况下如果是 posframe 的话会重叠。
增加了一个新的选项,rime-inline-ascii-holder
值为任意一个 char 表示一位编码,比如 ?a
, 是一个比较无奈的 Hack 的选项。
有时 Rime 中中文标点会直接上屏,比如左全角括号,这种时候会没有办法进入 inline ascii 模式。设置了 (setq rime-inline-ascii-holder ?a)
之后,在确定要 inline ascii 的情况下,输入第一位编码之前,会先自动输入一个 a
, 然后进入 inline ascii,然后输入 (
, 之后删掉最开始的 a
。实现任意字符都能进入 inline ascii 的效果。
设置为 nil
时与之前行为相同,默认为 nil
。
感觉这个可以解决一些之前很复杂的关于标点的断言 @cnsunyour
是合适的,但是不会觉得很反常吗,按了空格却没有插入空格。
对了,问下你是用什么输入法(方案)
rime+五笔86
其实这样挺好
如果有这样的需要,我倾向于扩展几个 hook 出来。
rime-inline-ascii-hook rime-commit-hook rime-cancel-hook
之类的。这样再自由的扩展。
其实中英文之间留有空格反而是我觉得反常的事。原因是中英文之间加空格这件事不是码字的时候应该处理的事情,这是排版软件的工作。如果写出来的东西里面就有空格,那在各种后续排版的时候势必造成一些不必要的麻烦。假如我把在orgmode里面写的东西导成docx文档,office会自动在排版的时候渲染出半个空格,让版面好看。要是我手工加了空格,那排出来的效果就会很怪。这种麻烦事在我之前使用panguspacing插入真实空格的时候就遇到过。中英文之间加空格也许是一个值得提倡的习惯。但是在没有得到全面支持的情况下,在输入法层面将加空格作为默认选择只会带来不必要的麻烦。我在使用emacs-rime写西的时候最后都不得不手工去掉所有不必要的空格,觉得挺麻烦的。这也许是个人的选择吧。有人可以接受,有人不能接受。
所以我觉得emacs-rime做好输入法的本职工作就够了。我同意你“明确的边界”的说法。不需要为了满足每个人的不同输入习惯而做各种定制,但希望emacs-rime能够给用户更大的定制自由。举个例子,按照我之前的使用习惯我会在emacs启动后第一时间就自动打开emacs-rime,输入法默认处于英文状态。以现在emacs-rime的切换逻辑,这是做不到的。我如果在rime里面配置schema的默认状态是英文,就没办法通过断言来自动切换了。中英文切换这种事每个人习惯都不太一样,现在emacs-rime的切换逻辑只能让用户来适应输入法,而不能让用户自己决定自己怎么切换。
这几个hook应该能让用户做出不少扩展。但是这似乎对切换逻辑的扩展没什么帮助吧?现在的切换逻辑上面觉得还是不够自由。其实就一点:怎么自然地从英文切换到中文?emacs-rime上面似乎没有提供什么比较优雅的方法,而如果用户自己想扩展也不太容易和emacs-rime的原有逻辑进行整合。