3

在许多较旧的笔记本电脑和一些紧凑型键盘上,主键盘区域都有一个集成的数字小键盘。这个备用键盘是通过左侧 Ctrl 键旁边的特殊“Fn”键激活的。

作为一名程序员,我学会了使用光标移动键(箭头、PgUp、PgDn 等)并发现它极大地提高了我的编程速度。并且好处不仅仅局限于一个应用程序,就像使用专门的快捷键一样。

在传统的 PC 键盘上,“Windows 键”可用于模拟“Fn”键和相应的集成数字小键盘。当我使用 MS Windows 时,我发现Autohotkey能够使用简单的脚本来映射键。

最近我了解了 xkb 以及如何使用它来映射非常低级别的击键

什么是 xkb 键盘映射配置文件,它将使用 windows 键作为 fn 键来模拟集成数字小键盘?

提示(?):我怀疑该文件看起来很像Debian 衍生 Linux 发行版上的“ /usr/share/X11/xkb/symbols/keypad ”文件。此“键盘”文件包含在“ /usr/share/X11/xkb/symbols/pc ”文件的顶部。

对应的自动热键脚本供参考(# == WinKey):

#8::Up
#k::Down
#u::Left
#o::Right

#7::Home
#j::End
#9::PgUp
#l::PgDn

#m::Insert
#.::Delete

;(Scroll with the left-over keys)
#i::WheelUp
#,::WheelDown

请注意,所有这些键都需要与Ctrl、Alt、Shift以及 Windows 键的任意组合一起使用。

4

1 回答 1

2

在 Linux / XKB 的主键盘上安装类似数字小键盘的光标键的步骤...

  1. xkbcomp $DISPLAY original.xkb(以防万一;)
  2. xkbcomp $DISPLAY custom.xkb
  3. 编辑 custom.xkb
  4. 在部分末尾添加以下内容: xkb_types "..." {

    type "WinKeyAsFnKey" {
      modifiers = Shift+Super;
      map[Shift] = level2;
      map[Super] = level3;
      map[Super+Shift] = level3;
      level_name[Level1] = "Base";
      level_name[Level2] = "Caps";
      level_name[Level3] = "Fn";
    };
    
  5. 在 xkb_symbols "..." {

     key <AE07> {type="WinKeyAsFnKey",symbols[Group1]=[7,ampersand,NoSymbol],actions=[NoAction(),NoAction(),RedirectKey(key=<HOME>,clearmods=Super)]};
     key <AE08> {type="WinKeyAsFnKey",symbols[Group1]=[8,asterisk,NoSymbol],actions=[NoAction(),NoAction(),RedirectKey(key=<UP>,clearmods=Super)]};
     key <AE09> {type="WinKeyAsFnKey",symbols[Group1]=[9,parenleft,NoSymbol],actions=[NoAction(),NoAction(),RedirectKey(key=<PGUP>,clearmods=Super)]};
     key <AD07> {type="WinKeyAsFnKey",symbols[Group1]=[u,U,NoSymbol],actions=[NoAction(),NoAction(),RedirectKey(key=<LEFT>,clearmods=Super)]};
     key <AD09> {type="WinKeyAsFnKey",symbols[Group1]=[o,O,NoSymbol],actions=[NoAction(),NoAction(),RedirectKey(key=<RGHT>,clearmods=Super)]};
     key <AC07> {type="WinKeyAsFnKey",symbols[Group1]=[j,J,NoSymbol],actions=[NoAction(),NoAction(),RedirectKey(key=<END>,clearmods=Super)]};
     key <AC08> {type="WinKeyAsFnKey",symbols[Group1]=[k,K,NoSymbol],actions=[NoAction(),NoAction(),RedirectKey(key=<DOWN>,clearmods=Super)]};
     key <AC09> {type="WinKeyAsFnKey",symbols[Group1]=[l,L,NoSymbol],actions=[NoAction(),NoAction(),RedirectKey(key=<PGDN>,clearmods=Super)]};
     key <AB07> {type="WinKeyAsFnKey",symbols[Group1]=[m,M,NoSymbol],actions=[NoAction(),NoAction(),RedirectKey(key=<INS>,clearmods=Super)]};
     key <AB09> {type="WinKeyAsFnKey",symbols[Group1]=[period,greater,NoSymbol],actions=[NoAction(),NoAction(),RedirectKey(key=<DELE>,clearmods=Super)]};
    
  6. 保存 custom.xkb

  7. xkbcomp custom.xkb $显示

我仍在使用“i”和“,”处理鼠标滚动。

编辑:上述解决方案不适用于Google Chrome 和基于 Chrome 的应用程序(如 Slack)。

另一种方法是使用可编程键盘。我为 CoolerMaster Masterkeys S 键盘使用售后 PCBEasy AVR布局可在线获得(尽管目前左侧的 win 键现在无法单独使用...我使用右侧的)。

于 2015-10-23T13:25:02.090 回答