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

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

我使用 Gnome 很长时间了,但xim比起默认的 GTK 行为,我更喜欢普通的 X 输入法 ( )。我只是将环境变量设置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

Compose并像这样启用密钥:

setxkbmap ... -option 'compose:menu'

和导出GTK_IM_MODULEQT_IM_MODULE变量:

$ echo $GTK_IM_MODULE $QT_IM_MODULE 
xim xim

ComposeX11 正确识别密钥:

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

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

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

PS 有一个类似的(且未回答的)问题Compose 键在 GTK 中不起作用。与提问者不同,我没有ibus安装。

答案1

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

XMODIFIERS="@im=none"

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

答案2

我在 openSUSE 中也遇​​到了类似的问题。~/.XCompose会被 GTK+ 应用程序忽略,所以我自己的 Compose 序列在 Firefox、Gimp 和其他浏览器中不起作用。

我发现gtk-query-immodules-2.0列出了一些输入法,但没有xim;因此,无论GTK_IM_MODULE变量如何,xim都是不可用的。安装软件包gtk2-immodule-xim(和朋友)解决了问题。

也许这句话对遭受同样诅咒的人有用。

答案3

这是一种持久化配置的方式。例如这里描述https://wiki.edubuntu.org/ComposeKey#line-66。我用 ~/.XCompose 这样配置了撰写键。我已经在 ubuntu 和 debian 系统上检查过这一点。

答案4

因为当它在 GTK 程序中工作,但在 QT 程序中不起作用时,这就是我所拥有的,我找到了解决方案这里:

GTK+ 应用程序使用来自 Xorg 的自己的 Compose 文件副本。绝大多数撰写序列应该继续工作,但有一些遗留的例外情况。 xterm 和 QT 应用程序使用 XOrg 撰写序列,该序列是en_US.UTF-8其中的文件/usr/share/X11/locate~/.XCompose文件(如果存在)。

这对我来说意味着:

ln -s /usr/share/X11/locale/en_US.UTF-8/Compose ~/.XCompose

然后它也适用于 QT 项目。

相关内容