GTKとQtアプリケーションでComposeを動作させるには?

GTKとQtアプリケーションでComposeを動作させるには?

私は長い間Gnomeを使用してきましたが、xim基本的なGTK動作よりも一般的なX入力方法()を好みます。私は環境変数GTK_IM_MODULEをに設定しましたが、QT_IM_MODULEいくつかのレイアウト構成、キー、カスタマイズ、およびレイアウト拡張ximに問題はありません。Compose~/.XComposemisc:typo

最近、Gnome 3.6はキーボード入力を完全にめちゃくちゃにして、半分焼いたバグのあるバージョンを提供しました。ibus そしてこれをユーザーに課します。。キーボードが以前のように動作することができず(ibus無効になっていても)、Gnomeを完全に放棄する必要がありました。

今簡単なウィンドウマネージャを使用してsetxkbmap。キーボードはうまく機能しますが、作成キーはどこでも使用できません。 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アプリケーションでは機能しません。と入力すると、シーケンスの3番目のキーを待たずにCompose 'アプリケーションがすぐにエコーされます。'

Composeこれで、Xorg(Qtアプリケーションでも機能しないため)またはGTKに変更があるようです。そしてQt。*_IM_MODULE今、変数では十分ではありません。最新のGTKとQtがComposeシーケンスを認識するにはxim何が必要ですか?

PS:同様の(そして未回答の)質問があります作成キーがGTKで機能しない。質問者とは異なり、私はインストールしていませんibus

答え1

GTKアプリケーション(Qtではない)で動作するソリューションを見つけました。 1つを設定する必要があります。

XMODIFIERS="@im=none"

X11にデッドキーを処理させます。 @PabloSaratxagaさん、ありがとうございます彼の答え

答え2

openSUSEでも同様の問題に直面しました。~/.XComposeGTK +アプリケーションでは無視されているので、私のComposeシーケンスはFirefox、Gimp、その他のブラウザでは機能しませんでした。

gtk-query-immodules-2.0いくつかの入力方法がリストされていますが、変数はxim何でも使用できません。パッケージ(および友人)をインストールすると問題が解決しました。GTK_IM_MODULEximgtk2-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プロジェクトでも機能します。

関連情報