tavole di disegno in terminale utilizzando caratteri di casella ANSI
Domanda
Sto cercando di stampare una tabella che è più piacevole per l'occhio rispetto alla rappresentazione del testo di esso. fondamentalmente voglio convertire qualcosa di simile:
+-----+--------+
| age | weight |
+-----+--------+
| 10 | 100 |
| 80 | 500 |
+-----+--------+
a qualcosa di simile:
┌─────┬────────┐
| age | weight |
├─────┼────────┤
│ 10 │ 100 │
│ 80 │ 500 │
└─────┴────────┘
qui è lo screenshot di quello che vedo nel terminale:
Nota gli spazi tra le righe. Il mio problema è che non si connettono correttamente, mentre altri strumenti Unix che utilizzano ANSI stampa look raffinato nel terminale. Ad esempio, l'albero, se corro tree -A
nel mio terminale `ottengo questo:
Si noti come le linee verticali sono collegati tra loro. E 'buffo perché quando Copio e incollo l'uscita di un albero nel mio editor di testo ed eseguire il mio script ottengo qualcosa di simile:
Ovviamente mi manca qualcosa sulla stampa caratteri ANSI nel terminale e non riusciva a trovare nulla da googling. Qualcuno può far luce su questo argomento?
Soluzione
Credo che dovrei rispondere alla mia domanda. Dopo una piccola ricerca e l'aiuto di un amico e capo, Linus, ho scoperto che ho bisogno di forzare il terminale di andare in modalità grafica, poi stampare i caratteri speciali e poi tornare alla modalità testo. il codice ASCII per passare alla modalità grafica è 14 e 15 si ritorna alla modalità testo. ecco il codice in Ruby:
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)
Altri suggerimenti
È davvero dovrebbe indagare ncurses e le sue varianti. Ci sono una serie di diversi attacchi la lingua, anche se è stato originariamente scritto per C. Esso fornisce una suite abbastanza consistente di librerie per la produzione di Tuis (interfacce utente di testo) con finestre, menu, bordi in scatola ecc Hit fino wikipedia per cominciare a trovare alcuni altri riferimenti.