현재 terminfo 데이터베이스를 terminfo 소스 파일과 비교합니다.

현재 terminfo 데이터베이스를 terminfo 소스 파일과 비교합니다.

사용 가능한 모든 terminfo 항목(현재 컴파일된 전체 데이터베이스)을 terminfo 소스 파일과 어떻게 비교합니까?

유틸리티 에는 옵션이 infocmp있지만 -F두 파일을 비교해야 하지만 모든 항목을 내보내고 전체 현재 데이터베이스의 파일을 생성하는 옵션이 없습니다. 각 항목에 대해 호출해야 하므로 각 항목을 개별적으로 내보내야 합니다. 모든 항목을 한 번에 내보내는 방법이 있는 경우 infocmp를 두 번 호출하는 두 단계로 수행할 수 있습니다(한 번은 모든 데이터베이스를 내보내고 다른 한 번은 파일을 비교함).

답변1

소스 코드를 새 디렉터리로 컴파일하고 이를 사용하여 infocmp -d각 항목을 비교할 수 있습니다.

mkdir -p dir && cd dir
TERMINFO=$PWD tic -x /path/to/terminfo.src
for entry in */*; do
  infocmp -x -d -B "$PWD" "${entry#*/}" "${entry#*/}"
done

관련 컨텍스트와의 차이점만 인쇄하려면 다음을 수행할 수 있습니다.

mkdir -p dir && cd dir
TERMINFO=$PWD tic -x /path/to/terminfo.src
for entry in */*; do
  LC_ALL=C infocmp -x -d -B "$PWD" "${entry#*/}" "${entry#*/}" |
    awk '
      /^comparing/ {entry=$1" "$2; next}
      $1 == "comparing" {section=$0; next}
      entry {print entry; entry = 0}
      section {print section; section = 0}
      {print}'
done

답변2

나는 이 스크립트를 사용하여 이를 수행합니다(예를 들어 Debian에서는 다음과 같이 kbs가정합니다 ).^?), ncurses의 로컬 빌드를 테스트합니다.

#!/bin/sh
# $Id: test-terminfo+,v 1.10 2012/04/21 15:52:17 tom Exp $
# vi:sw=4 ts=4
# Compile the given terminfo source-file(s) into a temporary directory, compare
# the compiled files against the system version.
if test $# = 0 ; then
        with-local-ncurses $0 terminfo terminfo.src
else
        OPTS=-x
        MY_NCURSES=/usr/local/ncurses
        MY_TERMINFO=$MY_NCURSES/share/terminfo
        PATH=$MY_NCURSES/bin:$PATH; export PATH
        unset TERMINFO_DIRS
        unset TERMINFO
        TMP=/tmp/term$$
        rm -rf $TMP
        trap "rm -rf $TMP" 0 1 2 3 15
        mkdir $TMP
        rm -f $TMP/terminfo.sed
        cat >$TMP/terminfo.sed <<EOF
s,/usr/share,$MY_NCURSES/share,g
/^xterm+kbs|fragment for backspace key, kbs=/s/kbs=^H,/kbs=^?,/
/^xterm+kbs|fragment for backspace key,\$/,/^#/{
        s/kbs=^H,/kbs=^?,/
}
EOF
        for name in $*
        do
                if test -f "$name" ; then
                        sed -f $TMP/terminfo.sed $name >$TMP/source
                        TERMINFO=$TMP tic -U $OPTS -R ALL $TMP/source
                fi
        done
        TERMINFO=$MY_TERMINFO
        for name in $TMP/?/*
        do
                base=`dirname $name`
                base=`basename $base`
                name=`basename $name`
                case $name in
                ??)     # ignore 2-char termcap names
                        ;;
                *)
                        if test -f "$TERMINFO/$base/$name" ; then
                                infocmp -U $OPTS -q -p -f -A $TERMINFO -B $TMP $name $name
                        else
                                echo missing "$name $base"
                        fi
                        ;;
                esac
        done
fi

로그는 일부 세부정보가 중요한 이유를 설명합니다.

----------------------------                                                                                
revision 1.10                                                                                               
date: 2012/04/21 15:52:17;  author: tom;  state: Exp;  lines: +2 -3                                         
add -x                                                                                                      
----------------------------                                                                                
revision 1.9                                                                                                
date: 2012/04/14 21:50:23;  author: tom;  state: Exp;  lines: +7 -4                                         
tweak to handle output from terminfo-uses script                                                            
----------------------------                                                                                
revision 1.8                                                                                                
date: 2012/03/17 19:31:02;  author: tom;  state: Exp;  lines: +15 -4                                        
tweaks to make this compare more closely to what I've installed, by                                         
accounting for the pathnames used in cfg-local                                                              
----------------------------                                                                                
revision 1.7                                                                                                
date: 2011/08/10 08:49:23;  author: tom;  state: Exp;  lines: +2 -2                                         
make this work with Solaris                                                                                 
----------------------------                                                                                
revision 1.6                                                                                                
date: 2011/06/11 17:23:15;  author: tom;  state: Exp;  lines: +2 -2                                         
remove spurious "eval" when doing no-args                                                                   
----------------------------                                                                                
revision 1.5                                                                                                
date: 2004/07/05 14:06:46;  author: tom;  state: Exp;  lines: +15 -7                                        
use -U option to simplify comparing termcap                                                                 
ignore 2-char termcap names                                                                                 
----------------------------                                                                                
revision 1.4                                                                                                
date: 2004/01/31 17:42:01;  author: tom;  state: Exp;  lines: +2 -2                                         
ignore padding                                                                                              
----------------------------                                                                                
revision 1.3                                                                                                
date: 2003/05/31 21:00:37;  author: tom;  state: Exp;  lines: +9 -5                                         
use local-ncurses rather than installed version                                                             
----------------------------                                                                                
revision 1.2                                                                                                
date: 2002/06/22 22:31:53;  author: tom;  state: Exp;  lines: +1 -1                                         
add -p option                                                                                               
----------------------------                                                                                
revision 1.1                                                                                                
date: 2001/05/19 20:07:23;  author: tom;  state: Exp

차이점을 확인합니다(예외잃어버린항목) 문자를 검색하여 tab.

이름이 붙은 이유에 대해서는test-terminfo+, 이는 원래 스크립트(1998년에 작성됨)가 시스템 terminfo와만 비교되기 때문입니다(어떤 패키지도 오염을 피할 수 없습니다...).

평소와 같이 매뉴얼 페이지를 읽는 것이 도움이 됩니다.

관련 정보