首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将Escape键转换为一个修饰符,当被点击时仍然充当逃逸的角色。

将Escape键转换为一个修饰符,当被点击时仍然充当逃逸的角色。
EN

Unix & Linux用户
提问于 2018-04-02 21:57:25
回答 1查看 991关注 0票数 3

我使用了一个平铺窗口管理器(xMonad ),由于这个原因,我需要一个作为窗口管理的“控制键”的键。每当我使用带有Windows/Super/Mod4键的键盘时,我都会使用左边的Windows键作为该键,而我的右侧Windows键则充当Compose/Multi_key。

然而,我也有几个(非常旧的)键盘没有任何Windows键(即它们没有winkeyless),而且我没有任何可以(舒适地)用作‘WM控制键’的键。在过去,由于xMonad允许这样做,我使用Control+Alt作为我的“WM控制键(组合)”,但正如我在一段时间后注意到的那样,这会干扰(一些) Emacs (移动命令),因此这不再是一个选项。因此,我认为我可以通过以下方式使用我的逃逸密钥:

  • 如果我按住Ecs,它就像Mod4一样
  • 如果我点击Esc,它就像逃逸一样。

AFAIK,按住逃逸并不能正常地做任何事情,所以我认为这样做可能是个好主意。然后,我试图通过使用xmodmap来实现这一点:

代码语言:javascript
复制
clear Mod4 
add Mod4 = Super_L Escape

正如我所期望的: Super_L仍然扮演着超级角色,而且现在Escape是一个额外的超级。下一步应该是使用xcape来获取(一些)旧的逃逸关键行为。

我得到了什么(xmodmap的输出):

代码语言:javascript
复制
xmodmap:  up to 4 keys per modifier, (keycodes in parentheses):                                                                         

shift       Shift_L (0x32),  Shift_R (0x3e)                                                                                             
lock        Caps_Lock (0x42)                                                                                                            
control     Control_L (0x25),  Control_R (0x69)                                                                                         
mod1        Alt_L (0x40),  Meta_L (0xcd)                                                                                                
mod2        Num_Lock (0x4d),  Hyper_L (0xcf)                                                                                            
mod3        Scroll_Lock (0x4e),  Mode_switch (0xcb)                                                                                     
mod4        Escape (0x9),  y (0x34),  Super_L (0x85),  Super_L (0xce)                                                                   
mod5        ISO_Level3_Shift (0x5c) 

我不明白的是:

  • 为什么y突然也被设置为Mod4?
  • 为什么Escape仍然以Escape (一次按下)和Super(按住时)的形式工作,我在尝试测试更改时注意到了这一点,尽管此时我还没有使用xcape

这是xmodmap中的一个bug,还是我使用xmodmap不正确?我怀疑是后者,但有人能帮我实现我想做的事吗?

更多信息(希望不是无关紧要):

  • 我现在的操作系统是Arch Linux。
  • 我对使用其他软件(如xkbxdotool等)的解决方案持开放态度。
  • 我目前正在使用德国QWERTZ布局(即ISO,而不是ANSI),有时使用近地天体 ( AFAIK是作为de密钥映射/布局的另一个变体实现的;参见下面localectl的输出)。
  • 我希望我的解决方案能够独立于键盘/硬件:如果我改变了键盘,我不想改变任何配置文件。
  • 在任何人提出这个建议之前:映射不是一个选项,因为我有时使用Neo布局,它使用Capslock作为其第3层修饰符之一,它也用于第5层和第6层。这也意味着我希望这个解决方案与键盘布局无关,这样我就可以轻松地切换,例如Neo和QWERTZ。
  • 我仍然愿意接受其他建议。我唯一的要求是:不/最小地干扰任何其他程序(如Emacs或Vim),以及作为我的“WM控制键”使用的键(组合)应该位于我键盘的左侧,因为我用来控制WM的大多数键都在键盘的右侧(例如h、j、k、l、…)。。

在任何更改(即我当前的情况)之前,xmodmap输出:

代码语言:javascript
复制
xmodmap:  up to 2 keys per modifier, (keycodes in parentheses):                                                                         

shift       Shift_L (0x32),  Shift_R (0x3e)                                                                                             
lock        Caps_Lock (0x42)                                                                                                            
control     Control_L (0x25),  Control_R (0x69)                                                                                         
mod1        Alt_L (0x40),  Meta_L (0xcd)                                                                                                
mod2        Num_Lock (0x4d),  Hyper_L (0xcf)                                                                                            
mod3        Scroll_Lock (0x4e),  Mode_switch (0xcb)                                                                                     
mod4        Super_L (0x85),  Super_L (0xce)                                                                                             
mod5        ISO_Level3_Shift (0x5c)  

我目前的.Xmodmap是:

代码语言:javascript
复制
add Mod3 = Scroll_Lock

localectl说:

代码语言:javascript
复制
   System Locale: LANG=de_DE.UTF-8
                  LC_COLLATE=C
       VC Keymap: de-latin1-nodeadkeys
      X11 Layout: de,de
       X11 Model: pc105
     X11 Variant: nodeadkeys,neo
     X11 Options: compose:rwin,grp:ctrls_toggle
EN

回答 1

Unix & Linux用户

回答已采纳

发布于 2020-06-04 13:59:41

我用西开普来做这个。在Xmodmap中将键映射到Super_L,并在XMonad启动时运行xcape -e 'Super_L=Escape'

票数 1
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/435142

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档