我的 X11 使用 Ctrl-Period 做什么?如何禁用它?

Ste*_*eve 16 linux keyboard-shortcuts xorg xkb xinput

如何禁用任何 X-window-system-wide 设置拦截 Ctrl-Period 以获取某种特殊的输入弹出窗口?

更多细节:我正在尝试将 emacs 命令绑定到 Ctrl-句点 (C-.),该命令在以前的系统上运行良好。在这台新计算机上,X 级别(xinput?xkb?)似乎发生了一些事情,它拦截了击键,因此 emacs(或大多数其他应用程序)根本看不到它。

相反,当我在按住 Ctrl 的同时按句点时,会出现一个带下划线的小“e”,当我在图形窗口中时,它会内嵌,或者在终端或 emacs 窗口上作为弹出窗口显示(参见下图)。如果我输入更多字符,它们会显示在带下划线的“e”之后,也带下划线。后面的字符可以退格,但“e”不能退格,并且会一直保留,直到我按 Enter、Esc 或第二个 Ctrl-句点。在后两种情况下(第二个 C-. 或 Esc),所有下划线字符都会消失,没有其他效果,而在前一种情况下 (Enter),它们会消失,但会立即发送以下击键。

这显然发生在窗口系统级别,因为如果我按 C-。在一个应用程序中,然后将光标移动到另一个应用程序中进行输入,弹出窗口会在窗口之间跳转到具有焦点的窗口(有时会产生奇怪的副作用)。

最后,某些应用程序确实看到击键:如果我向 Chrome 中的空白网页添加按键事件侦听器,只要我没有聚焦输入元素,按键事件就会完全按照我的预期发出。但是,如果我聚焦了一个输入元素,那么当显示下划线“e”时,就会发出奇怪的“未识别”键。

浏览器位置栏中的 ctrl-period(后跟“123”)的结果:1

在终端、emacs 中 ctrl-period (后跟“456”)的结果类似:2

use*_*686 19

这看起来像某些 X 输入法提供程序的“预编辑区域”,允许您在将字符发送到应用程序的实际输入之前编写字符。

(例如,在 fcitx 或 IBus 中编写日语文本时,或者在 GTK 的 Ctrl+Shift+U 中输入 Unicode 代码点时,会使用预编辑对话框。通常是GTK 或 Xlib 等应用程序工具包与 IM 模块通信,告诉关于文本字段处于焦点等)

在这种情况下,它可能用于按名称输入表情符号,根据“e”前缀和键盘快捷键进行猜测。我猜测这个特定的“输入法”是 IBus 输入框架的一部分,其中内置了表情符号输入,默认快捷键确实是 Ctrl+句点。(通常它应该显示一个图形选择器,但在某些情况下,仅提供基本的 IM 支持,并且您得到的只是预编辑字段。)

但是,请检查 XMODIFIERS 和 GTK_IM_MODULE 环境变量以获取其他线索。(IBus 并不是唯一的 XIM 服务器。)

IBus 具有可通过 ibus-setup 或 GS​​ettings 自定义的键盘快捷键:

gsettings get org.freedesktop.ibus.panel.emoji hotkey
Run Code Online (Sandbox Code Playgroud)

这表明默认值为['<Control>period']。要将其设置为空列表,请使用:

gsettings set org.freedesktop.ibus.panel.emoji hotkey "@as []"
Run Code Online (Sandbox Code Playgroud)

  • 为我工作......多么烦人的“功能” (3认同)
  • 非常感谢,这正是发生的事情。 XMODIFIERS 显示 `@im=ibus`,GTK_IM_MODULE 为 `ibus`,表情符号热键设置为 `['&lt;Control&gt;period']`,我可以使用您的命令禁用它。我不知道表情符号输入是如何工作的(在其中输入“笑脸”或其他任何内容似乎没有多大作用),所以我很高兴我可以将其关闭,但仍然保留 Ctrl-Shift-U ,这实际上很有用。 (2认同)