![如果 Ctrl 键被按下并自动释放,如何将其重新映射到 Escape 键](https://linux22.com/image/1112824/%E5%A6%82%E6%9E%9C%20Ctrl%20%E9%94%AE%E8%A2%AB%E6%8C%89%E4%B8%8B%E5%B9%B6%E8%87%AA%E5%8A%A8%E9%87%8A%E6%94%BE%EF%BC%8C%E5%A6%82%E4%BD%95%E5%B0%86%E5%85%B6%E9%87%8D%E6%96%B0%E6%98%A0%E5%B0%84%E5%88%B0%20Escape%20%E9%94%AE.png)
我想重新映射控制,以便:
- 如果按下并释放该键且没有其他键,则它的作用是 Esc。
- 如果将其与另一个键一起按下并按住,则其作用如同Ctrl(在这种情况下行为没有变化)。
我知道如何重新映射某些键或设备?,所以我怀疑可以用 xmodmap 来完成。但那个答案没有解释如何映射修饰键。我查看了 xmodmap 手册页的示例和语法部分,但它们没有解释这一点。将 Caps Lock 重新映射到 Control 和 Escape(非常规方式)提到无法对 执行此操作Caps Lock,因为它是一个 Lock 键,但我希望可以使用 Control(mod 键)执行此操作。使用与 xmodmap 不同的解决方案也将被接受。(我在 Ubuntu 12.04 中运行 Xmonad,所以也许有办法在 xmonad.hs 中设置它?)
编辑:我能得到的最接近的答案是:
xmodmap -e 'remove Control = Control_L'
xmodmap -e 'keysym Control_L = Escape'
xmodmap -e 'add Control = Escape'
这样,当我Left Ctrl单独按下键时,我就可以得到 Esc 键,但是为了得到Ctrl+ ,A我必须按 Left Ctrl两次键:Ctrl,Ctrl+ A(而不仅仅是Ctrl+ A)——不确定为什么我需要按两次。
答案1
最新回复将 Caps Lock 重新映射到 Control 和 Escape(非常规方式)说这个实用程序会做你想做的事:https://github.com/alols/xcape
答案2
这可以通过 来完成xmodmap
,但请注意,如果您已经使用 设置了一些内容setxkbmap
,后者程序将覆盖并清除xmodmap
设置。
但是,要执行您想要的操作xmodmap
,您可以输入
xmodmap -e "keysym Control_L control = Escape Control_L"
现在,如果您查看xmodmap -pm
,会发现 Esc 已添加到控制修饰符中。这意味着当按下左控制键时,结果将是 Esc,但当用另一个键按下控制键时(如Ctrl+ C),它仍将给出与以前相同的结果。
通过在终端中输入进行测试man xmodmap
,然后在查看手册页时按 ctrl,它将回显“esc”,但是当您按Ctrl+时Z,它将暂停页面。
如果您希望重置您的实验xmodmap
,注销并再次登录,并且如果您想将上述xmodmap
命令设置为启动项,请参阅我的回答: