2010-12-20 13 views
13

Próbuję wydrukować tabelę, która jest bardziej przyjemna dla oka niż czysta reprezentacja tekstowa tego. Zasadniczo chcę przekonwertować coś takiego:Rysowanie tabel w terminalu przy użyciu znaków ANSI box

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

do czegoś takiego:

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

tu jest zrzut ekranu z tego co widzę w terminalu:

in terminal looks like this

Zauważcie luki między rzędami. Mój problem polega na tym, że nie łączą się prawidłowo, podczas gdy inne narzędzia Unix, które używają drukowania ANSI, wyglądają dobrze w terminalu. Na przykład drzewa, jeśli biegnę tree -A w moim terminalu `uzyskać to:

tree in terminal

zawiadomienie jak pionowe linie są połączone ze sobą. To zabawne, bo kiedy skopiować i wkleić wyjście drzewa w moim edytorze tekstu i uruchomić mój skrypt mam coś takiego:

tree in my code

Oczywiście brakuje mi czegoś o drukowaniu ANSI znaki w terminalu i mogłem” T znaleźć coś na ten temat, googlowanie go. Czy ktoś może rzucić trochę światła na ten temat?

Odpowiedz

18

Chyba powinienem odpowiedzieć na moje własne pytanie. Po drobnych badaniach i pomocy przyjaciela i szefa, Linusa, odkryłem, że muszę najpierw wymusić na terminalu przejście do trybu graficznego, a następnie wydrukować znaki specjalne, a następnie powrócić do trybu tekstowego. kod ascii do przełączania do trybu graficznego to 14, a 15 powróci do trybu tekstowego. więc tutaj jest kod w rubinie:

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

Naprawdę powinieneś zbadać ncurses i jego warianty. Istnieje wiele różnych powiązań językowych, chociaż pierwotnie był pisany dla C. Zapewnia dość duży zestaw bibliotek do tworzenia TUI (Text UIs) z oknami, menu, ramkami itp. Hit up wikipedia, aby zacząć od znalezienia inne odniesienia.

Powiązane problemy