xkb
세 번째 수준 기호를 사용하지 않는 가능한 모든 레이아웃과 해당 변형을 나열해야 합니다 . /usr/share/X11/xkb/symbols/
디렉토리의 모든 파일을 수동으로 검사하는 것은 말도 안되는 일입니다. 더 쉬운 방법이 있을까요?
답변1
모든 레이아웃 목록을 처리하고 목록의 각 항목에 대해 해당 변형을 확인할 수 있습니다.레벨 3상징:
list=($(sed '/! layout/,/^$/!d;//d
s/[[:blank:]]*\([^[:blank:]]*\)[[:blank:]].*/\1/' \
< /usr/share/X11/xkb/rules/evdev.lst))
layouts=("${list[@]##*/}")
for i in "${layouts[@]}"; do
sed -n '\|//.*level3|d;H;/xkb_symbols/{s/.*"\(.*\)".*/'"${i}:"'\1/;h}
/^};/{x;/level3/d;s/\n.*//p}' < /usr/share/X11/xkb/symbols/${i}
done
첫 번째 항목은 sed
모든 레이아웃을 나열 /usr/share/X11/xkb/rules/evdev.lst
하고 결과를 배열에 저장합니다 list
. 그런 다음 이 배열의 요소는 매개변수 확장을 통해 추가 처리되어 레이아웃 이름만 가져오고(예: jp
에서 추출 nec_vndr/jp
) 배열에 저장됩니다 layouts
.
그런 다음 각 해당 파일을 item
처리하여 해당 파일이 없는 변형을 추출합니다.layouts
/usr/share/X11/xkb/symbols/${item}
레벨 3표기법: sed
먼저 d
포함된 주석 줄을 모두 제거한 level3
다음 무조건 각 줄을 H
이전 버퍼에 추가합니다. 레이아웃 이름 앞에 변형 이름이 포함된 줄을 편집하고 h
이전 버퍼를 덮어쓴 다음 각 변형 섹션의 끝( /^};/
) 에서 x
버퍼를 변경하고 패턴 공간을 제거하고 패턴 공간이 포함된 경우 첫 번째 줄만 인쇄합니다. level3
(즉.레이아웃:변형). 결과는 다음과 같습니다.
us:basic
us:ibm238l
us:dvorak
us:dvorak-l
us:dvorak-r
us:dvorak-classic
us:dvp
us:olpc2
us:chr
us:carpalx
us:carpalx-full
us:alt-intl-unicode
us:sun_type6
............
dk:nodeadkeys
dk:winkeys
dk:mac
dk:mac_nodeadkeys
dk:dvorak
dk:sun_type6
............