在OS X 用熱鍵快速將特定app顯示於最上層
因為平常在工作時的需要開很多軟體或視窗,螢幕也有點寬廣(汗),常常要找已經開啟卻被其他軟體視窗覆蓋的東西時會花一點時間。
而如果有使用iTerm的人應該會知道,iTerm有內建個很方便的快捷鍵 Alt+Space,可以將iTerm隱藏或被覆蓋的視窗顯示在最頂層,這時你就可以快速的找到他。
於是我就在想,OS X不知道有沒有內建這個功能? 沒有。
只好自己寫一個啦~
一開始先往內建的快速鍵方面尋找,但他只能加入app的快捷鍵,而且也不太好用。我主要是想說如果能加入執行個一段 applescript快速利用script將需要的視窗叫到最上層的話應該就簡單很多,結果內建系統 什 麼 都 不 行 。
所以就找了一下支援可以設定全域快速鍵,觸發後可以執行applescript的軟體,結果還蠻多套的,而我接下來選擇Keyboard Maestro來介紹:
Keyboard Maestro真的蠻強大的,支援了很多功能,而我最需要的執行applescript還可以在他裡面撰寫與編輯,雖然他compile顯示的怪怪的就是了,還是建議大家先在內建的applescript程式寫好在丟過去。
主要介面稍微研究一下大概就能瞭解,你所需要的是設定一組trigger -> Hot key並將action設定成Execute applescript,並在下面貼入你寫好的程式便可以用熱鍵執行,超簡單的!
接下來我介紹一下我寫的快速呼叫app的applescript,語法在網路上尋找就有教學了,這部分不多介紹(我也是google才學會的XD):
在過程中主要遇到了三個問題
1.app bundle name呼叫沒反應
這個問題我是在Airmail上面遇到的,主要是因為我是使用beta版,這時候你要進去 /Applications/程式名稱.app/Contents/MacOS/ 去查看那個應用程式的binary名稱才準確,一開始我以為使用活動監視器看到的名稱就可以了,但這樣有機率是錯誤的。
2.app縮小後,用 tell application “程式名稱” to activate 會沒反應。
主要原因是你要先將application reopen (minimize的反狀態,如果你不是在minimize時呼叫不影響)之後在activate就能正常了
3.count of Finder windows 的數目不正確
這邊要注意的是這個數目是指視窗而非頁籤數量,另外在minimize狀態時這個數量會為0,所以你要先讓程式reopen在去抓這個數值。
1.得到當前active app的list,並檢查我的程式(這裡以Finder為例)有沒有在內
0 1 2 |
set activeApp to name of first application process whose frontmost is true |
如果在內,就將其visible設置到最前
0 1 2 3 |
if "Finder" is in activeApp then set visible of process "Finder" to false |
如果不在內,就先將其reopen(最大化)並activate(切換到他),保險起建在檢查一下他有沒有任何視窗開啟,沒有的話(代表上次關掉所有視窗了)任意的開啟一個新的頁面,大致上這樣就能讓你在工作時超方便的快速切換到該app,而我綁定的按鍵是alt+數字(方便我記憶)。
0 1 2 3 |
tell application "Finder" to reopen tell application "Finder" to activate |
完整的code附在Github上~
Gary 大神,太猛啦
112大神 an an