3차 기호를 사용하지 않는 모든 레이아웃과 해당 변형을 어떻게 나열할 수 있습니까?

3차 기호를 사용하지 않는 모든 레이아웃과 해당 변형을 어떻게 나열할 수 있습니까?

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
............

관련 정보