컨트롤 수정자를 눌렀을 때 키 입력을 QWERTY로 리디렉션하기 위해 색다른 8레벨 독일 Neo2 레이아웃에 추가 레벨을 추가하겠습니다.
9레벨이 작동하지 않을 것이라고 생각하지는 않지만, 최대 레벨 수를 알면 안심이 될 것입니다.
상태/레벨/유형 정보가 32비트 데이터(실제로는 16진수 출력 xev
)로 비트 마스크되어 있다는 내용을 어딘가에서 읽었습니다.
레벨 정보를 전달하는 데 32비트가 모두 사용됩니까?
편집: 이 2자리 16진수(최대 수정자 키 수여야 함)와 최대 레벨 수(수정자 키 조합)를 혼동했습니다. 이 정보는 내 질문과 관련이 없어야 합니다.
그것은 다음과 같습니다. 어제 XKB를 배우기 시작했기 때문에 아직 레벨 8 이상의 유형을 접한 적이 없습니다.
type "EIGHT_LEVEL_LEVEL_FIVE_LOCK" {
// [...]
// + map[Control]= Level0;
level_name[Level0] = "QWERTY shortcuts"
level_name[Level1] = "Base";
level_name[Level2] = "Shift";
level_name[Level3] = "Alt Base";
level_name[Level4] = "Shift Alt";
level_name[Level5] = "X";
level_name[Level6] = "X Shift";
level_name[Level7] = "X Alt Base";
level_name[Level8] = "X Shift Alt";
};
답변1
모든 인용문의 출처는 다음과 같습니다.X 키보드 확장: 라이브러리 사양
특정 키 유형의 총 레벨 수는 XkbKeyTypeRec
다음 구조에 부호 없는 문자로 저장됩니다.( num_levels
140페이지)
typedef struct { /* Key Type */
…
unsigned char num_levels; /* total # shift levels, do not modify directly */
…
} XkbKeyTypeRec, *XkbKeyTypePtr;
num_levels 필드는 키 유형에 대한 총 교대 수준 수를 보유합니다. Xkb는 num_levels를 사용하여 키에 바인딩된 기호 배열이 충분히 큰지 확인합니다.
이론적으로 최대 레벨 수는 255개(1부터 시작)로 제한됩니다.
그러나 각 디자인의 키당 기호 수는 255개로 제한되어 있고 최대 4개의 그룹이 있을 수 있으므로... 실제 제한은 4개로 나누어집니다.63, 127페이지에서 본 것처럼
핵심 구현에서는 키당 기호 수를 255개로 제한합니다. 4개 그룹의 경우 각 그룹은 최대 63개의 기호(또는 교대 수준)를 가질 수 있습니다.
그런데 특정 키 유형의 수준 수를 변경하려면 다음을 사용하세요 XkbResizeKeyType
(145페이지).
XkbResizeKeyType ( xkb , type_ndx , map_count , want_preserve ,
new_num_lvls )
XkbDescPtr xkb ; /* keyboard description containing client map to update */
int type_ndx ; /* index in xkb->map->types of type to change */
int map_count ; /* total # of map entries needed for the type */
Bool want_preserve ; /* True => list of preserved modifiers is necessary */
int new_num_lvls ; /* new max # of levels for type */