改 AHK 的 Trigger Key 避免影響輸入焦點

延續使用 shell 的習慣,從剛開始接觸 AutoHotKey 以來一直都是用 Tab 鍵來當作觸發鍵,缺點是如果沒有 trigger 成功便會改變輸入 focus,例如跳到一個 button 上,如果打得很快又按到 SpaceEnter 時,造成意外點到 button 的情形。最近不勝其擾,開始研究解決方案。

AHK 可以直接設任意鍵當成 trigger key,但修改這個設定,就等於強迫更換按 Tab 鍵的習慣,所以要想辦法讓 Tab 鍵 mapping 到自訂的 trigger key。

合理的做法是挑一個少用的字元(例如 |) 當成 trigger key, 然後把 Tab remap 到 |, 但直接 remapping 是行不通的,預設的 #InputLevel 為 0,無法 trigger 其他的 hotkey,必須改為 1-100 之間的值,#InputLevel 說明文件底下的 example 呈現類似的案例。

理論上可以直接設定 key mapping 如下:

Tab::|

但實測起來會有問題,例如想用 AltTab 切換視窗時,他會送出 Alt|,必須用 Send 寫成一個用 Return 結尾的 subroutine 才行。

所以整個設定如下:

#Hotstring EndChars |

#InputLevel 1
Tab::
  Send |
Return
#InputLevel 0

目前用起來很滿意,沒 trigger 成功就是輸入一個 | 而已,不會再亂點到其他按鈕,本來還想設計一些自動 backspace 刪掉這個符號的機制,但運作起來有點兩光,就維持這個最簡單的樣式。