键盘映射 kanata 配置尝试 - 未能取代 autohotkey

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里有，原来还不支持鼠标映射。

Copy
(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

Copy
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 "]"