如何让 Compose 在 GTK 和 Qt 应用程序中工作?

sas*_*nin 17 xorg gtk keyboard-layout qt compose-key

我使用 Gnome 很长时间了,但我更喜欢 vanilla X 输入法 ( xim) 而不是默认的 GTK 行为。我只设置GTK_IM_MODULEQT_IM_MODULE环境变量xim,并没有与多个布局配置,任何问题的Compose关键,自定义~/.XComposemisc:typo排版扩展。

最近的 Gnome 3.6 通过运送一个半生不熟的马车ibus 并将其强加给用户来完全搞砸键盘输入。我只是无法让键盘像以前一样工作(即使ibus禁用),不得不完全放弃 Gnome。

现在我使用一个简单的窗口管理器,并使用setxkbmap. 虽然键盘再次正常工作,但我无法让 Compose 键在任何地方都能正常工作。Compose 在普通 X11 应用程序 ( xterm) 中工作,但在 GTK2、GTK3 和 Qt 应用程序中都不起作用。

我使用当前的 Archlinux 版本:

xorg-xinput 1.6.0
xorg-server 1.13.1
xf86-input-keyboard 1.6.2
gtk2 2.24.14
gtk3 3.6.4
qt 4.8.4
Run Code Online (Sandbox Code Playgroud)

并启用这样的Compose密钥:

setxkbmap ... -option 'compose:menu'
Run Code Online (Sandbox Code Playgroud)

和 export GTK_IM_MODULEQT_IM_MODULE变量:

$ echo $GTK_IM_MODULE $QT_IM_MODULE 
xim xim
Run Code Online (Sandbox Code Playgroud)

Compose X11 正确识别密钥:

$ xev | grep -A2 --line-buffered '^KeyRelease' | sed -n '/keycode /s/^.*keycode \([0-9]*\).* (.*, \(.*\)).*$/\1 \2/p'
135 Multi_key
Run Code Online (Sandbox Code Playgroud)

它在xterm~/.XCompose包括的序列中正常工作。它不适用于 GTK 或 Qt 应用程序。比方说,如果我输入Compose ',那么应用程序会'立即回显,而无需等待序列中的第三个键。

现在我想在 Xorg(因为Compose在 Qt 应用程序中也不起作用)或在 GTKQt 中发生了一些变化。*_IM_MODULE现在变量还不够。使现代 GTK 和 Qt 识别xim及其 Compose 序列还需要什么?

PS 有一个关于Compose key not working in GTK的类似(且未回答)问题。与提问者不同,我没有ibus安装。

sas*_*nin 10

找到了适用于 GTK 应用程序(但不适用于 Qt)的解决方案。一个需要设置

XMODIFIERS="@im=none"
Run Code Online (Sandbox Code Playgroud)

让 X11 处理死键。感谢@PabloSaatxaga的回答