Flow Launcher 插件开发快速上手

Windows 键盘流快速启动器收集继续讨论:

啃了一两天文档( Flow Launcher - Documentation ),发现这东西有点意思,我这篇不是文档,但看完以后应该可以快速上手开发,因为这东西实在是太简单了。

JavaScript / TypeScript / Python 都差不多,我用的 JS。

  • 它会在每次查询时调用你的脚本,就是命令行调用。JS 以 node.js 的方式调用
  • 它把参数以 json 的形式传给你的脚本,解析一下就行了 JSON.parse(process.argv[2])
  • 获得一个对象,其中三个属性:
    • method { string } 通过判断这个参数的值,来决定你的脚本要做什么,如果值是 query,那么当前是查询
    • parameters { array } 参数,如果是查询,这里第一项就是查询的内容。
    • settings { object } 插件设置
  • 插件信息在 plugin.json 文件中设置
    • ActionKeyword 的值是触发关键词,如果用 "*" 表示所有查询都触发,如果有多个出发关键词则用 ActionKeywords 字段,后续给出一个关键词数组。
  • 插件设置用 SettingsTemplate.yaml 文件定义,详细看官方文档,基本就是 HTML 表单项,只是描述格式换成了 yaml。所以也做不到某些官方插件的复杂度,以及不太好做动态。
  • 脚本在命令行的输出应该是 json 格式(附在下方,其中的 method 如果是 Flow.Launcher.ShowMsg 形式就是调用 Flow Launcher 的 API,parameters 的内容作为参数。否则一般用来显示在查询结果中,然后点击就再次调用你的脚本,这时候就可以根据 method 的值进行不同的操作了。
  • 因为是每次调用脚本,基本上修改以后立刻生效
  • 如果是基础信息修改可以用命令 rpd(Reload Plugin Data)热重载
{
  "result": [
    {
      "Title": "",
      "Subtitle": "",
      "JsonRPCAction": {
        "method": "",
        "parameters": []
      },
      "IcoPath": "",
      "score": 0
    }
  ]
}
2 Likes

记录一些坑:

  • 用 JS 调用 API,部分难以成功,不知道是我的问题还是它的问题,比如 ShowMsg
  • 用 JS 返回的结果不能为空,但如果使用 * 匹配有导致每次都查询插件,很尴尬,稍微优雅点的方案是在没结果的时候返回一个自定义的内容告知没有结果。
  • 每次查询(搜索内容变化)都会重新运行 JS 脚本,这就需要优化流程,不能习惯性在脚本开始引入所有依赖,那样会显得很卡。
  • 可以使用模板自定义设置,但最后我弃用了。其他一切都正常,但是已经保存的数据在重启之后不会显示在插件设置里,导致很难修改。

能用,但真的挺一般的……但我没有更好的替代品还