解决在Electron上的应用程序中在Linux中切换alt + shift的问题

大家好!

我想分享分享我对问题的解决方案,该问题在标题中指出。 这篇文章的灵感来自同事brnovk ,他不太懒惰,并建议部分(对我来说)解决问题的方法。 我做了帮助我的“拐杖”。 我和你分享。

问题描述


我使用Ubuntu 18.04进行工作,最近注意到,当在应用程序(如Visual Studio Code,Skype,Slack和其他使用Electron创建的应用程序)中按Alt + shift切换布局时,会出现以下问题:输入字段的焦点转到窗口的顶部面板(菜单)。 由于其他原因,我搬到了Fedora + KDE,并意识到问题并没有消失。 在寻找解决方案时,我发现了一篇很棒的文章《自己动手做Skype》 。 非常感谢brnovk同志详细解释了问题并分享了解决问题的方式。 但是文章中指定的方法仅用一个应用程序Skype覆盖了这个问题。 对于我来说,使用Visual Studio Code仍然很关键,因为使用跳转菜单编写消息很烦人,但是如果您正在开发,则不需要那么多。 另外,一位同事提出了一种解决方案,其中应用程序菜单完全消失,但是我真的不想丢失VS Code中的菜单。

我试图了解发生了什么事


因此,我决定花些时间弄清楚发生了什么。 现在,我将简要介绍我的去向,也许是对此事有更深入了解的人将有助于阐明我遇到的困难。

我打开了Visual Studio Code,然后开始单击Alt + <%something%>的不同组合,查看应用程序的反应。 在几乎所有情况下,除Alt + Shift以外的所有组合都可以正常工作而不会失去焦点。 似乎有人吃了按下Shift键,然后按住ALT键,然后应用程序认为我按下了Alt键,然后什么也没按下,松开了Alt键,它很高兴地将我的注意力集中到了菜单上,这在他看来是合乎逻辑的。

我打开了键盘布局切换设置(嗯,您知道这个长长的列表,其中包含复选框和按键的各种设置),然后通过Alt键设置键盘布局切换,而无需另外按下任何按钮。

图片

之后,Alt + Tab停止工作以切换窗口。 只有Tab起作用了,也就是说,有人再次“吃了”我的Alt。 这个“某人”谁没有问题,但我不知道该怎么办。

但是由于必须至少以某种方式解决问题,所以我想到了解决方案:

  1. 在设置中,禁用热键以切换键盘布局(删除“切换到另一个布局”部分中的所有复选框);
  2. 创建自己的热键以切换我的布局

解决方案说明


首先,安装一个程序,该程序允许您将命令分配给Xbindkeys键。 不幸的是,标准工具不允许我通过漂亮的界面为Alt + Shift类型的组合创建热键。 可以针对Alt + S,Alt + 1,Alt + shift + Y等方式执行。 等等,但这不适合我们的任务。

sudo dnf install xbindkeysrc 

ArchWiki上有更多关于它的信息
接下来,为该程序创建一个示例设置文件。 该示例非常简短,仅需几个命令即可确定如何使用它:

 xbindkeys -d > ~/.xbindkeysrc 

从文件中的示例中可以看到,我们需要指定我们要使用的热键以及应该执行的命令。 看起来很简单。

 # Examples of commands: "xbindkeys_show" control+shift + q # set directly keycode (here control + f with my keyboard) "xterm" c:41 + m:0x4 

作为热键,您可以使用可读的拼写或键代码。 它仅对代码有效,但没有人禁止您尝试一下。

要获取代码,您需要使用以下命令:

 xbindkeys -k 

一个小的“ X”窗口将打开。 您只需要按此窗口上的焦点即可! 只有在这种情况下,您才会在终端中看到以下内容:

 [podkmax@localhost ~]$ xbindkeys -k Press combination of keys or/and click under the window. You can use one of the two lines after "NoCommand" in $HOME/.xbindkeysrc to bind a key. "(Scheme function)" m:0x4 + c:39 Control + s 

就我而言,键盘快捷键Alt + Shift如下所示:

 m:0x8 + c:50 

现在,您需要确保在单击此组合时,布局已正确切换。 我发现只有一个工作命令来指定布局:

 setxkbmap ru setxkbmap us 

从示例中可以看到,她只知道如何打开一个或另一个布局,因此,除了编写脚本之外,我什么都没想到。

 vim ~/layout.sh #!/bin/bash LAYOUT=$(setxkbmap -print | awk -F + '/xkb_symbols/ {print $2}') if [ "$LAYOUT" == "ru" ] then `/usr/bin/setxkbmap us` else `/usr/bin/setxkbmap ru` fi 

现在,如果.xbindkeysrc和layout.sh文件位于同一目录中,则.xbindkeysrc文件的最终形式如下所示:

 # Examples of commands: "xbindkeys_show" control+shift + q # set directly keycode (here control + f with my keyboard) "xterm" c:41 + m:0x4 # specify a mouse button "xterm" control + b:2 #  ,    "./layout.sh" m:0x8 + c:50 

之后,应用更改:

 xbindkeys -p 

您可以检查。 不要忘记在默认设置中禁用任何用于切换布局的选项。

总结


同事们,我希望本文可以帮助某人快速摆脱烦人的问题。 我个人一整天都在花时间来整理问题并以某种方式解决问题,以免在工作时间内被分心。 我写这篇文章是为了节省某人的时间和神经。 你们中的许多人使用另一种方式来切换布局,却不了解问题所在。 我个人喜欢切换Alt + Shift。 我希望它能以这种方式工作。 如果您同意我的观点并且遇到了此问题,那么本文将为您提供帮助。

Source: https://habr.com/ru/post/zh-CN476996/


All Articles