編寫AppleScript與Alfred Workflow

前言(廢話)

Luke Chen
5 min readJan 20, 2018

在開始筆記之前,先說說最近的狀況吧。

之前因為常常盯著電腦,一段時間以後發現眼睛有點酸澀。突然警覺到愛惜眼睛的重要性,所以就要求自己一段時間要起來活動一下。

不過常常一寫就是幾個小時,等注意到的時候就已經幾個小時過去了。後來想說這樣不行啊,就去找了程式來提醒我要記得休息。

最後找到的是BreakTime這個軟體。

先說啊,這不是業配,只是覺得他符合我的需求而已。

那麼用了以後,有時候看影片的時候又會手動的關掉它,然後就忘記要打開了。

所以為了解決這個問題,就去學了怎麼用AppleScript來開關BreakTime

然後又學了怎麼用Launchd來執行這個Script

然後就衍生出這篇文章來了…

不過這些都是很粗淺的應用,實際上我也還在學習怎麼用JavaScript和Python來編寫Script

關於Alfred

在Mac上最有名的效率軟體Alfred應該不用多作介紹

那麼用了Alfred如果不用它的Workflow,就真的是太可惜了一點。

註:Alfred要開啟PowerPack才能使用Workflow功能

註: PowerPack要開啟荷包才能使用這個功能

先用ScriptEditor來編寫一段Script

首先,最重要的就是看看這個程式有沒有支援AppleScript。如果沒有的話,應該就可以關掉這篇文章了。

從視窗 -> 程式庫,或是直接Shift + Cmd + L

來開啟程式庫的視窗,然後按下左上角的 +

新增自己想要編寫的程式,

這時候就可以連點兩下,會打開這個程式提供的API視窗

這邊就是BreakTime所提供的API

那麼就可以來想想需求了。

需求:

  1. 想要可以切換BreakTime開啟 / 關閉
  2. 想要知道BreakTime還有多久要休息
  3. 跳過這次的休息,重新計時

比較可惜的是BreakTime沒有API是可以直接設定工作 / 休息時間長度的

那麼AppleScript如下

想要可以切換BreakTime開啟 / 關閉

tell application "BreakTime"

set enabled to not enabled

end tell

想要知道BreakTime還有多久要休息

tell application "BreakTime"

seconds until break

end tell

跳過這次的休息,重新計時

tell application "BreakTime"

reschedule_break

end tell

當然,這些也是可以寫在一起的,再透過參數去決定要走哪條路

我覺得放到Alfred中會有點混淆,所以就分開來放

這部份的AppleScript也是可以直接執行,不一定需要透過Alfred

將Script導入Alfred Workflow

先新增一個Workflow,這邊是直接選擇Blank Workflow

點右鍵,選新增一個InputsKeyword 和一個 ActionsRunNSAppleScript

先選擇剛剛點的Keyword,這邊比較簡單,大概功能為:

  • 設定關鍵字
  • 設定這個功能要不要有參數
  • 設定這個功能的描述
  • 設定icon

這邊就自由發揮吧,參數的部分,因為這些功能不需要參數,所以記得選NoArgument

然後是選 Actions 的 RunNSAppleScript

貼上剛剛寫的Script,記得前後要加上 on alfred_script(q)end alfred_script

這邊貼個範例就好了,這是需求的第一點。

on alfred_script(q)

tell application "BreakTime"

set enabled to not enabled

end tell

end alfred_script

這時候,用alfred輸入剛剛在keyword設定的關鍵字,就可以看到BreakTime的開關動作

Alfred的參數如何輸入

有注意到on alfred_script(q)這句話最後面有一個q字,這就是前面輸入的參數

那又如何輸出

利用 return 這個關鍵字,就可以返回一個值

以上就是如何

  1. 編寫一個AppleScript
  2. 這個AppleScript怎麼代入Alfred的Workflow

的大概流程

那麼下面在貼一個關於Mac上另外一個好用的程式「Caffeine」

嗯…咖啡因,顧名思義,就是讓你的電腦不會進入睡眠狀態的程式。

這個Script可以讓我設定一個時間,例如說60。

那麼電腦就會保持開啟一個小時,並且跳出一個通知告訴我結果。

因為剛入門,寫個簡單的筆記與教學。

如果有什麼錯誤的部分歡迎指正或是改進。

附上Script

on alfred_script(q)tell application "Caffeine"set activeTime to q * 60

turn on for activeTime

set message to "Caffeine has been " & "active for " & q & " minute"

return message

end tell
end alfred_script

--

--