Linux および Electron アプリケーションでの alt+shift を使用した切り替えの問題の解決

こんにちは同僚!

タイトルに示されている問題に対する私の解決策を共有したいと思います。 この記事を書くきっかけとなったのは同僚からでした ブルノフク、彼は怠け者ではなく、問題の(私にとって)部分的な解決策を提供してくれました。 私は自分で「松葉杖」を作りました。 私はあなたと共有しています。

問題の説明

仕事で Ubuntu 18.04 を使用していましたが、最近、Electron を使用して作成された Visual Studio Code、Skype、Slack などのアプリケーションで Alt+Shift を使用してレイアウトを切り替えると、次の問題が発生することに気付きました。入力フィールドのフォーカスが上部に移動します。ウィンドウのパネル(メニュー)。 他の理由から、Fedora + KDE に移行しましたが、問題が解決していないことに気づきました。 解決策を探していたところ、素晴らしい記事を見つけました Skypeを自分で修復する方法。 どうもありがとう同志 ブルノフク、問題について詳しく話し、それを解決する方法を共有しました。 しかし、この記事で示されている方法では、Skype という XNUMX つのアプリケーションだけで問題が解決されました。 私にとって、Visual Studio Code を理解することも重要でした。なぜなら、ジャンプ メニューを使用してメッセージを書くのは面倒ではありますが、開発に携わっていればそれほど面倒ではないからです。 さらに、同僚がアプリケーション メニューを完全に消す解決策を提案しましたが、私は VS Code のメニューを失いたくありませんでした。

何が問題なのか理解しようとした

そこで、時間をかけて何が起こっているのかを理解することにしました。 ここで、私がたどった道を簡単に説明します。おそらくこの問題に詳しい誰かが、私が遭遇した困難について説明してくれるでしょう。

Visual Studio Code を開き、さまざまな Alt+<%something%> の組み合わせを押し始めて、アプリケーションがどのように応答するかを確認しました。 ほとんどの場合、Alt+Shift を除くすべての組み合わせはフォーカスを失うことなく機能しました。 誰かが Alt キーを押した後に続く Shift キーを食べているように見えました。そしてアプリケーションは、私が Alt キーを押した後、何も押さずに Alt キーを放すと、喜んでメニューに私のフォーカスを移したと考えました。これは非常に論理的であるように思えました。それ。

キーボード レイアウトを切り替えるための設定 (チェックボックスとキーのあらゆる種類の設定が含まれるこの長いリスト) を開き、追加のクリックを行わずに Alt ボタンを使用してレイアウトを切り替えるように設定しました。

Linux および Electron アプリケーションでの alt+shift を使用した切り替えの問題の解決

その後、Alt+Tab でウィンドウを切り替えることができなくなりました。 Tab だけが機能しました。つまり、誰かが私の Alt を再び「食べた」のです。 この「誰か」が誰なのかについて疑問は残りませんでしたが、彼に何ができるのかわかりませんでした。

しかし、この問題は何らかの方法で解決する必要があるため、次のような解決策が思い浮かびました。

  1. 設定で、キーボード レイアウトを切り替えるためのホットキーを無効にします ([別のレイアウトに切り替える] セクションのチェックボックスをすべてオフにします)。
  2. レイアウトを切り替える独自のホットキーを作成します

解決策の説明

まず、Xbindkeys キーにコマンドを割り当てることができるプログラムをインストールしましょう。 残念ながら、標準ツールでは、美しいインターフェイスを介して Alt+Shift などの組み合わせのホットキーを作成することはできませんでした。 Alt+S、Alt+1、Alt+shift+Y などで実行できます。 などですが、これは私たちのタスクには適していません。

sudo dnf install xbindkeysrc

詳細については、次の Web サイトを参照してください。 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

次に、この組み合わせをクリックするとレイアウトが切り替わることを確認する必要があります。 レイアウトを指定する有効なコマンドは XNUMX つだけ見つかりました。


setxkbmap ru
setxkbmap us

例からわかるように、有効にできるのは XNUMX つまたは別のレイアウトだけなので、スクリプトを書く以外に何も思いつきませんでした。


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で切り替えるのが好きです。 そしてそれが私が望む方法です。 もしあなたが私の意見に共感し、この問題に直面しているのであれば、この記事が役立つはずです。

出所: habr.com

コメントを追加します