Linux 콘솔에서 저주 사용

Linux 콘솔에서 저주 사용

CtrlAlt저는 Fedora 12에서 Curses를 사용하여 상태 정보를 VT( + + 를 눌러 액세스할 수 있는 터미널 중 하나 ) 에 출력하려고 합니다 Fx.

VT() 중 하나에서 애플리케이션을 실행하면 $TERM=linux상자 행이 및 j기타 몇 가지 문자로 나타납니다. 그러나 터미널 창()에서 실행하면 모든 것이 예상대로 표시됩니다.qk$TERM=xterm

VT 출력이 xterm으로 표시되도록 하려면 어떻게 해야 하는지 누군가 나에게 설명해 줄 수 있습니까? 출력이 올바르게 되도록 프로그램에서 터미널 설정을 할 수 있나요?

답변1

좋은 답변은 먼저 질문을 자신의 말로 설명한 다음 관련 부분을 선택적으로 인용하는 것입니다. 내부에ncurses FAQ 섹션@Craig는 문제를 이해하는 데 도움이 될 상세하지 않은 한 가지 측면이 있다고 제안했습니다.

인용하다라인 그래픽부분용어 정보(5)매뉴얼 페이지 및 해당라인 그래픽부분curs_add(3x)매뉴얼 페이지에서,curses 라이브러리에는 다음과 같은 사전 정의된 기호 상수 세트가 있습니다.ACS_xxxxx다양한 터미널에서 유사한 이스케이프 시퀀스를 사용하여 그려집니다.

가장 일반적인 변형은 VT100을 기반으로 하며, 여기서 응용 프로그램은 라인 그래픽을 시작하기 위해 특수 문자(또는 이스케이프 시퀀스)를 보냅니다.모델라인 그래픽을 끝내는 또 다른 문자(또는 이스케이프 시퀀스)입니다.

일부 터미널 에뮬레이터 개발자는 이 개념에 반대합니다.모델UTF-8 모드로 텍스트를 작성할 때. 비꼬는 말은 신경 쓰지 마세요(UTF-8 인코딩을 시작/중지하기 위한 이스케이프 시퀀스가 ​​있습니다). 하지만 ncurses는 이 기능을 효율적으로 지원합니다. 라인 그래픽을 만드는 방법을 결정하는 데 도움이 되도록,

  • 이는 VT100 스타일 선 그래픽을 수행하는 방법만 알려줄 수 있는 터미널 설명(환경 변수로 식별됨)으로 시작됩니다.
  • UTF-8의 경우 다른 환경 변수를 확인하여 로케일 인코딩을 확인할 수 있습니다.

ncurses가 UTF-8만 사용해야 하는 경우(터미널이 VT100 라인 그래픽을 지원하지 않기 때문에) 충분한 유니코드 값이 포함된 내장 테이블을 사용합니다. UTF-8을 사용하여 선을 그리는 것은 VT100을 사용하여 선을 그리는 것보다 필연적으로 3배 느립니다. 단순히 터미널로 전송되는 문자 수가 VT100을 사용하는 것보다 3배 많기 때문입니다.

이 모든 것이 UTF-8 선 그리기를 라이브러리의 주요 초점이 아닌 "그냥"으로 만듭니다. OP의 예에서 뭔가(아마도 로케일 변수)가 잘못되었습니다. Fedora는 UTF-8 모드에서 콘솔을 초기화하며, Linux 콘솔은 VT100 선 그리기를 생략하고 OP가 화면에 이상한 문자를 표시하는 것으로 알려진 사례입니다.

ncurses는 OP 환경을 터미널 설명의 기능을 지원하는 것으로 해석하기 때문에 VT100 선 그리기 모드(오버레이 모드로 인해 콘솔에서 무시됨)로 전환하고 선에 매핑될 것으로 예상되는 문자를 그립니다. 따라서 화면에 다음과 같이 나타날 수 있습니다.

lqqqqqqqqqqqqqqqk
x  Hello world  x
mqqqqqqqqqqqqqqqj 

대신에

┌───────────────┐
│  Hello world  │
└───────────────┘

답변2

ncurses FAQ에서http://invisible-island.net/ncurses/ncurses.faq.html

선 그리기 문자는 x와 q로 표시됩니다.

x와 q는 ncurses에게 "대체" 문자 집합을 터미널의 그래픽 문자 집합에 매핑하는 방법을 알려주는 테이블(terminfo/termcap의)에 해당합니다. 이 표에 대한 참조는 vt100에서 가져온 것입니다. 매핑되지 않은 문자가 있는 경우 터미널 에뮬레이터는 일반 글꼴과 대체 글꼴 간 전환을 위해 terminfo 설명에 제공된 이스케이프 시퀀스를 인식하지 못합니다.

주목할 만한 몇 가지 상황이 있습니다.

  • 다른 이스케이프 시퀀스나 다른 범위를 사용하여 결과 문자를 매핑하는 터미널 에뮬레이터입니다. Linux Console 및 Tera Term과 같은 소위 vt100 호환 제품을 예로 들 수 있습니다.
  • 로케일을 구분하는 터미널 에뮬레이터. 마찬가지로 Linux 콘솔은 UTF-8 모드에서 실행될 때 문제 영역입니다. 글꼴의 이스케이프 시퀀스 처리를 생략하면 명목상의 vt100 호환성이 더욱 약화되기 때문입니다. screen 유틸리티에도 동일한 문제가 있습니다. 구현을 단순화하든, Linux 콘솔을 복제하든, 로캘이 UTF-8 스타일일 때 vt100 스타일 글꼴 전환을 무시합니다.
  • Solaris를 사용하게 되면 일반적으로 ncurses가 설치되어 있더라도 ncurses보다 터미널 데이터베이스를 선호하도록 구성됩니다. 그러나 xterm 터미널 설명에는 선 그리기를 활성화하기 위한 enac가 생략되어 있습니다. 이는 screen 및 luit와 같은 애플리케이션에서는 제대로 작동하지 않습니다.

첫 번째 경우에는 올바른 terminfo 설명을 찾으면 됩니다. 손상이 ncurses 외부에서 발생했기 때문에 후자를 수정하는 것이 더 어렵습니다. (이 특정 문제가 발생하지 않도록 충분히 호환되도록 만드는 것은 쉽지만 일부 코더는 이러한 스타일의 솔루션이 부적절하다고 생각합니다).

일반 ncurses 라이브러리는 8비트 문자를 지원합니다. ncurses 라이브러리는 와이드 문자(예: 유니코드 및 UTF-8 인코딩)를 지원하도록 구성(--enable-widec)할 수도 있습니다. 해당 와이드 문자 ncursesw 라이브러리는 일반 애플리케이션 소스와 호환됩니다. 즉, 애플리케이션은 ncursesw 라이브러리에 대해 컴파일되고 링크되어야 합니다.

ncurses 버전 5.3은 UTF-8 지원을 제공합니다. Linux 콘솔 및 화면 특성은 2002년 후반에 완료된 개발 패치에서 해결되었습니다.

관련 정보