libpinyin / ibus-libpinyin

GNU General Public License v3.0
621 stars 88 forks source link

【问题反馈】候选框显示时,大写字母立即上屏导致单词被删、字母乱序 #421

Closed gdh1995 closed 1 year ago

gdh1995 commented 1 year ago

最新版 1.15.2,手动编译开启了云词库、在 Chrome 112 + Ubuntu 22.04 上遇到此问题:

问题复现

  1. 想输入 HostBuffer
  2. 按下 H 后立即上屏
  3. 按下 ost 后,输入法显示候选框,内容是针对 ost 猜测的组词,浏览器网页上显示带下划线的 ost
      1. 虽然猜的词不可能对,但不影响我使用
      1. https://github.com/libpinyin/ibus-libpinyin/issues/420 属于同一类问题,有的键(这次是H)被立即上屏了,但如果放候选框里,感觉会更好
      1. 如果不确定哪个好,能不能再加个配置项 😂
  4. B,原来上屏的“带下划线的 ost”被替换为大写字母 B,而候选框内容不变,仍然是 ost
  5. uffer,候选框内容变成了 ostuffer,按回车后可以上屏到 B 右边

我觉得目前这种流程很不好,影响我临时打长串单词,如果把“大写字母立即上屏”改成添加到候选框里,就显得自然了。

修复建议

添加一个配置项,在启用时输入法应该:

  1. 最好是在中文模式下,对所有不组词的字母,比如大写字母、vu,都显示到候选框里,回车再上屏
  2. 如果方案 1 不够有说服力,至少应当在候选框里有内容时,对追加输入的大写字母等不立即上屏
ping-wu commented 1 year ago

??? 要输入英文时,当然就要按 shift 键转为英文输入模组。我实在不知道问题在那里???

gdh1995 commented 1 year ago

输英文不需要shift啊,要汉字我按空格、1234,要英文我就回车,微软拼音和搜狗拼音就这样。

ping-wu commented 1 year ago

你所建议的“新”功能在 1.15.1 里已有了。在 ibus-libpinyin 的 preference 里,把 English mode 打开,就可以输入 “HostBuffer”:

Screenshot from 2023-05-09 06-43-44

As a long-term ibus-pinyin user,这个功能印象中好像有一点问题,一般我们都是关掉的(也许在 1.15.1 里已经解决了???)。但我个人输入英文时,使用 shift 键已习惯了,用回车键输入英文实在有点怪怪的。FWIW 目前唯一的问题乃是无法直接输入 “v”,必须根据旧的方式,再输入一次。这应该算是一个 bug 吗?

gdh1995 commented 1 year ago

我不喜欢 v 模式,它会造成 view 回车变成 iew。所以我自己下载编译了最新版 ibus-libpinyin 来让我的 ubuntu 22 能关掉 v 模式。这个是背景了,感谢你们能添加这个开关。

我习惯上不用 shift 切换,因为我自己也开发程序,写文档的时候经常要中英文混输,shift 切换太影响我的输入效率了。

不过如果你们觉得 shift 切换的方式更明确,那我也接受。我这个 issue 的核心想法是,如果已经输入了一些字母显示到候选框里,这时候按 Shift+字母 会立即上屏,而不是追加到候选框,这个造成输入顺序和实际打出来的字完全不同,在临时输入 驼峰命名的变量名 时很难受。能不能至少把这个情况特殊处理一下?

epico commented 1 year ago

可能您想输入 Vue 或者 View。如果你想在 ibus-libpinyin 全拼模式下,输入 view, instance,则你需要关闭 英文模式,Lua扩展模式和码表模式。

英文模式只是需要输入 v 来激活而已,或者大写字母也可以切换到英文模式。

ibus-libpinyin 的设计并不支持 i/u/v 输入到 preedit。也许我可以改改看,但是如果引入其他 bug 的话,我只好 revert 这些修改。

gdh1995 commented 1 year ago

我已经关了这些。目前最影响我使用的还是标题里说的,“大写字母无视候选框文字立即上屏”造成文字顺序和输入顺序不同,不知道好不好改。我昨天看了会这个项目英文模式的处理代码没看懂……

ping-wu commented 1 year ago

启动 v 模式可以使用自建的英文词库,不知道搜狗或 rime 有没有这个功能?

我曾使用过 rime,因为它自带的词库很强大,刚开始(当然)很好用,曾建议 Ubuntu 的预设中文输入改为 rime。但后来发现问题很多,configuration 越来越乱,而且因为 rime 自带的词库很乱中文繁简体字常常会被搞混,就又转回 ibus-libpinyin 了。

对于时常必须英中交互输入的使用者,用 shift 键已经习惯了,也不必启用英文模式,根本没有输入 view, vue 等的问题。ibus-pinyin 里的 v, i, u 键有他们特别的用途,要修改前,请先顾虑到长期使用者的习惯。

gdh1995 commented 1 year ago

呃先别讨论习惯不习惯了,我想确认一句:全拼、禁用英文模式下输入 hostBuffer 回车,结果上屏的变成 hBostuffer,这个事情算不算 bug?

gdh1995 commented 1 year ago

然后,微软拼音的 v 长这样 image

但继续输入 iew 的话就变成 image image

搜狗类似。

=============

如果你觉得 shift 更好,也不想加新的配置项来让用户手动启用新的模式,随你吧。首字母直接上屏我也能接受,毕竟顺序没乱只是没有词典补全了。

gdh1995 commented 1 year ago

顺带请问你是 libpinyin 项目的开发者吗?还是主要负责社区答疑的协助人员,又或者是个普通路人?

ping-wu commented 1 year ago

@dgh1995 > 呃先别讨论习惯不习惯了,我想确认一句:全拼、禁用英文模式下输入 hostBuffer 回车,结果上屏的变成 hBostuffer,这个事情算不算 bug?

我试了一下 v 模式,问题很多,根本不稳定。我使用的是 ibus-libpinyin v. 1.15.1 (Debian Sid),可能因为最近 “增加” 功能的关系,引进了 bugs,跟我以前使用的经验完全不同。如果有更好的中文输入方法可以在 Linux 里使用,请告知。

【Ed】刚刚发现,如果要启动 v 模式,必须先把英文模式打开。Even for a long-term ibus-libpinyin user, this is a news to me. 如果能依照 微软拼音的方式修改 ibus-libpinyin 的 v 模式,倒是很好的改进。

epico commented 1 year ago

这个问题我回来看一下。

ping-wu commented 1 year ago

如果第一个字母不是大写则必须启动 v 模式,如下:

test resized

hostBuffer 这个字已被 cached 到 v 模式的英文字库,因此出现在候选词里。我们公司的(桌面)作业系统是 Debian Sid,员工必须根据公司的SOP来操作,使用 ibus-libpinyin 完全没有问题。一般 Linux 桌面使用者总是希望开发者能配合自己以前的习惯修码,这当然没有问题,但希望在修改程式时注意到长期,公司使用者的过去所投入时间。尤其不要引入新的 bugs。

epico commented 1 year ago

Fix in https://github.com/libpinyin/ibus-libpinyin .

其实,我也不知道这个功能会不会引起其他问题;如果有的话,可能会 revert 这个 patch.

gdh1995 commented 1 year ago

我今天晚上拉代码测了一下,确实能显示候选框了,输入HostBuffer 也不会乱序,谢谢。

epico commented 1 year ago

不客气

gdh1995 commented 1 year ago

补充一个小问题,可改可不改的那种:

最新 commit 版本输入 vie 时没有候选词,只有输入了 view 才会给出 viewviews 两个候选,不知道方不方便改成在 vie 或者 vi 的时候就给出若干英文单词作为候选词。

编译选项里开启了云输入 --enable-cloud-input-mode

epico commented 1 year ago

可以自行修改 src/PYPEnglishCandidates.cc 中的 MINIMAL_ENGLISH_CHARACTERS 常量。

个人不推荐修改这个常量。