Gtkアプリケーションのキーバインド
こんにちは、びしょ〜じょです。さて、あなたはVimのキーマップをガンガン追加するタイプですか。~/.xmodmapをガンガン書くタイプですか。
(中略)
GTKアプリケーションのキーバインドを適当に変える方法をかく。Googleで調べてもEmacs風のキーバインドにするみたいなことしか出てこず、若干情報が古かったりディストロの差異で無効だったりしたので困った。対象の環境は最新のArchLinuxです。
とりあえず$HOME
に.theme/THEME_NAME/
みたいなディレクトリを作る。もちろんTHEME_NAME
はお好きに。
2.0系
mkdir -p ~/.theme/THEME_NAME/gtk-2.0-key
でディレクトリを作り、そこにgtkrc
を書く。
binding "gtk-THEME_NAME-text-entry" { bind "<alt>w" {"move-cursor" (words, -1, 0)} bind "<alt>e" {"move-cursor" (words, 1, 0)} bind "<shift><alt>w" {"move-cursor" (words, -1, 1)} bind "<shift><alt>e" {"move-cursor" (words, 1, 1)} bind "<alt>d" {"delete-from-cursor" (word-ends, 1)} bind "<alt>c" {"copy-clipboard" ()} bind "<alt>v" {"paste-clipboard" ()} } binding "gtk-THEME_NAME-text-view" { bind "<alt>c" {"copy-clipboard" ()} bind "<alt>v" {"paste-clipboard" ()} } binding "gtk-THEME_NAME-tree-view" { bind "<alt>c" {"copy-clipboard" ()} bind "<alt>v" {"paste-clipboard" ()} } binding "gtk-THEME_NAME-menu" { bind "<alt>e" {} bind "<alt>w" {} bind "<alt>c" {"copy-clipboard" ()} bind "<alt>v" {"paste-clipboard" ()} } class "GtkEntry" binding "gtk-THEME_NAME-text-entry" class "GtkTextView" binding "gtk-THEME_NAME-text-entry" class "GtkTextView" binding "gtk-THEME_NAME-text-view" class "GtkTreeView" binding "gtk-THEME_NAME-tree-view" class "GtkMenuShell" binding "gtk-THEME_NAME-menu"
みたいな感じになる。他にもinsert-at-cursor
などのコマンドがあるので調べてみてください。undo
/redo
が欲しかったけど見つからなかった。
追記 2015 02/10 12:05
ここを参照するといいかもしれん。
gyk-mytheme-text-entry
はテキストボックス内の挙動で、text-view
は他(?)か。よくわかっていない。
そして$HOME/.gtkrc-2.0
の適当な場所にinclude "/PATH/TO/.theme/THEME_NAME/gtk-2.0-key/gtkrc"
を追加する。$HOME
などの変数は展開してくれないので絶対パスを書く。
これで、上記の例でいけばAlt+e/wで単語単位でカーソル移動ができる。ターミナルからアプリケーションを開くと無効な記述があれば教えてくれるのでデバッグ用につかおう。
3.0系
mkdir -p ~/.theme/THEME_NAME/gtk-3.0
でディレクトリを作り、gtk-keys.css
を編集する。
@binding-set gtk-THEME_NAME-text-entry { bind "<alt>w" {"move-cursor" (words, -1, 0)}; bind "<alt>e" {"move-cursor" (words, 1, 0)}; bind "<shift><alt>w" {"move-cursor" (words, -1, 1)}; bind "<shift><alt>e" {"move-cursor" (words, 1, 1)}; bind "<alt>c" {"copy-clipboard" ()}; bind "<alt>v" {"paste-clipboard" ()}; } @binding-set gtk-THEME_NAME-text-view { bind "<alt>c" {"copy-clipboard" ()}; bind "<alt>v" {"paste-clipboard" ()}; } @binding-set gtk-THEME_NAME-tree-view { bind "<alt>c" {"copy-clipboard" ()}; bind "<alt>v" {"paste-clipboard" ()}; } @binding-set gtk-THEME_NAME-menu { } GtkEntry { gtk-key-bindings: gtk-THEME_NAME-text-entry; } GtkTextView { gtk-key-bindings: gtk-THEME_NAME-text-entry, gtk-THEME_NAME-text-view; } GtkTreeView { gtk-key-bindings: gtk-THEME_NAME-tree-view; } GtkMenuShell { gtk-key-bindings: gtk-THEME_NAME-menu; }
~/.config/gtk-3.0/settings.ini
にgtk-key-theme-name = THEME_NAME
を追加する。これは2.0系とは違いパスは要らずTHEME_NAME
だけで良い。
ついでに
OpenboxとawesomeのデフォルトではGTK+3.0系のアプリケーションを開くとウィンドウの縁が透明になっていてなんか鬱陶しかったと思うんですがボクだけですか。以下を~/.config/gtk-3.0/gtk.css
に書く。
.window-frame, .window-frame:backdrop { box-shadow: 0 0 0 black; border-style: none; margin: 0; border-radius: 0; } .titlebar { border-radius: 0; }
がんがん魔改造しよう。