![如何使 Compose 在 GTK 和 Qt 应用程序中工作?](https://linux22.com/image/27957/%E5%A6%82%E4%BD%95%E4%BD%BF%20Compose%20%E5%9C%A8%20GTK%20%E5%92%8C%20Qt%20%E5%BA%94%E7%94%A8%E7%A8%8B%E5%BA%8F%E4%B8%AD%E5%B7%A5%E4%BD%9C%EF%BC%9F.png)
我使用 Gnome 很长时间了,但xim
比起默认的 GTK 行为,我更喜欢普通的 X 输入法 ( )。我只是将环境变量设置GTK_IM_MODULE
为QT_IM_MODULE
,并且多重布局配置、键、自定义和版式扩展xim
没有任何问题。Compose~/.XCompose
misc: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_MODULE
,QT_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
答案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 项目。