我正在编写一个 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
,但这似乎比我现在正在做的更丑陋)。有没有更好的方法来做到这一点,还是我应该硬着头皮坚持我目前的方法?