emacs的Xkb配置

emacs的Xkb配置,emacs,keyboard,x11,Emacs,Keyboard,X11,我正在尝试将三个键(左alt、右win和menu)重新映射到emacs的特定键。 具体来说,我想使用RWIN作为Hyper,我的左alt作为Meta,我的菜单作为alt 我以这种方式设置xkb。有两个文件,第一个是super_hyper(在~/.xkb/symbols中): 然后我设置了所有的 xkbcomp -I$HOME/.xkb ~/.xkb/keymap/mykbd $DISPLAY xev表明,所有这些都可以完美地工作。emacs可以很好地使用hyper(右windows键)和met

我正在尝试将三个键(左alt、右win和menu)重新映射到emacs的特定键。 具体来说,我想使用RWIN作为Hyper,我的左alt作为Meta,我的菜单作为alt

我以这种方式设置xkb。有两个文件,第一个是super_hyper(在~/.xkb/symbols中):

然后我设置了所有的

xkbcomp -I$HOME/.xkb ~/.xkb/keymap/mykbd $DISPLAY

xev表明,所有这些都可以完美地工作。emacs可以很好地使用hyper(右windows键)和meta(左alt键)修饰符。但是当我使用菜单键时,它的响应就像一个元修饰符,就像alt键一样。如何求解?

您的左
alt
键应该已经映射为
meta
键。我将在一个示例中演示如何配置Emacs以将
AltGr
(右alt)识别为
hyper
键。您可以根据自己的需要调整示例

  • 查找
    AltGr
    钥匙的钥匙代码:
  • 在控制台中运行:
    xev
    。然后反复点击
    AltGr
    键,然后关闭程序。在输出中,您可以读取
    AltGr
    的键代码。我得到:

    ...keycode 108 (keysym 0xffea, Alt_R)...
    
  • 接下来,我们检查如何使用以下命令绑定密钥:xmodmap-pm。就我而言,我得到:
  • shift-shift-L(0x32)、shift-R(0x3e)
    锁帽和锁(0x42)
    控制面板(0x25),控制面板(0x69)
    mod1 Alt_L(0x40)、Alt_R(0x6c)、Meta_L(0xcd)
    mod2数字锁(0x4d)
    mod3
    mod4
    mod5 ISO_等级3_移位(0x5c),模式_开关(0xcb)
    
    在十六进制中,键码108(十六进制0x6c)与
    Alt\u R
    相关联

  • mod1
    中删除
    Alt\u R
    ,因为我们希望将其映射到
    hyper
    。此步骤是可选的。例如,我的
    菜单
    键(十六进制代码:0x87)不会出现在此输出中。因此,我可以跳过这一步
  • #删除与mod1相关的所有键
    xmodmap-e“清除mod1”
    #但是,由于我们只对Alt\u R感兴趣,请重新分配我们错误删除的内容
    xmodmap-e“添加mod1=Alt_L Meta_L”
    
  • 现在,我们可以将
    AltGr
    键重新分配给
    Hyper
    (您可以选择其他键,例如:
    Alt\u R
    Super\u L
    Super\u H
    ,…:
  • xmodmap-e“keycode 108=Hyper\u R”
    
  • 最后,下一步是将此键符号指定给修改器
  • xmodmap-e“添加mod3=Hyper\u R”
    
  • 在Emacs中,当我点击now
    AltGr-f
    时,它告诉我
    H-f
    未定义。我现在可以使用超键进行新的键绑定:
  • (全局设置键(kbd“H-f”)'查找文件)
    
    如果我在步骤4-5中选择将
    AltGr
    mod3
    分配给
    Super\u R
    ,我会在步骤6中使用
    “S-f”
    作为新的键绑定。同样,在步骤4-5中将
    AltGr
    分配给
    Alt\u R
    会导致在设置绑定时使用例如
    “A-f”

    编辑


    如果要将键(例如
    菜单
    键)分配给
    Alt\u R
    ,必须确保
    Meta\u L
    键已映射(例如映射到
    mod1
    )。如果
    Meta\u L
    (例如分配给
    Alt\u L
    )未出现在
    xmodmap-pm
    输出中,则很可能是您的键(例如
    菜单
    )充当进一步的
    meta
    修改器。

    我不确定,但也许这个链接可以给你提供更多的见解:谢谢,但是这个链接除了gnome/ubuntu GUI之外,没有提供任何配置键盘的方法(我怀疑它会提供xkb选项配置,这远远不能满足我的需要)。我不需要一种方法来重新映射普通键,我已经可以做到了,我可以轻松地创建super和hyper。我真正需要的是有一个被emacs识别为Alt键的Alt键。我设置键没有问题,也不需要重新映射Alt键(这是meta)。我只希望键(菜单)映射为Alt(不是meta)我已经这么做了,xev显示它工作得很好,但是出于奇怪的原因(可能是emacs alt到meta回退?或者某些mod映射错误?)emacs不承认这是alt,而是meta。我想知道为什么以及如何解决。你如何在emacs中绑定alt键?如果我错了,请纠正我,但meta在旧键盘上不是现在的alt键吗?emacs能够与alt和meta有不同的键绑定,所以我会有另一个按meta不同的修饰符:是的,alt键或mally发送meta。我的键盘也有同样的行为。但我想有一个额外的修改器。如果我没有弄错的话,你可以在我的回答中看到这一点。我举了一个例子,说明如何将右Alt键指定给Hyper。但是,在最后一段中,我提到了如何使右Alt键的行为与实际的Alt键类似。在你的情况下,你需要获得menu keycode,删除到它绑定的任何位置,例如mod1(可选),重复步骤4,但不使用Hyper_R,您应该使用Alt_R并最终将其映射到mod3(步骤5)。然后,它将表现为Alt。我给出了一个右Alt键的示例,主要用于说明。我稍微修改了最后一段。
    xkbcomp -I$HOME/.xkb ~/.xkb/keymap/mykbd $DISPLAY
    
    ...keycode 108 (keysym 0xffea, Alt_R)...