防 Safari 下手抖誤按 ?+Q

或許有很多人和我一樣更喜歡用鍵盤操作 Mac,尤其是習慣於用 ?+W 關閉 Safari 的 Tab 而非用游標去瞄準小小的叉號。可是 qwerty 布局下 Q 和 W 離得太近,盲敲時會有誤按 Q 導致整個 Safari 退出的情況。雖然概率很低,但一旦發生是很讓人崩潰的……

有什麼好辦法么?

方法一:改快捷鍵

把 Safari 的退出快捷鍵換成 ?+?+Q 之類的,只要不與系統原有快捷鍵衝突就好。修改方法如下圖:

不過,拋棄了全世界都通用的 ?+Q 很不正式很不優雅不說,還要重新記憶一個自定義的快捷鍵,其實很不爽。能不能把「退」與「不退」都揉進 ?+Q 里呢?

方法二:SlowQuitApp

這個小工具只在後台運行,沒有 UI 沒有菜單,甚至連個像樣的圖標都沒有,它的功能只有一個:長按 ?+Q 達到 1 秒或你指定的時間後才執行退出操作。在長按期間屏幕中央會顯示一個倒計時狀的動態圖形,便於用戶掌控長按時間。想修改長按時間的話,在 Terminal 下使用如下命令即可:

defaults write com.dteoh.SlowQuitApps delay xxx

其中的 xxx 是以 ms 為單位的長按時間。默認的1秒時間還是挺漫長的,建議修改得短一些。要注意的是,每次修改完後,要關掉並重新打開該 app 才會生效。

不過,SlowQuitApp 不太符合我的操作習慣,我希望在真正想執行退出時,是很痛快地執行,而非延時執行。另外,我的系統中已安裝 CheatSheet,長按 ? 會彈出快捷鍵列表干擾視線。能不能在按下 ?+Q 後彈出一個提示框並根據後續鍵盤操作決定退或不退呢?

方法三:AppleScript

求人不如求己,我喜歡用蘋果腳本來輔助系統操作,佔用資源少,沒有副作用,不怕系統升級帶來的兼容性問題,不依賴於第三方工具的開發與更新進度。尤其是這類輕量級的功能,完全可以用個小腳本搞定。

首先參照方法一把退出功能換一個快捷鍵,你完全不需要記它,甚至越難記越好。這一步操作僅僅是讓 ?+Q 的退出功能失效,給 AppleScript 讓位。

然後用 Automator 新建一個 Service,輸入置空,應用指定為 Safari,添加一個 Run AppleScript 動作,並在函數體中加入如下代碼:

set tempVar to display dialog ? "Are you sure to quit?" buttons {"Not yet...", "Yes!"} ? default button "Yes!"set theButtonPressed to button returned of tempVarif theButtonPressed is "Yes!" then tell application "Safari" quit end tellend if

要注意的是,代碼太長需要斷行時,需要用 ?+return 添加 「 ? 」符( continuation character)。將此工作流命名為 QuitBefore 保存,如下圖:

最後就是為它配上 ?+Q 的快捷鍵了,方法如下圖:

這樣每次按下 ?+Q 時,會彈出一個小對話框:

由於代碼中 「Not yet...」 按鈕在前,於是被選中;「Yes!」 按鈕被設置為 default,於是被高亮。這樣,當我想退出時,敲 return,當不想退出時,敲空格即可。

方法四:啥也別動

感謝知友 @Heliotrope 的回復提醒,如果手賤誤關了整個safari,重新打開 Safari後,只需 ?+?+T 即可恢復誤關之前的全部標籤頁,算是亡羊補牢為時不晚。另外感謝知友 @bnomb3 的提醒,可設置Safari在每次打開時自動打開上次關閉時全部的標籤頁,設置方法為:Safari Preference → General → Safari opens with → All windows from last session。

被關閉前的 Safari 上如果有未保存的文本輸入或下載任務或跳轉到一半的網頁,重新打開後可能會受到一定的影響。

方法五:其他

感謝回復區很多知友眾思廣議,還有諸如將瀏覽器更換為 Chrome、鍵位布局更換為 Dvorak 等。其實方法有很多,就看個人使用習慣和喜好了。

寫這篇小文最主要的目的是分享、交流和互相學習,至於東西好不好用甚至用不用都是次要的。若有朋友看過拙文之後受到一些啟發,或者開始嘗試學習和使用腳本,亦或開啟了 macOS 下的編程之路,那之於作者我便是件無上開心與榮幸之事了。

========分割線=======

方法三有一點點小問題:用 service 的方式反應不夠快,按下快捷鍵後有時可能會有近 1 秒的延遲才彈出窗口。對防誤關其實沒什麼影響,對強迫症患者有很大影響!這個反應遲鈍的問題與 macOS 系統對 service 的處理機制有關,目測無法直接從腳本上提升速度。

臨時解決方案:拋棄 Automator,直接將代碼保存為腳本文件,利用類似 FastScript 或 Keyboard Maestros 等工具直接為腳本配置快捷鍵,會有令人滿意的反應速度。

或許我應該開始學習 Obj-C 或 Swift 開發一個小 app 或 Safari 的 Extension 來從根兒上解決這個問題。欸,長路漫漫啊……


推薦閱讀:

Safari 如何快速切换代理服务器?
如何評價windows10抄襲蘋果safari的「閱讀列表」功能的行為?
safari 支不支持HTML5的錄音?
Mac 更新 OS X 10.10 後,Safari 打開網易等網站會出現卡死現象,為什麼?如何解決?

TAG:Mac | 快捷键 | Safari |