一部のデータの永続的なストレージにシェルフを使用する SublimeText プラグインを作成しています。シェルフ ファイルのパスは、現在のプロジェクトの設定で定義されます。シェルフを保持するクラスを初期化する WindowCommand とそのキーバインドがありますが、適切なプロジェクトが開いている場合は、起動時にこれを自動的に実行したいと考えています。
まだ初期化されていないため、プラグインがロードされているときにコマンドを実行するだけでは失敗しますsublime.active_window()
。現在の回避策はset_timeout
、(できれば) 十分なタイムアウトを使用することです。
import sublime, sublime_plugin
_data = None
class MkshelfCommand(sublime_plugin.WindowCommand):
def run(self):
global _data
shelf_path = self.window.active_view().settings().get("shelf_path")
if shelf_path:
_data = MyClass(shelf_path)
sublime.set_timeout(lambda: sublime.active_window().run_command("mkshelf"), 1000)
これは明らかにあらゆる種類の悪いことです。しかし、ビューなしで現在のプロジェクト設定にアクセスする方法も、コマンドを実行する前にウィンドウが存在することを確認する方法も見つからなかったため、これをより確実に行う方法を理解できなかったので、タイムアウトを取り除くことができました(私は悪用を考えましEventListener.on_activated
たが、これは私が今していることよりもさらに醜いようです)。これを行うためのより良い方法はありますか、それとも弾丸を噛んで現在のアプローチに固執する必要がありますか?