Keyboard-Layout

在我的自定義鍵盤佈局中,如何將單個鍵包含在大寫鎖定控制範圍中?我不想要換檔鎖

  • June 13, 2021

在我的自定義鍵盤佈局中,我已經有了這些行:

   // row 1 (E)
   key <TLDE> {    [     question,     exclam,         masculine,      ordfeminine ]   };
   key <AE01> {    [     braceleft,    1                                           ]   };
   key <AE02> {    [     bracketleft,  2,              periodcentered              ]   };
   key <AE03> {    [     parenleft,    3,              EuroSign                    ]   };
   key <AE04> {    [     less,         4                                           ]   };
   key <AE05> {    [     slash,        5                                           ]   };
   key <AE06> {    [     apostrophe,   quotedbl,       dead_diaeresis              ]   };
   key <AE07> {    [     equal,        plus                                        ]   };
   key <AE08> {    [     backslash,    6,              notsign                     ]   };
   key <AE09> {    [     greater,      7                                           ]   };
   key <AE10> {    [     parenright,   8                                           ]   };
   key <AE11> {    [     bracketright, 9,              exclamdown                  ]   };
   key <AE12> {    [     braceright,   0,              questiondown                ]   };

這是第 1 行(功能鍵下方的行,超出字母)。

因此,例如,現在如果我按數字 1,它將輸入{,當我按 shift+1 時,它將輸入1。很好。但是,當我按下 Capslock 時,它{也會進入,但我想要1. Capslock 適用於字母。

所以現在,我想讓大寫鎖定適用於字母和這一行,但不適用於鍵盤上的其他鍵,如 shiftlock,我該怎麼做?

(Shiftlock:按下一些鍵然後鬆開,你按下鍵盤上的每個鍵,就像按下 Shift 一樣。不僅字母鍵,而且Insert,Home和箭頭鍵輸出會改變,這不是我想要的)

這在 Windows 中是可能的,使用 Microsoft 鍵盤佈局管理器,因為在那裡,鍵定義包含一個鍵的所有 4 個級別的狀態,以及 Capslock 的另一個級別。但我不知道 xkb 是否允許。

(上限 1:此鍵上的上限啟用,上限 0:未啟用)

//SC    VK_     Cap 0   1        2   6   7
//--    ----    ----    ----    ----    ----    ----    ----

02       1      1   1   007b    -1  -1  -1      // DIGIT ONE, LEFT CURLY BRACKET, <none>, <none>, <none>

如果我理解正確,您不想更改 的預設行為CAPS LOCK,而只想更改 的狀態打開時數字行的行為CAPS LOCK。在這種情況下,您可以選擇以下選項。

a) 按塊更改類型

基本上使用:

  • ALPHABETIC(或者#_LEVEL_ALPHABETIC如果您希望有更多級別)對於那些應該始終受狀態影響的鍵CAPS LOCK
  • TWO_LEVEL(或THREE_LEVEL, FOUR_LEVEL, 等)用於不應受 的狀態影響的鍵CAPS LOCK,而僅受Shift鍵的影響。
...
   // row 1 (E)
   key.type[group1]="ALPHABETIC"; <<-----------
   key <TLDE> {    [     question,     exclam,         masculine,      ordfeminine ]   };
   key <AE01> {    [     braceleft,    1                                           ]   };
   key <AE02> {    [     bracketleft,  2,              periodcentered              ]   };
   key <AE03> {    [     parenleft,    3,              EuroSign                    ]   };
   key <AE04> {    [     less,         4                                           ]   };
   key <AE05> {    [     slash,        5                                           ]   };
   ...
   // for further definitions where caps lock should not affect, use the following: 
   key.type[group1]="TWO_LEVEL";
   ... 
...

b) 更改每個單獨的鍵

這是另一個上下文中的範例,以防您希望為每個鍵單獨設置不同的鍵類型。基本上,鍵類型設置在鍵定義“內部”,而在塊情況下,它在外部定義並應用於後續鍵定義。

partial xkb_symbols "swap_menu_rctrl_print" {
   // for newer thinkpad keyboards with print screen in the wrong place
   key <PRSC> {
       type= "TWO_LEVEL",
       symbols[Group1]= [ Control_R, Menu ]
   };
   key <RCTL> {
       type= "ONE_LEVEL",
       symbols[Group1]= [ Menu ]
   };
};

一般來說,你可以看看更複雜的佈局的定義,比如德國 T3 佈局定義在/usr/share/X11/xkb/de

在此處輸入圖像描述

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