多くのプレーンテキスト文書では、これらのボックスを図や表で描画するためにボックス描画文字が使用されています。そのような例( RFC 5766 からのもの)を以下に示します。試行錯誤法を使用する以外に、これを描画するためのより良い方法(、例えば、Unixコマンドラインツール)はありますか?
RFC 5766 からの例:
+----------------------------+---------------------+
| TURN client to TURN server | TURN server to peer |
+----------------------------+---------------------+
| UDP | UDP |
| TCP | UDP |
| TLS over TCP | UDP |
+----------------------------+---------------------+
そしてこれも、 RFC 5766 からです。
Peer A
Server-Reflexive +---------+
Transport Address | |
192.0.2.150:32102 | |
| /| |
TURN | / ^| Peer A |
Client's Server | / || |
Host Transport Transport | // || |
Address Address | // |+---------+
10.1.1.2:49721 192.0.2.15:3478 |+-+ // Peer A
| | ||N| / Host Transport
| +-+ | ||A|/ Address
| | | | v|T| 192.168.100.2:49582
| | | | /+-+
+---------+| | | |+---------+ / +---------+
| || |N| || | // | |
| TURN |v | | v| TURN |/ | |
| Client |----|A|----------| Server |------------------| Peer B |
| | | |^ | |^ ^| |
| | |T|| | || || |
+---------+ | || +---------+| |+---------+
| || | |
| || | |
+-+| | |
| | |
| | |
Client's | Peer B
Server-Reflexive Relayed Transport
Transport Address Transport Address Address
192.0.2.1:7000 192.0.2.15:50000 192.0.2.210:49191
Figure 1
無料の ASCIIflow Webサイト では、テキストボックス、テキスト、線、矢印、フリーフォームの線、消去、インポート、エクスポート、さらには元に戻す/やり直しもできます。他に何が必要でしょうか?
これが私のこのツールを使った素晴らしい作品です。
+-------------------------------+
| |
| My first ASCII box |
| |
+---------+---------------------+
|
|
|
| My first ever ASCII arrow
|
|
|
+---------v----------------------+
| |
| My second ASCII box |
+--------------------------------+
30年前のツール、つまり pic を使ってこのような絵を描くことができます。これはtroff
コマンドスイートの一部です。最近のgnuのgroff
パッケージはpic
コマンドを含みます。リンクはいくつかの典型的なPostScript出力の絵を示していますが、nroff
または適切なオプションを使用すると、ASCIIアート版が得られます。例として1991年の ユーザーマニュアル (pdf)を見てください。
あなたの例のテーブルは、おそらく、単純なリストからテーブルを生成するtbl
を使用して、これと同じコマンドスイートによって生成されます。
guiバージョンでは、マウスやキーボードを使って、emacsでartist-mode
を使ってボックスや矢印の付いた線などを描くことができます。 youtube video のデモをご覧ください。
文字を使用したボックスやその他の図形の描画は、 ASCIIアート (ANSIまたはISOアート)とも呼ばれます。オンライン ASCIIFlow 、 ASCIIでの画像レンダリング 、 figletなどのアプリケーション)など、ASCIIアートの作成を支援する多数のツールがあります。など 一部は JavaScriptで実装されています であり、任意のOSのブラウザで実行できます。
太陽の下では新しいものは何もありません-顕微鏡写真は、何百年もの間使用されている書道のサブセットであり、文字を使用して 以下のカレンダー などの画像を形成し、多くの画像が形成されています手紙から。
(最初の例のように)ASCIIテーブルを描きたいだけの場合は、 プレーンテキストテーブルジェネレータ - TablesGenerator.com をご覧ください。 Niceデータテーブルの作成に役立つユーティリティ
コマンドラインからGitHubの terminal-tableを使用して 。
terminal-table
をインストールしてください。
gem install terminal-table
例えば:
irb
require 'terminal-table'
rows = []
rows << ['UDP', 'UDP']
rows << ['TCP', 'UDP']
rows << ['TLS over TCP ', 'UDP']
table = Terminal::Table.new :headings => ['TURN client to TURN server', 'TURN server to peer'], :rows => rows
puts table
出力例:
+----------------------------+---------------------+
| TURN client to TURN server | TURN server to peer |
+----------------------------+---------------------+
| UDP | UDP |
| TCP | UDP |
| TLS over TCP | UDP |
+----------------------------+---------------------+
Pythonを使用しても同じ出力が得られます。
pip install terminaltables
例えば:
from terminaltables import AsciiTable
table_data = [
['TURN client to TURN server', 'TURN server to peer'],
['UDP', 'UDP'],
['TCP', 'UDP'],
['TLS over TCP', 'UDP']
]
table = AsciiTable(table_data)
print table.table
私の.vimrc
にこれがあります。
vn<silent> <leader>[ :<c-u>cal<sid>rect(1)<cr>
vn<silent> <leader>] :<c-u>cal<sid>rect(2)<cr>
let s:h=split(' ╶╺╵└┕╹┖┗╴─╼┘┴┶┚┸┺╸╾━┙┵┷┛┹┻╷┌┍│├┝╿┞┡┐┬┮┤┼┾┦╀╄┑┭┯┥┽┿┩╃╇╻┎┏╽┟┢┃┠┣┒┰┲┧╁╆┨╂╊┓┱┳┪╅╈┫╉╋','\zs')
let s:e=map(range(81),'[v:val/27%3,v:val/9%3,v:val/3%3,v:val%3]') "base-3 encode
fu s:rect(x) "x:thickness
if visualmode()!=#"\<c-v>"|retu|en
let s=&sel|let&sel='inclusive'|let[ls,cs]=[[line("'<"),line("'>")],[virtcol("'<"),virtcol("'>")]]|let&sel=s
let[l0,l1,c0,c1]=[min(ls),max(ls),min(cs),max(cs)]
let a=map(map(getline(l0,l1),"split(v:val,'\\zs')"),"extend(v:val,repeat([' '],max([0,c1-len(v:val)])))")
let x=a:x|let[V,H]=[[x,0,x,0],[0,x,0,x]] "vertical and horizontal line
"b:list of changes as [line,column,bitmask]
if l0<l1&&c0<c1|let b=[[l0,c0,[x,0,0,x]],[l0,c1,[x,x,0,0]],[l1,c0,[0,0,x,x]],[l1,c1,[0,x,x,0]]]
let b+=map(range(l0+1,l1-1),'[v:val,c0,V]')+map(range(l0+1,l1-1),'[v:val,c1,V]')
let b+=map(range(c0+1,c1-1),'[l0,v:val,H]')+map(range(c0+1,c1-1),'[l1,v:val,H]')
elsei l0<l1 |let b=[[l0,c0,[x,0,0,0]],[l1,c0,[0,0,x,0]]]+map(range(l0+1,l1-1),'[v:val,c0,V]')
elsei c0<c1 |let b=[[l0,c0,[0,0,0,x]],[l0,c1,[0,x,0,0]]]+map(range(c0+1,c1-1),'[l0,v:val,H]')
el |let b=[]|en
for[l,c,m]in b
let i=index(s:h,a[l-l0][c-1])
if i>=0|let z=map(copy(s:e[i]),'max([v:val,m[v:key]])')|let a[l-l0][c-1]=s:h[27*z[0]+9*z[1]+3*z[2]+z[3]]|en
endfo
cal setline(l0,map(a,"join(v:val,'')"))
endf
ブロック表示モード(<C-v>
)で長方形を選択して<leader>[
を押すと、その境界に線画文字が配置され、既存の線画文字とマージされます。代わりに純粋なASCII +-|
を主張するのであれば、変更は簡単なはずです。
そこにいるすべてのVimユーザーのために、2つの由緒あるoldtimerプラグインが利用可能です:
両方のプラグインを同時に使用することはできますが、両方を同時にアクティブにすることはできません。