Linux

如何使 AltGr+i,j,k,l 作為游標鍵正常工作?

  • July 17, 2015

(我已經在超級使用者上問過這個問題,但沒有得到答案,所以我現在就在這裡嘗試。)

我希望游標鍵和其他一些可用作 AltGr+c、h、t、n 等(如果您有 qwerty,則為 i、j、k、l)。我製作了一個自定義鍵盤佈局文件(請參見此處)。在那裡我基本上只是拿了一個佈局文件並將相關行修改為

key <AC09> { [ n, N, Right, Right ] };

我有這個/usr/share/X11/xkb/symbols/nonpop,我把它載入setxkbmap nonpop進去~/.xinitrc(我沒有使用任何DE,只是Awesome WM)。

它可以工作——幾乎。

  • 例如,在 Firefox 中,一切都執行良好。例如,AltGr+n 向右移動游標,Shift+AltGr+n 選擇文本。同樣在 LyX 的主要文本區域。
  • 在 MonoDevelop 中,游標隨 AltGr+n 移動,但 Shift+AltGr+n 也僅移動游標而不是選擇。Shift+Right 正常選擇文本。
  • 在 NetBeans 和 LyX 對話框中,按 (Shift+)AltGr+n 絕對不會執行任何操作。

我猜這些其他程序讀取了 AltGr 狀態並認為這是一件壞事。那麼,有沒有辦法讓事情按照我想要的方式發生?看起來覆蓋可能是一個解決方案,但我還沒有讓它們工作。

問題是,當您使用常用修飾符時AltGr,程序實際上會在您使用 AltGr 箭頭時將其視為被按下。所以Shift++AltGr實際上i對一個程序來說就像你在按下一樣Shift + Alt + Up,它是額外的東西Alt讓程序感到困惑。如果可能,您可以通過向程序添加更多快捷方式來避免這種情況,Shift + Alt + Up與 相同的操作也是如此Shift + Up,或者您可以使用程序不知道的不常見修飾符。

還有其他方法可以做到這一點,但這是更簡單的方法之一,對我來說效果很好。它會在字母數字鍵上創建一個“Group2”疊加層,這樣當您切換到 Group2 時,那裡會出現箭頭而不是字母。Caps Lock您可以通過撥動開關(像正常工作一樣開/關)或瞬間(按下以啟動,像Shift正常工作一樣)切換到 Group2

partial alphanumeric_keys
xkb_symbols "alpha_arrows" {
   key <AD07> {
       symbols[Group2]= [            Home ]  # u
   };
   key <AD08> {
       symbols[Group2]= [              Up ]  # i
   };
   key <AD09> {
       symbols[Group2]= [             End ]  # o
   };
   key <AD10> {
       symbols[Group2]= [           Prior ]  # p
   };
   key <AC07> {
       symbols[Group2]= [            Left ]  # j
   };
   key <AC08> {
       symbols[Group2]= [            Down ]  # k
   };
   key <AC09> {
       symbols[Group2]= [           Right ]  # l
   };
   key <AC10> {
       symbols[Group2]= [            Next ]  # ;
   };
   key <AB06> {
       symbols[Group2]= [          Delete ]  # n
   };
};

然後,您可以選擇一個密鑰作為 Group2 啟動密鑰。您可以通過以下方式查看所有選項(如果您不想自己動手):

$ grep grp /usr/share/X11/xkb/rules/base.lst

然後選擇一個選項,例如這個選項僅在Caps Lock被按住時啟動箭頭。它還添加了一個新組合Alt+Caps Lock來實際打開和關閉大寫鎖定:

$ setxkbmap -option grp:caps_switch

您可以將其添加到您的 Xorg 配置文件中以使更改永久生效 - 網上有很多關於如何執行此操作的指南。

注意:

  • key被使用,而不是replace key因為我們想要添加到現有定義中,而不是替換它。
  • 如果您實際上有備用鍵盤佈局(可能一些國際鍵盤也可以輸入拉丁/英文字母),則此方法可能不適合您。您必須定義一個基於ALPHANUMERIC擴展修飾符(例如 Hyper)的新類型來啟動箭頭鍵。

引用自:https://unix.stackexchange.com/questions/153841