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. 本文中给出的例子只是简单的使用,有更高级的需求可以自己写。
相关推荐
一路向前的月光17 分钟前
react(9)-redux
前端·javascript·react.js
大数据追光猿44 分钟前
Python中的Flask深入认知&搭建前端页面?
前端·css·python·前端框架·flask·html5
莫忘初心丶1 小时前
python flask 使用教程 快速搭建一个 Web 应用
前端·python·flask
坚定信念,勇往无前1 小时前
springboot单机支持1w并发,需要做哪些优化
java·spring boot·后端
xw51 小时前
Trae初体验
前端·trae
横冲直撞de1 小时前
前端接收后端19位数字参数,精度丢失的问题
前端
我是哈哈hh1 小时前
【JavaScript进阶】作用域&解构&箭头函数
开发语言·前端·javascript·html
摸鱼大侠想挣钱1 小时前
ActiveX控件
前端
谢尔登1 小时前
Vue 和 React 响应式的区别
前端·vue.js·react.js
后端小肥肠1 小时前
【AI编程】Java程序员如何用Cursor 3小时搞定CAS单点登录前端集成
前端·后端·cursor