From f045adf44194c1b6270d406420f89fc8c9191764 Mon Sep 17 00:00:00 2001 From: Thomas von Dein Date: Wed, 22 Nov 2023 13:33:26 +0100 Subject: [PATCH] added config file support to set custom colors --- cfg/config.go | 136 ++++++++++++++++++++++++++++++++++++++++++++++-- cmd/root.go | 10 +++- cmd/tablizer.go | 2 + config.hcl | 12 +++++ go.mod | 24 +++++++-- go.sum | 54 +++++++++++++++---- tablizer.1 | 3 +- tablizer.pod | 32 ++++++++++++ 8 files changed, 253 insertions(+), 20 deletions(-) create mode 100644 config.hcl diff --git a/cfg/config.go b/cfg/config.go index 82b1c9c..ce1bab5 100644 --- a/cfg/config.go +++ b/cfg/config.go @@ -19,20 +19,36 @@ package cfg import ( "errors" "fmt" + "log" "os" "regexp" "github.com/glycerine/zygomys/zygo" "github.com/gookit/color" + "github.com/hashicorp/hcl/v2/hclsimple" ) const DefaultSeparator string = `(\s\s+|\t)` -const Version string = "v1.0.17" +const Version string = "v1.1.0" var DefaultLoadPath string = os.Getenv("HOME") + "/.config/tablizer/lisp" +var DefaultConfigfile string = os.Getenv("HOME") + "/.config/tablizer/config" var VERSION string // maintained by -x +// public config, set via config file or using defaults +type Configuration struct { + FG string `hcl:"FG"` + BG string `hcl:"BG"` + HighlightFG string `hcl:"HighlightFG"` + HighlightBG string `hcl:"HighlightBG"` + NoHighlightFG string `hcl:"NoHighlightFG"` + NoHighlightBG string `hcl:"NoHighlightBG"` + HighlightHdrFG string `hcl:"HighlightHdrFG"` + HighlightHdrBG string `hcl:"HighlightHdrBG"` +} + +// internal config type Config struct { Debug bool NoNumbering bool @@ -68,6 +84,11 @@ type Config struct { // a path containing lisp scripts to be loaded on startup LispLoadPath string + + // config file, optional + Configfile string + + Configuration Configuration } // maps outputmode short flags to output mode, ie. -O => -o orgtbl @@ -103,8 +124,8 @@ type Sortmode struct { var ValidHooks []string // default color schemes -func Colors() map[color.Level]map[string]color.Color { - return map[color.Level]map[string]color.Color{ +func (c *Config) Colors() map[color.Level]map[string]color.Color { + colors := map[color.Level]map[string]color.Color{ color.Level16: { "bg": color.BgGreen, "fg": color.FgWhite, "hlbg": color.BgGray, "hlfg": color.FgWhite, @@ -114,13 +135,62 @@ func Colors() map[color.Level]map[string]color.Color { "hlbg": color.BgLightBlue, "hlfg": color.FgWhite, }, color.LevelRgb: { - // FIXME: maybe use something nicer "bg": color.BgLightGreen, "fg": color.FgWhite, "hlbg": color.BgHiGreen, "hlfg": color.FgWhite, "nohlbg": color.BgWhite, "nohlfg": color.FgLightGreen, "hdrbg": color.BgBlue, "hdrfg": color.FgWhite, }, } + + if len(c.Configuration.BG) > 0 { + colors[color.Level16]["bg"] = ColorStringToBGColor(c.Configuration.BG) + colors[color.Level256]["bg"] = ColorStringToBGColor(c.Configuration.BG) + colors[color.LevelRgb]["bg"] = ColorStringToBGColor(c.Configuration.BG) + } + + if len(c.Configuration.FG) > 0 { + colors[color.Level16]["fg"] = ColorStringToColor(c.Configuration.FG) + colors[color.Level256]["fg"] = ColorStringToColor(c.Configuration.FG) + colors[color.LevelRgb]["fg"] = ColorStringToColor(c.Configuration.FG) + } + + if len(c.Configuration.HighlightBG) > 0 { + colors[color.Level16]["hlbg"] = ColorStringToBGColor(c.Configuration.HighlightBG) + colors[color.Level256]["hlbg"] = ColorStringToBGColor(c.Configuration.HighlightBG) + colors[color.LevelRgb]["hlbg"] = ColorStringToBGColor(c.Configuration.HighlightBG) + } + + if len(c.Configuration.HighlightFG) > 0 { + colors[color.Level16]["hlfg"] = ColorStringToColor(c.Configuration.HighlightFG) + colors[color.Level256]["hlfg"] = ColorStringToColor(c.Configuration.HighlightFG) + colors[color.LevelRgb]["hlfg"] = ColorStringToColor(c.Configuration.HighlightFG) + } + + if len(c.Configuration.NoHighlightBG) > 0 { + colors[color.Level16]["nohlbg"] = ColorStringToBGColor(c.Configuration.NoHighlightBG) + colors[color.Level256]["nohlbg"] = ColorStringToBGColor(c.Configuration.NoHighlightBG) + colors[color.LevelRgb]["nohlbg"] = ColorStringToBGColor(c.Configuration.NoHighlightBG) + } + + if len(c.Configuration.NoHighlightFG) > 0 { + colors[color.Level16]["nohlfg"] = ColorStringToColor(c.Configuration.NoHighlightFG) + colors[color.Level256]["nohlfg"] = ColorStringToColor(c.Configuration.NoHighlightFG) + colors[color.LevelRgb]["nohlfg"] = ColorStringToColor(c.Configuration.NoHighlightFG) + } + + if len(c.Configuration.HighlightHdrBG) > 0 { + colors[color.Level16]["hdrbg"] = ColorStringToBGColor(c.Configuration.HighlightHdrBG) + colors[color.Level256]["hdrbg"] = ColorStringToBGColor(c.Configuration.HighlightHdrBG) + colors[color.LevelRgb]["hdrbg"] = ColorStringToBGColor(c.Configuration.HighlightHdrBG) + } + + if len(c.Configuration.HighlightHdrFG) > 0 { + colors[color.Level16]["hdrfg"] = ColorStringToColor(c.Configuration.HighlightHdrFG) + colors[color.Level256]["hdrfg"] = ColorStringToColor(c.Configuration.HighlightHdrFG) + colors[color.LevelRgb]["hdrfg"] = ColorStringToColor(c.Configuration.HighlightHdrFG) + } + + return colors } // find supported color mode, modifies config based on constants @@ -129,7 +199,8 @@ func (c *Config) DetermineColormode() { color.Disable() } else { level := color.TermColorLevel() - colors := Colors() + colors := c.Colors() + c.ColorStyle = color.New(colors[level]["bg"], colors[level]["fg"]) c.HighlightStyle = color.New(colors[level]["hlbg"], colors[level]["hlfg"]) c.NoHighlightStyle = color.New(colors[level]["nohlbg"], colors[level]["nohlfg"]) @@ -228,3 +299,58 @@ func (c *Config) PreparePattern(pattern string) error { return nil } + +func (c *Config) ParseConfigfile() error { + if path, err := os.Stat(c.Configfile); !os.IsNotExist(err) { + if !path.IsDir() { + configstring, err := os.ReadFile(path.Name()) + if err != nil { + return err + } + + err = hclsimple.Decode( + path.Name(), []byte(configstring), + nil, &c.Configuration, + ) + if err != nil { + log.Fatalf("Failed to load configuration: %s", err) + } + } + } + + return nil +} + +// translate color string to internal color value +func ColorStringToColor(colorname string) color.Color { + for name, color := range color.FgColors { + if name == colorname { + return color + } + } + + for name, color := range color.ExFgColors { + if name == colorname { + return color + } + } + + return color.Normal +} + +// same, for background colors +func ColorStringToBGColor(colorname string) color.Color { + for name, color := range color.BgColors { + if name == colorname { + return color + } + } + + for name, color := range color.ExBgColors { + if name == colorname { + return color + } + } + + return color.Normal +} diff --git a/cmd/root.go b/cmd/root.go index 6557ef3..1edfb43 100644 --- a/cmd/root.go +++ b/cmd/root.go @@ -92,6 +92,11 @@ func Execute() { } // Setup + err := conf.ParseConfigfile() + if err != nil { + return err + } + conf.CheckEnv() conf.PrepareModeFlags(modeflag) conf.PrepareSortFlags(sortmode) @@ -99,7 +104,7 @@ func Execute() { conf.ApplyDefaults() // setup lisp env, load plugins etc - err := lib.SetupLisp(&conf) + err = lib.SetupLisp(&conf) if err != nil { return err } @@ -146,6 +151,9 @@ func Execute() { // lisp options rootCmd.PersistentFlags().StringVarP(&conf.LispLoadPath, "load-path", "l", cfg.DefaultLoadPath, "Load path for lisp plugins (expects *.zy files)") + // config file + rootCmd.PersistentFlags().StringVarP(&conf.Configfile, "config", "f", cfg.DefaultConfigfile, "config file (default: ~/.config/tablizer/config)") + rootCmd.SetUsageTemplate(strings.TrimSpace(usage) + "\n") err := rootCmd.Execute() diff --git a/cmd/tablizer.go b/cmd/tablizer.go index 8811831..5886c0e 100644 --- a/cmd/tablizer.go +++ b/cmd/tablizer.go @@ -36,6 +36,7 @@ SYNOPSIS Other Flags: --completion Generate the autocompletion script for + -f, --config Configuration file (default: ~/.config/tablizer/config) -d, --debug Enable debugging -h, --help help for tablizer -m, --man Display manual page @@ -328,6 +329,7 @@ Sort Mode Flags (mutually exclusive): Other Flags: --completion Generate the autocompletion script for + -f, --config Configuration file (default: ~/.config/tablizer/config) -d, --debug Enable debugging -h, --help help for tablizer -m, --man Display manual page diff --git a/config.hcl b/config.hcl new file mode 100644 index 0000000..acd41e7 --- /dev/null +++ b/config.hcl @@ -0,0 +1,12 @@ +# supported colors: +# black, blue, cyan, darkGray, default, green, lightBlue, lightCyan, +# lightGreen, lightMagenta, lightRed, lightWhite, lightYellow, +# magenta, red, white, yellow +BG = "lightGreen" +FG = "white" +HighlightBG = "lightGreen" +HighlightFG = "white" +NoHighlightBG = "white" +NoHighlightFG = "lightGreen" +HighlightHdrBG = "red" +HighlightHdrFG = "white" diff --git a/go.mod b/go.mod index c59f01c..27df626 100644 --- a/go.mod +++ b/go.mod @@ -5,24 +5,40 @@ go 1.18 require ( github.com/alecthomas/repr v0.1.1 github.com/araddon/dateparse v0.0.0-20210429162001-6b43995a97de + github.com/glycerine/zygomys v5.1.2+incompatible github.com/gookit/color v1.5.2 + github.com/hashicorp/hcl/v2 v2.19.1 + github.com/lithammer/fuzzysearch v1.1.7 github.com/olekukonko/tablewriter v0.0.5 github.com/spf13/cobra v1.6.1 gopkg.in/yaml.v3 v3.0.1 ) require ( + github.com/agext/levenshtein v1.2.1 // indirect + github.com/apparentlymart/go-textseg/v13 v13.0.0 // indirect + github.com/apparentlymart/go-textseg/v15 v15.0.0 // indirect + github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect github.com/glycerine/blake2b v0.0.0-20151022103502-3c8c640cd7be // indirect + github.com/glycerine/goconvey v0.0.0-20190410193231-58a59202ab31 // indirect github.com/glycerine/greenpack v5.1.1+incompatible // indirect github.com/glycerine/liner v0.0.0-20160121172638-72909af234e0 // indirect - github.com/glycerine/zygomys v5.1.2+incompatible // indirect - github.com/lithammer/fuzzysearch v1.1.7 // indirect + github.com/google/go-cmp v0.5.9 // indirect + github.com/gopherjs/gopherjs v1.17.2 // indirect + github.com/jtolds/gls v4.20.0+incompatible // indirect + github.com/kr/pretty v0.3.1 // indirect + github.com/mitchellh/go-wordwrap v0.0.0-20150314170334-ad45545899c7 // indirect github.com/philhofer/fwd v1.1.2 // indirect + github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect github.com/shurcooL/go v0.0.0-20200502201357-93f07166e636 // indirect github.com/shurcooL/go-goon v1.0.0 // indirect + github.com/stretchr/testify v1.8.4 // indirect github.com/tinylib/msgp v1.1.8 // indirect github.com/ugorji/go/codec v1.2.11 // indirect - golang.org/x/text v0.8.0 // indirect + github.com/zclconf/go-cty v1.13.0 // indirect + golang.org/x/exp v0.0.0-20230905200255-921286631fa9 // indirect + golang.org/x/text v0.13.0 // indirect + gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15 // indirect ) require ( @@ -34,5 +50,5 @@ require ( github.com/rivo/uniseg v0.2.0 // indirect github.com/spf13/pflag v1.0.5 // indirect github.com/xo/terminfo v0.0.0-20220910002029-abceb7e1c41e // indirect - golang.org/x/sys v0.5.0 // indirect + golang.org/x/sys v0.12.0 // indirect ) diff --git a/go.sum b/go.sum index 9437625..6527d53 100644 --- a/go.sum +++ b/go.sum @@ -1,40 +1,71 @@ +github.com/agext/levenshtein v1.2.1 h1:QmvMAjj2aEICytGiWzmxoE0x2KZvE0fvmqMOfy2tjT8= +github.com/agext/levenshtein v1.2.1/go.mod h1:JEDfjyjHDjOF/1e4FlBE/PkbqA9OfWu2ki2W0IB5558= github.com/alecthomas/repr v0.1.1 h1:87P60cSmareLAxMc4Hro0r2RBY4ROm0dYwkJNpS4pPs= github.com/alecthomas/repr v0.1.1/go.mod h1:Fr0507jx4eOXV7AlPV6AVZLYrLIuIeSOWtW57eE/O/4= +github.com/apparentlymart/go-textseg/v13 v13.0.0 h1:Y+KvPE1NYz0xl601PVImeQfFyEy6iT90AvPUL1NNfNw= +github.com/apparentlymart/go-textseg/v13 v13.0.0/go.mod h1:ZK2fH7c4NqDTLtiYLvIkEghdlcqw7yxLeM89kiTRPUo= +github.com/apparentlymart/go-textseg/v15 v15.0.0 h1:uYvfpb3DyLSCGWnctWKGj857c6ew1u1fNQOlOtuGxQY= +github.com/apparentlymart/go-textseg/v15 v15.0.0/go.mod h1:K8XmNZdhEBkdlyDdvbmmsvpAG721bKi0joRfFdHIWJ4= github.com/araddon/dateparse v0.0.0-20210429162001-6b43995a97de h1:FxWPpzIjnTlhPwqqXc4/vE0f7GvRjuAsbW+HOIe8KnA= github.com/araddon/dateparse v0.0.0-20210429162001-6b43995a97de/go.mod h1:DCaWoUhZrYW9p1lxo/cm8EmUOOzAPSEZNGF2DK1dJgw= github.com/cpuguy83/go-md2man/v2 v2.0.2/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= +github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM= +github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/glycerine/blake2b v0.0.0-20151022103502-3c8c640cd7be h1:XBJdPGgA3qqhW+p9CANCAVdF7ZIXdu3pZAkypMkKAjE= github.com/glycerine/blake2b v0.0.0-20151022103502-3c8c640cd7be/go.mod h1:OSCrScrFAjcBObrulk6BEQlytA462OkG1UGB5NYj9kE= +github.com/glycerine/goconvey v0.0.0-20190410193231-58a59202ab31 h1:gclg6gY70GLy3PbkQ1AERPfmLMMagS60DKF78eWwLn8= +github.com/glycerine/goconvey v0.0.0-20190410193231-58a59202ab31/go.mod h1:Ogl1Tioa0aV7gstGFO7KhffUsb9M4ydbEbbxpcEDc24= github.com/glycerine/greenpack v5.1.1+incompatible h1:fDr9i6MkSGZmAy4VXPfJhW+SyK2/LNnzIp5nHyDiaIM= github.com/glycerine/greenpack v5.1.1+incompatible/go.mod h1:us0jVISAESGjsEuLlAfCd5nkZm6W6WQF18HPuOecIg4= github.com/glycerine/liner v0.0.0-20160121172638-72909af234e0 h1:4ZegphJXBTc4uFQ08UVoWYmQXorGa+ipXetUj83sMBc= github.com/glycerine/liner v0.0.0-20160121172638-72909af234e0/go.mod h1:AqJLs6UeoC65dnHxyCQ6MO31P5STpjcmgaANAU+No8Q= github.com/glycerine/zygomys v5.1.2+incompatible h1:jmcdmA3XPxgfOunAXFpipE9LQoUL6eX6d2mhYyjV4GE= github.com/glycerine/zygomys v5.1.2+incompatible/go.mod h1:i3SPKZpmy9dwF/3iWrXJ/ZLyzZucegwypwOmqRkUUaQ= +github.com/go-test/deep v1.0.3 h1:ZrJSEWsXzPOxaZnFteGEfooLba+ju3FYIbOrS+rQd68= +github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38= +github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/gookit/color v1.5.2 h1:uLnfXcaFjlrDnQDT+NCBcfhrXqYTx/rcCa6xn01Y8yI= github.com/gookit/color v1.5.2/go.mod h1:w8h4bGiHeeBpvQVePTutdbERIUf3oJE5lZ8HM0UgXyg= +github.com/gopherjs/gopherjs v1.17.2 h1:fQnZVsXk8uxXIStYb0N4bGk7jeyTalG/wsZjQ25dO0g= +github.com/gopherjs/gopherjs v1.17.2/go.mod h1:pRRIvn/QzFLrKfvEz3qUuEhtE/zLCWfreZ6J5gM2i+k= +github.com/hashicorp/hcl/v2 v2.19.1 h1://i05Jqznmb2EXqa39Nsvyan2o5XyMowW5fnCKW5RPI= +github.com/hashicorp/hcl/v2 v2.19.1/go.mod h1:ThLC89FV4p9MPW804KVbe/cEXoQ8NZEh+JtMeeGErHE= github.com/inconshreveable/mousetrap v1.0.1 h1:U3uMjPSQEBMNp1lFxmllqCPM6P5u/Xq7Pgzkat/bFNc= github.com/inconshreveable/mousetrap v1.0.1/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= +github.com/jtolds/gls v4.20.0+incompatible h1:xdiiI2gbIgH/gLH7ADydsJ1uDOEzR8yvV7C0MuV77Wo= +github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU= +github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= +github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk= +github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= +github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= +github.com/kylelemons/godebug v0.0.0-20170820004349-d65d576e9348 h1:MtvEpTB6LX3vkb4ax0b5D2DHbNAUsen0Gx5wZoq3lV4= github.com/lithammer/fuzzysearch v1.1.7 h1:q8rZNmBIUkqxsxb/IlwsXVbCoPIH/0juxjFHY0UIwhU= github.com/lithammer/fuzzysearch v1.1.7/go.mod h1:ZhIlfRGxnD8qa9car/yplC6GmnM14CS07BYAKJJBK2I= github.com/mattn/go-runewidth v0.0.9/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI= github.com/mattn/go-runewidth v0.0.10/go.mod h1:RAqKPSqVFrSLVXbA8x7dzmKdmGzieGRCM46jaSJTDAk= github.com/mattn/go-runewidth v0.0.14 h1:+xnbZSEeDbOIg5/mE6JF0w6n9duR1l3/WmbinWVwUuU= github.com/mattn/go-runewidth v0.0.14/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w= +github.com/mitchellh/go-wordwrap v0.0.0-20150314170334-ad45545899c7 h1:DpOJ2HYzCv8LZP15IdmG+YdwD2luVPHITV96TkirNBM= +github.com/mitchellh/go-wordwrap v0.0.0-20150314170334-ad45545899c7/go.mod h1:ZXFpozHsX6DPmq2I0TCekCxypsnAUbP2oI0UX1GXzOo= github.com/olekukonko/tablewriter v0.0.5 h1:P2Ga83D34wi1o9J6Wh1mRuqd4mF/x/lgBS7N7AbDhec= github.com/olekukonko/tablewriter v0.0.5/go.mod h1:hPp6KlRPjbx+hW8ykQs1w3UBbZlj6HuIJcUGPhkA7kY= github.com/philhofer/fwd v1.1.2 h1:bnDivRJ1EWPjUIRXV5KfORO897HTbpFAQddBdE8t7Gw= github.com/philhofer/fwd v1.1.2/go.mod h1:qkPdfjR2SIEbspLqpe1tO4n5yICnr2DY7mqEx2tUTP0= -github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= +github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U= +github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/rivo/uniseg v0.1.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= github.com/rivo/uniseg v0.2.0 h1:S1pD9weZBuJdFmowNwbpi7BJ8TNftyUImj/0WQi72jY= github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= +github.com/rogpeppe/go-internal v1.9.0 h1:73kH8U+JUqXU8lRuOHeVHaa/SZPifC7BkcraZVejAe8= +github.com/rogpeppe/go-internal v1.9.0/go.mod h1:WtVeX8xhTBvf0smdhujwtBcq4Qrzq/fJaraNFVN+nFs= github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= github.com/scylladb/termtables v0.0.0-20191203121021-c4c0b6d42ff4/go.mod h1:C1a7PQSMz9NShzorzCiG2fk9+xuCgLkPeCvMHYR2OWg= +github.com/sergi/go-diff v1.0.0 h1:Kpca3qRNrduNnOQeazBd0ysaKrUJiIuISHxogkT9RPQ= github.com/shurcooL/go v0.0.0-20200502201357-93f07166e636 h1:aSISeOcal5irEhJd1M+IrApc0PdcN7e7Aj4yuEnOrfQ= github.com/shurcooL/go v0.0.0-20200502201357-93f07166e636/go.mod h1:TDJrrUr11Vxrven61rcy3hJMUqaf/CLWYhHNPmT14Lk= github.com/shurcooL/go-goon v1.0.0 h1:BCQPvxGkHHJ4WpBO4m/9FXbITVIsvAm/T66cCcCGI7E= @@ -47,8 +78,9 @@ github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+ github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -github.com/stretchr/testify v1.8.0 h1:pSgiaMZlXftHpm5L7V1+rVB+AZJydKsMxsQBIJw4PKk= github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= +github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk= +github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= github.com/tinylib/msgp v1.1.8 h1:FCXC1xanKO4I8plpHGH2P7koL/RzZs12l/+r7vakfm0= github.com/tinylib/msgp v1.1.8/go.mod h1:qkpG+2ldGg4xRFmx+jfTvZPxfGFhi64BcnL9vkCm/Tw= github.com/ugorji/go/codec v1.2.11 h1:BMaWp1Bb6fHwEtbplGBGJ498wD+LKlNSl25MjdZY4dU= @@ -57,9 +89,12 @@ github.com/xo/terminfo v0.0.0-20210125001918-ca9a967f8778/go.mod h1:2MuV+tbUrU1z github.com/xo/terminfo v0.0.0-20220910002029-abceb7e1c41e h1:JVG44RsyaB9T2KIHavMF/ppJZNG9ZpyihvCd0w101no= github.com/xo/terminfo v0.0.0-20220910002029-abceb7e1c41e/go.mod h1:RbqR21r5mrJuqunuUZ/Dhy/avygyECGrLceyNeo4LiM= github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= +github.com/zclconf/go-cty v1.13.0 h1:It5dfKTTZHe9aeppbNOda3mN7Ag7sg6QkBNm6TkyFa0= +github.com/zclconf/go-cty v1.13.0/go.mod h1:YKQzy/7pZ7iq2jNFzy5go57xdxdWoLLpaEp4u238AE0= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= -golang.org/x/exp v0.0.0-20220909182711-5c715a9e8561 h1:MDc5xs78ZrZr3HMQugiXOAkSZtfTpbJLDr/lwfgO53E= +golang.org/x/exp v0.0.0-20230905200255-921286631fa9 h1:GoHiUyI/Tp2nVkLI2mCxVkOjsbSXD66ic0XW0js0R9g= +golang.org/x/exp v0.0.0-20230905200255-921286631fa9/go.mod h1:S2oDrQGGwySpoQPVqRShND87VCbxmc6bL1Yd2oYrm6k= golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= golang.org/x/mod v0.7.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= @@ -77,11 +112,10 @@ golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.1.0 h1:kunALQeHf1/185U1i0GOB/fy1IPRDDpuoOOqRReG57U= -golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.3.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.5.0 h1:MUK/U/4lj1t1oPg0HfuXDN/Z1wv31ZJ/YcPiGccS4DU= golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.12.0 h1:CM0HF96J0hcLAwsHPJZjfdNzs0gftsLfgKt57wWHJ0o= +golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.3.0/go.mod h1:q750SLmJuPmVoN1blW3UFBPREJfb1KmY3vwxfr+nFDA= @@ -91,16 +125,18 @@ golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= golang.org/x/text v0.5.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= -golang.org/x/text v0.8.0 h1:57P1ETyNKtuIjB4SRd15iJxuhj8Gc416Y78H3qgMh68= golang.org/x/text v0.8.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= +golang.org/x/text v0.13.0 h1:ablQoSUd0tRdKxZewP80B+BaqeKJuVhuRxj/dkrun3k= +golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= golang.org/x/tools v0.4.0/go.mod h1:UE5sM2OK9E/d67R0ANs2xJizIymRP5gJU295PvKXxjQ= golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15 h1:YR8cESwS4TdDjEe65xsg0ogRM/Nc3DYOhEAlW+xobZo= +gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/tablizer.1 b/tablizer.1 index d60e3f0..c8820a2 100644 --- a/tablizer.1 +++ b/tablizer.1 @@ -133,7 +133,7 @@ .\" ======================================================================== .\" .IX Title "TABLIZER 1" -.TH TABLIZER 1 "2023-11-21" "1" "User Commands" +.TH TABLIZER 1 "2023-11-22" "1" "User Commands" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l @@ -174,6 +174,7 @@ tablizer \- Manipulate tabular output of other programs \& \& Other Flags: \& \-\-completion Generate the autocompletion script for +\& \-f, \-\-config Configuration file (default: ~/.config/tablizer/config) \& \-d, \-\-debug Enable debugging \& \-h, \-\-help help for tablizer \& \-m, \-\-man Display manual page diff --git a/tablizer.pod b/tablizer.pod index 7c72985..8bfcfde 100644 --- a/tablizer.pod +++ b/tablizer.pod @@ -35,6 +35,7 @@ tablizer - Manipulate tabular output of other programs Other Flags: --completion Generate the autocompletion script for + -f, --config Configuration file (default: ~/.config/tablizer/config) -d, --debug Enable debugging -h, --help help for tablizer -m, --man Display manual page @@ -294,6 +295,37 @@ and source this file from your PowerShell profile. =back +=head1 CONFIGURATION AND COLORS + +YOu can put certain configuration values into a configuration file in +HCL format. By default tablizer looks for +C<$HOME/.config/tablizer/config>, but you can provide one using the +parameter C<-f>. + +In the configuration the following variables can be defined: + + BG = "lightGreen" + FG = "white" + HighlightBG = "lightGreen" + HighlightFG = "white" + NoHighlightBG = "white" + NoHighlightFG = "lightGreen" + HighlightHdrBG = "red" + HighlightHdrFG = "white" + +The following color definitions are available: + +black, blue, cyan, darkGray, default, green, lightBlue, lightCyan, +lightGreen, lightMagenta, lightRed, lightWhite, lightYellow, +magenta, red, white, yellow + +The Variables B and B are being used to highlight matches. The +other *FG and *BG variables are for colored table output (enabled with +the C<-L> parameter). + +Colorization can be turned off completely either by setting the +parameter C<-N> or the environment variable B to a true value. + =head1 BUGS In order to report a bug, unexpected behavior, feature requests