Skip to content

Latest commit

History

13 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

teks : awesome outputs for your commands

Build StatusGo Report CardGoDoc

teks brings painless output formating for your commands. Docker/Kubernetes provides custom formatting via go-templates. teks brings the power into any application providing a smooth intergration as a library.

teks is hevily inspired by Docker CLI

Install

teks is a go package. To use it execute

go get github.com/kasvith/teks

Available formatting options

NameUsage
jsonOutput is formatted as JSON
jsonPrettyOutputs a human-readable JSON with indented by 2 spaces
upperConvert string to uppercase
lowerConvert string to lowercase
splitSplits strings given by string and sep
joinJoins strings by given separator
titleConvert the first letter to uppercase of a string

Example

In this example we are going to printout details of few persons using teks.

package main
import (
"flag""fmt""io""os""text/template""github.com/kasvith/teks"
)
// Person represents a human being or whatevertypePersonstruct {
NamestringAgeintAddressstring
}
funcmain() {
varformatstring// default one will printout Name and Age in tabular formatflag.StringVar(&format, "format", "table {{.Name}}\t{{.Age}}", "format of output")
flag.Parse()
// whatever data you havepersons:= []Person{
{"Kasun", 24, "Earth"},
{"John Doe", 34, "Somewhere on earth"},
{"Spongebob", 30, "Under Sea"},
{"Harry Potter", 30, "4 Privet Drive, Little Whinging, Surrey"},
}
// create new contextctx:=teks.NewContext(os.Stdout, format)
// create a renderer function to match signature defined in teks.Rendererrenderer:=func(w io.Writer, t*template.Template) error {
for_, p:=rangepersons {
iferr:=t.Execute(w, p); err!=nil {
returnerr
}
_, _=w.Write([]byte{'\n'})
}
returnnil
}
// headers for tabletableHeaders:=map[string]string{
"Age": "Age",
"Name": "Name",
"Address": "Address",
}
//override header functions if you want//teks.HeaderFuncs = template.FuncMap{//	"split": strings.Split,//}// execute context and write to our outputiferr:=ctx.Write(renderer, tableHeaders); err!=nil {
fmt.Println("Error executing template:", err.Error())
}
}

Now run program as follows

➜ go run simple.go Name Age
Kasun 24
John Doe 34
Spongebob 30
Harry Potter 30

Let's pretty print Name and Address in tabular format

➜ go run simple.go --format "table {{.Name}}\t{{.Address}}"
Name Address
Kasun Earth
John Doe Somewhere on earth
Spongebob Under Sea
Harry Potter 4 Privet Drive, Little Whinging, Surrey

Let's make Name UPPERCASE

➜ go run simple.go --format "table {{upper .Name}}\t{{.Address}}"
NAME Address
KASUN Earth
JOHN DOE Somewhere on earth
SPONGEBOB Under Sea
HARRY POTTER 4 Privet Drive, Little Whinging, Surrey

You can change behavior of these headers by providing custom HeaderFuncs.

asciicast

Contribution

All contributions are welcome. Raise an Issue or a Pull Request

About

Easily get custom go template based outputs to your command-line tool. Like in docker/kubernetes

Topics

Resources

Stars

41 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages