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
#SingleInstance Force
^!r::Reload ; Ctrl+Alt+r
XButton2::MButton
XButton1::MButton
Capslock::RAlt
RControl::Volume_Up
AppsKey::Volume_Down
Insert::Delete
>!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
; force english symbol
`::SendText "``"
/::SendText "/"
>!`::SendText "``"
>!.::SendText ">"
<!.::SendText "."
>!;::SendText ":"
<!;::SendText ";"
!\::SendText "\"
!/::SendText "/"
<![::SendText "["
<!]::SendText "]"
<!'::SendText "'"