我如何禁用 X-window 系统范围的设置来拦截 Ctrl-Period 以进行某种特殊输入弹出?
更多详情:我试图将 emacs 命令绑定到 Ctrl-Period (C-.),这在以前的系统上运行良好。在这台新电脑上,X 级别 (xinput?xkb?) 似乎发生了一些事情,拦截了按键,因此 emacs(或大多数其他应用程序)根本看不到它。
相反,当我按住 Ctrl 键并按下句号时,会出现一个带下划线的小“e”,当我在图形窗口中时,它会以内联方式显示,或者在终端或 emacs 窗口中弹出(见下图)。如果我输入更多字符,它们会显示在带下划线的“e”后面,也带下划线。后面的字符可以退格,但“e”不能,它会一直保留,直到我按下 Enter、Esc 或第二个 Ctrl-Period。在后两种情况下(第二个 C-. 或 Esc),所有带下划线的字符都会消失,没有其他影响,而在前一种情况下(Enter),它们会消失,但会立即发送后续击键。
这显然发生在窗口系统级别,因为如果我在一个应用程序中按下 C-.,然后将光标移动到另一个应用程序中进行输入,弹出窗口就会在窗口之间跳转到具有焦点的窗口(有时会产生奇怪的副作用)。
最后,一些应用程序做查看按键:如果我在 Chrome 中向空白网页添加按键事件侦听器,只要输入元素未聚焦,按键事件就会完全按照我的预期发出。但如果我聚焦了输入元素,则会发出奇怪的“未识别”按键,同时显示带下划线的“e”。
答案1
这看起来像一些 X 输入法提供商的“预编辑区域”,允许您在将字符发送到应用程序的实际输入之前编写字符。
(例如,在 fcitx 或 IBus 中编写日文文本时,或者在 GTK 的 Ctrl+Shift+U 中输入 Unicode 代码点时,会使用预编辑对话框。通常它是应用工具包例如 GTK 或 Xlib沟通使用 IM 模块,告诉它文本字段处于焦点状态等)
在这种情况下,它很可能用于按名称输入表情符号,从“e”前缀和键盘快捷键猜测。我猜这个特定的“输入法”是 IBus 输入框架的一部分,其中内置了表情符号输入,默认快捷键确实是 Ctrl+句号。(通常它应该显示一个图形选择器,但在某些情况下,仅提供基本的 IM 支持,并且您得到的只是预编辑字段。)
但是,请检查 XMODIFIERS 和 GTK_IM_MODULE 环境变量以获取更多线索。(IBus 不是唯一的 XIM 服务器。)
IBus 的键盘快捷键可通过 ibus-setup 或 GSettings 自定义:
gsettings get org.freedesktop.ibus.panel.emoji hotkey
这表明默认值为['<Control>period']
。要将其设置为空列表,请使用:
gsettings set org.freedesktop.ibus.panel.emoji hotkey "@as []"