Khai báo khóa sửa đổi mới với XKB


12

Tôi đang cố gắng tạo bố cục bàn phím một tay và muốn sử dụng Hyperđể tạo các phím đặc biệt khi tôi nhấn một số phím.

Ví dụ, khi tôi nhấn Hyper_LB, tôi muốn XKB sản xuất XF86AudioRaiseVolume.

Các phần có liên quan từ custom_2.kbd (mã đầy đủ tại http://pastebin.com/gm8cggn3 ):

xkb_keycodes {
    <K_36> = 54;        // b B XF86AudioRaiseVolume
    <K_85> = 133;       // Hyper_L
};

xkb_symbols {
    key <K_36> { type = "HYPER_LEVEL", [ b, B, XF86AudioRaiseVolume ] };
    key <K_85> { type = "ONE_LEVEL", [ Hyper_L ] };
};

xkb_compatibility {
    interpret Hyper_L { action = SetMods(modifiers=Hyper); };
};


xkb_types {
type "HYPER_LEVEL" {
    modifiers= Shift+Hyper;
    map[Shift]= Level2;
    map[Hyper]= Level3;
    map[Shift+Hyper]= Level3;
};
};

Nó có vẻ tốt với tôi, nhưng khi tôi thử nó:

~$ xkbcomp custom_2.kbd $DISPLAY
Error:            Identifier "Hyper" of type int is unknown
Error:            Key type mask field must be a modifier mask
                  Key type definition ignored
Warning:          Map entry for unused modifiers in HYPER_LEVEL
                  Using none instead of Shift
Error:            Identifier "Hyper" of type int is unknown
Error:            The key type map entry field must be a modifier mask
                  Ignoring illegal assignment in HYPER_LEVEL
Error:            Identifier "Hyper" of type int is unknown
Error:            The key type map entry field must be a modifier mask
                  Ignoring illegal assignment in HYPER_LEVEL
 -> 1

(mã lỗi là 1)

Và bây giờ tôi bị mắc kẹt. Có ai có một ý tưởng làm thế nào để làm cho công việc này? Một giải pháp mà không có Hyperlà OK.

Biên tập

Bằng cách thay đổi SuperHyperđến Mod4Mod5, lỗi đó biến mất:

~$ xkbcomp custom_3.kbd
( no output )

~$ diff custom_{2,3}.kbd
188,190c188,190
<         interpret Super_L { action = SetMods(modifiers=Super); };
<         interpret Hyper_L { action = SetMods(modifiers=Hyper); };
<     }c;
---
>         interpret Super_L { action = SetMods(modifiers=Mod4); };
>         interpret Hyper_L { action = SetMods(modifiers=Mod5); };
>     };
204c204
<             modifiers= Shift+Hyper;
---
>             modifiers= Shift+Mod5;
206,207c206,207
<             map[Hyper]= Level3;
<             map[Shift+Hyper]= Level3;
---
>             map[Mod5]= Level3;
>             map[Shift+Mod5]= Level3;

Tuy nhiên, nó vẫn không hoạt động:

~$ xkbcomp custom_3.kbd $DISPLAY 
Error:            success in unknown
                  Couldn't write keyboard description to :0.0
X Error of failed request:  BadValue (integer parameter out of range for operation)
  Major opcode of failed request:  135 (XKEYBOARD)
  Minor opcode of failed request:  9 (XkbSetMap)
  Value in failed request:  0x8010202
  Serial number of failed request:  12
  Current serial number in output stream:  14
 -> 1 

Câu trả lời:


9

Vẫn có một số vấn đề (tôi nghĩ không liên quan) với XKB, nhưng tôi có một công cụ sửa đổi Hyper được ánh xạ và tôi tin rằng các cài đặt có liên quan là:

compat:

virtual_modifiers Shift,Control,Meta,Super,Hyper,AltGr;

interpret Hyper_R { action = SetMods(modifiers=Mod4); };

ký hiệu:

modifier_map Mod4 { <DELE> }; // Hyper
key <DELE>  { type="UNMODIFIED", [ Hyper_R ], repeat=no  };

sau đó một cái gì đó như

key <K_36> { type = "SHIFT+HYPER", [ b, B, 
                                XF86AudioRaiseVolume, XF86AudioRaiseVolume ] };

các loại

virtual_modifiers Meta,AltGr,Super,Hyper,Mod5;

không cần Mod5 ở đó trừ khi bạn cũng sử dụng nó; nhưng tương tự, bỏ qua Shift & Control tại đây

type "SHIFT+HYPER" {
    modifiers= Shift+Hyper;
    map[Shift]= Level2;
    map[Hyper]= Level3;
    map[Shift+Hyper]= Level4;
};

Đối với những gì nó có giá trị, tôi đã gặp nhiều rắc rối, tệ hại hơn rất nhiều khi cố gắng xác định lại hình học và mã khóa so với giá trị của nó, và cuối cùng trở lại với các pc105biểu tượng chính <AE01>dưới dạng, mặc dù nhiều trong số chúng được đặt tên sai một cách lố bịch. (ví dụ: <DELE>đối với khóa Hyper của tôi)

Tái bút Đối với một ví dụ làm việc, xem https://github.com/brpocock/spacey-cadet-keyboard ...


Cảm ơn bạn rất nhiều. Vẫn làm việc một số thứ, nhưng nó hoạt động rất tốt!
Lennart_96
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.