SublimeText2
SublimeText3

Sublime TextのAPI、EventListenerクラスのon_query_contextについてのメモ

More than 5 years have passed since last update.

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を使ってTrueFalseを返せば、キーバインドの書き方にもよりますが、スイッチが入ったり、入らなかったりするという感じです。

上記の例ではキーバインドのほうでoperatorequaloperandtrueと記述してあるので、Fooの条件を満たしTrueを返すことでキーバインドが使用可能となります。もしif Foo:を設定せず常にTrueが返るようにすれば、常にスイッチオンの状態になるはず(たぶん)。

keyはコードとキーバインド設定で使用したものが共通であればどういう名前でもいいです。
operatorはいろいろと設定できるようなのですがよくわかってません。この例が一番単純な形かな・・・?(´・ω・`)
またFooに書く条件は何でもいいです。
例えば僕の場合ですと、他のコマンドで作成したリストをグローバル変数を用いて参照して、何か入ってれば'True'を、空であれば'False'を返すというような記述にしました。

以上です。

 
どこにも書き方が載ってなかったので、動作確認しながら書き方を探るのは結構手間がかかりました・・・(´ㅅ`)⌒)_