事件
包控制 3.0 提供了一个 API,使包开发者能够更容易地响应影响其包的事件。事件 API 与 Sublime Text 包加载/卸载处理程序协同使用。
以下事件可以被检测到:
- 安装后
- 升级前
- 升级后
- 移除前
请注意,此 API 仅从包控制 3.0 版本开始提供。尚未升级到 3.0 的用户将无法使用所有包的package_control模块,并将出现错误。为了解决这个问题,包控制 1.x 和 2.0 的旧通道文件将仅在 2015 年初仅包含包控制自身。这确保了只有包控制 3.0 用户将安装和升级包,从而使包开发者能够使用新的事件 API 和 依赖项。
Sublime Text 加载/卸载处理程序
事件 API 是一个附加信息层,它允许在 Sublime Text 3 中的插件加载/卸载处理程序内部运行的代码。plugin_loaded()-plugin_unloaded()。这些处理程序分别在包安装/启用或移除/禁用时自动执行。
这些处理程序适用的一部分是,包控制在执行操作时总是禁用并重新启用包。这有助于确保 Sublime Text 不会解析部分提取的文件内容,也不会保留即将写入或删除的文件的文件系统锁。
在 Sublime Text 2 上运行的包也有略微不同的处理程序。下面的示例将包含代码和注释,说明如何支持 ST2 和 ST3。
API
事件 API 位于package_control.events模块。它有四个函数。每个函数返回一个字符串形式的版本号,如果包没有处于指定的状态,则返回None。
- events.install("包名称")- 包刚刚安装
- events.pre_upgrade("包名称")- 包即将升级
- events.post_upgrade("包名称")- 包刚刚升级
- events.remove("包名称")- 包即将移除
示例代码
以下代码应位于您的包根目录下的某个.py文件中。
import sys package_name = 'My Package' def plugin_loaded(): from package_control import events if events.install(package_name): print('Installed %s!' % events.install(package_name)) elif events.post_upgrade(package_name): print('Upgraded to %s!' % events.post_upgrade(package_name)) def plugin_unloaded(): from package_control import events if events.pre_upgrade(package_name): print('Upgrading from %s!' % events.pre_upgrade(package_name)) elif events.remove(package_name): print('Removing %s!' % events.remove(package_name)) # Compat with ST2 if sys.version_info < (3,): plugin_loaded() unload_handler = plugin_unloaded