Tabulate is a command line utility that converts standard input into pretty-printed tables. It is also a Tcl
module that does the same with lists of lists. It was inspired by
https://github.com/joepvd/table
. Tabulate works in Tcl 8.5+ and
Jim Tcl.
It is currently developed as part of the
Sqawk repository.
Download the latest version:
curl https://raw.githubusercontent.com/dbohdan/sqawk/master/lib/tabulate.tcl
> tabulate.tcl Use example edit
Command line
$ ps | jimsh ./tabulate.tcl
┌─────┬─────┬────────┬─────┐
│ PID │ TTY │ TIME │ CMD │
├─────┼─────┼────────┼─────┤
│20583│pts/3│00:00:01│ zsh │
├─────┼─────┼────────┼─────┤
│23301│pts/3│00:00:00│ ne │
├─────┼─────┼────────┼─────┤
│28007│pts/3│00:00:00│ ps │
├─────┼─────┼────────┼─────┤
│28008│pts/3│00:00:00│jimsh│
└─────┴─────┴────────┴─────┘
tclsh
% source lib/tabulate.tcl
% ::tabulate::tabulate -data {{Hello World}}
┌─────┬─────┐
│Hello│World│
└─────┴─────┘
::tabulate::options edit
Tabulate's code includes a DSL for processing
named arguments stored in
args.
Use example
proc ::tabulate::tabulate args {
options::process $args \
store -data in data \
store -style in style default $::tabulate::style::default \
store -alignments or -align in align default {} \
store -margins in margins default 0
# ...
}
Discussion edit
JM 2015-08-03: I am probably doing something wrong:
% info tclversion
8.6
% info patchlevel
8.6.4
% source tabulate.tcl
% ::tabulate::tabulate -data {{Hello World!}}
wrong # args: should be "dict exists dictionary key ?key ...?"
dbohdan 2015-08-03: I cannot reproduce that on my system by just following your transcript. Could you file an issue at
https://github.com/dbohdan/sqawk/issues
?
JM 2015-08-03: never mind, I found the error on my side...there were spaces after the "\" line continuations, hence breaking the command. Somehow I got that from the copy-paste from the source.
+------------------------------+
¦Thanks¦for¦sharing¦ ¦ ¦
+------+---+-------+------+----¦
¦ This ¦ is¦ a ¦second¦line¦
+------------------------------+
APN 2015-11-20: Neat and useful. One small caveat - you have to remember to use
-encoding utf-8 with the source command since the style::default variable embeds graphics as raw UTF-8 characters. For cases where you don't have control of the source command used to pull in the tabulate.tcl file (for example with
critcl), below is the equivalent using escape sequences.
variable default {
top {
left \U250C
padding \U2500
separator \U252C
right \U2510
}
separator {
left \U251C
padding \U2500
separator \U253C
right \U2524
}
row {
left \U2502
padding { }
separator \U2502
right \U2502
}
bottom {
left \U2514
padding \U2500
separator \U2534
right \U2518
}
}
See
https://github.com/dbohdan/sqawk/blob/master/lib/tabulate.tcl
.
See also edit