Skip to content

GTK 3 の emoji picker を無効化する

Linux Mint 21.3 (Cinnamon) では, GTK アプリケーションの入力欄で Ctrl+. または Ctrl+; を押すと emoji picker が表示されます. この機能が使えるアプリケーションにはファイルブラウザの nemo やテキストエディタの xed, ブラウザの Firefox などが含まれます.

自分は emoji picker を使用しないので, この機能によって意図せず入力のフォーカスを奪われてしまうことがかなりのストレスでした. Linux Mint と emoji picker を組み合わせて検索すると, IBus の emoji 入力機能やそのショートカットを変更する方法がいくつか見つかります. IBus にも emoji picker があり, 既定では Ctrl+Shift+E が割り当てられています. IBus の設定変更を試みましたが, emoji picker の挙動は変わりませんでした. そもそも, 自分の環境では入力メソッドとして Fcitx を使用しているため, 今回の挙動は IBus の設定とは関係のないものでした.

最終的に emoji picker を起動していたのは GTK 3 のテキスト入力ウィジェットに定義されたキーバインドでした. 一行入力欄の GtkEntry と複数行入力欄の GtkTextView には, emoji picker を表示する insert-emoji シグナルがあり, どちらにも Ctrl+.Ctrl+; が割り当てられています. これを解除することで問題が解決できそうです.

Setup

GTK 3 では CSS ファイルを使用して既定のキーバインドを上書きできます. ここではユーザー設定としてこれらのキーバインドを解除します. GTK 3 のユーザー設定は ~/.config/gtk-3.0/gtk.css に記述します. ディレクトリやファイルが存在しない場合は作成します.

mkdir -p ~/.config/gtk-3.0
${EDITOR:-nano} ~/.config/gtk-3.0/gtk.css

gtk.css に以下の設定を追加します.

@binding-set DisableEmojiChooser
{
    unbind "<Control>period";
    unbind "<Control>semicolon";
}

entry,
textview
{
    -gtk-key-bindings: DisableEmojiChooser;
}

@binding-setDisableEmojiChooser というキーバインドの集合を定義しています. unbind は指定したキーについて GTK の既定のキーバインドを探索しないようにする命令です. これを entrytextview に適用することで, 一行入力欄と複数行入力欄の両方から emoji picker のショートカットを取り除きます.

設定を保存したら, 対象のアプリケーションを完全に終了してから起動し直します. 反映されない場合は一度ログアウトして再ログインします.

この方法については以下の文書を参照しました.

Confirmation

アプリケーション固有の設定に影響されずに確認するには, GTK 3 のデモプログラムである gtk3-demo を使用します.

sudo apt install gtk-3-examples
gtk3-demo

入力欄を含むデモを開き, 入力欄にフォーカスを合わせて Ctrl+. または Ctrl+; を押します. 設定前には emoji picker が表示されますが, 設定後には表示されなくなり emoji picker が起動しなくなりました.

実際に xedFirefox でも試してみたところ, めでたく emoji picker の起動を抑制することができました. この問題に直面してから長らく格闘していましたが, ようやく解決に至りました.