通過 Alfred Workflow 的 Python API 提升效率

Github 上找到一個項目 https://github.com/deanishe/alfred-workflow

這個項目提供了 Python 調用 Alfred 的 API,從而允許你更加自由地使用 Alfred 的顯示功能。這篇文章主要是介紹其中幾個我覺得比較有用的接口及使用方法。

下圖是自己通過這個庫寫的一個待辦事項小工具。
在這裏插入圖片描述

基礎框架

安裝

使用 pypi 安裝 pip install Alfred-Workflow

工程目錄設置

原作者建議工程目錄直接設置 Alfred Workflow 的目錄(打開 Alfred 設置,選擇某個 Workflow 並右鍵點擊,選擇“Open in Finder”)。
如果你希望把自己的工程目錄放到任何你喜歡的地方,那麼就需要從某個 Workflow 的文件夾下複製一個 plist 文件,並放置到自己的工程目錄下。

主程序結構

我在原作者建議的主程序結構中,進行了一些修改

#! 所使用的 Python 解釋器位置
# encoding: utf-8

from workflow import Workflow

log = None


def main(wf):
    # wf 是一個 Workflow 對象
    # 這個是主函數

    # 引入其他模塊
    import somemodule
    import anothermodule

    # 獲取參數
    args = wf.args

    # 自定義的程序

    # 向結果中添加顯示內容
    wf.add_item('Item title', 'Item subtitle')

    # 讓 Alfred 顯示結果
    wf.send_feedback()


if __name__ == '__main__':
    wf = Workflow()  # 創建針對 Alfred2 的 Workflow 對象
    #如果針對的是 Alfred3,那麼應該使用 wf = Workflow3()
    # 設置日誌對象
    log = wf.logger
    wf.run(main)  # 調用主函數

Alfred 中的設置

在 Alfred 的 Workflow 中點擊右鍵,Inputs > Script Filter

在這裏插入圖片描述

一定要記得設置其中的 Keyword、設置 Language 部分的內容

在這裏插入圖片描述

Script 部分,我還是習慣採用之前相同的調用方式

export PATH=#工程目錄的路徑#:$PATH
export LANG=UTF-8
cd #工程目錄的路徑#
query="$(./腳本名稱.py $1)"  # 記得先爲腳本添加執行權限 chmod +x 腳本名稱.py
echo "$query"

使用說明

這裏只對我覺得有用的幾個功能接口進行簡單說明,以下說明均針對 Alfred3

創建基礎對象

from workflow import Workflow3
wf = Workflow3([額外庫的路徑列表])

獲取參數

通過 wf.args 屬性獲取參數,參數是一個 list,sys.argv[1:] 的效果是一樣的

向結果中添加條目

it = wf.add_item(title, subtitle='', arg=None, autocomplete=None, valid=False, uid=None, icon=None, icontype=None, type=None, largetext=None, copytext=None, quicklookurl=None, match=None)

重要參數說明如下:

  • title:標題內容
  • subtitle:副標題內容,可選
  • valid:條目是否能夠被選擇
  • arg:選擇該條目後,傳遞給後續流程的參數,即 {query}
  • icon 和 icontype:圖表相關使用
    • icontype 爲 None 時,icon 指向一個具體的圖標文件
    • icontype 爲 ‘filetype’ 時,icon 則應該指向某個文件,這時將會使用這個文件的內打包的 icon 文件,例如 ‘/Applications/Safari.app’
    • icontype 爲 ‘filetype’ 時,icon 應該是某個文件類型,例如 ‘pdf’, ‘public.folder’
  • largetext:當該條目高亮時,用戶點擊 Cmd+L 時顯示的文字
  • copytext:當該條目高亮時,用戶點擊 Cmd+C 時複製到剪切板上的內容
  • quicklookurl:當使用 Alfred 提供的快速瀏覽功能時,跳轉的鏈接,例如按下 Cmd+Y
  • uid:給 Alfred 進行記憶和排序的編號

這個函數會返回一個 Item3 對象,如果希望定義這個對象在按住 Cmd、Alt 等按鍵的相關行爲,可以使用

it.add_modifier(self, key, subtitle=None, arg=None, valid=None, icon=None, icontype=None)

重要參數說明:

  • key:可以是 ‘cmd’ 或 ‘alt’
  • 其他參數:和 Workflow3.add_item() 意義相同

顯示通知

from workflow.notify import notify
notify('標題', '內容')

Python2 和 Python3 的兼容問題

這個庫是使用 Python2 寫的,直接在 Python3 上使用會有問題,如果你習慣使用 Python3,可以有一些辦法做一些兼容。

基礎準備如下:

  • 首先在使用 pip 安裝時,要記得選擇使用 Python2 安裝
  • 跟 Workflow 相關的操作放在一個文件裏(稱爲 a.py),使用 Python2 作爲解釋器
  • 把真正的邏輯放到另一個文件裏(稱爲 b.py),使用 Python3 作爲解釋器

工作過程:

  • a.py 接收參數後,使用 subprocess 模塊提供的功能,傳遞到 b.py 文件傳輸
  • b.py 可以通過文件讀寫、數據庫或者標準輸出的方式,把結果再傳回
  • a.py 再讀取 b.py 執行的結果,完成 Alfred 內條目的添加
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章