Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

中文模式下,数字后的标点不应该自动转换为半角 #972

Closed
oTnTh opened this issue Jan 12, 2025 · 11 comments
Closed

中文模式下,数字后的标点不应该自动转换为半角 #972

oTnTh opened this issue Jan 12, 2025 · 11 comments

Comments

@oTnTh
Copy link

oTnTh commented Jan 12, 2025

目前在rime的中文模式下,数字字符后的句号(“。”)会被自动转换为半角的小数点,而且这是一个无法关闭的默认行为。

相关代码在75行:https://github.com/rime/librime/blob/master/src/rime/gear/punctuator.cc

  if (ch == '.' || ch == ':') {  // 3.14, 12:30
    const CommitHistory& history(ctx->commit_history());
    if (!history.empty()) {
      const CommitRecord& cr(history.back());
      if (cr.type == "thru" && cr.text.length() == 1 && isdigit(cr.text[0])) {
        return kRejected;
      }
    }
  }

这样的设计需要满足一个条件:在中文里,数字符号不可能出现在句尾。

但是这个假设并不成立,以下是我从个人笔记里翻出来的一些句子:

  • 2022-06-18,到手价102.95,斤价429。
  • 画面还可以,但是卡顿很多,帧率会从60直接掉到0。
  • 家里虽然有延长线,应该都不支持USB 3.0。
  • XX市XX路,姓名,189XXXX。
  • 先升级到越狱比较简单点的版本,5.10.3。
  • 最后还是买了个K60。
  • 第一个4G的fat32,剩下的则格式化为ext3。

或许给用户提供一个选项会是一个更好的处理方式,诸如punctuator/half_shape_after_number之类的?

@oTnTh oTnTh added the bug label Jan 12, 2025
@LEOYoon-Tsaw
Copy link
Member

句尾的數字佔比還是少,不可否認大多數情況都是小數點

@oTnTh
Copy link
Author

oTnTh commented Jan 12, 2025

句尾的數字佔比還是少,不可否認大多數情況都是小數點

“少”并不等于“没有”,给个选项让用户自己决定才是更合理的做法。

实际上搜索一下本项目的issues,这个问题被提出过很多次了。

@LEOYoon-Tsaw
Copy link
Member

就算加個選項又能怎樣呢,難道就能自動識別了?用戶關閉了之後又會抱怨打出3。14,2。3章這種東西

@lotem
Copy link
Member

lotem commented Jan 13, 2025

一個辦法是數字不直接上屏,數全寫完再按空格鍵回車鍵上屏。這樣就可以區分數字中的小數點和數字之後的句號。缺點是輸入較少的數字不如直接上屏方便。

我剛剛從你們的討論中想到,可以自動識別可能是小數點的場景,提供兩個符號候選。如果想要句號,要多打一次 .
選中第二個符號候選,再按空格上屏……

這種方案稍稍變化一下。打到 . 可以只顯示中文句號候選,要手動按空格鍵上屏句號。如果繼續輸入數字,就自動變成小數點。

@lotem
Copy link
Member

lotem commented Jan 13, 2025

還有一個選項……
就是現在的選項。
從交互簡單的角度來說,刪掉 . 再重新打句號是最快的、容易理解。
大公司的輸入法好像也這樣處理。

@ksqsf
Copy link
Member

ksqsf commented Jan 13, 2025

可以考虑维持立即上屏+小数点识别,但在触发小数点后再按一次句号则替换小数点成正常的句号,相当于减少一次退格键。不过我不清楚能不能在所有前端上实现

@oTnTh
Copy link
Author

oTnTh commented Jan 13, 2025

在当前版本的微软拼音中,并没有“数字后的句号自动转换为半角”的功能。

搜狗拼音我好久没用了,以前的话是有这个功能,并且默认是打开的,不过用户可以自主关闭。

去网上搜了一张图,“智能调整数字后标点”。虽然不知道具体怎么个智能法,但也是可以关掉的。

001

增加一个诸如punctuator/half_shape_after_number的选项,应该是代码改动最小,最不容易引入新bug的实现方式了。考虑到兼容性,该选项的默认值可以为true,不喜欢的人自己去改配置文件即可。

至于连续按两下按键,上屏不同符号的功能,貌似搜狗也是有的:

002

如果有大佬愿意为rime添加这个功能当然很好,但我认为即便实现了该功能,也应该给用户一个可以关闭的选项。

输入法是个高度个性化的东西,用户的环境、设备、习惯都有可能存在很大的不同。

以句号和小数点这个问题为例,对于使用104全键盘,又不在意移动手腕的用户来说,主键盘区输入句号,小键盘区输入小数点,就是一种清晰明确的输入方式。而目前的rime对于这名用户来说,需要“按两下句号,方向键左,退格,方向键右”,无疑是增加了额外的心智负担。

开发者受限于个人习惯和经验,很难穷尽一切可能的使用场景,所以我认为rime应该保持灵活强大的特色,把可配置权留给用户,而不是替用户做出选择。

@LEOYoon-Tsaw
Copy link
Member

還有一種可能,有這種需求的用戶可以為「。」和「.」分配不同按鍵,就像iOS中文輸入法一樣。

image

@oTnTh
Copy link
Author

oTnTh commented Jan 13, 2025

如果你的意思是保持rime现有设计不变,让用户另外设定一个快捷键输入句号,这种设计会导致使用逻辑变得很复杂:

1、处于中文输入模式时,大部分情况下,period表示句号;
2、跟在数字字符后面时,period表示小数点;
3、情况2时,如果需要输入句号,必须按另外一组快捷键,比如win+period。

关键在于,有一部分人并不想要“数字后的某些字符自动变为半角”的功能。将该功能保持默认开启的状态,然后给一个选项让不喜欢的人关掉,皆大欢喜不好么。

lotem added a commit to lotem/librime that referenced this issue Jan 16, 2025
fixes rime#972

use ascii punctuation ,.:' after numbers.
they are auto-committed if followed by digit.
or commit manualy with space key.
double strike the key to access the original binding.
@lotem lotem removed the bug label Jan 16, 2025
lotem added a commit to lotem/librime that referenced this issue Jan 17, 2025
fixes rime#972

use ascii punctuation ,.:' after numbers.
they are auto-committed if followed by digit.
or commit manualy with space key.
double strike the key to access the original binding.
lotem added a commit to lotem/librime that referenced this issue Jan 17, 2025
fixes rime#972

use ascii punctuation ,.:' after numbers.
they are auto-committed if followed by a digit.
or commit manualy with space key.
double strike the key to access the original binding.

support half-shape and full-shape forms.
opt-out with `punctuator/convert_punct_in_number: false`.
lotem added a commit to lotem/librime that referenced this issue Jan 17, 2025
fixes rime#972

use ascii punctuation ,.:' after numbers.
they are auto-committed if followed by a digit.
or commit manualy with space key.
double strike the key to access the original binding.

support half-shape and full-shape forms.
opt-out with `punctuator/convert_punct_in_number: false`.
lotem added a commit to lotem/librime that referenced this issue Jan 19, 2025
fixes rime#972

use ascii punctuation ,.:' after numbers.
they are auto-committed if followed by a digit.
or commit manualy with space key.
double strike the key to access the original binding.

support half-shape and full-shape forms.

customize string `punctuator/digit_separators` to specify which ascii
characters are digit separators.
@lotem lotem closed this as completed in 28a234f Jan 19, 2025
@oTnTh
Copy link
Author

oTnTh commented Jan 19, 2025

我从这里下了一个artifact-Windows-msvc-x64.zip来测试: https://github.com/rime/librime/actions/runs/12854606965

punctuator/digit_separators的设置似乎并不生效,不管设置成空字符串还是随便什么,小数点和冒号等都是一样都按两次全角。

update:

找到问题了,该设置项需要写在方案的配置文件中,而非default.custom.yaml里,是我先入为主了。

非常感谢诸位大佬的辛勤工作。

@oTnTh
Copy link
Author

oTnTh commented Jan 19, 2025

我稍微搜了一下,以下issues都跟本贴相关,应该都可以标记完成了:

#376
#486
#712

以下似乎也跟本贴相关,但我不确定问题是否已经得到处理:

#351
#670

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

4 participants