編寫AppleScript與Alfred Workflow
在開始筆記之前,先說說最近的狀況吧。
之前因為常常盯著電腦,一段時間以後發現眼睛有點酸澀。突然警覺到愛惜眼睛的重要性,所以就要求自己一段時間要起來活動一下。
不過常常一寫就是幾個小時,等注意到的時候就已經幾個小時過去了。後來想說這樣不行啊,就去找了程式來提醒我要記得休息。
最後找到的是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
那麼就可以來想想需求了。
需求:
- 想要可以切換BreakTime開啟 / 關閉
- 想要知道BreakTime還有多久要休息
- 跳過這次的休息,重新計時
比較可惜的是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
點右鍵,選新增一個Inputs
的Keyword
和一個 Actions
的 RunNSAppleScript
先選擇剛剛點的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
這個關鍵字,就可以返回一個值
以上就是如何
- 編寫一個AppleScript
- 這個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 tellend alfred_script