Command 插件
这种类型的插件主要特点是可以在 Paperlib 的命令面板中注册一些命令,当用户在 Paperlib 中选择该命令时,插件会收到通知,从而执行插件中的代码。
插件类结构
在这里我们给出一个示例结构,当然你可以根据自己的需要进行修改。
typescript
class CommandExtension extends PLExtension {
constructor() {
// 你可以在这里设置插件的 id,默认设置
super(...)
}
async initialize() {
// 在这里监听命令触发事件
this.disposeCallbacks.push(
await PLAPI.commandService.on(...)
);
// 在这里注册命令,推荐先监听事件再注册
this.disposeCallbacks.push(
PLAPI.commandService.registerExternel(...)
);
...
}
async dispose() {
// 在这里取消命令注册,事件监听
for (const disposeCallback of this.disposeCallbacks) {
disposeCallback();
}
}
}
命令注册
我们可以通过 PLAPI.commandService.registerExternel
方法来注册插件所使用的外部命令。
⚠️ 请勿使用
PLAPI.commandService.register
方法,该方法用于注册 Paperlib 内部的命令。
该方法的参数如下:
typescript
PLAPI.commandService.registerExternel({
id: string,
description: string,
event: string,
})
id
:命令的 id,必须唯一,可以使用插件id.命令id
的格式,例如paperlib-helloworld.print
。description
:命令的描述,用于在命令面板中显示。event
:命令触发时的事件,可以使用插件id.事件id
的格式,例如paperlib-helloworld.print-event
。
命令触发事件
当用户在 Paperlib 中选择了某个命令时,插件会收到一个事件通知,我们可以通过 PLAPI.commandService.on
方法来监听该事件。该事件监听同样需要在插件销毁时运行 disposeCallback
来取消注册。
该方法的参数如下:
typescript
PLAPI.commandService.on({
event: string,
callback: (event: {key: string, value: string[]}) => void,
})
event
:命令触发时的事件,与注册命令时的event
参数相同。callback
:命令触发时的回调函数,该函数接收一个event
参数,该参数的key
属性为命令的 id,value
属性为命令的参数列表。比如在命令面板中选择了相应命令,后面跟上了参数test
,那么event
的值为{key: "your-event-name", value: ["test"]}
。
命令取消注册
我们需要在插件销毁时取消命令注册,否则会造成内存泄漏。他的方式与其他类似的事件监听等操作相同。当插件使用 PLAPI.commandService.registerExternel
方法注册命令时,该方法会返回一个 disposeCallback
,我们可以将其保存在插件类中,然后在插件销毁时调用。
typescript
// 注册
const disposeCallback = await PLAPI.commandService.registerExternel(...);
// 取消注册
disposeCallback();