Alfred3 自定义 workflow
Contents
本人习惯用 Golang 来写些小工具什么的,所以,这里以 Golang 为例子
方式
Alfred 的 workflow ,个人的理解就是在 Alfred 中输入,然后它会调用其他程序,将你的输入作为程序的输入,然后程序就负责处理并输出数据。
keyworkd input -> program with [input] paratemer -> result
例子:毫秒转换为 YYYY-MM-dd HH:mm:ss 的输出
package main
import (
"time"
"strconv"
"github.com/emacsist/alfred3/utils"
)
const DATE_FORMAT = "2006-01-02 15:04:05"
func main() {
query := utils.GetQuery()
response := utils.NewAlfredResponse()
timestampInMillis, err := strconv.ParseInt(query, 10, 64)
if err == nil {
//毫秒转换为时间 Jan 2 15:04:05 2006 MST
t := time.Unix(0, timestampInMillis*int64(time.Millisecond))
dateTimeString := t.Format(DATE_FORMAT)
response.AddDefaultItem("时间: " + dateTimeString)
} else {
// 时间 转换为毫秒
t, err := time.Parse(DATE_FORMAT, query)
if err == nil {
seconds := t.Unix()
ms := int64(t.Nanosecond()) / int64(time.Millisecond)
response.AddDefaultItem("时间戳:" + strconv.FormatInt(int64(seconds), 10))
response.AddDefaultItem("毫秒:" + strconv.FormatInt(ms, 10))
} else {
response.AddDefaultItem("输入的数据格式不对. 毫秒或 YYYY-MM-DD HH:mm:ss")
}
}
response.WriteOutput()
}
解释
query: 就是我们的输入,这里对于各种编程语言应该是通用的,就是读取 main 函数的 argv 的参数出来。Alfred 会自动将我们的输入作为参数来调用我们这个程序的。
输出
从 Alfred3 开始,官方建议使用 JSON 的数据结构作为输出,则不是XML了。
输出的JSON数据结构:
{"items": [
{
"uid": "desktop",
"type": "file",
"title": "Desktop",
"subtitle": "~/Desktop",
"arg": "~/Desktop",
"autocomplete": "Desktop",
"icon": {
"type": "fileicon",
"path": "~/Desktop"
}
}
]}
字段解释
items: 表示输出的每一个元素的数组。最直观的,就是每一个项,就代表 Alfred 中输出的每一行。
uid
: 每一行中,唯一的标识ID。只要唯一就可以了。type
: 表示类型title
: 标题subtitle
: 子标题arg
: 参数(这个要特别注意,这个最好要设置一下。该参数是传递给 output 链的。比如,将结果再输出到粘贴板、输出到通知中心,这时 Alfred 就会将 arg 参数的值传递给它们)autocomplete
: 自动补全icon
: 图标
参考资料
https://www.alfredapp.com/help/workflows/inputs/script-filter/json/