Keyboard

地圖超級+左f_噸|里格_ht_大號和F噸|R一世GH噸Left|Right到首頁/終點

  • June 24, 2019

我如何映射鍵“超級”,所以當與左/右結合時,它會產生鍵碼 Home/End?

我目前的 setxkbmap:

setxkbmap \
 -model pc105 \
 -layout 'us(dvorak-intl),us(alt-intl)' \
 -option \
 -option grp:lctrl_lshift_toggle \
 -option compose:rwin

您不能僅使用 setkxbmap 選項來執行此操作,因為沒有預設選項可以滿足您的要求。

但是您可以通過在較低級別定義關鍵行為來做到這一點。

該頁面http://madduck.net/docs/extending-xkb/幫助我理解並找到了一種方法來做到這一點。

創建一個文件 ~/.xkb/keymap/mykbd 放置 setxkbmap 的輸出,它將是您的基本鍵盤定義;例如:

setxkbmap -print > ~/.xkb/keymap/mykbd

然後我們將創建一個~/.xkb/types/mytypes文件並將以下內容放入:

partial
xkb_types "super_level2" {
   Virtual_modifiers Super;
   type "SUPER_LEVEL2" {
       modifiers= Super;
       map[Super]= Level2;
       level_name[Level1]= "Base";
       level_name[Level2]= "Super";
   };
};

它定義了一個 SUPER_LEVEL2 類型,可以輕鬆定義在按下鍵時發送的符號Super

然後,~/.xkb/symbols/mysymbols放入以下行:

partial modifier_keys
xkb_symbols "super_arrows_home_end" {
   key <LEFT>  {
       type[Group1] = "SUPER_LEVEL2",
       symbols[Group1] = [    Left,   Home      ]
   };
   key <RGHT>  {
       type[Group1] = "SUPER_LEVEL2",
       symbols[Group1] = [    Right,  End       ]
   };
};

(注意使用我們定義的“SUPER_LEVEL2 類型”,這意味著當按下 Super 鍵(而不是 Shift 鍵)時觸發符號行上的第二個(級別 2)符號。

最後,編輯~/.xkb/keymap/mykbd文件以載入我們編寫的程式碼片段:

  • 在行中xkb_types添加+mytypes(super_level2)引號內
  • 在行中xkb_symbols添加+mysymbols(super_arrows_home_end)引號。

現在你可以載入它

xkbcomp -I$HOME/.xkb ~/.xkb/keymap/mykbd $DISPLAY

測試您的左/右鍵,它們應該可以按您的意願工作。

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