Dans de nombreux documents en texte brut, les caractères de dessin de boîtes sont utilisés pour dessiner ces boîtes sous forme de figures et de tableaux. De tels exemples (de RFC 5766 ) sont présentés ci-dessous. Existe-t-il un meilleur moyen de dessiner ceci ( par exemple, un outil de ligne de commande Unix) , autre que l’utilisation de la méthode essai-erreur?
Exemples tirés de RFC 5766 :
+----------------------------+---------------------+
| TURN client to TURN server | TURN server to peer |
+----------------------------+---------------------+
| UDP | UDP |
| TCP | UDP |
| TLS over TCP | UDP |
+----------------------------+---------------------+
Et celui-ci, également de 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
Le site Web gratuit ASCIIflow vous permettra de dessiner des zones de texte, du texte, des lignes, des flèches, des lignes de forme libre, d’effacer, d’importer, d’exporter et même d’annuler/de rétablir. De quoi d'autre aurait-il besoin?
Voici ma merveilleuse création en utilisant cet outil:
+-------------------------------+
| |
| My first ASCII box |
| |
+---------+---------------------+
|
|
|
| My first ever ASCII arrow
|
|
|
+---------v----------------------+
| |
| My second ASCII box |
+--------------------------------+
Il est possible de dessiner de telles images avec des outils datant de 30 ans, à savoir pic , qui fait partie de la suite de commandes troff
. Le paquet groff
de gnu de ces jours contiendra la commande pic
. Le lien affiche une image d'une sortie PostScript typique, mais en utilisant nroff
ou les options appropriées, vous obtiendrez une version ascii-art. Voir le manuel de l'utilisateur (pdf) de 1991 pour des exemples.
Les tables de votre exemple sont probablement produites par cette même suite de commandes, en utilisant simplement tbl
qui produit des tables à partir de simples listes.
Pour une gui version, vous pouvez utiliser artist-mode
dans emacs pour dessiner des boîtes et des lignes fléchées, etc., à l’aide de la souris ou du clavier. Voir vidéo youtube démo.
Le dessin de boîtes ou d’autres formes comportant des caractères est appelé ASCIIart (également l’art ANSI ou ISO). Il existe de nombreux outils pour vous aider à créer ASCII art, tels que le rendu en ligne ASCIIFlow , dans ASCII , des applications telles que figlet, etc. Certains ont été implémentés en JavaScript et peuvent être exécutés dans un navigateur sur n'importe quel système d'exploitation.
Il n'y a rien de nouveau sous le soleil: la micrographie est un sous-ensemble de la calligraphie avec un long pedigree, utilisé depuis des centaines d'années, utilisant des lettres pour former des images, telles que le calendrier ci-dessous , une grande partie de l'image étant composée de lettres.
Si vous voulez seulement dessiner ASCII tableaux (comme dans votre premier exemple), voir Générateur de tableaux en texte brut - TablesGenerator.com pour un utilitaire Web qui vous aidera à créer des tableaux de données Nice:
Depuis la ligne de commande en utilisant terminal-table de GitHub .
Installez terminal-table
:
gem install terminal-table
Par exemple:
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
Exemple de sortie:
+----------------------------+---------------------+
| TURN client to TURN server | TURN server to peer |
+----------------------------+---------------------+
| UDP | UDP |
| TCP | UDP |
| TLS over TCP | UDP |
+----------------------------+---------------------+
Le même résultat peut être obtenu en utilisant python:
pip install terminaltables
par exemple:
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
J'ai ceci dans mon .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
En sélectionnant un rectangle en mode visuel bloc (<C-v>
) et en appuyant sur <leader>[
, vous placez des caractères de traçage à la limite de ce dernier, en les fusionnant avec tous les caractères de traçage préexistants. Si vous insistez plutôt sur ASCII +-|
, il devrait être facile à modifier.
Pour tous les utilisateurs Vim , deux plugins vénérables oldtimer sont disponibles:
Vous pouvez utiliser les deux plugins en parallèle, mais ne pas avoir les deux actifs en même temps.