terminal tables for nim
API docs available hereterminaltables has a very small API
newUnicodeTable
uses unicodeStyle
newAsciiTable
uses asciiStyle
Table style is configurable using Style
object. Here's an example of how asciiStyle
and unicodeStyle
are defined
let asciiStyle = Style(rowSeparator:"-", colSeparator:"|", cellEdgeLeft:"+", cellEdgeRight:"+", topLeft:"+", topRight:"+", bottomLeft:"-", bottomRight:"-", topRowSeparator:"-", bottomRowSeparator:"-", dashLineLeft:"+", dashLineRight:"+", dashLineColSeparatorLastRow:"+", dashLineColSeparatorTopRow:"+", dashLineColSeparator:"+")
let unicodeStyle = Style(rowSeparator:"─", colSeparator:"│", cellEdgeLeft:"├", cellEdgeRight:"┤", topLeft:"┌", topRight:"┐", bottomLeft:"└", bottomRight:"┘", topRowSeparator:"┬", bottomRowSeparator:"┴", dashLineLeft:"├", dashLineRight:"┤", dashLineColSeparatorLastRow:"┴", dashLineColSeparatorTopRow:"┬", dashLineColSeparator:"┼")
cell objects
with padding information.let t2 = newUnicodeTable()
t2.separateRows = false
t2.setHeaders(@["ID", "Name", "Fav animal", "Date"])
# t2.setHeaders(@[newCell("ID", pad=5), newCell("Name", rightpad=10), newCell("Fav animal", pad=2), newCell("Date", 5)])
t2.addRow(@["1", "xmonader", "Cat, Dog", "2018-10-22"])
t2.addRow(@["2", "ahmed", "Shark", "2015-12-6"])
t2.addRow(@["3", "dr who", "Humans", "1018-5-2"])
printTable(t2)
var t = newTerminalTable()
var width = 150
when not defined(js):
width = termColumns()
echo "termColumns: " & $termColumns()
# width of the table is the terminal COLUMNS - the amount of separators (columns + 1) multiplied by length of the separator
t.tableWidth = width - (t.columnsCount() * len($t.style.colSeparator)) - 10
t.setHeaders(@["ID", "Name", "Fav animal", "Date", "OK"])
t.addRow(@["1", "xmonader", "Cat, Dog", "2018-10-2", "yes"])
t.addRow(@["2", "ahmed", "Shark", "2018-10-2", "yes"])
t.addRow(@["3", "dr who", "Humans", "1018-5-2", "no"])
printTable(t)
t.tableWidth = 0
printTable(t)
t.tableWidth = 0
t.separateRows = false
printTable(t)
t.reset()
let t2 = newUnicodeTable()
t2.separateRows = false
t2.setHeaders(@[newCell("ID", pad=5), newCell("Name", rightpad=10), newCell("Fav animal", pad=2), newCell("Date", 5)])
t2.addRow(@["1", "xmonader", "Cat, Dog", "2018-10-22"])
t2.addRow(@["2", "ahmed", "Shark", "2015-12-6"])
t2.addRow(@["3", "dr who", "Humans", "1018-5-2"])
printTable(t2)
+------------------------+------------------------+------------------------+------------------------+------------------------+
| ID | Name | Fav animal | Date | OK |
+------------------------+------------------------+------------------------+------------------------+------------------------+
| 1 | xmonader | Cat, Dog | 2018-10-2 | yes |
+------------------------+------------------------+------------------------+------------------------+------------------------+
| 2 | ahmed | Shark | 2018-10-2 | yes |
+------------------------+------------------------+------------------------+------------------------+------------------------+
| 3 | dr who | Humans | 1018-5-2 | no |
-------------------------+------------------------+------------------------+------------------------+-------------------------
+----+----------+------------+-----------+-----+
| ID | Name | Fav animal | Date | OK |
+----+----------+------------+-----------+-----+
| 1 | xmonader | Cat, Dog | 2018-10-2 | yes |
+----+----------+------------+-----------+-----+
| 2 | ahmed | Shark | 2018-10-2 | yes |
+----+----------+------------+-----------+-----+
| 3 | dr who | Humans | 1018-5-2 | no |
-----+----------+------------+-----------+------
+----+----------+------------+-----------+-----+
| ID | Name | Fav animal | Date | OK |
+----+----------+------------+-----------+-----+
| 1 | xmonader | Cat, Dog | 2018-10-2 | yes |
| 2 | ahmed | Shark | 2018-10-2 | yes |
| 3 | dr who | Humans | 1018-5-2 | no |
-----+----------+------------+-----------+------
┌────────────┬───────────────────┬──────────────┬────────────────┐
│ ID │ Name │ Fav animal │ Date │
├────────────┼───────────────────┼──────────────┼────────────────┤
│ 1 │ xmonader │ Cat, Dog │ 2018-10-22 │
│ 2 │ ahmed │ Shark │ 2015-12-6 │
│ 3 │ dr who │ Humans │ 1018-5-2 │
└────────────┴───────────────────┴──────────────┴────────────────┘
Using custom styles is pretty easy
var t2 = newUnicodeTable()
t2.separateRows = false
t2.setHeaders(@[newCell("ID", pad=5), newCell("Name", rightpad=10), newCell("Fav animal", pad=2), newCell("Date", 5)])
t2.addRow(@["1", "xmonader", "Cat, Dog", "2018-10-22"])
t2.addRow(@["2", "ahmed", "Shark", "2015-12-6"])
t2.addRow(@["3", "dr who", "Humans", "1018-5-2"])
t2.separateRows = true
let testStyle = Style(rowSeparator:"┈", colSeparator:"┇", cellEdgeLeft:"├", cellEdgeRight:"┤", topLeft:"┏", topRight:"┓", bottomLeft:"└", bottomRight:"┘", topRowSeparator:"┬", bottomRowSeparator:"┴", dashLineLeft:"├", dashLineRight:"┤", dashLineColSeparatorLastRow:"┴", dashLineColSeparatorTopRow:"┬", dashLineColSeparator:"┼")
t2.style = testStyle
printTable(t2)
┏┈┈┈┈┈┈┈┈┈┈┈┈┬┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┬┈┈┈┈┈┈┈┈┈┈┈┈┈┈┬┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┓
┇ ID ┇ Name ┇ Fav animal ┇ Date ┇
├┈┈┈┈┈┈┈┈┈┈┈┈┼┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┼┈┈┈┈┈┈┈┈┈┈┈┈┈┈┼┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┤
┇ 1 ┇ xmonader ┇ Cat, Dog ┇ 2018-10-22 ┇
├┈┈┈┈┈┈┈┈┈┈┈┈┼┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┼┈┈┈┈┈┈┈┈┈┈┈┈┈┈┼┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┤
┇ 2 ┇ ahmed ┇ Shark ┇ 2015-12-6 ┇
├┈┈┈┈┈┈┈┈┈┈┈┈┼┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┼┈┈┈┈┈┈┈┈┈┈┈┈┈┈┼┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┤
┇ 3 ┇ dr who ┇ Humans ┇ 1018-5-2 ┇
└┈┈┈┈┈┈┈┈┈┈┈┈┴┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┴┈┈┈┈┈┈┈┈┈┈┈┈┈┈┴┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┘
Nimrod(已改名为 Nim)是一种静态类型的编译系统编程语言。它结合了 Python、Ada和Modula等成熟语言的成功理念。 高效的 Nim生成不依赖于虚拟机的本机无依赖可执行文件,这些可执行文件很小并且允许重新分配。 Nim编译器和生成的可执行文件支持所有主要平台,例如Windows,Linux,BSD和macOS。 在C ++和Rust的启发下,Nim的内存管理是确定性的,并且可以使用
nim-asciitables simple terminal ascii tables for nim DEPRECATION project is deprecated in favor for nim-terminaltables How to use asciitables has a very simple api setHeaders to set column names addRo
Dashing is a library to quickly create terminal-based dashboards in Nim. Dashing provides high-level components: vertical and horizontal charts, gauges, log panes, text windows and screen splitting. I
Gatabase Works with ARC, ORC, --panics:on, --experimental:strictFuncs. Use Gatabase is designed as 1 simplified Strong Static Typed Connection-Pooling Compile-Time SQL DSL Sugar. Nim mimics SQL. ~1000
allographer An asynchronous query builder library inspired by Laravel/PHP and Orator/Python for Nim Easy to access Rdb Query Builder import asyncdispatchimport allographer/connectionimport allographer
libssh2.nim Nim wrapper for libssh2 For document please refer to libssh2 website Requirements In order to use this wrapper, libssh2 must installed on your system: Mac OSX:$ port install libssh2 Ubuntu