kmonad,小配列键盘的救星

我是先使用过kmonad才去买的61键键盘,我觉得没有kmonad的加持,61键键盘权衡效率和便携是不值得考虑的,但有了kmonad就能发挥出媲美104键的全部能力,不用再有顾虑。

kmonad是个强大的按键重映射工具,当sxhkd用序列的方式扩展了快捷键的能力后,setxkbmod给caps的分配提供了很多方案,但它们从不能把任意键变成修饰键。而kmonad正精于此道。

当我启动kmonad时,按住caps就进入方向键层,按住右alt键就进入窗口操作层,按住右ctrl时就进入数字层,同时也可以用组合键右alt+caps锁定方向键层等。用tap-next,tap-hold,multi-tap,toggle-layer,layer-add,layer-rm就能实现。

当你停留在某个层时,,比如方向层,在使用mpv时切换播放列表很方便,但mpv有很多快捷键是得用本意呀,这时也可以临时回到基础层用around-next,layer-delay就好。

around是最基础但十分有用的命令,tap-next也是,和tap-next-release区别不大。

它还可以设置一个键为sticky键,我设置super键为粘滞键,因为我启动程序的快捷键全在super键上,我还把linux输入密码设置为键盘宏。进入宏层后,按一个键就输出密码再立刻离开宏层。

我用的电脑环境是manjaro xfce,同时用quicktile和zentile平铺设置成自重启的服务,xfwm因为是符合标准的桌面系统,能够和他俩共存,compiz不能。kmonad也支持windows,但我没试过,截取键盘信号的途径不一样。我的配置文件中的tile层包含xfwm,quicktile,zentile的快捷键,它们占据了tile层的全部空间。

我的键盘是标准的61键键盘,爱攻的agk600,只有一个fn键,方向键映射在jkil上,使用fn来按时还时不太方便,但用caps来按,这是最好的位置,我对agkfn层的设置尽量与它一致。

下面是我的配置文件,是我修改过很多次的。

当你理清它们引用关系和函数执行的操作,就明白它是怎样实现重映射功能的了。可以先用tap-next映射方向键试试按住就生效,然后是锁定层,临时切出,调整你已有的快捷键使它们不冲突。这时你就能按住右alt键一键执行全部窗口操作了。

(defcfg
  input  (device-file "/dev/input/by-id/usb-BY_Tech_Usb_Gaming_Keyboard-event-kbd")
  output (uinput-sink "KMonad AGK600 output")
  fallthrough true
)

(defalias
#| ACTIONs |#
#| modifier |#
    sme  ( sticky-key 1000 lmet )
#| apps |#
    rofi M-cmp
    afi  M-i
#| xfwm |#
    qt   M-q
    wmr  M-rght
    wml  M-left
    wsr  M-S-rght
    wsl  M-S-left
    wm1  M-1
    wm2  M-2
    wm3  M-3
    wm4  M-4
    ws1  M-S-1
    ws2  M-S-2
    ws3  M-S-3
    ws4  M-S-4
    wh   C-A-h
    wo   C-A-o
    wj   C-A-j
    wm   C-A-m
    wn   C-A-n
    wk   C-A-k
    wt   C-A-t
    wu   C-A-u
    wy   C-A-y
    wi   C-A-i
    wins C-A-ins
    wdel C-A-del
#| quicktile |#
    pdl  A-kp1
    pdd  A-kp2
    pdr  A-kp3
    prl  A-kp4
    pmm  A-kp5
    prr  A-kp6
    pul  A-kp7
    puu  A-kp8
    pur  A-kp9
    qdl  C-A-kp1
    qdd  C-A-kp2
    qdr  C-A-kp3
    qrl  C-A-kp4
    qmm  C-A-kp5
    qrr  C-A-kp6
    qul  C-A-kp7
    quu  C-A-kp8
    qur  C-A-kp9
    qf   C-A-kprt
    qh   A-kp+
    qv   A-kp-
#| zentile |#
    zz   C-A-z
    zx   C-A-x
    zs   C-A-s
    zd   C-A-d
    zf   C-A-f
    za   C-A-a
    zg   C-A-g
    zb   C-A-b
    zrg  C-A-e
    zle  C-A-w
#| MACROs |#
    psd ( tap-macro 1 2 3 4 5 6 )
#| LAYERs |#
    nu   ( layer-toggle numbers )
    fn   ( layer-toggle agkfn )
    ti   ( layer-toggle tile )
    ba   ( layer-toggle base )
    ma   ( layer-toggle macro )
    db   ( layer-delay 1000 base )
    afn  ( layer-add agkfn )
    rfn  ( layer-rem agkfn )
    anu  ( layer-add numbers )
    rnu  ( layer-rem numbers )
    rnf  ( around @rfn @rnu )
#| TAPKEYs |#
#| autoshift |#
    n1   ( tap-hold 300 1 ! )
    n2   ( tap-hold 300 2 @ )
    n3   ( tap-hold 300 3 # )
    n4   ( tap-hold 300 4 $ )
    n5   ( tap-hold 300 5 % )
    n6   ( tap-hold 300 6 ^ )
    n7   ( tap-hold 300 7 & )
    n8   ( tap-hold 300 8 * )
    n9   ( tap-hold 300 9 \( )
    n0   ( tap-hold 300 0 \) )
#| eelayer |#
    eqt  ( multi-tap 300 esc @qt )
    mrf  ( multi-tap 300 cmp 300 @rofi @afi )
    nm   ( around-next lmet )
    tti  ( tap-next ralt @ti )
    xla  ( multi-tap 300 @rnf (around @rnf @qt) )
    tfn  ( tap-next caps @fn )
    xlf  ( tap-hold 300 @rfn lsft )
    xrf  ( tap-hold 300 @rfn rsft ) 
    tnu  ( tap-next rctl @nu )
    xln  ( tap-hold 300 @rnu lsft )
    xrn  ( tap-hold 300 @rnu rsft )
    dtb  ( multi-tap 300 (around-next @db) @ba )
    lcb  ( around @ba lctl )
    lab  ( around @ba lalt )
    lmb  ( around @ba lmet )
    mcf  ( tap-hold 300 mute lctl )
    lmm  ( around-next @ma )
#| windowactions |#
    wl   ( tap-hold 300 @wml @wsl )
    wr   ( tap-hold 300 @wmr @wsr )
    w1   ( tap-hold 300 @wm1 @ws1 )
    w2   ( tap-hold 300 @wm2 @ws2 )
    w3   ( tap-hold 300 @wm3 @ws3 )
    w4   ( tap-hold 300 @wm4 @ws4 )
    q1   ( tap-hold 300 @pdl @qdl )
    q2   ( tap-hold 300 @pdd @qdd )
    q3   ( tap-hold 300 @pdr @qdr )
    q4   ( tap-hold 300 @prl @qrl )
    q5   ( tap-hold 300 @pmm @qmm )
    q6   ( tap-hold 300 @prr @qrr )
    q7   ( tap-hold 300 @pul @qul )
    q8   ( tap-hold 300 @puu @quu )
    q9   ( tap-hold 300 @pur @qur )
)

  #|-------------------------sourceLayer------------------------------- |#
(defsrc
  esc  1    2    3    4    5    6    7    8    9    0    -    =    bspc
  tab  q    w    e    r    t    y    u    i    o    p    [    ]    \   
  caps a    s    d    f    g    h    j    k    l    ;    '    ret      
  lsft z    x    c    v    b    n    m    ,    .    /    rsft          
  lctl lmet lalt           spc            ralt cmp  rctl  
)
  #|-------------------------base-------------------------------------- |#
(deflayer base
  @eqt 1    2    3    4    5    6    7    8    9    0    -    =    bspc
  tab  q    w    e    r    t    y    u    i    o    p    [    ]    \   
  @tfn a    s    d    f    g    h    j    k    l    ;    '    ret      
  lsft z    x    c    v    b    n    m    ,    .    /    rsft          
  lctl @sme lalt           spc            @tti @mrf @tnu  
)
  #|--------------------------tileLayer-------------------------------- |#
(deflayer tile
  esc  @w1  @w2  @w3  @w4  5    6    7    8    9    0    @qv  @qh  @wdel
  tab  @qt  @zle @zrg r    @wt  @wy  @wu  @wi  @wo  @q7  @q8  @q9  @wins   
  @afn @za  @zs  @zd  @zf  @zg  @wh  @wj  @wk  @q4  @q5  @q6  @qf      
  lsft @zz  @zx  @wl  @wr  @zb  @wn  @wm  @q1  @q2  @q3  rsft          
  lctl @lmm lalt           spc            ralt cmp  @anu  
)
  #|------------------------- AGKfnLayer------------------------------- |#
(deflayer agkfn
  @xla F1   F2   F3   F4   F5   F6   F7   F8   F9   F10  F11  F12  del
  @mcf vold volu prev next pp   y    u    up   o    ssrq home end  ins   
  @tfn left up   home pgup pgup pgdn left down rght ;    '    ret      
  @xlf down rght end  pgdn b    n    m    pgup pgdn bspc @xrf          
  @lcb @lmb @lab           @dtb           @tti cmp  @tnu
)
  #|-------------------------numbersLayer------------------------------ |#
(deflayer numbers
  @xla !    @    #    $    %    ^    &    *    \(   \)   kp-  kp+  kp.
  tab  @n7  @n8  @n9  @n0  t    y    u    i    nlck kp7  kp8  kp9  kp0
  @tfn @n4  @n5  @n6  `    g    h    j    k    kp4  kp5  kp6  kprt      
  @xln @n1  @n2  @n3  ~    b    n    m    kp1  kp2  kp3  @xrn          
  @lcb @lmb @lab           @dtb           @tti cmp  @tnu  
)
  #|-------------------------sourceLayer------------------------------- |#
(deflayer macro
  esc  1    2    3    4    5    6    7    8    9    0    -    =    bspc
  tab  q    w    e    r    t    y    u    i    o    @psd [    ]    \   
  caps a    s    d    f    g    h    j    k    l    ;    '    ret      
  lsft z    x    c    v    b    n    m    ,    .    /    rsft          
  lctl lmet lalt           spc            ralt cmp  rctl  
)

你可能感兴趣的:(linux,经验分享)