前言
很多人mac上都安裝了Alfred這款軟件,這款軟件稱之爲效率神器,怎麼形容這個軟件呢?我個人認爲他就是一個完全定製化的搜索框,一個搜索框能做你想做的所有事情,那麼大家在用Alfred這款軟件也肯定會裝各式各樣的Alfred workflow插件(這個是高級收費版纔有,相信大家有辦法),但是有沒有想過,這個插件到底怎麼開發的呢,或者說當自己的需求網上找不到類似的插件怎麼辦呢? 本人剛好就有類似的需求,下文用這個案例來講解,怎麼定製屬於自己的Alfred Workflow!
需求
本人有很多小工具,都是需要用命令行來啓動,比如jadx,那現在就是想通過在Alfred裏面通過快捷鍵彈出所有工具,這樣省得每次都要輸一長串命令,如下圖:
需求分析
- 怎麼增加一個自己的Alfred Workflow插件
- 怎麼設置Alfred Workflow的快捷鍵
- 既然要彈出這麼多個item,肯定要告訴Alfred,每個條目的標題,描述,圖標,執行的命令
- 選擇一個item後,怎麼執行這個item
增加一個Alfred Workflow
首先打開Alfred的設置頁面,然後進入到Workflow選擇下圖的➕ ,然後選擇blank workflow說明是一個空的(提示:其實這裏是有很多模板的,我們選擇一個空workflow是爲了學習用)
完成後會顯示一個自己定義的插件:如圖
設置快捷鍵,輸入後可以顯示多個條目
一個插件就是由很多腳本程序組合而成的,腳本的類型很多,這裏就不一一舉例,只說明用到的腳本類型,在自己腳本黑色區域右鍵鼠標 -> 選擇Inputs -> Script Filer -> 設置腳本
腳本的大概意思是: 添加一個輸入腳本,腳本的語言用php,關鍵詞用tool
上面我們用到了本地的php文件,那麼可以通過右鍵插件選擇open in finder打開插件的目錄,創建這個php文件,如果用其他語言也一樣,創建其他語言的文件執行,甚至可以直接將代碼寫到輸入框裏面
要想顯示item需要腳本返回特定格式的數據給插件,既然用的php,我們知道返回數據是用echo “xxx”,下面我們就展示應該返回的數據結構
舉例:
{
"items": [
{
"uid": "Android Device Monitor",
"title": "Android Device Monitor",
"subtitle": "open Android Device Monitor",
"arg": "nohup \/Users\/fuheng\/Library\/Android\/sdk\/tools\/monitor > \/dev\/null &",
"icon": {
"path": "\/Users\/fuheng\/tool\/clipboardTool.jar",
"type": "fileicon"
},
"valid": true,
"type": "default",
}
]
}
參數 | 解釋 |
---|---|
items | 數組的節點名 |
uid | item的id |
title | 標題 |
subtitle | 子標題 |
arg | 參數 |
icon | 圖標 |
valid | 該item是否是可執行 |
type | 類型 |
我們只要返回這樣的數據結構給腳本,就會自動識別,顯示items下面數組的條目,具體是怎麼返回,就看自己做什麼,也可以什麼都不做直接返回一個死數據.
右上角有個小瓢蟲,可以顯示出返回的數據
選擇一個item後,執行這個item
看到這裏那麼我們第一個輸入腳本已經寫好了,我們需要加一個執行腳本,執行我們傳過來的參數,我們右鍵(如圖)Actions -> Run Script -> 設置腳本
然後將兩個腳本連起來
腳本的大概意思就是: 添加了一個執行腳本, 使用bash語言,並且執行傳過來的參數
注意
當我們輸入指定的關鍵詞時,搜索框就會顯示插件名稱,輸入完插件關鍵詞加上空格之後的就是參數,輸入參數時,每輸入一個字母都會調用腳本,所以我們可以匹配輸入的參數顯示合適的item,如圖
其實代碼很簡單,就是在添加item的時候加了個參數判斷
function addToolItem($query, $name, $subtitle, $shell) {
if (empty($query) || self::startWith($name, $query)) {
$item = new Item();
...
$this->addItem($item);
}
}
相信自己動手後肯定能做出自己滿意的插件,如果有地方不懂的可以評論區問我