Skip to content
iPlugin

菜单事件

查询打开前、打开后和关闭事件的执行时机与返回值。

events 写在菜单顶层,与 menu、panels 同级;别名为 event、listener。每个事件接受同样的动作结构:文本、布尔值、动作列表、条件或输入对象。

events:
  pre_open:
    if: 'perm invero.use'
    then: true
    else:
      - "mmsg '&c你没有使用权限'"
      - false
  post_open: "mmsg '&7菜单已打开'"
  close: "mmsg '&7菜单已关闭'"

事件字段

字段类型必填省略行为说明
preOpen(pre_open、open)动作或动作列表否允许打开已创建会话、尚未放置面板时执行;等待动作结果,结果为 false 时取消打开
postOpen(post_open、opened)动作或动作列表否不执行打开后动作窗口打开、标题任务和菜单任务已提交后启动;返回 false 不会撤销打开
close动作或动作列表否不执行关闭动作会话注销、窗口关闭或切换菜单时启动;返回 false 不能阻止关闭

上例的 perm 是通用 Kether 权限判断,语法见 TabooLib Kether 列表。有权限时打开;没有权限时先提示,再明确返回 false。

初始化与刷新位置

在 pre_open 初始化供标题、图标或筛选读取的变量:

events:
  pre_open: |-
    ctx set clicks to 0
    true

这会在每次打开时重设 clicks,包括 menu switch 或输入成功后的重开。如果需要保留传入值,应先判断是否存在,而不是无条件覆盖:

events:
  pre_open:
    if: 'ctx without clicks'
    then: 'ctx set clicks to 0 true'
    else: true

pre_open 时面板还没建立,不在这里执行 icon refresh、翻页、滚动等窗口操作。需要操作已存在的图标时放到 post_open 或点击动作;生成器列表可能稍后才完成加载,不把 post_open 当作所有外部数据都已就绪的通知。

关闭事件

关闭事件发生时原会话已注销。可以发送关闭提示或用 persist 保存数据;不要在这里依赖 ctx 重新取得原窗口、刷新图标或取消关闭。事件脚本仍可读取传入的旧会话变量文本,例如 {{&selected}}。

输入捕获会先关闭菜单,因此也会触发 close。若在 close 无条件打开菜单,会与输入或导航抢占窗口;确需重开时,使用明确的业务条件。周期任务会随原会话注销而停止,详见任务。

Last updated on