2010-12-20 2 views
13

순수 텍스트 표현보다 눈에 더 편한 표를 인쇄하려고합니다. 기본적으로 나는 이런 식으로 뭔가를 변환 할 :ANSI 상자 문자를 사용하여 터미널에 테이블 그리기

+-----+--------+ 
| age | weight | 
+-----+--------+ 
| 10 | 100 | 
| 80 | 500 | 
+-----+--------+ 

이 같은 뭔가 :

in terminal looks like this

주목하라 : 여기

┌─────┬────────┐ 
| age | weight | 
├─────┼────────┤ 
│ 10 │ 100 │ 
│ 80 │ 500 │ 
└─────┴────────┘ 

내가 터미널에 표시되는 내용의 스크린 샷입니다 행 사이의 간격. 내 문제는 ANSI 인쇄를 사용하는 다른 유닉스 도구가 터미널에서 잘 보이는 반면 제대로 연결되지 않는다는 것이다. 내 터미널에서 tree -A를 실행하는 경우 예를 들어, 트리를 들어, '나는이 얻을 : 수직선이 서로 어떻게 연결되어 있는지

tree in terminal

사항. 나는 복사 할 때 내 텍스트 편집기에 트리의 출력을 붙여 나는 이런 식으로 뭔가를 얻을 내 스크립트를 실행 있기 때문에 재미 :

분명히

tree in my code

내가 터미널에서 ANSI의 문자를 인쇄하고 나오지 않았어 대해 뭔가를 누락 ' 인터넷 검색으로 그것에 대해 아무것도 알지 못합니다. 누구든지이 주제에 대해 밝힐 수 있습니까?

답변

18

나는 내 자신의 질문에 답해야한다고 생각한다. 약간의 연구와 친구이자 사장 인 Linus의 도움을 받으면 터미널을 그래픽 모드로 먼저 이동시킨 다음 특수 문자를 인쇄하고 텍스트 모드로 되돌아 가도록해야합니다. 그래픽 모드로 전환하기위한 ascii 코드는 14이고 15는 텍스트 모드로 돌아갑니다. 그래서 여기에 루비 코드가 있습니다 :

printf("%c\n", 14) 
printf("%c ", 0x6A) # ┘ 
printf("%c ", 0x6B) # ┐ 
printf("%c ", 0x6C) # ┌ 
printf("%c ", 0x6D) # └ 
printf("%c ", 0x6E) # ┼ 
printf("%c ", 0x71) # ─ 
printf("%c ", 0x74) # ├ 
printf("%c ", 0x75) # ┤ 
printf("%c ", 0x76) # ┴ 
printf("%c ", 0x77) # ┬ 
printf("%c\n", 0x78) # │ 


a = sprintf("%c", 0x6C) + # ┌ 
sprintf("%c", 0x71) + # ─ 
sprintf("%c", 0x71) + # ─ 
sprintf("%c", 0x71) + # ─ 
sprintf("%c", 0x71) + # ─ 
sprintf("%c", 0x71) + # ─ 
sprintf("%c", 0x71) + # ─ 
sprintf("%c\n", 0x6B) + # ┐ 
sprintf("%c", 0x78) + # │ 
#print("  ") 
"  " + 
sprintf("%c\n", 0x78) + # │ 
sprintf("%c", 0x6D) + # └ 
sprintf("%c", 0x71) + # ─ 
sprintf("%c", 0x71) + # ─ 
sprintf("%c", 0x71) + # ─ 
sprintf("%c", 0x71) + # ─ 
sprintf("%c", 0x71) + # ─ 
sprintf("%c", 0x71) + # ─ 
sprintf("%c", 0x6A) # ┘ 

puts a 

printf("%c\n", 15) 
3

정말 ncurses와 그 변종을 조사해야합니다. 원래는 C로 작성되었지만 다양한 언어 바인딩이 있습니다. 윈도우, 메뉴, 박스 테두리 등이있는 TUI (텍스트 UI)를 제작하는 데 상당히 많은 라이브러리 모음을 제공합니다. 위키피디아에서 시작하여 찾을 수 있습니다 다른 참고 자료들.

관련 문제