2010-12-20 15 views
13

私は、純粋なテキスト表現よりも目に優しいテーブルを印刷しようとしています。基本的に私はこのような何かに変換したい:このような何かにANSIボックス文字を使用して端末にテーブルを描画する

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

:こちらを

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

は私がターミナルに見るもののスクリーンショットです:

in terminal looks like this

お知らせ行間のギャップ。私の問題は、ANSI印刷を使用する他のUnixツールが端末でうまく見える間、彼らは正しく接続していないということです。

tree in terminal

一緒に接続されているかの縦線の通知:私は私の端末でtree -Aを実行した場合たとえば、木は、 `私はこれを取得します。それは私がこのような何かを得る私はコピーしたときので、おかしいと私のテキストエディタにツリーの出力を貼り付けて、私のスクリプトを実行します。

tree in my code

もちろん、私は「末端でのANSI文字を印刷について何かが欠けているとcouldnよそれをグーグルで見つけてください。誰もがこのトピックについていくつかの光を当てることができますか?

答えて

18

私は自分の質問に答えるべきだと思います。ちょっとした研究と友人や上司、Linusの助けを借りて、まず端末をグラフィカルモードにしてから、特殊文字を印刷してテキストモードに戻らなければならないことがわかった。グラフィカルモードに切り替えるASCIIコードは14で、15がテキストモードに戻ります。 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) 
3

あなたは本当にncursesとその亜種を調べるべきです。それはもともとCのために書かれていましたが、さまざまな言語バインディングの範囲があります。ウィンドウ、メニュー、ボックス化されたボーダーなどでTUI(テキストUI)を生成するためのライブラリのかなりのスイートを提供します。 ウィキペディアいくつかの他の参考文献。

関連する問題