1. 程式人生 > >Alfred Workflow教程與例項

Alfred Workflow教程與例項

小帽子Alfred作為macOS上的最佳效率軟體應該沒太大爭議(排名),而其中最強大的部分即為Alfred 2.0推出的Workflow特性;其允許你將日常重複性的工作使用指令碼語言(目前支援:bash, zsh, php, python, ruby, perl, osascript(AppleScript, JavaScript))封裝起來,以Alfred作為統一的入口和呈現來使用,大大提高效率;本文將對其開發的一般流程進行講述,並最終實現兩個例項:

  • CDto: 開啟Terminal並轉到任意資料夾或檔案所在目錄,使用 bash+osascript 實現 點此下載

  • Effective IP
    : 查詢本機和外網IP地址,解析任意URL和域名的IP地址,同時進行歸屬地和運營商查詢,使用 python 實現 點此下載




概述

Alfred Workflow的整體架構,極度類似於Windows中的Direct Show,首先由一個Input開始,中間經過一堆filter,然後到一個Output結束,中間通過Pin連線,上一個Output Pin作為輸入傳遞給下一個Input Pin,從而形成一個完整的Graph,而最終傳遞給Alfred做輸出呈現的內容必須符合下面的形式:

<?xml version="1.0" encoding="utf-8"?>
<items>
<item valid="yes"> <title>10.0.2.11</title> <subtitle>45.76.65.119 美國新澤西州皮斯卡特維 choopa.com</subtitle> <icon>Info.icns</icon> </item> </items>

Alfred上每一行顯示對應一個item,如果顯示多行,那就在items下放入多個item即可

  • valid 表現為可不可以選擇,點選,再次傳遞
  • title 主標題
  • subtitle 副標題
  • icon 圖示

開發準備

  1. 使用[Option+空格]調出Alfred,輸入alfred開啟Alfred Preferences:

  2. 點選Workflows按鈕,然後點選最下面的 + 按鈕,建立一個Blank Workflow,按照提示填入資訊:

    Bundle Id 作為該Workflow的標識為必填內容,如果不填或與其他重複,有可能造成其不能正常執行

Workflow - CDto

使用Terminal的一般步驟大概是執行Terminal,然後一路cd到目標資料夾後開始使用;雖然Finder有cd to外掛,但也需要你一路點到指定資料夾後,才能調起來;雖然Alfred的Right Arrow按鍵裡面有Open Terminal Here操作,但排在太后面了,開啟的操作路徑至少需要:Right Arrow -> 輸入o -> [Command + 3]三步才能完成:

作為一個需要頻繁和Terminal互動的碼農這完全不能忍,下面我們就利用Workflow做個一步到位的CDto神器

  1. 在Alfred Workflows的工作區點右鍵,選擇選單[Inputs -> File Filter],並按下圖設定好,其他兩個選項卡使用預設設定即可:

  2. 在剛才插入的[File Filter]上點選右鍵,選擇選單[Insert After -> Actions -> Run Script],並按照下圖設定好,最下面的Escaping表示對指定字元進行轉義,比如說:/Users/$a1,如果不對$轉義,那外部會把$a1一起當做一個變數,而這個變數未定義也就是為空,傳遞進來的引數最終變成:/Users/,點此檢視程式碼:

Workflow - Effective IP

現在我們使用Python來做個更復雜的例子,點此檢視原始碼,具體分析見下圖:

  1. 主設定介面

    1. 直接輸入ip無參形式是查詢本機的本地和公網地址,有參形式是進行DNS解析,因此引數是可選的,需要設定為:[Argument Optional]
    2. 點選Run Behaviour按鈕,進行執行行為設定
  2. 執行行為設定

    1. 如果輸入發生變化,我們肯定是希望得到之後的結果,因此我們需要即時結束掉之前的查詢
    2. 在輸入過程中不進行查詢,Alfred通過最後一個字元輸入延遲來判斷輸入結束後才進行查詢

其他事項

  1. 左邊列表區域裡點右鍵選擇[Open in Finder]可以開啟該Workflow的目錄進行檔案檢視和編輯
  2. 點此可以調出除錯視窗,檢視除錯資訊