解決 Linux、Electron 應用程式中使用 alt+shift 進行切換的問題

同事們大家好!

我想分享我對標題中指出的問題的解決方案。 寫這篇文章的靈感來自於一位同事 布爾諾夫克,他並不懶惰,並為問題提供了部分(對我來說)解決方案。 我自己做了“拐杖”,這對我很有幫助。 我正在與你分享。

問題描述

我在工作中使用 Ubuntu 18.04,最近注意到,在 Visual Studio Code、Skype、Slack 等使用 Electron 創建的應用程式中使用 alt+shift 切換佈局時,會出現以下問題:輸入欄位的焦點移至頂部視窗面板(菜單)。 由於其他原因,我轉向了 Fedora + KDE,並意識到問題並沒有消失。 在尋找解決方案時,我發現了一篇很棒的文章 如何自行修復 Skype。 非常感謝同志 布爾諾夫克,他詳細講述了這個問題並分享了他的解決方法。 但文章中提到的方法只用一個應用程式解決了這個問題,也就是Skype。 對我來說,了解 Visual Studio Code 也很重要,因為用跳轉選單編寫訊息雖然很煩人,但如果您參與開發,那就沒什麼大不了的了。 另外,一位同事提出了一個解決方案,其中應用程式選單完全消失,我真的不想在 VS Code 中丟失選單。

試著了解出了什麼問題

因此,我決定花點時間弄清楚到底發生了什麼事。 現在我簡單描述我所走的路,也許這方面更了解的人可以幫助解釋我遇到的困難。

我打開 Visual Studio Code 並開始按不​​同的 Alt+<%something%> 組合來查看應用程式的回應情況。 在幾乎所有情況下,除 Alt+Shift 之外的所有組合都可以正常工作而不會失去焦點。 似乎有人正在吃按下的Shift,然後按住Alt,應用程式認為我按下了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

有關它的更多詳細信息,請訪問 維基百科
接下來,我們將為該程式建立一個範例設定檔。 這個範例非常短,只有幾個命令,正是您了解如何使用它所需要的:

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切換。 這就是我希望它發揮作用的方式。 如果您同意我的觀點並面臨這個問題,這篇文章應該對您有所幫助。

來源: www.habr.com

添加評論