Bố cục XKB được xác định trong một mô hình gọi là RMLVO
: Quy tắc, Mô hình, Bố cục, Biến thể, Tùy chọn. Cơ sở dữ liệu XKB của hệ thống thường ở /usr/share/X11/xkb
:
/usr/share/X11/xkb/
├── compat # ??? dark magic here, avoid
├── geometry # as in physical, eg for generating layout maps
├── keycodes # helpful for translating keycodes (from xev) to <FOO>
├── rules # "evdev" is the important one; *.lst & *.xml are descriptions
├── symbols # main layouts, variants, optional overrides
└── types # ??? dark magic here, avoid
Thư mục keycodes
sẽ xác định tên khóa như <CAPS>
hoặc <AC01>
từ scancodes mà các khóa đang thực sự tạo ra. setxkbmap -query -verbose 10
sẽ cho bạn thấy chính xác những tập tin nào được truy cập để xây dựng sơ đồ phím hiện tại của bạn; Khi nó nói keycodes: evdev+aliases(qwerty)
, nó đang tải ../keycodes/evdev
tập tin và khổ qwerty
thơ từ ../keycodes/aliases
tập tin. Nếu bạn sử dụng các công cụ như xev
để xác định mã khóa nào đang tạo, các tệp đó sẽ hiển thị tên khóa nào được ánh xạ tới mã đó.
Câu hỏi sửa đổi của bạn là khó khăn hơn. Tôi chỉ thấy tham chiếu đến 8 cấp độ ISO và tôi không chắc đó là giới hạn XKB hay đơn giản là không có bố cục chung nào sử dụng nhiều hơn mức đó. (Sau khi kiểm tra thêm, tôi chắc chắn rằng bạn phải thay đổi mã XKB để thêm bổ sung
symbol press this
level 1 a key
level 2 A shift+key
level 3 á <level3>+key
level 4 Á <level3>+shift+key
level 5 ?? <level5>+key
level 6 ?? <level5>+shift+key
level 7 ?? <level5>+<level3>+key
level 8 ?? <level5>+<level3>+shift+key
Như bạn có thể thấy, trong bố cục 8 cấp chỉ có 2 phím đóng vai trò là phím "sửa đổi mới". Xem /usr/share/X11/xkb/compat/level5
và /usr/share/X11/xkb/types/level5
, nơi các hành vi thay đổi, chốt và khóa level5 được xác định; sau đó chúng được gắn vào các phím bằng các tùy chọn ký hiệu được xác định trong /usr/share/X11/xkb/symbols/level5
.
Nếu bạn đã xác định công cụ level9
sửa đổi của riêng mình , thì việc kết hợp với các cấp độ hiện tại sẽ cung cấp cho bạn thêm 8 cấp độ trước khi bạn cần một công cụ sửa đổi cấp độ khác:
symbol press this
level 9 ?? <level9>+key
level 10 ?? <level9>+shift+key
level 11 ?? <level9>+<level3>+key
level 12 ?? <level9>+<level3>+shift+key
level 13 ?? <level9>+<level5>+key
level 14 ?? <level9>+<level5>+shift+key
level 15 ?? <level9>+<level5>+<level3>+key
level 16 ?? <level9>+<level5>+<level3>+shift+key
Như bạn có thể thấy, đây là bắt đầu có rất nhiều phím được nhấn cùng một lúc. Sử dụng khóa và chốt thay cho ca sẽ cắt giảm điều đó, nhưng đây sẽ là một bố cục rất phức tạp và chúng tôi chỉ tưởng tượng thêm một trình chọn cấp độ. Mỗi người chọn bổ sung sẽ tăng gấp đôi mức hiện có.
"Công cụ sửa đổi" mà bạn hình dung có thể đang chọn một cấp độ cụ thể, đó là lý do tại sao bạn nghĩ rằng bạn cần rất nhiều. Bạn có thể xác định các hành động lựa chọn như thế và đưa chúng vào, giả sử, cấp 3 của các phím đó, do đó level3+key9
cung cấp cho bạn một level14_latch
hành động, và sau đó bất kỳ phím nào bạn nhấn tiếp theo sẽ cung cấp cho bạn cấp 14 của phím đó.
Chỉnh sửa : Một câu hỏi khác được hỏi cụ thể về việc tạo một ISO_Level4_{Shift,Latch,Lock}
và tôi đã chứng minh một bản giảISO_Level4_Latch
bằng cách sử dụng các từ khóa và hành động XKB hiện có. Phương pháp đó sẽ có hiệu quả cho các cấp 4, 6, 7 và 8.