fixed -X output in combination with -c

This commit is contained in:
2022-10-11 09:11:46 +02:00
parent 6ae4a1b6d9
commit b9ed7d8cb7
5 changed files with 49 additions and 16 deletions

2
go.mod
View File

@@ -7,12 +7,12 @@ require (
github.com/gookit/color v1.5.2 github.com/gookit/color v1.5.2
github.com/olekukonko/tablewriter v0.0.5 github.com/olekukonko/tablewriter v0.0.5
github.com/spf13/cobra v1.5.0 github.com/spf13/cobra v1.5.0
github.com/xo/terminfo v0.0.0-20210125001918-ca9a967f8778
) )
require ( require (
github.com/inconshreveable/mousetrap v1.0.0 // indirect github.com/inconshreveable/mousetrap v1.0.0 // indirect
github.com/mattn/go-runewidth v0.0.9 // indirect github.com/mattn/go-runewidth v0.0.9 // indirect
github.com/spf13/pflag v1.0.5 // indirect github.com/spf13/pflag v1.0.5 // indirect
github.com/xo/terminfo v0.0.0-20210125001918-ca9a967f8778 // indirect
golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44 // indirect golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44 // indirect
) )

View File

@@ -17,6 +17,11 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
package lib package lib
import (
"github.com/gookit/color"
//"github.com/xo/terminfo"
)
var ( var (
// command line flags // command line flags
Debug bool Debug bool
@@ -35,11 +40,30 @@ var (
InvertMatch bool InvertMatch bool
Pattern string Pattern string
// FIXME: make configurable somehow, config file or ENV /*
MatchFG string = "black" // see https://github.com/gookit/color FIXME: make configurable somehow, config file or ENV
MatchBG string = "green" see https://github.com/gookit/color will be set by
io.ProcessFiles() according to currently supported
color mode.
*/
MatchFG string
MatchBG string
NoColor bool NoColor bool
// colors to be used per supported color mode
Colors = map[color.Level]map[string]string{
color.Level16: map[string]string{
"bg": "green", "fg": "black",
},
color.Level256: map[string]string{
"bg": "lightGreen", "fg": "black",
},
color.LevelRgb: map[string]string{
// FIXME: maybe use something nicer
"bg": "lightGreen", "fg": "black",
},
}
// used for validation // used for validation
validOutputmodes = "(orgtbl|markdown|extended|ascii)" validOutputmodes = "(orgtbl|markdown|extended|ascii)"

View File

@@ -53,7 +53,10 @@ func PrepareColumns() error {
func numberizeHeaders(data *Tabdata) { func numberizeHeaders(data *Tabdata) {
// prepare headers: add numbers to headers // prepare headers: add numbers to headers
numberedHeaders := []string{} numberedHeaders := []string{}
maxwidth := 0 // start from scratch, so we only look at displayed column widths
for i, head := range data.headers { for i, head := range data.headers {
headlen := 0
if len(Columns) > 0 { if len(Columns) > 0 {
// -c specified // -c specified
if !contains(UseColumns, i+1) { if !contains(UseColumns, i+1) {
@@ -63,11 +66,21 @@ func numberizeHeaders(data *Tabdata) {
} }
if NoNumbering { if NoNumbering {
numberedHeaders = append(numberedHeaders, head) numberedHeaders = append(numberedHeaders, head)
headlen = len(head)
} else { } else {
numberedHeaders = append(numberedHeaders, fmt.Sprintf("%s(%d)", head, i+1)) numhead := fmt.Sprintf("%s(%d)", head, i+1)
headlen = len(numhead)
numberedHeaders = append(numberedHeaders, numhead)
}
if headlen > maxwidth {
maxwidth = headlen
} }
} }
data.headers = numberedHeaders data.headers = numberedHeaders
if data.maxwidthHeader != maxwidth && maxwidth > 0 {
data.maxwidthHeader = maxwidth
}
} }
func reduceColumns(data *Tabdata) { func reduceColumns(data *Tabdata) {

View File

@@ -29,6 +29,10 @@ func ProcessFiles(args []string) error {
if !isTerminal(os.Stdout) { if !isTerminal(os.Stdout) {
color.Disable() color.Disable()
} else {
level := color.TermColorLevel()
MatchFG = Colors[level]["fg"]
MatchBG = Colors[level]["bg"]
} }
if err != nil { if err != nil {

View File

@@ -137,22 +137,14 @@ func printAsciiData(data *Tabdata) {
*/ */
func printExtendedData(data *Tabdata) { func printExtendedData(data *Tabdata) {
// needed for data output // needed for data output
format := fmt.Sprintf("%%%ds: %%s\n", data.maxwidthHeader) // FIXME: re-calculate if -c has been set format := fmt.Sprintf("%%%ds: %%s\n", data.maxwidthHeader)
if len(data.entries) > 0 { if len(data.entries) > 0 {
var idx int
for _, entry := range data.entries { for _, entry := range data.entries {
idx = 0
for i, value := range entry { for i, value := range entry {
if len(Columns) > 0 { color.Printf(format, data.headers[i], value)
if !contains(UseColumns, i+1) {
continue
}
}
color.Printf(format, data.headers[idx], value)
idx++
} }
fmt.Println() fmt.Println()
} }
} }