5分钟写一个alfred中的workFlow

一 工作流是什么

  1. alfred是什么?我想说,都用上mac了,应该都有了解,这里就不详细介绍。
  2. 工作流(Workflow)是一种自定义的自动化方式,用于执行一系列操作来完成特定的任务或流程。工作流可以由多个操作步骤组成,这些步骤可以是系统命令、脚本、应用程序的操作等。
  3. 简单来说就是你传入一些参数,然后可以返回你需要的结果
  4. 官网介绍传送门-》 www.alfredapp.com/help/workfl...
  5. 在alfred的官网上,有很多开源的工作流,如果有喜欢的,可以自己去下载安装使用。当然如果不满足自己使用条件的,也可以通过自己定义一段脚本去执行。

二 前置说明

  1. 要自定义工作流,必须选定一种语言。alfred上默认支持一些语言,不支持的,也可以通过外部引用脚本运行。
  1. 网上有很多自定义的示例,多数都是基于python写的。这次示例使用groovy来写

三 下载

  1. 要使用groovy来写,本地必须先安装groovy的包。
  1. 下载完成后,配置环境变量
  • 在终端使用命令打开配置文件:Vim ~/.zshrc 。注意:是zshrc 而不是 bash_profile
  • 为什么不是bash_profile?Mac默认使用 zsh 作为 shell,所以 ~/.zshrc 中的配置会对所有终端生效,bash_profile 中的配置仅对登录 bash 会话生效,非登录会话不会加载它。
  • 如果你使用bash_profile配置,那么每次终端打开输入版本或其他,都会提示你没有配置环境变量

四 配置示例

  1. export GROOVY_HOME=/opt/homebrew/opt/groovy/libexec

    export PATH= <math xmlns="http://www.w3.org/1998/Math/MathML"> G R O O V Y H O M E / b i n : GROOVY_HOME/bin: </math>GROOVYHOME/bin:PATH

  2. 以上配置需要根据自己安装的路径去修改

五 alfred使用示例

  1. 直接点击下次+号创建
  1. 旁边有个help,可以跳转官网,官网也有示例

  2. 点击+后,选择Blank Workflow 创建一个空白的工作流

  • 创建时,会出现弹框,根据提示填写即可,我这里直接就填名字。
  • 保存后,点击右键,创建一个脚本文件
  • 里面的具体参数,截图最下面是我的一些配置
  • 上面三个提示,设置后要使用时,是这样的形式
  • 选择项里使用默认即可
  • 然后脚本里需要引入你编写好的脚本文件,以及你用哪个环境运行

示例配置:

js 复制代码
   query=$1
  /opt/homebrew/opt/groovy/libexec/bin/groovy  /Users/shouye/workspace/my/alfred/src/SearchTime.groovy $query

/opt/homebrew/opt/groovy/libexec/bin/groovy 是你安装groovy的地址路径

/Users/shouye/workspace/my/alfred/src/SearchTime.groovy 是你脚本的地址路径

六 代码示例

js 复制代码
//以下是一个时间戳转换示例
class SearchTime {

    static void main(String[] args) {

        if (args.length >= 2) {
            def result;
            def buffer = new StringBuffer();
            result = buffer.append(args[0]).append(" ").append(args[1])
            searchConvertTimeType(result as String)
        }
        String arg = null;
        if (args.length < 2) {
            arg = args[0]

            searchTimeTypeArray(arg)
        }

    }




        def timestamp = args[0].substring(0,args[0].length() - 3) // 指定时间戳
        def localDateTime = LocalDateTime.ofInstant(Instant.ofEpochSecond(timestamp as long), ZoneId.systemDefault())
        def formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")
        def formattedDateTime = localDateTime.format(formatter)
        def output = [
                items: [
                        [
                                title: formattedDateTime,
                                arg  : formattedDateTime
                        ]
                ]
        ]

        print new JsonBuilder(output).toPrettyString()

    }

    /**
     *
     * 根据输入的类型转换时间
     */
    static void searchConvertTimeType(String resultTime) {

        DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")
        def time = LocalDateTime.parse(resultTime, DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))
                .atZone(ZoneId.of("Asia/Shanghai"))
                .toInstant()
                .toEpochMilli()

       def output = [
                items: [
                        [
                                title: time,
                                arg  : time
                        ]
                ]
        ]
        print new JsonBuilder(output).toPrettyString()
    }
    /**
     *
     * 查询当前时间列表
     */
    static void searchTimeTypeArray(String arg) {
        def output;
        if ("now" == arg) {
            output = [
                    items: [
                            [
                                    title: System.currentTimeMillis(),
                                    arg  : System.currentTimeMillis()
                            ],
                            [
                                    title: LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")).toString(),
                                    arg  : LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")).toString()
                            ],
                            [
                                    title: LocalDate.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd")).toString(),
                                    arg  : LocalDate.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd")).toString().toString()
                            ],
                            [
                                    title: LocalDate.now().atStartOfDay().atZone(ZoneId.of("Asia/Shanghai")).toInstant().toEpochMilli(),
                                    arg  : LocalDate.now().atStartOfDay().atZone(ZoneId.of("Asia/Shanghai")).toInstant().toEpochMilli()
                            ],

                    ]
            ]
        } else {

            def timestamp = arg.substring(0, arg.length() - 3) // 指定时间戳
            def localDateTime = LocalDateTime.ofInstant(Instant.ofEpochSecond(timestamp as long), ZoneId.systemDefault())
            def formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")
            def formattedDateTime = localDateTime.format(formatter)
            output = [
                    items: [
                            [
                                    title: formattedDateTime,
                                    arg  : formattedDateTime
                            ]
                    ]
            ]

        }
        print new JsonBuilder(output).toPrettyString()
    }

}

七 测试

  1. 点击alfred工作流中的右上角有个小虫子(debug)的弹窗,可以自行测试写的代码是否有误。

八 总结:

  1. 配置环境变量时要注意,否则alfred会提示环境错误,读取不到值
  2. 传参的格式可以自己自定义,不限于只传now
  3. 如果不想配置环境变量,需要同时引入jdk的路径才能正常使用。
  4. 本文中给出的例子只是简单的使用,有更高级的需求可以自己写。
相关推荐
王解28 分钟前
webpack loader全解析,从入门到精通(10)
前端·webpack·node.js
我不当帕鲁谁当帕鲁32 分钟前
arcgis for js实现FeatureLayer图层弹窗展示所有field字段
前端·javascript·arcgis
那一抹阳光多灿烂37 分钟前
工程化实战内功修炼测试题
前端·javascript
放逐者-保持本心,方可放逐1 小时前
微信小程序=》基础=》常见问题=》性能总结
前端·微信小程序·小程序·前端框架
码上一元1 小时前
SpringBoot自动装配原理解析
java·spring boot·后端
毋若成4 小时前
前端三大组件之CSS,三大选择器,游戏网页仿写
前端·css
枫叶_v4 小时前
【SpringBoot】22 Txt、Csv文件的读取和写入
java·spring boot·后端
红中马喽4 小时前
JS学习日记(webAPI—DOM)
开发语言·前端·javascript·笔记·vscode·学习
杜杜的man4 小时前
【go从零单排】Closing Channels通道关闭、Range over Channels
开发语言·后端·golang
java小吕布5 小时前
Java中Properties的使用详解
java·开发语言·后端