Sublime Textのプラグインを作るとき、キーバインド設定用ファイルで下記のような設定を可能にするEventLisitenerクラスのon_query_contextの書き方について不明な点が多かったので覚書を残します。
ただあまり使いこなしてるわけではないのでおおむね適当です。
{ "keys": ["ctrl+XXX"], "command": "hoge",
"context":[
{ "key": "fuga", "operator": "equal", "operand": true },
]
}
#書き方
class HogeFugaHoge(sublime_plugin.EventListener):
def on_query_context(self, view, key, operator, operand, match_all) :
if key == "fuga":
if operator == sublime.OP_EQUAL:
if Foo :
return True
基本的な書き方は上記の通り。
TextCommandと違ってクラス名はどうでもいいっぽいです。
重要なのはif key==・・・
あたりの部分とif Foo:
以下の部分。
大雑把に言うと、if key==・・・
ではキーバインドの設定に関する記述、if Foo:
以下の部分はそのキーバインドを使用可能にするスイッチとなるような条件を記述します。
最終的にreturn
を使ってTrue
やFalse
を返せば、キーバインドの書き方にもよりますが、スイッチが入ったり、入らなかったりするという感じです。
上記の例ではキーバインドのほうでoperator
でequal
、operand
でtrue
と記述してあるので、Foo
の条件を満たしTrue
を返すことでキーバインドが使用可能となります。もしif Foo:
を設定せず常にTrue
が返るようにすれば、常にスイッチオンの状態になるはず(たぶん)。
key
はコードとキーバインド設定で使用したものが共通であればどういう名前でもいいです。
operator
はいろいろと設定できるようなのですがよくわかってません。この例が一番単純な形かな・・・?(´・ω・`)
またFoo
に書く条件は何でもいいです。
例えば僕の場合ですと、他のコマンドで作成したリストをグローバル変数を用いて参照して、何か入ってれば'True'を、空であれば'False'を返すというような記述にしました。
以上です。
どこにも書き方が載ってなかったので、動作確認しながら書き方を探るのは結構手間がかかりました・・・(´ㅅ`)⌒)_