librime icon indicating copy to clipboard operation
librime copied to clipboard

数字后符号不能直接上屏

Open Matthew-Harris-36 opened this issue 4 months ago • 13 comments

小狼毫最新版,五笔。在输入数字后,紧跟着的,。:都会变成半角字符在候选区,而且只有这么一个。我想变成直接上屏。

看了https://github.com/rime/librime/pull/981 。在wubi86_jidian.schema.yaml、wubi86_jidian.schema.custom.yaml、symbols_diy.yaml、punctuation.custom.yaml、default_diy.yaml里都添加了patch: punctuator/digit_separator_action: commit 还是不行。

请指导。

Github不支持yaml格式上传,改成了txt。

wubi86_jidian.schema - 副本.txt

Matthew-Harris-36 avatar Jul 29 '25 02:07 Matthew-Harris-36

建議接受默認設定……

數字之後,有中文和西文標點兩種常用符號,所以顯示爲符號候選。 回車或空格提交西文標點(小數點),再按一下符號鍵提交中文標點。

這裏給出的代碼是在補丁文件裏用的:

patch:
  punctuator/digit_separator_action: commit

配置補丁如何使用,詳見: https://github.com/rime/home/wiki/CustomizationGuide#%E5%AE%9A%E8%A3%BD%E6%8C%87%E5%8D%97

lotem avatar Jul 29 '25 03:07 lotem

@lotem 我觉得这个行为很奇怪,其他符号如果有多种情况的话,是把多个符号作为候选词同时显示出来,这个数字后的,.按键,是单独显示,.的菜单,再按一下才显示中文标点,这样的设计非常不直观,对于没有看过更新说明的用户来说,遇到这种情况,完全不会想到需要再按一下相应的按键才会切换成中文标点

adamhj avatar Jul 31 '25 09:07 adamhj

@lotem 我觉得这个行为很奇怪,其他符号如果有多种情况的话,是把多个符号作为候选词同时显示出来,这个数字后的,.按键,是单独显示,.的菜单,再按一下才显示中文标点,这样的设计非常不直观,对于没有看过更新说明的用户来说,遇到这种情况,完全不会想到需要再按一下相应的按键才会切换成中文标点

這個場景跟通常的符號候選不同,支持輸入數字分隔符,就得能繼續輸入數字,而不能用數字選擇符號候選。

目前這個實現,「.」不是顯示在候選菜單裏,而是編碼欄。 如果設 style/inline_preedit: true,編碼欄嵌入輸入框,「.」以加下劃線的形式顯示在數字之後,就比較簡潔、自然了。

我起初也做過顯示符號候選(只顯示「。」且只能用空格選擇),用戶也會迷惑該怎麼選。大家比較之後決定現在這個設計。

可以優化的: 用退格鍵刪除小數點,再敲「.」鍵不再識別爲數字分隔符。如此和 punctuator/digit_separator_action: commit 的操作更一致。 @rime/engine

lotem avatar Jul 31 '25 10:07 lotem

@lotem 我觉得这个行为很奇怪,其他符号如果有多种情况的话,是把多个符号作为候选词同时显示出来,这个数字后的,.按键,是单独显示,.的菜单,再按一下才显示中文标点,这样的设计非常不直观,对于没有看过更新说明的用户来说,遇到这种情况,完全不会想到需要再按一下相应的按键才会切换成中文标点

這個場景跟通常的符號候選不同,支持輸入數字分隔符,就得能繼續輸入數字,而不能用數字選擇符號候選。

目前這個實現,「.」不是顯示在候選菜單裏,而是編碼欄。 如果設 style/inline_preedit: true,編碼欄嵌入輸入框,「.」以加下劃線的形式顯示在數字之後,就比較簡潔、自然了。

我起初也做過顯示符號候選(只顯示「。」且只能用空格選擇),用戶也會迷惑該怎麼選。大家比較之後決定現在這個設計。

可以優化的: 用退格鍵刪除小數點,再敲「.」鍵不再識別爲數字分隔符。如此和 punctuator/digit_separator_action: commit 的操作更一致。 @rime/engine

既然如此,那么我建议在inline_preedit: false的情况下,在没有编码栏的时候,从输入一个数字开始,就进入这个特殊模式(或许可以叫数字模式),在这个模式里继续输入数字/digit_separators里定义的符号的时候,输入内容都显示在编码栏里;如果输入了其他符号,或者通过连续输入,.切换成中文符号,就上屏并退出该模式,我觉得这种形式比现在的稍微直观一些,让人能意识到“啊,这是一个数字专用的模式”,并且行为和inline_preedit: true的行为也更接近

adamhj avatar Jul 31 '25 10:07 adamhj

没有编码栏的时候,从输入一个数字开始,就进入这个特殊模式(或许可以叫数字模式),在这个模式里继续输入数字/digit_separators里定义的符号的时候,输入内容都显示在编码栏里

可以設置成這樣。參考大寫的規則 https://github.com/rime/rime-prelude/blob/3c602fdb0dcca7825103e281efc50ef7580f99ec/default.yaml#L55

但是默認設置並非如此,因爲一開始無法預知會輸入數字分隔符。 數字直接上屏體驗更好。

lotem avatar Jul 31 '25 12:07 lotem

没有编码栏的时候,从输入一个数字开始,就进入这个特殊模式(或许可以叫数字模式),在这个模式里继续输入数字/digit_separators里定义的符号的时候,输入内容都显示在编码栏里

可以設置成這樣。參考大寫的規則 https://github.com/rime/rime-prelude/blob/3c602fdb0dcca7825103e281efc50ef7580f99ec/default.yaml#L55

但是默認設置並非如此,因爲一開始無法預知會輸入數字分隔符。 數字直接上屏體驗更好。

试了一下:

patch:
  recognizer/patterns:
    digital: "^[0-9][0-9,\\.\\:']*$"

这样又无法实现两次按键触发中文符号并上屏退出该模式了,感觉要实现还需要写个扩展才行


数字直接上屏体验确实好,但是孤立的,.不上屏很别扭,体验上讲和我调设置的时候设错了导致输入法出错的感觉很像

adamhj avatar Jul 31 '25 12:07 adamhj

不喜歡就關了唄。 二樓提供配置了。

lotem avatar Aug 01 '25 02:08 lotem

数字直接上屏体验确实好,但是孤立的,.不上屏很别扭,

我的意思是,用戶按下第一個數字鍵時,輸入法無法預知用戶只輸入數字,還是會輸入包含小數點的數字串。對後者來說,將整個數字串下劃線是體驗最好的;對前者來說則不如數字直接上屏方便。但是在那一刻,無法判斷用戶的用意。輸入純數字的概率大些。

lotem avatar Sep 24 '25 06:09 lotem

如果一開始輸入數字就進入帶下劃線的「數字模式」更加偏離用戶已有習慣。

假如啊,要做提供各種格式的數字候選,數字輸入模式才有意義,值得用家接受多確認一次的麻煩。

lotem avatar Sep 24 '25 06:09 lotem

如果一開始輸入數字就進入帶下劃線的「數字模式」更加偏離用戶已有習慣。

假如啊,要做提供各種格式的數字候選,數字輸入模式才有意義,值得用家接受多確認一次的麻煩。

其实真的需要多一次确认的场景很少,因为如果只是文本中插入一段数字的情况下,输完数字不确认直接输后面字符的编码,应该自动确认,只有当要输入数字结尾的时候才要确认;真的要大量输入数字的时候应该切英文模式更合适

这个也只是个想法,我觉得比目前的设计稍微直观些,可能实现起来确实也有点麻烦就是了

adamhj avatar Sep 24 '25 07:09 adamhj

另外一个问题是punctuator/digit_separator_action: commit并不能回退到旧版本的行为逻辑,打了这个补丁后,在中文模式下,非数字后面输,,而在数字后面输,直接就出来了,,连个选择的机会都没有;实际上要退回老版本逻辑应该用:

patch:
  punctuator/digit_separators: ""

这样保证中文模式下无论是否在数字后面输,出来的都是,要输半角符号切模式就是了

adamhj avatar Sep 24 '25 07:09 adamhj

我之所以觉得新模式很难用,大多数时候还不是在输入数字后面接一个符号的时候,更反直觉的是在输入完一个数字,然后(用键盘或者鼠标)移动光标到别的地方想插入一个符号的时候,因为rime无法识别移动光标的动作,所以还认为是接在数字后面的输出,然后蹦出来一个半角符号的预输入框,这种情况经常让我楞一下;

这个问题本质是输入法内部存在一个隐式的内部状态,用户输入完数字后,此时没有任何输入法相关的UI元素,用户自然会以为当前输入法处于一个默认的初始状态,但是实际上输入法内部还处于一种“上一个字符是数字”的特殊状态,这就导致之后的程序行为和用户预期不一致;我之所以提出这个数字模式,就是将这个内部状态显现出来,时刻在提醒用户当前输入法处于一个输入数字的特殊状态,这样用户就清楚的知道应该使用这个模式下特有的交互逻辑,不会出现非预期的反应

adamhj avatar Sep 24 '25 08:09 adamhj

我说则么按标点则么出现一个奇怪的菜单,看着就像之前出bug打不了字时一样,没有候选没有原始码也没有序号,只有半张小皱脸·^·

Image

试用了一下发现是目前的上屏操作与预期不符

数字后的。,变为半角.,应该当且仅当后续依然是数字时。数字后跟半角.,但后续不是数字的情况我没有想到任何案例,除非把概率4.几这种一般人不会用的表达方式算进去,即使算进去,这种场景概率远远低于数字结尾的概率,完全可以单独麻烦一点手动处理。

因此建议行为更改为

  • 数字后输入.,时转换为半角
  • 继续输入0-9时连同数字上屏
  • 其余情况均回退为原始输出(。,

例如空格、回车、字母,此时均应回退为原始输出,示例

预期行为:

章节3后面是章节4。
背诵章节5。对了还有章节6。    ——小明留

目前实际行为:

章节3后面是章节4.
背诵章节5.对了还有章节6.    ——小明留

byzod avatar Dec 14 '25 05:12 byzod