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 作爲解釋器
工作過程: