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

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

xkb가능한 모든 레이아웃과 3단계 기호를 사용하지 않는 해당 변형을 나열해야 합니다 . 디렉토리 의 모든 파일을 수동으로 검토하는 것은 /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
............

관련 정보