Alfred插件开发--了解Alfred的数据流动

最近发现要记住的长命令太多了,因此打算开发一款Alfred插件帮助自己记录. 先展示下成品,大概就是输入关键词->搜索展示->复制到指定位置这一流程,借此开分析下Alfred插件开发.

Alfred插件开发要解决如下几个问题

  1. 用户输入如何到达自定义脚本?
  2. 自定义脚本如何输出到Alfred的item选项?
  3. Alfred的item选项选择后如何传递到下一个执行点?

用户输入如何到达自定义脚本?

Alfred的入口(inputs组件)有很多,一般常用的是Keyword,Script Filter,List Filter等. 对于Keyword是输入cmd xxx后按enter才能触发. 对于XXX Filter是输入时不停地调用脚本触发.

假设用户输入的是cmd xxx这样的输入,Alfred会把关键词cmd后面的内容当成参数传递,传递有两种形式1.类似shell形式$1 $2这种风格,2.是使用一个字符串{query}来表示后面所有内容

Script Filter为例 当用户输入cmd dt-ansible时,alfred实际上执行命令为./go_start -s dt-ansible 当用户输入cmd dt-ansible1 dt-ansible2时,alfred实际上执行命令为./go_start -s 'dt-ansible1 dt-ansible2',{query}形式主要解决空格等分隔符输入问题.

自定义脚本如何输出到Alfred的item选项?

上述用户输入cmd dt-ansible后,Alfred接管了go_start这个脚本的输入与输出,那么只需要在输出时按照Alfred格式要求,Alfred就会自动显示Item选项,格式如下:

<items>
  <item uid="0" arg="npm config set registry https://registry.npm.taobao.org" valid="YES" autocomplete="npm-common" type="default">
    <title>npm-common</title>
    <subtitle>npm通用命令</subtitle>
    <icon>./icon.png</icon>
  </item>
</items>

其中重要的是arg参数,该参数表示选中这个Item后传递给下一个工作流节点的参数内容,其他参数请参考下列文档. 另外新版的Alfred是推荐使用json形式参数,但是为了兼容Alfred2,没特殊需求的话使用xml时最好的方式. Alfred XML格式指南

Alfred的item选项选择后如何传递到下一个执行点?

每一个Item的xml选项都有对应的Arg参数,如上述xml,那么我传递给下一个节点的就是npm config set registry https://registry.npm.taobao.org这一串命令,同样下一个节点使用{query}即可获取,如下图Copy to Clipboard节点所示.

输入数据转换

输入参数在Alfred可以使用其提供的各种Utils进行filter,map等操作,如下面操作我使用的是filter分支操作,当输入指令为open时执行下面分支,不等于open时执行上面分支.

插件地址

https://github.com/mrdear/Command_Search

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Android开发指南

优化Android Studio/Gradle构建

39190
来自专栏Ken的杂谈

CentOS 7 下Jenkins安装部署教程

Jenkins是一个开源的支持自动化构建、部署等任务的平台。基本上可以说是持续集成(CI)、持续发布(CD)不可或缺的工具。

57220
来自专栏Android相关

Gradle For Android(1)--使用AndroidStudio开始Gradle

build.gradle是为了构建Android项目的脚本。Gradle构建脚本并不是使用传统的XML,而是基于Groovy的domain-specific l...

11230
来自专栏乐沙弥的世界

CentOS 7下配置本地yum源及yum客户端

Linux下对于软件包的管理使用rpm管理方式。直接使用rpm包管理工具来进行rpm包的安装,升级,卸载时,对于最让人头疼的莫过与包之间的依赖关系。yum作为一...

49140
来自专栏程序猿DD

Spring Boot开发Web应用

《SpringBoot快速入门》 中我们完成了一个简单的RESTful Service,体验了快速开发的特性。在留言中也有朋友提到如何把处理结果渲染到页面上。那...

22160
来自专栏好好学习吧

testng中使用reportng报告

22520
来自专栏黑白安全

Kali Linux安装到U盘

虽然使用其他工具也能将Kali Linux安装到U盘,但是经测试,成功率很低。而且一般是刻录后还需要其他操作以避免刻录为Kali Linux安装盘。借助虚拟机将...

25820
来自专栏电光石火

获得PHP版本信息及版本比较

version_compare是一个版本比较工具,当然也可以作为其他的版本比较工具:

10330
来自专栏Linyb极客之路

SpringBoot一些很实用的功能

然后这个图案是可以自定义的,在src/main/resource下新建一个banner.txt文件,然后去http://patorjk.com/software...

66520
来自专栏一“技”之长

使用Jenkins配置iOS自动化构建工具 原

      关于iOS自动化构建其实并不复杂,通过一些简单的Git与Xcode指令,加上UI,我们自己也可以动手编写一款自动化构建工具。这在之前的博客中也有涉及...

14310

扫码关注云+社区

领取腾讯云代金券