精华内容
下载资源
问答
  • Alfred Workflow

    2019-10-08 19:10:50
    实用的 Alfred Workflow Alfred Workflow 介绍 alfred-pkgman-workflow 快速从各个软件仓库(maven, gradle 等等)中查找需要的软件包 AlfredHanziSourceWorkflow 快速从象形字典、汉语字典、说文解字等站点...

    实用的 Alfred Workflow

    Alfred Workflow 介绍
    alfred-pkgman-workflow 快速从各个软件仓库(maven, gradle 等等)中查找需要的软件包
    AlfredHanziSourceWorkflow 快速从象形字典、汉语字典、说文解字等站点查询字源
    AlfredGoogleTranslateWorkflow 快速进行多语言翻译
    jetbrains-alfred-workflow 快速打开 JetBrains 家族构建的项目,包括 Android Studio、IDEA 等的项目
    noogel/Alfred-Workflow 开发工程师常用工具箱,包括查询 IP、时间戳转换和 Base64编码之类的工具

    小知识

    1. 当 alfred 查询的结果是一个网页链接时,点击右边的 Shift 键可以启动快速预览而不用打开网页。

    转载于:https://www.cnblogs.com/lshare/p/11334714.html

    展开全文
  • Alfred workflow 开发指南

    千次阅读 2018-11-12 16:30:53
    小帽子alfred是mac上最为传奇的效率作品, 今天,我们一起来探索alfred workflow 的世界吧! 1. alfred 简介 小帽子是 Mac 平台上最为传奇的效率作品,誉为神兵利器毫不为过。 由于中文网络上尚无系统的alfred ...

    小帽子alfred是mac上最为传奇的效率作品, 今天,我们一起来探索alfred workflow 的世界吧!

    1. alfred 简介

    小帽子是 Mac 平台上最为传奇的效率作品,誉为神兵利器毫不为过。

    由于中文网络上尚无系统的alfred workflow 开发教程,便有了写一个教程的心思,以期抛砖引玉,为alfred吸引更多的开发者加入。


    2.alfred 插件开发

    2.1 alfred 插件开发概述

    Workflow 是alfred2.0推出的最激动人心的特性,通过与脚本语言的交互,workflow可以支持任意操作,把您日常的重复性事务封装在脚本中,大大的提高工作效率。

    Workflow 支持php、bash、perl、ruby以及python作为脚本语言,并内置脚本语言解释器,并通过stdio的形式在各个脚本模块中传递参数。

    在代码中插入 {query}块可以接收上一个脚本输出的内容。形成完整的控制链条。 最后由alfred输出至 Output 模块, 在Output模块中, 我们可以启动浏览器、将内容复制到剪切板、 启动通知中心、甚至执行bash脚本。

    在日常的使用中,我们通常通过关键字来调用某一模块,例如“find xxx” 即是调用find内建模块 query内容为xxx。 在workflow的开发中, 开发者可以自定义自己编写模块的关键字,只要不与其他模块冲突即可。

    在workflow的结构中,数据流通过alfred的控制线进行传递,每一个脚本模块的STDIO输出会被alfred替换到 下一个脚本的{query}块中。

    如下图所示:

     

    其中,我们使用『拖动』的方式,控制数据在workflow的流向:

     

    以上的 有道翻译workflow的数据流向是这样的。

    通过yd作为关键字启动workflow, 如果直接回车,使用OpenURL,启动youdao网站。如果使用Cmd+回车的方式, 则执行Run Scirpt 并将其输出到剪切板,并用Post Notification的方式,在通知中心显示。

    2.2 Alfred的XML格式概述


     在Alfred脚本执行的最后一部中, 所有数据要被封装到XML格式中被alfred调用,其格式为
    
    <items>
        <item autocomplete = "autocompletex" uid = "123321" arg = "argsx" >
        <title >title</title>
        <subtitle >subtitle</subtitle>
        <icon >icon</icon>
        </item>
    </items>
    

    运行之后的效果是:

     

    根节点为items 其中包括任意多个item节点,每一个item节点代表本次查询结果的一行。 每一个item节点包括若干parameter与childnode,其含义为: uid: 每一个item要有一个独立的uid,不可重复 valid:值为yes 或者 no, 若为no,该行结果不可被选择 autocomplete : 自动补全的值, 使用tab可以令alfred自动补全为 autocompelete属性的值. arg:作为下一个模块的参数传递

    <title> 该行item的标题,也是主要显示的位置。 <subtitle> 该行字标题位置,会被显示为灰色小字 <icon> 该行图标的文件名,其大小为64X64 pixels

    2.3 {query} 与 stdio


    alfred模块间数据是如何传递的,曾经困扰我很久。

    其数据流是这样的, 你在关键字之后的文字会作为第一个模块的query, 由alfred替换代码中{query}的位置, 该模块print到stdio的数据会像第一个模块一样,去替换第二个模块的{query}位置,直到最后生成XML文件, 只有最后一步是不一样的,也就是xml文件输出之后, 用户在不同的条目上按回车, alfred将把该条目对应的item的arg属性的值传递给下一个模块。

    2.4 python 开发示例


    下面,我将用开发一个百度词典为例,详细讲解开发alred插件中的每一个步骤。

    ###2.4.1 Script Filter Script Filter 的作用是提供一个Alfred workflow的起始点,可以通过点击右上角的加号,从Inputs中选择。

    它的界面如下图所示:

     

    在上图中可以看出, 输入 “bdc hello” 之后, alfred会启动一个python解释器,并运行Scirpt栏中的代码。

    Script中的{query}会被alfred自动的取代为「hello」.

    也就是,此时 实际运行的代码是

    import bddict
    bddict.query('hello')
    

    其中 , bddict.py 的代码如下:

    
    # -*- coding: utf_8 -*- 
    # author xiaogo
    import sys
    import hashlib
    import time
    import math
    import base64
    import urllib2 
    import urllib
    import re
    import json
    import alfredxml
    
    client_id = '1xML4eLvqG8runr4uHcDPU6f'
    
    def is_cn_char(i):
        return 0x4e00<=ord(i)<0x9fa6
    
    def bdDict(From,To,Q):
        resp = urllib2.urlopen("http://openapi.baidu.com/public/2.0/translate/dict/simple?client_id=%s&q=%s&from=%s&to=%s"%(client_id,Q,From,To)).read()
        js = json.loads(resp,encoding = 'utf-8')
        return js
    
    # alfred 的入口函数.
    def query(query):
    # 对query 作防御
        if(len(query)==0):
            rowList = [{'uid':'1',
                        'arg':'',
                        'autocomplete':'',
                        'icon':'icon.png',
                        'subtitle':'Please Input',
                        'title':'Please Input'}]
            element = alfredxml.genAlfredXML(rowList)
            print(element)
            return
    # 判断是否为中文字符,若是 汉译英 若否 英译汉
        if(is_cn_char(unicode(query,"utf-8")[0] )):
            resp = bdDict("zh","en",query)
        else:
            resp = bdDict("en","zh",query)
        if(resp[u'errno'] == 0):  # 通过bdDict() 函数 ,调用百度词典HTTP接口.
            if(len(resp[u'data'])==0):
                return
            rowList = []
            subtitle = ''
            k = resp['data']['symbols'][0] # 解析JSON.
            uid = 1
            for i in k.keys():
                if(i.startswith("ph_")):
                    subtitle +=i[3:]+'['+ resp['data']['symbols'][0][i] + ']'
            # 解析JSON, 生成rowList
            rowList.append({
                    'uid':uid,
                    'arg':query,
                    'autocomplete':query,
                    'icon':'icon.png',
                    'subtitle':subtitle.encode("utf-8"),
                    'title':'发音'})
            uid +=1
    
    
            for i in resp['data']['symbols'][0]['parts']:
                if(len(i['part'])>0):
                    subtitle = reduce(lambda x,y:x+","+y, i['part'])
                else:
                    subtitle = ''
                title = reduce(lambda x,y:x+","+y, i['means'])
                rowList.append({
                    'uid':uid,
                    'arg':query,
                    'autocomplete':query,
                    'icon':'icon.png',
                    'subtitle':subtitle.encode("utf-8"),
                    'title':title.encode("utf-8")})
                uid +=1
    
    
        else:
            print("err")
            pass
        #print(rowList)
        # 生成XML文件.
        print(alfredxml.genAlfredXML(rowList))
    

    其中, 生成XML的代码如下 alfredxml.py :

    # 生成XML文件
    def genElement(lists):
        assert(len(lists)%3==0)
        name = lists[0]         # 节点名
        params = lists[1]      # 节点属性list
        content = lists[2]      # 节点内容 , 可能是String 或者是包含其他Element.
        string = ''
        string +="<%s"%name + “ “  # 以下为解析XML List的过程
    
        for k,v in params.items():    # 枚举属性
            string+='%s = "%s" '%(k,v)
    
        if(isinstance(content, str)):   # 通过递归 解析子节点
            text = content
        else:
            text = genElement(content)
        string +=">" + text + "</%s>\n"%name
    
        if(len(lists)<=3):  # 通过递归, 解析同级节点
            return string
        else:
            return string + genElement(lists[3:])
    
    def genAlfredXML(rowList):  # 生成alfred所需要的XML String.
        item = []
        for row in rowList:
            tsi = ['title',{},row['title'],'subtitle',{},row['subtitle'],'icon',{},row['icon']]
            item.extend(['item',{'uid':row['uid'],'arg':row['arg'],'autocomplete':row['autocomplete']},tsi])
        items = ['items',{},item]
        return genElement(items)
    
    if __name__=='__main__':
        rowList = [{'uid':'123321','arg':'argsx','autocomplete':'autocompletex','icon':'icon','subtitle':'subtitle','title':'title'}]
        element = genAlfredXML(rowList)
    
        print(element)
    
    

    ###2.4.2 Output

    output 是 alfred 中的『执行器』。

    通过Script Filter, 我们已经得到了一个alfred 的结果列表, 通过点按回车键,我们可以执行相应的命令。 以百度词典这个workflow为例,我们打开了百度词典的网站。

    执行的时候,我们打开了http://dict.baidu.com/s?wd={query}

    注意,这里又出现了一个{query}

    这个{query} 将承接 Scirpt Filter 中,被点击回车的那条XML 节点中的 arg参数 。

     

    实际上,我们不仅可以使用URL Open 作为 结果,也可以使用Terminal Command 作为结果执行。

    使用Terminal ,可以令你更加随心所欲的控制你的MAC. 实现诸如Wifi切换、更改DNS服务器、启动某个服务端、甚至可以控制你家的空调或者咖啡机, 这以前只有emacs才能做到 ;)

    #3.参考文献


    1.Alfred - workflow python dev lib

    2.Tutorial on alfred workflow with python

    来源: http://myg0u.com/python/2015/05/23/tutorial-alfred-workflow.html

    展开全文
  • <p>Got the scripts working with some tweaking -- but I was very curious how you rigged up the Alfred workflow. <p>Let me know what version Alfred your workflow is compatible with -- Would love to ...
  • alfred-chrome-incognito-workflow::globe_showing_Americas:Alfred Workflow:以隐身模式打开Goog​​le Chrome
  • 如何用 Python 编写 Alfred Workflow

    千次阅读 2018-05-19 14:28:36
    如何用 Python 编写 Alfred Workflow 写这篇文章记录一下我第一次开发 Alfred Workflow 的历程,希望能给后来者提供一个真正有帮助的教程。 在这边文章里,我会讲述我如何在Alfred里开发一个workflow,来实现...

    如何用 Python 编写 Alfred Workflow

    写这篇文章记录一下我第一次开发 Alfred Workflow 的历程,希望能给后来者提供一个真正有帮助的教程。

    在这边文章里,我会讲述我如何在Alfred里开发一个workflow,来实现LeetCode上的问题和Topic的检索功能。具体的代码,说明和演示可以访问我的 Github.

    先贴个一个简单的示例图
    这里写图片描述

    选择Binary Search Tree [Hard]后,会打开一个LeetCode页面并筛选出所有带有Binary Search Tree标签的Hard Problem,如下图所示:
    这里写图片描述

    1. 准备工作

    首先使用Alfred的Workflow,必须要购买他们的Alfred Powerpack,还是很值得的。

    具体开发需要的依赖库是:deanishe开发的Alfred Workflow组件,可以从Github上面把它下载下来。

    2. Detail Steps

    2.1 创建一个新的workflow

    首先点击左下角的+号,选择创建一个Blank Workflow,如下图所示:
    这里写图片描述

    2.2 添加Alfred Workflow开发组件

    接下来先创建一个Script Filter,如下图所示
    这里写图片描述

    进入workflow所在的文件夹,双击刚刚新创建的Script Filter,然后双击下图中红色圆圈中的按钮即可。
    这里写图片描述

    最后把下载好的Alfred Workflow开发组件里的workflow文件夹,拷贝到这个文件夹中,如下图所示:
    这里写图片描述

    2.3 编写Script

    首先讲讲如何在Alfred Workflow中调用我们编写的Python脚本,双击Script Filter,配置如下所示:

    这里写图片描述

    /bin/bash表示使用bash来执行我们的脚本,script中所写的就是在bash中执行的命令,如上图中所示,我们执行了一个名为search.py的Python脚本,并传递了参数--topic "{query}". 其中{query}就是用户在Alfred中输入的字符串。

    接下来就可以使用 Alfred Workflow 库来开发了,具体的教程可以查看链接中Github的说明。

    下面讲一下简单的基本框架

    #!/usr/bin/python
    # encoding: utf-8
    
    import sys
    
    # Workflow3 supports Alfred 3's new features. The `Workflow` class
    # is also compatible with Alfred 2.
    from workflow import Workflow3
    
    
    def main(wf):
        # The Workflow3 instance will be passed to the function
        # you call from `Workflow3.run`.
        # Not super useful, as the `wf` object created in
        # the `if __name__ ...` clause below is global...
        #
        # Your imports go here if you want to catch import errors, which
        # is not a bad idea, or if the modules/packages are in a directory
        # added via `Workflow3(libraries=...)`
        import somemodule
        import anothermodule
    
        # Get args from Workflow3, already in normalized Unicode.
        # This is also necessary for "magic" arguments to work.
        args = wf.args
    
        # Do stuff here ...
    
        # Add an item to Alfred feedback
        wf.add_item(u'Item title', u'Item subtitle')
    
        # Send output to Alfred. You can only call this once.
        # Well, you *can* call it multiple times, but subsequent calls
        # are ignored (otherwise the JSON sent to Alfred would be invalid).
        wf.send_feedback()
    
    
    if __name__ == '__main__':
        # Create a global `Workflow3` object
        wf = Workflow3()
        # Call your entry function via `Workflow3.run()` to enable its
        # helper functions, like exception catching, ARGV normalization,
        # magic arguments etc.
        sys.exit(wf.run(main))

    我们可以通过如下的方式来在Alfred的下拉列表中添加项:

    wf.add_item(
        title="Title here",
        subtitle="Subtitle here",
        valid=True,
        uid="url here",
        arg="return argument here"
    )

    具体的代码,说明和演示可以访问我的 Github.

    有什么问题可以在这里留言,看到了我会尽量回复。

    展开全文
  • 有道 Alfred Workflow 威力加强版 ...
    itemprop="mainEntityOfPage" href="https://xilidou.com/2017/10/24/%E6%9C%89%E9%81%93-Alfred-Workflow-%E5%A8%81%E5%8A%9B%E5%8A%A0%E5%BC%BA%E7%89%88/">

    有道 Alfred Workflow 威力加强版

    最近学习 吴恩达 的DeepLearning 的时候,发现自己的 python水平有点弱。就像想找个练手的东西写一写。想来想去也没有什么想法。今天闲逛知乎的时候发现,有一个用 php 实现的 workflow。可以使用Alfred 调用网易有道的翻译API,查出单词,但是上网一搜使用的 api 网易将会在 2017年12月下线。于是决定自己使用新的api撸一个,提升自己的 python 的水平。

    于是就有了这个小玩具。

    截图:

    截图.png

    下载地址

    有道 workflow 威力加强版

    github

    展开全文
  • 本人写了个简单的Alfred Workflow,如果有小伙伴不使用VsCode和IDEA的,又觉得Web在线查询麻烦的,同时又使用Mac安装了Alfred的小伙伴,可以试试我这个版本,使用起来也很方便,...
  • 一个JXA脚本和一个Alfred Workflow,用于控制Google Chrome(自动化Javascript)。 如果您有兴趣了解如何创建工作流程,还请参阅我的《 文。 用法 将此文件设为可执行文件 chmod +x ./chrome.js 然后运行: ./...
  • 本文简单记录下如何用 Node.js 开发一个 Alfred workflow 的过程。 之前开发过自己用的小工具,这次打算开发 CDNSearcher,用了半天才回忆起来开发流程,我在想如果之前简单记录了下,或许这次就不用花那么长时间...
  • 笔者平日闲暇会在网易新闻里浏览新闻,之前发过一篇Alfred Workflow基于Python的入门案例,主要逻辑是输入内容之后直接显示item内容,操作比较单调。于是通过进一步学习Alfred Workflow,可以将在item中选择参数传入...
  • 在编写 markdown 时,经常出现很小的图片被放得很大,为了解决这个问题,让视觉上变得好看点,决定编写一个压缩图片的 Alfred Workflow。 文章目录一、python 程序的编写二、新建 Alfred Workflow三、使用 一、...
  • Alfred Workflow 一键上传图片到github [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-o1HY68DB-1576070766649)(https://img.shields.io/badge/Alfred-workflow-brightgreen)] 在编写...
  • Alfred workflow 配合七牛云实现 markdown 图床,支持截图、文件、印象笔记直接传图。 安装 Alfred 需要的 Alfred 的高级版,大家可自行查找安装。 配置七牛云账户 申请 在 官网 申请,这里可参考别的文章。最终...
  • 我个人认为他就是一个完全定制化的搜索框,一个搜索框能做你想做的所有事情,那么大家在用Alfred这款软件也肯定会装各式各样的Alfred workflow插件(这个是高级收费版才有,相信大家有办法),但是有没有想过,这个插件到底...
  • Idea: Alfred workflow

    2020-12-25 20:28:18
    <p>Launch alfred > type in "pwp mypassword" > A pwpush.com site for this password opens (some default settings), and it's URL is copied into the clipboard automatically <p>Possible ...
  • :sauropod:支持网站/ vscode /想法/ Alfred Workflow多平台 :rocket: 网络版本 :lollipop: vscode插件 安装 vscode应用商店中搜索“ any-rule ”。 使用 方式1: 按F1 (mac下fn + F1)打开正则列表。 输入关键字...
  • <div><p>I just upgraded to Alfred 4, and the workflow no longer works. It doesn't have any output <img alt="" src="https://i.woof.no/git/3VzVk0OFV6u9Gpbl0CgV83WO.png" /></p>该提问来源于开源项目&#...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 909
精华内容 363
关键字:

alfredworkflow