입력 에드가 비어 있습니다

입력 에드가 비어 있습니다

출력이 tput ed비어 있고 이유를 이해할 수 없습니다. 다른 기능은 잘 작동합니다. 출력에도 빠진 것이 ed없으므로 infocmptput이 일치해야 합니다. 그렇죠?

$ printf '%q' "$(tput ed)"
''
$ printf '%q' "$(tput home)"
$'\033'\[H

저는 Mac OS 10.14.6 및 iTerm2에서 zsh를 사용하고 있습니다. 용어=xterm-256color.

답변1

Apple은 ncurses에 대한 termcap 지원을 구성합니다(기본 terminfo에 추가로):

  • 구성 상태구성 옵션을 보여주는 파일입니다.
  • infocmp 호출_nc_read_file_entry데이터를 얻으려면.
  • 전화를 걸어설정 항목, 이는 다음으로 이동합니다._nc_read_entry, 이는 호출됩니다._nc_read_tic_entry, 이는 실제로 호출됩니다._nc_read_file_entry
  • 문제가 있는 경우_nc_read_tic_entry, 그 다음에_nc_read_entrytermcap 지원으로 대체(참조read_entry.c).

10년 전의 코드이기 때문에 _nc_read_tic_entry에서 발생할 수 있는 문제는 얼마 전에 수정되었을 수도 있습니다.

예를 들어, MacPorts를 설치했는데 제대로 작동하지만 Apple 버전은 그렇지 않습니다. 문제를 조사하는 데 사용한 최상위 스크립트는 다음과 같습니다.

#!/bin/sh
unset TERMINFO
unset TERMINFO_DIRS
export TERM=xterm-256color
#export PATH=/usr/bin:$PATH
echo TERMCAP
infocmp -CrTt1 | grep -E ':..=.*:' | sed -e 's/^    ://' -e 's/=.*//' | xargs -n 1 /tmp/test-tput
echo TERMINFO
infocmp -1 | grep -E '^ .*=.*,' | sed -e 's/^   //' -e 's/=.*//' | xargs -n 1 /tmp/test-tput

PATH( 둘 중 하나를 선택하려면 주석 처리/주석 해제 ) 이를 두 번째 스크립트라고 합니다./tmp/test-tput표시값:

#!/bin/bash
tput "$1" >/dev/null 2>/dev/null || exit
echo -n "CAP:$1 "
tput "$1" 2>/dev/null
echo

ncurses 5.7의 동작은 다음과 같습니다.1999년

    + modify tput to accept termcap names as an alternative to terminfo
      names (patch by Jeffrey C Honig).

그리고 고정2009년:

    + change order of lookup in progs/tput.c, looking for terminfo data
      first.  This fixes a confusion between termcap "sg" and terminfo
      "sgr" or "sgr0", originally from 990123 changes, but exposed by
      20091114 fixes for hashing.  With this change, only "dl" and "ed" are
      ambiguous (Mandriva #56272).

사과ncurses 5.7그 수정보다 약 1년 앞서요.

답변2

더 많은 인터넷 검색과 문서(주로 용어 정보) 검색 끝에 마침내 이전 버전으로 돌아가야 한다는 것을 깨달았습니다.용어 모자코드:모자 이름모든 terminfo 기능이 지원되는 것은 아닙니다.

ed=$(tput ed || tput cd)

관련 정보