`less` 또는 `more`는 ansi 이스케이프 `\x1b[2K`(erase_line)를 지원합니까?

`less` 또는 `more`는 ansi 이스케이프 `\x1b[2K`(erase_line)를 지원합니까?

기본적으로 터미널에 애니메이션을 적용하고 싶지만 텍스트가 너무 길기 때문에 호출기가 필요합니다. 주기적으로 텍스트 색상을 변경하고 싶다고 가정해 보겠습니다. 가능합니까?

답변1

편집하다대답은 다음과 같습니다.폰 브랜드그리고토마스 디키기술적으로 더 정확합니다.

less-r이 옵션을 사용하면 원시 ANSI 이스케이프가 지원됩니다. 온라인 삭제도 지원합니다.

하지만 애니메이션은 볼 수 없습니다. 예를 들어:

echo -e "foo\x1b[1G\x1b[2Kbar" > test.ansi
less -r test.ansi

만 인쇄됩니다 bar.

moreANSI 이스케이프는 기본적으로 전달되지만 제가 테스트한 줄 편집은 지원하지 않습니다.

당신은 또한 볼 수 있습니다이 Stackoverflow 답변은 lessmoremost.

답변2

이 줄을 지우는 것은 터미널 색상 변경과 간접적으로만 관련됩니다.배경색상을 선택하면 많은 터미널(Linux 콘솔, rxvt, xterm 및 이들 중 하나를 모방하는 프로그램)에서 해당 색상을 사용하여 배경의 지워진 영역에 색조를 적용합니다.

less일부 정리를 사용했지만 아무것도 사용하지 않았습니다 \x1b[2K. 독서원천, 다양한 기능을 사용하기 위해 termcap 인터페이스를 사용합니다. 가장 관련성이 높은 부분은용어 정보(5)매뉴얼 페이지:

   clr_bol                   el1    cb   Clear to beginning
                                         of line
   clr_eol                   el     ce   clear to end of line
                                         (P)

즉 , , \x1b[K각각 입니다 . 전통적인 termcap 기능은 없으며 ( 파일 내용만 전달하도록 사용 또는 옵션을 지정하지 않는 한 ) .\x1b[Kel1elel2less-r-Rless\x1b[2K

more예를 들어 다음과 같은 경우도 마찬가지입니다.util-linux패키지: termcap의 기능만 사용합니다. less와 달리 more인쇄되지 않는 문자를 터미널에 직접 보내는 옵션은 없습니다.

-r또는 -R옵션 을 사용하는 경우 less다음을 기억해야 합니다.제한된: less이스케이프 문자가 무엇을 하는지 모릅니다(또는 별로 신경 쓰지 않습니다). ~에서매뉴얼 페이지:

-r또는--raw-control-chars
이유"날것의"표시할 제어 문자입니다. 기본값은 캐럿을 사용하여 제어 문자를 표시하는 것입니다. 예를 들어 control-A(8진수 001)는 "^A"로 표시됩니다. 경고하다: -r 이 옵션을 사용 하면less 할 수 없다화면이 실제로 어떻게 보이는지 추적하십시오(화면이 각 제어 문자 유형에 어떻게 반응하는지에 따라 다름). 결과적으로 긴 줄이 잘못된 위치에서 분할되는 등 다양한 표시 문제가 발생할 수 있습니다.

답변3

일반적으로 이스케이프 시퀀스에 반응하는 것은 tty입니다(실행 중인 프로그램이 이를 존중하지 않도록 설정하지 않은 경우 프로그램 자체가 그렇게 할 수 있음). more(1)매우 원시적인 화면을 다시 작성하므로(실제로 화면 길이의 줄을 작성하고 키 누름을 기다리는 데 충분함) 입력만 통과하는 것 같습니다. less(1)백업이 필요하므로 화면에 대한 보다 세밀한 제어가 필요합니다.

관련 정보