2012-10-19 3 views
1

모노 애플 리케이션은 256 색 터미널을 지원합니까?256 색 터미널의 모노 콘솔 앱

내 프로그램은 256 색 환경에서 매우 이상한 결과를 제공합니다.

$ TERM 값을 확인하고 색상이 256 색이면 완전히 비활성화해야합니까? 그것은 검색, 켜져있는 유일한 관련 결과가이 질문에 동안, 분명히

1%{8}%<%t37%e%p1%{16}%<%t9%p1%{8}%-%d%e38;5;7%;m1%{8}%<%t31%e%p1%{16}%<%t9%p1%{8}%-%d%e38;5;1%;mYou have not registered 
1%{8}%<%t37%e%p1%{16}%<%t9%p1%{8}%-%d%e38;5;7%;m1%{8}%<%t31%e%p1%{16}%<%t9%p1%{8}%-%d%e38;5;1%;mMOTD File is missing 
1%{8}%<%t37%e%p1%{16}%<%t9%p1%{8}%-%d%e38;5;7%;m1%{8}%<%t30%e%p1%{16}%<%t9%p1%{8}%-%d%e38;5;0%;mThetis joined #sanctuary. 
1%{8}%<%t37%e%p1%{16}%<%t9%p1%{8}%-%d%e38;5;7%;m1%{8}%<%t36%e%p1%{16}%<%t9%p1%{8}%-%d%e38;5;6%;mPlugin - Factoids - Saved. 
1%{8}%<%t37%e%p1%{16}%<%t9%p1%{8}%-%d%e38;5;7%;m1%{8}%<%t36%e%p1%{16}%<%t9%p1%{8}%-%d%e38;5;6%;mPlugin - Factoids - Saved. 
1%{8}%<%t37%e%p1%{16}%<%t9%p1%{8}%-%d%e38;5;7%;m1%{8}%<%t30%e%p1%{16}%<%t9%p1%{8}%-%d%e38;5;0%;mChanMess 77 and still going... 
1%{8}%<%t37%e%p1%{16}%<%t9%p1%{8}%-%d%e38;5;7%;m1%{8}%<%t36%e%p1%{16}%<%t9%p1%{8}%-%d%e38;5;6%;mPlugin - Factoids - Saved. 
1%{8}%<%t37%e%p1%{16}%<%t9%p1%{8}%-%d%e38;5;7%;m1%{8}%<%t36%e%p1%{16}%<%t9%p1%{8}%-%d%e38;5;6%;mPlugin - Factoids - Saved. 
+0

... 어떤 환경에서 작동해야합니까? –

+0

ansi 컬러 터미널과 windows에서 잘 작동합니다. 색상에 대한 출력을 수정하지 않고 Console.ForegroundColor 속성을 설정합니다. – Steve

+0

"ansi colored terminals"이 (가) 있습니까? –

답변

2

매우 늦게 반응을하지만, 나뿐만 아니라이 문제를 가지고 있었고, :

내 출력은 다음과 같습니다.

나는 결국 스스로 알아 냈다. - $TERM 환경 변수가 올바르게 설정되지 않았다. 제 경우에는 xterm-256color으로 설정되었습니다. 모노는 분명히 그것을 좋아하지 않습니다.

xterm으로 설정하면 문제가 해결됩니다.

1

소스 코드를 읽음 TermInfoDriver.cs은 Mono가 처음으로 terminfo 데이터베이스에서 $ TERM을 찾고, 실패하면 "xterm"또는 "linux"를 허용하도록 하드 코드 된 것을 보여줍니다. $ TERM이 terminfo 데이터베이스에서 발견되지 않거나 Mono가 terminfo 데이터베이스를 찾기 위해 잘못 구성된 경우 오류가 발생합니다. 전자를 확인하려면 "infocmp"을 사용하여 터미널 항목을 표시하십시오.

"표준 Linux 터미널"은 Linux 콘솔이며 "xterm"또는 "vt220"(사용하기에 충분)과 일치하지 않습니다. 다시 infocmp를 사용하여 예를 들어 infocmp linux xterm, infocmp linux vt220

위로 돌아 가기 인쇄 된 이상한 텍스트가 terminfo 데이터베이스에서 나옵니다. 데이터베이스 을 사용하도록 작성된 응용 프로그램은 일반적으로의 terminfo 함수를 사용하여 데이터를 해석하고 터미널에 출력하도록 준비합니다. Mono는 terminfo 문자열 (올바르게 작동 할 수도 있음)에 대한 자체적 인 인터프리터를 가지고 있으며, 또한 자체 터미널 에뮬레이터 (표시 할)가 있다는 주석을 회상합니다. 이러한 프로그램이 인쇄 오류 메시지를 포함하여 처리 할 것으로 예상하지 않는 문자열로 이상한 일을하는 것은 드문 일이 아닙니다. "실제"하드웨어 터미널은 일반적으로 예기치 않은 입력을 무시합니다.

관련 문제