我正在使用ibus-table
(具体来说ibus-table-latex
),并希望禁用以下行为:当我开始输入触发ibus-table
候选列表的内容时(例如 的任何部分\rightarrow
,如\rightar
),候选列表将打开,并且最佳匹配候选已被“预先选定”以供插入。请参阅以下屏幕截图:
我的问题是,即使我按下“有效输入字符”列表中没有的键,例如%
或!
,也会插入这个预先选定的最佳候选字符,而不是我输入的内容。因此,例如,输入\rightarr!
会得到→!
,但我希望在这种情况下显示的文本与输入的文本完全一致。
我尝试了几个不同的选择:
- 我注意到按下Enter会执行与我想要的操作类似的操作(不确定这从何而来;首选项中的键绑定选项卡上没有该功能):它会保留迄今为止输入的文本并关闭候选列表。但是,我不想必须按下特殊键才能执行此操作。
- “提交预编辑”键绑定(默认:Shift)有点类似,但它不使用迄今为止输入的字符,而是“自动完成”当前候选的文本,但不将其替换为相应的符号。这似乎不符合我的要求。
- “取消”键绑定(默认Esc:)不会选择候选词,而是完全删除输入的文本,所以这没有帮助。
- “提交”键绑定(默认值Space:)立即使用最佳候选。
我发现的另一个可能相关的事情是偏好设置中的“自动选择”设置:
但是,它被设置为“否”,所以我不认为这会导致我的问题。
答案1
正如 Gunnar Hjalmarsson 所建议的,我在 GitHub 上打开了一个问题询问这个问题。目前看来,如果不修改代码,这是不可能的ibus-table
,但必要的改变很少并且可以轻松地手动完成:
diff --git a/engine/table.py b/engine/table.py
index 6953e6f..4dcdc7a 100644
--- a/engine/table.py
+++ b/engine/table.py
@@ -4172,7 +4172,7 @@ class TabEngine(IBus.EngineSimple): # type: ignore
if DEBUG_LEVEL > 0:
LOGGER.debug(
'trailing invalid input: keychar=%s', keychar)
- if not self._candidates:
+ if not self._candidates or True:
self.commit_string(self.get_preedit_tabkeys_complete())
else:
self.commit_to_preedit()