https://github.com/cldwalker/table
Display ascii tables for almost any data structure with ease.
https://github.com/cldwalker/table
Last synced: about 1 year ago
JSON representation
Display ascii tables for almost any data structure with ease.
- Host: GitHub
- URL: https://github.com/cldwalker/table
- Owner: cldwalker
- License: mit
- Created: 2012-06-11T13:03:01.000Z (almost 14 years ago)
- Default Branch: master
- Last Pushed: 2021-12-27T16:07:09.000Z (over 4 years ago)
- Last Synced: 2025-03-30T02:05:55.624Z (about 1 year ago)
- Language: Clojure
- Size: 52.7 KB
- Stars: 110
- Watchers: 7
- Forks: 17
- Open Issues: 5
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- Contributing: CONTRIBUTING.md
- License: LICENSE.txt
Awesome Lists containing this project
README
## Description
This library displays ascii tables that automatically fit in your terminal and handle most data structures.
[](https://travis-ci.org/cldwalker/table)
## Install
To have it in a lein project, add to your project.clj:
[table "0.5.0"]
To have it in a deps.edn project, add to your deps.edn:
{table/table {:mvn/version "0.5.0"}}
To use with [babashka](https://github.com/babashka/babashka), add to bb.edn.
## Usage
table handles rendering combinations of maps, vecs, lists and sets nested in one another.
$ lein repl
user=> (require '[table.core :as t])
nil
; These three yields the same table
user=> (t/table [["1" "2"] ["3" "4"]])
user=> (t/table '((1 2) (3 4)))
user=> (t/table #{[1 2] [3 4]})
+---+---+
| 1 | 2 |
+---+---+
| 3 | 4 |
+---+---+
user=> (t/table [{:a 11} {:a 3 :b 22}])
+----+----+
| a | b |
+----+----+
| 11 | |
| 3 | 22 |
+----+----+
table can render different styles of tables:
user=> (t/table [ [1 2] [3 4]] :style :unicode)
┌───┬───┐
│ 1 │ 2 │
├───┼───┤
│ 3 ╎ 4 │
└───┴───┘
user=> (t/table [ [1 2] [3 4]] :style :org)
|---+---|
| 1 | 2 |
|---+---|
| 3 | 4 |
|---+---|
# Yes, these will generate tables for github's markdown
user=> (t/table [ [10 20] [3 4]] :style :github-markdown)
| 10 | 20 |
|--- | ---|
| 3 | 4 |
table can also render custom styles:
user> (t/table [[10 20] [3 4]] :style {:top ["◤ " " ▼ " " ◥"]
:top-dash "✈︎"
:middle ["▶︎ " " " " ◀︎"]
:dash "✂︎"
:bottom ["◣ " " ▲ " " ◢"]
:bottom-dash "☺︎"
:header-walls [" " " " " "]
:body-walls [" " " " " "] })
◤ ✈︎✈︎ ▼ ✈︎✈︎ ◥
10 20
▶︎ ✂︎✂︎ ✂︎✂︎ ◀︎
3 4
◣ ☺︎☺︎ ▲ ☺︎☺︎ ◢
table can handle plain maps and vectors of course:
user=> (t/table (meta #'doc))
+-----------+---------------------------------------------------------------+
| key | value |
+-----------+---------------------------------------------------------------+
| :macro | true |
| :ns | clojure.repl |
| :name | doc |
| :arglists | ([name]) |
| :added | 1.0 |
| :doc | Prints documentation for a var or special form given its name |
| :line | 120 |
| :file | clojure/repl.clj |
+-----------+---------------------------------------------------------------+
user=> (t/table (seq (.getURLs (java.lang.ClassLoader/getSystemClassLoader))))
+--------------------------------------------------+
| value |
+--------------------------------------------------|
| file:/Users/me/code/gems/table/test/ |
| file:/Users/me/code/gems/table/src/ |
| file:/Users/me/code/gems/table/dev-resources |
| file:/Users/me/code/gems/table/resources |
| file:/Users/me/code/gems/table/target/classes/ |
...
## Configuration
If your terminal width isn't being auto-detected, you can execute this in your shell before using
the repl: `export COLUMNS`. Alternatively you can bind/alter table.width/\*width\* to your desired
width.
## Similar libraries
* Clojure 1.5.0 comes with a similar function clojure.pprint/print-table
* [doric](https://github.com/joegallo/doric) is more full-featured than print-table, supporting
formats other than text.
table improves on these alternatives by rendering more data structures, supporting
different ascii style tables and resizing to fit your terminal.
## Bugs/Issues
Please report them [on github](http://github.com/cldwalker/table/issues).
## Contributing
[See here](https://tagaholic.me/contributing.html)
## TODO
* Handle no rows
* Handle vecs with different sizes
* Escape tabs