RSS 訂閱《HelloGitHub》第 104 期看到一個鍵盤映射工具kanata https://github.com/jtroo/kanata, 打算替代之前用的AHK配置,看起來更加全面小巧,rust 程序,使用配置文件,實際用下來比 autohotkey 1.0 更加方便,比如以前為了中文下的 ` 符號,AHK 需要使用複製功能,反而影響正常的已複製內容,而 kanata 直接能映射。完成了 ralt 的 qweasd 映射上下左右 home、end。
kanata#
主要的鍵盤查找和名稱可見以下工具和官方文檔。
https://www.toptal.com/developers/keycode
https://github.com/jtroo/kanata/blob/v1.7.0/parser/src/keys/mod.rs
用 unicode 方式實現了中文下輸入英文符號,避免切換中英文,如 (unicode "`") 和 (unicode">") 可以避免輸入中文特殊符號和書名號。
但是最後沒研究出來怎麼把鼠標 4,5 鍵,也就是鼠標側鍵前進後退映射成鼠標中鍵, AHK 裡比較容易。
kanata 裡試了mftp: tap forward mouse button,mbtp: tap bacward mouse button, mbck,mfwd都不行。
暫時記錄下 kbd 配置,有機會繼續學習完善。
- 主要大致框架就是各層對應,類似鍵盤視圖,defcfg 默認全部按鍵,即使沒有在 defsrc 中定義。
- defsrc 層,需要用到映射的鍵位;
- deflayer default 層,鍵盤對應的默認設置,比如我把 grv 鍵映射成 (unicode "`"), 這樣不論什麼輸入法,都不會影響輸出,避免中文下會輸出特殊字符,方便 markdown 寫作。其餘不修改的用_表示。
- deflayer ralt 層,我用於定義右 alt 觸發的特殊層,自定義修改默認鍵輸出,搭配
defalias
中定義。 - defalias 中我定義了 caps 鍵和 ralt 鍵都能觸發 ralt 層定義,其中本身按鍵也重映射成了
>
和 ```。
更新:後來在v2ex 有人答復了, issues list裡有,原來還不支持鼠標映射。
(defcfg
#|
This configuration will process all keys pressed inside of kanata, even if
they are not mapped in defsrc. This is so that certain actions can activate
at the right time for certain input sequences. By default, unmapped keys are
not processed through kanata due to a Windows issue related to AltGr. If you
use AltGr in your keyboard, you will likely want to follow the simple.kbd
file while unmapping lctl and ralt from defsrc.
|#
process-unmapped-keys yes
)
(defsrc
caps grv q w e [ ] Backspace
a s d
lsft . rsft
ralt apps rctl
🖰4
)
(deflayer default
@cap (unicode "`") _ _ _ _ _ _
_ _ _
_ _ _
@ralt VolumeDown VolumeUp
🖰3
)
(deflayer ralt
_ (unicode "`") home up end VolumeDown VolumeUp Delete
left down rght
_ (unicode ">") _
_ _ _
_
)
(defalias
cap (tap-hold-press 200 200 (unicode ">") (layer-toggle ralt))
ralt (tap-hold-press 200 200 grv (layer-toggle ralt))
)
autohotkey 2.0#
鼠標不能實現的話,打算索性切換到 autohotkey v2 了,學習了下文檔, 查到了新的好方法實現 ` 和 >。而且程序也小巧了。
重新研究了 autohotkey2.0, 也能無縫實現特殊符號的輸入了:
更新了AHK2.0 配置,替換原來學習不熟的 AHK1.0
XButton2::MButton
XButton1::MButton
Capslock::RAlt
RControl::Volume_Up
AppsKey::Volume_Down
>!1::F1
>!2::F2
>!3::F3
>!4::F4
>!5::F5
>!6::F6
>!7::F7
>!8::F8
>!9::F9
>!0::F10
>!-::F11
>!=::F12
>!Backspace::Delete
>!q::Home
>!e::End
>!w::Up
>!a::Left
>!s::Down
>!d::Right
>![::Volume_Down
>!]::Volume_Up
`::SendText "``"
/::SendText "/"
>!`::SendText "``"
>!.::SendText ">"
>!;::SendText ":"
!\::SendText "\"
!/::SendText "/"
<![::SendText "["
<!]::SendText "]"