当inline_preedit为false时,光标处会产生奇怪的字符。
测试时使用配置为默认配置(即删掉所有配置文件后,重新部署),在此基础上仅增加增加一条inline_preedit: false。
问题一,效果如图所示。经过确认此空白符号为U+3000

如果此时输入框失焦,这个空白符号会直接上屏。
问题二,同样是这个配置,在VSCode里打中文并删除,会在删除后残存一个不可见的符号。此不可见符号会被静态检查工具识别并提示(下图所示代码的第二行最后一个字符)。经过确认此不可见为U+0008

请问这两种情况是否正常,我该如何配置以便不产生这类符号?
第一種是爲了解決兼容性問題而特意添加的,代碼在這裏: https://github.com/rime/squirrel/blob/cf9c4ab1d35a54ac09e8b03fc45968ae8478a16a/SquirrelInputController.m#L523 時間比較久了。可以重新測試一下適用情況。
第二個問題,我偶爾遇到但不容易重現,所以一直沒有找到原因。U+0008這是個有用的線索。看樣子結果是把刪除鍵直接提交進去了。
重新測試了一下。第一處添加的佔位字符仍是必要的,否則一些程序如Terminal.app不知道輸入法正在編輯文字,會搶先處理BackSpace等功能鍵。
第二個場景我也測試了,沒能重現問題。最好找到重現步驟。
第二個場景我也測試了,沒能重現問題。最好找到重現步驟。
感谢您的回复。对于问题二,我会在找到高复现的方法后,重新进行反馈。请暂时不要Close Issue。
有时候还会打出回车符也就是U+000D。
还有几次在Xcode里面按出了Control+s对应的控制字符。
有待觀察這項改動 https://github.com/rime/squirrel/commit/b875d194d9799ccc74453292c670fcca892799fa 對本問題的影響。
感觉问题二出现的概率比之前低了。依旧未找到能高复现的方法。
已找到在 VSCode 下100%复现的方法。
过程描述:
- 输入字符后,鼠标点击输入法框(用其他方法使输入框失焦,亦可)。
- 屏幕残留一个
U+3000。 - 再次输入中文,此时按 Backpase 删除 preedit 的所有内容。
- 屏幕上会残留
U+3000,和一个不可见的U+0008。
之后的每次输入,在删除掉 preedit 区域内容时,都会残留上述过程编号4的内容。即使是重新部署鼠须管也无法正常,需关闭VSCode。
但是同样的方法在 iTerm2/文本编辑 上并未复现成功。原因可能出现在上述过程的编号2处,因为这两个应用下的输入法框在失焦时,上屏内容为 predit 的内容,而不是U+3000。
这个问题大概率与失焦时输入框的上屏内容有关,如果失焦时未能上屏 preedit 的内容,就会产生此问题。
已找到在 VSCode 下100%复现的方法。
过程描述:
- 输入字符后,鼠标点击输入法框(用其他方法使输入框失焦,亦可)。
- 屏幕残留一个
U+3000。- 再次输入中文,此时按 Backpase 删除 preedit 的所有内容。
- 屏幕上会残留
U+3000,和一个不可见的U+0008。之后的每次输入,在删除掉 preedit 区域内容时,都会残留上述过程编号4的内容。即使是重新部署鼠须管也无法正常,需关闭VSCode。
但是同样的方法在 iTerm2/文本编辑 上并未复现成功。原因可能出现在上述过程的编号2处,因为这两个应用下的输入法框在失焦时,上屏内容为 predit 的内容,而不是
U+3000。这个问题大概率与失焦时输入框的上屏内容有关,如果失焦时未能上屏 preedit 的内容,就会产生此问题。
上面提到的一項改動,是在失去焦點時改爲提交輸入串。我設想會對這個問題有影響,因爲U+3000就是輸入碼不在行內顯示時用來佔位的preedit字符串,如果之前提交這個字符經過了輸入法處理而不是被VSCode直接捕獲,那麼在鼠鬚管0.15.2之後就不應該再出現了。但也沒有把握不會再插入不可見的控制字符。
要不要把 U+3000 换成 ASCII SPACE?
要不要把 U+3000 换成 ASCII SPACE?
不要
@lotem 顺便问一下好了。PreEdit 这个词到底怎么来的呢(词源)? macOS 的 Input Method Kit 内的专有术语是「composition buffer」组字区/组字缓冲区。 而程序对内文组字区的支持往往被通称为「inline composition」。