mirror of
https://codeberg.org/scip/tablizer.git
synced 2025-12-18 21:11:03 +01:00
Compare commits
22 Commits
fix/ci-win
...
v1.4.0
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
eae39bbff1 | ||
| 40fbf17779 | |||
| 832841c1ff | |||
| 5726ed3f7f | |||
|
|
5e52cd9ce0 | ||
|
|
8c7c89c9ea | ||
| 25aa172c41 | |||
|
|
c436a92bcb | ||
|
|
65732a58d0 | ||
|
|
ace7f76210 | ||
| fda365bd8b | |||
| c1cfc08c23 | |||
| 150fdddd2a | |||
| 6b659773f1 | |||
| 74d82fa356 | |||
| 200f1f32f8 | |||
| 768a19b4d6 | |||
|
|
dc718392b6 | ||
|
|
e8f4fef41c | ||
| 82f54c120d | |||
|
|
2d5799e2f2 | ||
| 8e33cadcaa |
8
.github/workflows/ci.yaml
vendored
8
.github/workflows/ci.yaml
vendored
@@ -4,10 +4,8 @@ jobs:
|
|||||||
build:
|
build:
|
||||||
strategy:
|
strategy:
|
||||||
matrix:
|
matrix:
|
||||||
version: ['1.22']
|
version: ['1.23']
|
||||||
# windows-latest removed, see:
|
os: [ubuntu-latest, macos-latest, windows-latest]
|
||||||
# https://github.com/rogpeppe/go-internal/issues/284
|
|
||||||
os: [ubuntu-latest, macos-latest]
|
|
||||||
name: Build
|
name: Build
|
||||||
runs-on: ${{ matrix.os }}
|
runs-on: ${{ matrix.os }}
|
||||||
steps:
|
steps:
|
||||||
@@ -32,7 +30,7 @@ jobs:
|
|||||||
steps:
|
steps:
|
||||||
- uses: actions/setup-go@v5
|
- uses: actions/setup-go@v5
|
||||||
with:
|
with:
|
||||||
go-version: 1.22
|
go-version: 1.23
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v4
|
||||||
- name: golangci-lint
|
- name: golangci-lint
|
||||||
uses: golangci/golangci-lint-action@v6
|
uses: golangci/golangci-lint-action@v6
|
||||||
|
|||||||
4
Makefile
4
Makefile
@@ -64,12 +64,12 @@ install: buildlocal
|
|||||||
clean:
|
clean:
|
||||||
rm -rf $(tool) releases coverage.out
|
rm -rf $(tool) releases coverage.out
|
||||||
|
|
||||||
test:
|
test: clean
|
||||||
go test ./... $(OPTS)
|
go test ./... $(OPTS)
|
||||||
|
|
||||||
singletest:
|
singletest:
|
||||||
@echo "Call like this: 'make singletest TEST=TestPrepareColumns MOD=lib'"
|
@echo "Call like this: 'make singletest TEST=TestPrepareColumns MOD=lib'"
|
||||||
go test -run $(TEST) github.com/tlinden/tablizer/$(MOD)
|
go test -run $(TEST) github.com/tlinden/tablizer/$(MOD) $(OPTS)
|
||||||
|
|
||||||
cover-report:
|
cover-report:
|
||||||
go test ./... -cover -coverprofile=coverage.out
|
go test ./... -cover -coverprofile=coverage.out
|
||||||
|
|||||||
@@ -35,6 +35,8 @@ Output Flags (mutually exclusive):
|
|||||||
-C, --csv Enable CSV output
|
-C, --csv Enable CSV output
|
||||||
-A, --ascii Default output mode, ascii tabular
|
-A, --ascii Default output mode, ascii tabular
|
||||||
-L, --hightlight-lines Use alternating background colors for tables
|
-L, --hightlight-lines Use alternating background colors for tables
|
||||||
|
-y, --yank-columns Yank specified columns (separated by ,) to clipboard,
|
||||||
|
space separated
|
||||||
|
|
||||||
Sort Mode Flags (mutually exclusive):
|
Sort Mode Flags (mutually exclusive):
|
||||||
-a, --sort-age sort according to age (duration) string
|
-a, --sort-age sort according to age (duration) string
|
||||||
|
|||||||
@@ -28,7 +28,7 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
const DefaultSeparator string = `(\s\s+|\t)`
|
const DefaultSeparator string = `(\s\s+|\t)`
|
||||||
const Version string = "v1.3.2"
|
const Version string = "v1.4.0"
|
||||||
const MAXPARTS = 2
|
const MAXPARTS = 2
|
||||||
|
|
||||||
var DefaultConfigfile = os.Getenv("HOME") + "/.config/tablizer/config"
|
var DefaultConfigfile = os.Getenv("HOME") + "/.config/tablizer/config"
|
||||||
@@ -66,10 +66,12 @@ type Filter struct {
|
|||||||
// internal config
|
// internal config
|
||||||
type Config struct {
|
type Config struct {
|
||||||
Debug bool
|
Debug bool
|
||||||
NoNumbering bool
|
Numbering bool
|
||||||
NoHeaders bool
|
NoHeaders bool
|
||||||
Columns string
|
Columns string
|
||||||
UseColumns []int
|
UseColumns []int
|
||||||
|
YankColumns string
|
||||||
|
UseYankColumns []int
|
||||||
Separator string
|
Separator string
|
||||||
OutputMode int
|
OutputMode int
|
||||||
InvertMatch bool
|
InvertMatch bool
|
||||||
@@ -330,10 +332,10 @@ func (conf *Config) PrepareTransposers() error {
|
|||||||
func (conf *Config) CheckEnv() {
|
func (conf *Config) CheckEnv() {
|
||||||
// check for environment vars, command line flags have precedence,
|
// check for environment vars, command line flags have precedence,
|
||||||
// NO_COLOR is being checked by the color module itself.
|
// NO_COLOR is being checked by the color module itself.
|
||||||
if !conf.NoNumbering {
|
if !conf.Numbering {
|
||||||
_, set := os.LookupEnv("T_NO_HEADER_NUMBERING")
|
_, set := os.LookupEnv("T_HEADER_NUMBERING")
|
||||||
if set {
|
if set {
|
||||||
conf.NoNumbering = true
|
conf.Numbering = true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -348,7 +350,7 @@ func (conf *Config) CheckEnv() {
|
|||||||
func (conf *Config) ApplyDefaults() {
|
func (conf *Config) ApplyDefaults() {
|
||||||
// mode specific defaults
|
// mode specific defaults
|
||||||
if conf.OutputMode == Yaml || conf.OutputMode == CSV {
|
if conf.OutputMode == Yaml || conf.OutputMode == CSV {
|
||||||
conf.NoNumbering = true
|
conf.Numbering = false
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -125,7 +125,7 @@ func Execute() {
|
|||||||
// options
|
// options
|
||||||
rootCmd.PersistentFlags().BoolVarP(&conf.Debug, "debug", "d", false,
|
rootCmd.PersistentFlags().BoolVarP(&conf.Debug, "debug", "d", false,
|
||||||
"Enable debugging")
|
"Enable debugging")
|
||||||
rootCmd.PersistentFlags().BoolVarP(&conf.NoNumbering, "no-numbering", "n", false,
|
rootCmd.PersistentFlags().BoolVarP(&conf.Numbering, "numbering", "n", false,
|
||||||
"Disable header numbering")
|
"Disable header numbering")
|
||||||
rootCmd.PersistentFlags().BoolVarP(&conf.NoHeaders, "no-headers", "H", false,
|
rootCmd.PersistentFlags().BoolVarP(&conf.NoHeaders, "no-headers", "H", false,
|
||||||
"Disable header display")
|
"Disable header display")
|
||||||
@@ -147,6 +147,8 @@ func Execute() {
|
|||||||
"Custom field separator")
|
"Custom field separator")
|
||||||
rootCmd.PersistentFlags().StringVarP(&conf.Columns, "columns", "c", "",
|
rootCmd.PersistentFlags().StringVarP(&conf.Columns, "columns", "c", "",
|
||||||
"Only show the speficied columns (separated by ,)")
|
"Only show the speficied columns (separated by ,)")
|
||||||
|
rootCmd.PersistentFlags().StringVarP(&conf.YankColumns, "yank-columns", "y", "",
|
||||||
|
"Yank the speficied columns (separated by ,) to the clipboard")
|
||||||
rootCmd.PersistentFlags().StringVarP(&conf.TransposeColumns, "transpose-columns", "T", "",
|
rootCmd.PersistentFlags().StringVarP(&conf.TransposeColumns, "transpose-columns", "T", "",
|
||||||
"Transpose the speficied columns (separated by ,)")
|
"Transpose the speficied columns (separated by ,)")
|
||||||
|
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ SYNOPSIS
|
|||||||
Operational Flags:
|
Operational Flags:
|
||||||
-c, --columns string Only show the speficied columns (separated by ,)
|
-c, --columns string Only show the speficied columns (separated by ,)
|
||||||
-v, --invert-match select non-matching rows
|
-v, --invert-match select non-matching rows
|
||||||
-n, --no-numbering Disable header numbering
|
-n, --numbering Enable header numbering
|
||||||
-N, --no-color Disable pattern highlighting
|
-N, --no-color Disable pattern highlighting
|
||||||
-H, --no-headers Disable headers display
|
-H, --no-headers Disable headers display
|
||||||
-s, --separator string Custom field separator
|
-s, --separator string Custom field separator
|
||||||
@@ -30,6 +30,8 @@ SYNOPSIS
|
|||||||
-C, --csv Enable CSV output
|
-C, --csv Enable CSV output
|
||||||
-A, --ascii Default output mode, ascii tabular
|
-A, --ascii Default output mode, ascii tabular
|
||||||
-L, --hightlight-lines Use alternating background colors for tables
|
-L, --hightlight-lines Use alternating background colors for tables
|
||||||
|
-y, --yank-columns Yank specified columns (separated by ,) to clipboard,
|
||||||
|
space separated
|
||||||
|
|
||||||
Sort Mode Flags (mutually exclusive):
|
Sort Mode Flags (mutually exclusive):
|
||||||
-a, --sort-age sort according to age (duration) string
|
-a, --sort-age sort according to age (duration) string
|
||||||
@@ -284,12 +286,24 @@ DESCRIPTION
|
|||||||
markdown which prints a Markdown table, yaml, which prints yaml encoding
|
markdown which prints a Markdown table, yaml, which prints yaml encoding
|
||||||
and CSV mode, which prints a comma separated value file.
|
and CSV mode, which prints a comma separated value file.
|
||||||
|
|
||||||
|
PUT FIELDS TO CLIPBOARD
|
||||||
|
You can let tablizer put fields to the clipboard using the option "-y".
|
||||||
|
This best fits the use-case when the result of your filtering yields
|
||||||
|
just one row. For example:
|
||||||
|
|
||||||
|
cloudctl cluster ls | tablizer -yid matchbox
|
||||||
|
|
||||||
|
If "matchbox" matches one cluster, you can immediately use the id of
|
||||||
|
that cluster somewhere else and paste it. Of course, if there are
|
||||||
|
multiple matches, then all id's will be put into the clipboard separated
|
||||||
|
by one space.
|
||||||
|
|
||||||
ENVIRONMENT VARIABLES
|
ENVIRONMENT VARIABLES
|
||||||
tablizer supports certain environment variables which use can use to
|
tablizer supports certain environment variables which use can use to
|
||||||
influence program behavior. Commandline flags have always precedence
|
influence program behavior. Commandline flags have always precedence
|
||||||
over environment variables.
|
over environment variables.
|
||||||
|
|
||||||
<T_NO_HEADER_NUMBERING> - disable numbering of header fields, like -n.
|
<T_HEADER_NUMBERING> - enable numbering of header fields, like -n.
|
||||||
<T_COLUMNS> - comma separated list of columns to output, like -c
|
<T_COLUMNS> - comma separated list of columns to output, like -c
|
||||||
<NO_COLORS> - disable colorization of matches, like -N
|
<NO_COLORS> - disable colorization of matches, like -N
|
||||||
|
|
||||||
@@ -414,7 +428,7 @@ Usage:
|
|||||||
Operational Flags:
|
Operational Flags:
|
||||||
-c, --columns string Only show the speficied columns (separated by ,)
|
-c, --columns string Only show the speficied columns (separated by ,)
|
||||||
-v, --invert-match select non-matching rows
|
-v, --invert-match select non-matching rows
|
||||||
-n, --no-numbering Disable header numbering
|
-n, --numbering Enable header numbering
|
||||||
-N, --no-color Disable pattern highlighting
|
-N, --no-color Disable pattern highlighting
|
||||||
-H, --no-headers Disable headers display
|
-H, --no-headers Disable headers display
|
||||||
-s, --separator string Custom field separator
|
-s, --separator string Custom field separator
|
||||||
@@ -433,6 +447,8 @@ Output Flags (mutually exclusive):
|
|||||||
-C, --csv Enable CSV output
|
-C, --csv Enable CSV output
|
||||||
-A, --ascii Default output mode, ascii tabular
|
-A, --ascii Default output mode, ascii tabular
|
||||||
-L, --hightlight-lines Use alternating background colors for tables
|
-L, --hightlight-lines Use alternating background colors for tables
|
||||||
|
-y, --yank-columns Yank specified columns (separated by ,) to clipboard,
|
||||||
|
space separated
|
||||||
|
|
||||||
Sort Mode Flags (mutually exclusive):
|
Sort Mode Flags (mutually exclusive):
|
||||||
-a, --sort-age sort according to age (duration) string
|
-a, --sort-age sort according to age (duration) string
|
||||||
|
|||||||
20
go.mod
20
go.mod
@@ -1,6 +1,8 @@
|
|||||||
module github.com/tlinden/tablizer
|
module github.com/tlinden/tablizer
|
||||||
|
|
||||||
go 1.22
|
go 1.23
|
||||||
|
|
||||||
|
toolchain go1.23.5
|
||||||
|
|
||||||
require (
|
require (
|
||||||
github.com/alecthomas/repr v0.4.0
|
github.com/alecthomas/repr v0.4.0
|
||||||
@@ -9,8 +11,9 @@ require (
|
|||||||
github.com/hashicorp/hcl/v2 v2.23.0
|
github.com/hashicorp/hcl/v2 v2.23.0
|
||||||
github.com/lithammer/fuzzysearch v1.1.8
|
github.com/lithammer/fuzzysearch v1.1.8
|
||||||
github.com/olekukonko/tablewriter v0.0.5
|
github.com/olekukonko/tablewriter v0.0.5
|
||||||
github.com/rogpeppe/go-internal v1.13.1
|
github.com/rogpeppe/go-internal v1.14.1
|
||||||
github.com/spf13/cobra v1.8.1
|
github.com/spf13/cobra v1.9.1
|
||||||
|
github.com/tiagomelo/go-clipboard v0.1.2
|
||||||
gopkg.in/yaml.v3 v3.0.1
|
gopkg.in/yaml.v3 v3.0.1
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -22,13 +25,14 @@ require (
|
|||||||
github.com/inconshreveable/mousetrap v1.1.0 // indirect
|
github.com/inconshreveable/mousetrap v1.1.0 // indirect
|
||||||
github.com/mattn/go-runewidth v0.0.16 // indirect
|
github.com/mattn/go-runewidth v0.0.16 // indirect
|
||||||
github.com/mitchellh/go-wordwrap v0.0.0-20150314170334-ad45545899c7 // indirect
|
github.com/mitchellh/go-wordwrap v0.0.0-20150314170334-ad45545899c7 // indirect
|
||||||
|
github.com/pkg/errors v0.9.1 // indirect
|
||||||
github.com/rivo/uniseg v0.2.0 // indirect
|
github.com/rivo/uniseg v0.2.0 // indirect
|
||||||
github.com/spf13/pflag v1.0.5 // indirect
|
github.com/spf13/pflag v1.0.6 // indirect
|
||||||
github.com/xo/terminfo v0.0.0-20220910002029-abceb7e1c41e // indirect
|
github.com/xo/terminfo v0.0.0-20220910002029-abceb7e1c41e // indirect
|
||||||
github.com/zclconf/go-cty v1.13.3 // indirect
|
github.com/zclconf/go-cty v1.13.3 // indirect
|
||||||
golang.org/x/mod v0.18.0 // indirect
|
golang.org/x/mod v0.21.0 // indirect
|
||||||
golang.org/x/sync v0.7.0 // indirect
|
golang.org/x/sync v0.8.0 // indirect
|
||||||
golang.org/x/sys v0.21.0 // indirect
|
golang.org/x/sys v0.26.0 // indirect
|
||||||
golang.org/x/text v0.11.0 // indirect
|
golang.org/x/text v0.11.0 // indirect
|
||||||
golang.org/x/tools v0.22.0 // indirect
|
golang.org/x/tools v0.26.0 // indirect
|
||||||
)
|
)
|
||||||
|
|||||||
34
go.sum
34
go.sum
@@ -8,7 +8,7 @@ github.com/apparentlymart/go-textseg/v15 v15.0.0 h1:uYvfpb3DyLSCGWnctWKGj857c6ew
|
|||||||
github.com/apparentlymart/go-textseg/v15 v15.0.0/go.mod h1:K8XmNZdhEBkdlyDdvbmmsvpAG721bKi0joRfFdHIWJ4=
|
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 h1:FxWPpzIjnTlhPwqqXc4/vE0f7GvRjuAsbW+HOIe8KnA=
|
||||||
github.com/araddon/dateparse v0.0.0-20210429162001-6b43995a97de/go.mod h1:DCaWoUhZrYW9p1lxo/cm8EmUOOzAPSEZNGF2DK1dJgw=
|
github.com/araddon/dateparse v0.0.0-20210429162001-6b43995a97de/go.mod h1:DCaWoUhZrYW9p1lxo/cm8EmUOOzAPSEZNGF2DK1dJgw=
|
||||||
github.com/cpuguy83/go-md2man/v2 v2.0.4/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o=
|
github.com/cpuguy83/go-md2man/v2 v2.0.6/go.mod h1:oOW0eioCTA6cOiMLiUPZOpcVxMig6NIQQ7OS05n1F4g=
|
||||||
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
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 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.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
||||||
@@ -32,23 +32,27 @@ github.com/mitchellh/go-wordwrap v0.0.0-20150314170334-ad45545899c7 h1:DpOJ2HYzC
|
|||||||
github.com/mitchellh/go-wordwrap v0.0.0-20150314170334-ad45545899c7/go.mod h1:ZXFpozHsX6DPmq2I0TCekCxypsnAUbP2oI0UX1GXzOo=
|
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 h1:P2Ga83D34wi1o9J6Wh1mRuqd4mF/x/lgBS7N7AbDhec=
|
||||||
github.com/olekukonko/tablewriter v0.0.5/go.mod h1:hPp6KlRPjbx+hW8ykQs1w3UBbZlj6HuIJcUGPhkA7kY=
|
github.com/olekukonko/tablewriter v0.0.5/go.mod h1:hPp6KlRPjbx+hW8ykQs1w3UBbZlj6HuIJcUGPhkA7kY=
|
||||||
|
github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
|
||||||
|
github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
|
||||||
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
|
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
|
||||||
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
|
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
|
||||||
github.com/rivo/uniseg v0.1.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc=
|
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 h1:S1pD9weZBuJdFmowNwbpi7BJ8TNftyUImj/0WQi72jY=
|
||||||
github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc=
|
github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc=
|
||||||
github.com/rogpeppe/go-internal v1.13.1 h1:KvO1DLK/DRN07sQ1LQKScxyZJuNnedQ5/wKSR38lUII=
|
github.com/rogpeppe/go-internal v1.14.1 h1:UQB4HGPB6osV0SQTLymcB4TgvyWu6ZyliaW0tI/otEQ=
|
||||||
github.com/rogpeppe/go-internal v1.13.1/go.mod h1:uMEvuHeurkdAXX61udpOXGD/AzZDWNMNyH2VO9fmH0o=
|
github.com/rogpeppe/go-internal v1.14.1/go.mod h1:MaRKkUm5W0goXpeCfT7UZI6fk/L7L7so1lCWt35ZSgc=
|
||||||
github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
|
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/scylladb/termtables v0.0.0-20191203121021-c4c0b6d42ff4/go.mod h1:C1a7PQSMz9NShzorzCiG2fk9+xuCgLkPeCvMHYR2OWg=
|
||||||
github.com/spf13/cobra v1.8.1 h1:e5/vxKd/rZsfSJMUX1agtjeTDf+qv1/JdBF8gg5k9ZM=
|
github.com/spf13/cobra v1.9.1 h1:CXSaggrXdbHK9CF+8ywj8Amf7PBRmPCOJugH954Nnlo=
|
||||||
github.com/spf13/cobra v1.8.1/go.mod h1:wHxEcudfqmLYa8iTfL+OuZPbBZkmvliBWKIezN3kD9Y=
|
github.com/spf13/cobra v1.9.1/go.mod h1:nDyEzZ8ogv936Cinf6g1RU9MRY64Ir93oCnqb9wxYW0=
|
||||||
github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA=
|
github.com/spf13/pflag v1.0.6 h1:jFzHGLGAlb3ruxLB8MhbI6A8+AQX/2eW4qeyNZXNp2o=
|
||||||
github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
|
github.com/spf13/pflag v1.0.6/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
|
||||||
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
|
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
|
||||||
github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
|
github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
|
||||||
github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk=
|
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/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=
|
||||||
|
github.com/tiagomelo/go-clipboard v0.1.2 h1:Ph2icR0vZRIj3v5ExvsGweBwsbbDUTlS6HoF40MkQD8=
|
||||||
|
github.com/tiagomelo/go-clipboard v0.1.2/go.mod h1:kXtjJBIMimZaGbxmcKZ8+JqK+acSNf5tAJiChlZBOr8=
|
||||||
github.com/xo/terminfo v0.0.0-20220910002029-abceb7e1c41e h1:JVG44RsyaB9T2KIHavMF/ppJZNG9ZpyihvCd0w101no=
|
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/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/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY=
|
||||||
@@ -62,8 +66,8 @@ golang.org/x/exp v0.0.0-20220909182711-5c715a9e8561 h1:MDc5xs78ZrZr3HMQugiXOAkSZ
|
|||||||
golang.org/x/exp v0.0.0-20220909182711-5c715a9e8561/go.mod h1:cyybsKvd6eL0RnXn6p/Grxp8F5bW7iYuBgsNCOHpMYE=
|
golang.org/x/exp v0.0.0-20220909182711-5c715a9e8561/go.mod h1:cyybsKvd6eL0RnXn6p/Grxp8F5bW7iYuBgsNCOHpMYE=
|
||||||
golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4=
|
golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4=
|
||||||
golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=
|
golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=
|
||||||
golang.org/x/mod v0.18.0 h1:5+9lSbEzPSdWkH32vYPBwEpX8KwDbM52Ud9xBUvNlb0=
|
golang.org/x/mod v0.21.0 h1:vvrHzRwRfVKSiLrG+d4FMl/Qi4ukBCE6kZlTUkDYRT0=
|
||||||
golang.org/x/mod v0.18.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c=
|
golang.org/x/mod v0.21.0/go.mod h1:6SkKJ3Xj0I0BrPOZoBy3bdMptDDU9oJrpohJ3eWZ1fY=
|
||||||
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
|
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
|
||||||
golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
|
golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
|
||||||
golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c=
|
golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c=
|
||||||
@@ -71,16 +75,16 @@ golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs=
|
|||||||
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||||
golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||||
golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||||
golang.org/x/sync v0.7.0 h1:YsImfSBoP9QPYL0xyKJPq0gcaJdG3rInoqxTWbfQu9M=
|
golang.org/x/sync v0.8.0 h1:3NFvSEYkUoMifnESzZl15y791HH1qU2xm6eCJU5ZPXQ=
|
||||||
golang.org/x/sync v0.7.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
|
golang.org/x/sync v0.8.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
|
||||||
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||||
golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
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-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.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
golang.org/x/sys v0.21.0 h1:rF+pYz3DAGSQAxAu1CbC7catZg4ebC4UIeIhKxBZvws=
|
golang.org/x/sys v0.26.0 h1:KHjCJyddX0LoSTb3J+vWpupP9p0oznkqVk/IfjymZbo=
|
||||||
golang.org/x/sys v0.21.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
|
golang.org/x/sys v0.26.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
|
||||||
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
|
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.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
|
||||||
golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k=
|
golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k=
|
||||||
@@ -95,8 +99,8 @@ golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGm
|
|||||||
golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
|
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.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc=
|
||||||
golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU=
|
golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU=
|
||||||
golang.org/x/tools v0.22.0 h1:gqSGLZqv+AI9lIQzniJ0nZDRG5GBPsSi+DRNHWNz6yA=
|
golang.org/x/tools v0.26.0 h1:v/60pFQmzmT9ExmjDv2gGIfi3OqfKoEP6I5+umXlbnQ=
|
||||||
golang.org/x/tools v0.22.0/go.mod h1:aCwcsjqvq7Yqt6TNyX7QMU2enbQ/Gt0bo6krSeEri+c=
|
golang.org/x/tools v0.26.0/go.mod h1:TPVVj70c7JJ3WCazhD8OdXcZg/og+b9+tH/KxylGwH0=
|
||||||
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
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 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM=
|
||||||
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
||||||
|
|||||||
@@ -77,6 +77,14 @@ func PrepareColumns(conf *cfg.Config, data *Tabdata) error {
|
|||||||
|
|
||||||
conf.UseColumns = usecolumns
|
conf.UseColumns = usecolumns
|
||||||
|
|
||||||
|
// -y columns
|
||||||
|
useyankcolumns, err := PrepareColumnVars(conf.YankColumns, data)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
conf.UseYankColumns = useyankcolumns
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -200,13 +208,13 @@ func numberizeAndReduceHeaders(conf cfg.Config, data *Tabdata) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if conf.NoNumbering {
|
if conf.Numbering {
|
||||||
numberedHeaders = append(numberedHeaders, head)
|
|
||||||
headlen = len(head)
|
|
||||||
} else {
|
|
||||||
numhead := fmt.Sprintf("%s(%d)", head, idx+1)
|
numhead := fmt.Sprintf("%s(%d)", head, idx+1)
|
||||||
headlen = len(numhead)
|
headlen = len(numhead)
|
||||||
numberedHeaders = append(numberedHeaders, numhead)
|
numberedHeaders = append(numberedHeaders, numhead)
|
||||||
|
} else {
|
||||||
|
numberedHeaders = append(numberedHeaders, head)
|
||||||
|
headlen = len(head)
|
||||||
}
|
}
|
||||||
|
|
||||||
if headlen > maxwidth {
|
if headlen > maxwidth {
|
||||||
|
|||||||
@@ -216,21 +216,21 @@ func TestNumberizeHeaders(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
var tests = []struct {
|
var tests = []struct {
|
||||||
expect []string
|
expect []string
|
||||||
columns []int
|
columns []int
|
||||||
nonum bool
|
numberize bool
|
||||||
}{
|
}{
|
||||||
{[]string{"ONE(1)", "TWO(2)", "THREE(3)"}, []int{1, 2, 3}, false},
|
{[]string{"ONE(1)", "TWO(2)", "THREE(3)"}, []int{1, 2, 3}, true},
|
||||||
{[]string{"ONE(1)", "TWO(2)"}, []int{1, 2}, false},
|
{[]string{"ONE(1)", "TWO(2)"}, []int{1, 2}, true},
|
||||||
{[]string{"ONE", "TWO"}, []int{1, 2}, true},
|
{[]string{"ONE", "TWO"}, []int{1, 2}, false},
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, testdata := range tests {
|
for _, testdata := range tests {
|
||||||
testname := fmt.Sprintf("numberize-headers-columns-%+v-nonum-%t",
|
testname := fmt.Sprintf("numberize-headers-columns-%+v-nonum-%t",
|
||||||
testdata.columns, testdata.nonum)
|
testdata.columns, testdata.numberize)
|
||||||
|
|
||||||
t.Run(testname, func(t *testing.T) {
|
t.Run(testname, func(t *testing.T) {
|
||||||
conf := cfg.Config{Columns: "x", UseColumns: testdata.columns, NoNumbering: testdata.nonum}
|
conf := cfg.Config{Columns: "x", UseColumns: testdata.columns, Numbering: testdata.numberize}
|
||||||
usedata := data
|
usedata := data
|
||||||
numberizeAndReduceHeaders(conf, &usedata)
|
numberizeAndReduceHeaders(conf, &usedata)
|
||||||
if !reflect.DeepEqual(usedata.headers, testdata.expect) {
|
if !reflect.DeepEqual(usedata.headers, testdata.expect) {
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
Copyright © 2022 Thomas von Dein
|
Copyright © 2022-2025 Thomas von Dein
|
||||||
|
|
||||||
This program is free software: you can redistribute it and/or modify
|
This program is free software: you can redistribute it and/or modify
|
||||||
it under the terms of the GNU General Public License as published by
|
it under the terms of the GNU General Public License as published by
|
||||||
@@ -38,6 +38,9 @@ func printData(writer io.Writer, conf cfg.Config, data *Tabdata) {
|
|||||||
// by, independently if it's being used for display or not.
|
// by, independently if it's being used for display or not.
|
||||||
sortTable(conf, data)
|
sortTable(conf, data)
|
||||||
|
|
||||||
|
// put one or more columns into clipboard
|
||||||
|
yankColumns(conf, data)
|
||||||
|
|
||||||
// add numbers to headers and remove those we're not interested in
|
// add numbers to headers and remove those we're not interested in
|
||||||
numberizeAndReduceHeaders(conf, data)
|
numberizeAndReduceHeaders(conf, data)
|
||||||
|
|
||||||
|
|||||||
@@ -65,7 +65,7 @@ var tests = []struct {
|
|||||||
sortby string // empty == default
|
sortby string // empty == default
|
||||||
column int // sort by this column (numbers start by 1)
|
column int // sort by this column (numbers start by 1)
|
||||||
desc bool // sort in descending order, default == ascending
|
desc bool // sort in descending order, default == ascending
|
||||||
nonum bool // hide numbering
|
numberize bool // add header numbering
|
||||||
mode int // shell, orgtbl, etc. empty == default: ascii
|
mode int // shell, orgtbl, etc. empty == default: ascii
|
||||||
usecol []int // columns to display, empty == display all
|
usecol []int // columns to display, empty == display all
|
||||||
usecolstr string // for testname, must match usecol
|
usecolstr string // for testname, must match usecol
|
||||||
@@ -73,8 +73,9 @@ var tests = []struct {
|
|||||||
}{
|
}{
|
||||||
// --------------------- Default settings mode tests ``
|
// --------------------- Default settings mode tests ``
|
||||||
{
|
{
|
||||||
mode: cfg.ASCII,
|
mode: cfg.ASCII,
|
||||||
name: "default",
|
numberize: true,
|
||||||
|
name: "default",
|
||||||
expect: `
|
expect: `
|
||||||
NAME(1) DURATION(2) COUNT(3) WHEN(4)
|
NAME(1) DURATION(2) COUNT(3) WHEN(4)
|
||||||
beta 1d10h5m1s 33 3/1/2014
|
beta 1d10h5m1s 33 3/1/2014
|
||||||
@@ -82,8 +83,9 @@ alpha 4h35m 170 2013-Feb-03
|
|||||||
ceta 33d12h 9 06/Jan/2008 15:04:05 -0700`,
|
ceta 33d12h 9 06/Jan/2008 15:04:05 -0700`,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
mode: cfg.CSV,
|
mode: cfg.CSV,
|
||||||
name: "csv",
|
numberize: false,
|
||||||
|
name: "csv",
|
||||||
expect: `
|
expect: `
|
||||||
NAME,DURATION,COUNT,WHEN
|
NAME,DURATION,COUNT,WHEN
|
||||||
beta,1d10h5m1s,33,3/1/2014
|
beta,1d10h5m1s,33,3/1/2014
|
||||||
@@ -91,8 +93,9 @@ alpha,4h35m,170,2013-Feb-03
|
|||||||
ceta,33d12h,9,06/Jan/2008 15:04:05 -0700`,
|
ceta,33d12h,9,06/Jan/2008 15:04:05 -0700`,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "default",
|
name: "orgtbl",
|
||||||
mode: cfg.Orgtbl,
|
numberize: true,
|
||||||
|
mode: cfg.Orgtbl,
|
||||||
expect: `
|
expect: `
|
||||||
+---------+-------------+----------+----------------------------+
|
+---------+-------------+----------+----------------------------+
|
||||||
| NAME(1) | DURATION(2) | COUNT(3) | WHEN(4) |
|
| NAME(1) | DURATION(2) | COUNT(3) | WHEN(4) |
|
||||||
@@ -103,8 +106,9 @@ ceta,33d12h,9,06/Jan/2008 15:04:05 -0700`,
|
|||||||
+---------+-------------+----------+----------------------------+`,
|
+---------+-------------+----------+----------------------------+`,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "default",
|
name: "markdown",
|
||||||
mode: cfg.Markdown,
|
mode: cfg.Markdown,
|
||||||
|
numberize: true,
|
||||||
expect: `
|
expect: `
|
||||||
| NAME(1) | DURATION(2) | COUNT(3) | WHEN(4) |
|
| NAME(1) | DURATION(2) | COUNT(3) | WHEN(4) |
|
||||||
|---------|-------------|----------|----------------------------|
|
|---------|-------------|----------|----------------------------|
|
||||||
@@ -113,18 +117,18 @@ ceta,33d12h,9,06/Jan/2008 15:04:05 -0700`,
|
|||||||
| ceta | 33d12h | 9 | 06/Jan/2008 15:04:05 -0700 |`,
|
| ceta | 33d12h | 9 | 06/Jan/2008 15:04:05 -0700 |`,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "default",
|
name: "shell",
|
||||||
mode: cfg.Shell,
|
mode: cfg.Shell,
|
||||||
nonum: true,
|
numberize: false,
|
||||||
expect: `
|
expect: `
|
||||||
NAME="beta" DURATION="1d10h5m1s" COUNT="33" WHEN="3/1/2014"
|
NAME="beta" DURATION="1d10h5m1s" COUNT="33" WHEN="3/1/2014"
|
||||||
NAME="alpha" DURATION="4h35m" COUNT="170" WHEN="2013-Feb-03"
|
NAME="alpha" DURATION="4h35m" COUNT="170" WHEN="2013-Feb-03"
|
||||||
NAME="ceta" DURATION="33d12h" COUNT="9" WHEN="06/Jan/2008 15:04:05 -0700"`,
|
NAME="ceta" DURATION="33d12h" COUNT="9" WHEN="06/Jan/2008 15:04:05 -0700"`,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "default",
|
name: "yaml",
|
||||||
mode: cfg.Yaml,
|
mode: cfg.Yaml,
|
||||||
nonum: true,
|
numberize: false,
|
||||||
expect: `
|
expect: `
|
||||||
entries:
|
entries:
|
||||||
- count: 33
|
- count: 33
|
||||||
@@ -141,8 +145,9 @@ entries:
|
|||||||
when: "06/Jan/2008 15:04:05 -0700"`,
|
when: "06/Jan/2008 15:04:05 -0700"`,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "default",
|
name: "extended",
|
||||||
mode: cfg.Extended,
|
mode: cfg.Extended,
|
||||||
|
numberize: true,
|
||||||
expect: `
|
expect: `
|
||||||
NAME(1): beta
|
NAME(1): beta
|
||||||
DURATION(2): 1d10h5m1s
|
DURATION(2): 1d10h5m1s
|
||||||
@@ -162,10 +167,11 @@ DURATION(2): 33d12h
|
|||||||
|
|
||||||
//------------------------ SORT TESTS
|
//------------------------ SORT TESTS
|
||||||
{
|
{
|
||||||
name: "sortbycolumn3",
|
name: "sortbycolumn3",
|
||||||
column: 3,
|
column: 3,
|
||||||
sortby: "numeric",
|
sortby: "numeric",
|
||||||
desc: false,
|
numberize: true,
|
||||||
|
desc: false,
|
||||||
expect: `
|
expect: `
|
||||||
NAME(1) DURATION(2) COUNT(3) WHEN(4)
|
NAME(1) DURATION(2) COUNT(3) WHEN(4)
|
||||||
ceta 33d12h 9 06/Jan/2008 15:04:05 -0700
|
ceta 33d12h 9 06/Jan/2008 15:04:05 -0700
|
||||||
@@ -173,10 +179,11 @@ beta 1d10h5m1s 33 3/1/2014
|
|||||||
alpha 4h35m 170 2013-Feb-03`,
|
alpha 4h35m 170 2013-Feb-03`,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "sortbycolumn4",
|
name: "sortbycolumn4",
|
||||||
column: 4,
|
column: 4,
|
||||||
sortby: "time",
|
sortby: "time",
|
||||||
desc: false,
|
desc: false,
|
||||||
|
numberize: true,
|
||||||
expect: `
|
expect: `
|
||||||
NAME(1) DURATION(2) COUNT(3) WHEN(4)
|
NAME(1) DURATION(2) COUNT(3) WHEN(4)
|
||||||
ceta 33d12h 9 06/Jan/2008 15:04:05 -0700
|
ceta 33d12h 9 06/Jan/2008 15:04:05 -0700
|
||||||
@@ -184,10 +191,11 @@ alpha 4h35m 170 2013-Feb-03
|
|||||||
beta 1d10h5m1s 33 3/1/2014`,
|
beta 1d10h5m1s 33 3/1/2014`,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "sortbycolumn2",
|
name: "sortbycolumn2",
|
||||||
column: 2,
|
column: 2,
|
||||||
sortby: "duration",
|
sortby: "duration",
|
||||||
desc: false,
|
numberize: true,
|
||||||
|
desc: false,
|
||||||
expect: `
|
expect: `
|
||||||
NAME(1) DURATION(2) COUNT(3) WHEN(4)
|
NAME(1) DURATION(2) COUNT(3) WHEN(4)
|
||||||
alpha 4h35m 170 2013-Feb-03
|
alpha 4h35m 170 2013-Feb-03
|
||||||
@@ -199,6 +207,7 @@ ceta 33d12h 9 06/Jan/2008 15:04:05 -0700`,
|
|||||||
{
|
{
|
||||||
name: "usecolumns",
|
name: "usecolumns",
|
||||||
usecol: []int{1, 4},
|
usecol: []int{1, 4},
|
||||||
|
numberize: true,
|
||||||
usecolstr: "1,4",
|
usecolstr: "1,4",
|
||||||
expect: `
|
expect: `
|
||||||
NAME(1) WHEN(4)
|
NAME(1) WHEN(4)
|
||||||
@@ -209,6 +218,7 @@ ceta 06/Jan/2008 15:04:05 -0700`,
|
|||||||
{
|
{
|
||||||
name: "usecolumns",
|
name: "usecolumns",
|
||||||
usecol: []int{2},
|
usecol: []int{2},
|
||||||
|
numberize: true,
|
||||||
usecolstr: "2",
|
usecolstr: "2",
|
||||||
expect: `
|
expect: `
|
||||||
DURATION(2)
|
DURATION(2)
|
||||||
@@ -219,6 +229,7 @@ DURATION(2)
|
|||||||
{
|
{
|
||||||
name: "usecolumns",
|
name: "usecolumns",
|
||||||
usecol: []int{3},
|
usecol: []int{3},
|
||||||
|
numberize: true,
|
||||||
usecolstr: "3",
|
usecolstr: "3",
|
||||||
expect: `
|
expect: `
|
||||||
COUNT(3)
|
COUNT(3)
|
||||||
@@ -230,6 +241,7 @@ COUNT(3)
|
|||||||
name: "usecolumns",
|
name: "usecolumns",
|
||||||
column: 0,
|
column: 0,
|
||||||
usecol: []int{1, 3},
|
usecol: []int{1, 3},
|
||||||
|
numberize: true,
|
||||||
usecolstr: "1,3",
|
usecolstr: "1,3",
|
||||||
expect: `
|
expect: `
|
||||||
NAME(1) COUNT(3)
|
NAME(1) COUNT(3)
|
||||||
@@ -240,6 +252,7 @@ ceta 9`,
|
|||||||
{
|
{
|
||||||
name: "usecolumns",
|
name: "usecolumns",
|
||||||
usecol: []int{2, 4},
|
usecol: []int{2, 4},
|
||||||
|
numberize: true,
|
||||||
usecolstr: "2,4",
|
usecolstr: "2,4",
|
||||||
expect: `
|
expect: `
|
||||||
DURATION(2) WHEN(4)
|
DURATION(2) WHEN(4)
|
||||||
@@ -251,8 +264,10 @@ DURATION(2) WHEN(4)
|
|||||||
|
|
||||||
func TestPrinter(t *testing.T) {
|
func TestPrinter(t *testing.T) {
|
||||||
for _, testdata := range tests {
|
for _, testdata := range tests {
|
||||||
testname := fmt.Sprintf("print-%s-%d-desc-%t-sortby-%s-mode-%d-usecolumns-%s",
|
testname := fmt.Sprintf("print-%s-%d-desc-%t-sortby-%s-mode-%d-usecolumns-%s-numberize-%t",
|
||||||
testdata.name, testdata.column, testdata.desc, testdata.sortby, testdata.mode, testdata.usecolstr)
|
testdata.name, testdata.column, testdata.desc, testdata.sortby,
|
||||||
|
testdata.mode, testdata.usecolstr, testdata.numberize)
|
||||||
|
|
||||||
t.Run(testname, func(t *testing.T) {
|
t.Run(testname, func(t *testing.T) {
|
||||||
// replaces os.Stdout, but we ignore it
|
// replaces os.Stdout, but we ignore it
|
||||||
var writer bytes.Buffer
|
var writer bytes.Buffer
|
||||||
@@ -262,7 +277,7 @@ func TestPrinter(t *testing.T) {
|
|||||||
SortDescending: testdata.desc,
|
SortDescending: testdata.desc,
|
||||||
SortMode: testdata.sortby,
|
SortMode: testdata.sortby,
|
||||||
OutputMode: testdata.mode,
|
OutputMode: testdata.mode,
|
||||||
NoNumbering: testdata.nonum,
|
Numbering: testdata.numberize,
|
||||||
UseColumns: testdata.usecol,
|
UseColumns: testdata.usecol,
|
||||||
NoColor: true,
|
NoColor: true,
|
||||||
}
|
}
|
||||||
|
|||||||
51
lib/yank.go
Normal file
51
lib/yank.go
Normal file
@@ -0,0 +1,51 @@
|
|||||||
|
/*
|
||||||
|
Copyright © 2022-2025 Thomas von Dein
|
||||||
|
|
||||||
|
This program is free software: you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation, either version 3 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
This program is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package lib
|
||||||
|
|
||||||
|
import (
|
||||||
|
"log"
|
||||||
|
"strings"
|
||||||
|
|
||||||
|
"github.com/tiagomelo/go-clipboard/clipboard"
|
||||||
|
"github.com/tlinden/tablizer/cfg"
|
||||||
|
)
|
||||||
|
|
||||||
|
func yankColumns(conf cfg.Config, data *Tabdata) {
|
||||||
|
var yank []string
|
||||||
|
|
||||||
|
if len(data.entries) == 0 || len(conf.UseYankColumns) == 0 {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, row := range data.entries {
|
||||||
|
for i, field := range row {
|
||||||
|
for _, idx := range conf.UseYankColumns {
|
||||||
|
if i == idx-1 {
|
||||||
|
yank = append(yank, field)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if len(yank) > 0 {
|
||||||
|
cb := clipboard.New(clipboard.ClipboardOptions{Primary: true})
|
||||||
|
if err := cb.CopyText(strings.Join(yank, " ")); err != nil {
|
||||||
|
log.Fatalln("error writing string to clipboard:", err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
72
lib/yank_test.go
Normal file
72
lib/yank_test.go
Normal file
@@ -0,0 +1,72 @@
|
|||||||
|
/*
|
||||||
|
Copyright © 2025 Thomas von Dein
|
||||||
|
|
||||||
|
This program is free software: you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation, either version 3 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
This program is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package lib
|
||||||
|
|
||||||
|
import (
|
||||||
|
"bytes"
|
||||||
|
"fmt"
|
||||||
|
"testing"
|
||||||
|
|
||||||
|
"github.com/tiagomelo/go-clipboard/clipboard"
|
||||||
|
"github.com/tlinden/tablizer/cfg"
|
||||||
|
)
|
||||||
|
|
||||||
|
var yanktests = []struct {
|
||||||
|
name string
|
||||||
|
yank []int // -y$colum,$column... after processing
|
||||||
|
filter string
|
||||||
|
expect string
|
||||||
|
}{
|
||||||
|
{
|
||||||
|
name: "one",
|
||||||
|
yank: []int{1},
|
||||||
|
filter: "beta",
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
func DISABLED_TestYankColumns(t *testing.T) {
|
||||||
|
cb := clipboard.New()
|
||||||
|
|
||||||
|
for _, testdata := range yanktests {
|
||||||
|
testname := fmt.Sprintf("yank-%s-filter-%s",
|
||||||
|
testdata.name, testdata.filter)
|
||||||
|
t.Run(testname, func(t *testing.T) {
|
||||||
|
conf := cfg.Config{
|
||||||
|
OutputMode: cfg.ASCII,
|
||||||
|
UseYankColumns: testdata.yank,
|
||||||
|
NoColor: true,
|
||||||
|
}
|
||||||
|
|
||||||
|
conf.ApplyDefaults()
|
||||||
|
data := newData() // defined in printer_test.go, reused here
|
||||||
|
|
||||||
|
var writer bytes.Buffer
|
||||||
|
printData(&writer, conf, &data)
|
||||||
|
|
||||||
|
got, err := cb.PasteText()
|
||||||
|
if err != nil {
|
||||||
|
t.Errorf("failed to fetch yanked text from clipboard")
|
||||||
|
}
|
||||||
|
|
||||||
|
if got != testdata.expect {
|
||||||
|
t.Errorf("not yanked correctly:\n+++ got:\n%s\n+++ want:\n%s",
|
||||||
|
got, testdata.expect)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,16 +1,15 @@
|
|||||||
package main
|
package main
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"os"
|
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
"github.com/rogpeppe/go-internal/testscript"
|
"github.com/rogpeppe/go-internal/testscript"
|
||||||
)
|
)
|
||||||
|
|
||||||
func TestMain(m *testing.M) {
|
func TestMain(m *testing.M) {
|
||||||
os.Exit(testscript.RunMain(m, map[string]func() int{
|
testscript.Main(m, map[string]func(){
|
||||||
"tablizer": Main,
|
"tablizer": main,
|
||||||
}))
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestTablizer(t *testing.T) {
|
func TestTablizer(t *testing.T) {
|
||||||
|
|||||||
9
mkrel.sh
9
mkrel.sh
@@ -42,8 +42,15 @@ for D in $DIST; do
|
|||||||
binfile="releases/${tool}-${os}-${arch}-${version}"
|
binfile="releases/${tool}-${os}-${arch}-${version}"
|
||||||
tardir="${tool}-${os}-${arch}-${version}"
|
tardir="${tool}-${os}-${arch}-${version}"
|
||||||
tarfile="releases/${tool}-${os}-${arch}-${version}.tar.gz"
|
tarfile="releases/${tool}-${os}-${arch}-${version}.tar.gz"
|
||||||
|
pie=""
|
||||||
|
|
||||||
|
if test "$D" = "linux/amd64"; then
|
||||||
|
pie="-buildmode=pie"
|
||||||
|
fi
|
||||||
|
|
||||||
set -x
|
set -x
|
||||||
GOOS=${os} GOARCH=${arch} go build -o ${binfile} -ldflags "-X 'github.com/tlinden/tablizer/cfg.VERSION=${version}'"
|
GOOS=${os} GOARCH=${arch} go build -tags osusergo,netgo -ldflags "-extldflags=-static -w -X 'github.com/tlinden/tablizer/cfg.VERSION=${version}'" --trimpath $pie -o ${binfile}
|
||||||
|
strip --strip-all ${binfile}
|
||||||
mkdir -p ${tardir}
|
mkdir -p ${tardir}
|
||||||
cp ${binfile} README.md LICENSE ${tardir}/
|
cp ${binfile} README.md LICENSE ${tardir}/
|
||||||
echo 'tool = tablizer
|
echo 'tool = tablizer
|
||||||
|
|||||||
24
tablizer.1
24
tablizer.1
@@ -133,7 +133,7 @@
|
|||||||
.\" ========================================================================
|
.\" ========================================================================
|
||||||
.\"
|
.\"
|
||||||
.IX Title "TABLIZER 1"
|
.IX Title "TABLIZER 1"
|
||||||
.TH TABLIZER 1 "2025-01-30" "1" "User Commands"
|
.TH TABLIZER 1 "2025-03-06" "1" "User Commands"
|
||||||
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
|
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
|
||||||
.\" way too many mistakes in technical documents.
|
.\" way too many mistakes in technical documents.
|
||||||
.if n .ad l
|
.if n .ad l
|
||||||
@@ -149,7 +149,7 @@ tablizer \- Manipulate tabular output of other programs
|
|||||||
\& Operational Flags:
|
\& Operational Flags:
|
||||||
\& \-c, \-\-columns string Only show the speficied columns (separated by ,)
|
\& \-c, \-\-columns string Only show the speficied columns (separated by ,)
|
||||||
\& \-v, \-\-invert\-match select non\-matching rows
|
\& \-v, \-\-invert\-match select non\-matching rows
|
||||||
\& \-n, \-\-no\-numbering Disable header numbering
|
\& \-n, \-\-numbering Enable header numbering
|
||||||
\& \-N, \-\-no\-color Disable pattern highlighting
|
\& \-N, \-\-no\-color Disable pattern highlighting
|
||||||
\& \-H, \-\-no\-headers Disable headers display
|
\& \-H, \-\-no\-headers Disable headers display
|
||||||
\& \-s, \-\-separator string Custom field separator
|
\& \-s, \-\-separator string Custom field separator
|
||||||
@@ -168,6 +168,8 @@ tablizer \- Manipulate tabular output of other programs
|
|||||||
\& \-C, \-\-csv Enable CSV output
|
\& \-C, \-\-csv Enable CSV output
|
||||||
\& \-A, \-\-ascii Default output mode, ascii tabular
|
\& \-A, \-\-ascii Default output mode, ascii tabular
|
||||||
\& \-L, \-\-hightlight\-lines Use alternating background colors for tables
|
\& \-L, \-\-hightlight\-lines Use alternating background colors for tables
|
||||||
|
\& \-y, \-\-yank\-columns Yank specified columns (separated by ,) to clipboard,
|
||||||
|
\& space separated
|
||||||
\&
|
\&
|
||||||
\& Sort Mode Flags (mutually exclusive):
|
\& Sort Mode Flags (mutually exclusive):
|
||||||
\& \-a, \-\-sort\-age sort according to age (duration) string
|
\& \-a, \-\-sort\-age sort according to age (duration) string
|
||||||
@@ -462,13 +464,27 @@ more output modes available: \fBorgtbl\fR which prints an Emacs org-mode
|
|||||||
table and \fBmarkdown\fR which prints a Markdown table, \fByaml\fR, which
|
table and \fBmarkdown\fR which prints a Markdown table, \fByaml\fR, which
|
||||||
prints yaml encoding and \s-1CSV\s0 mode, which prints a comma separated
|
prints yaml encoding and \s-1CSV\s0 mode, which prints a comma separated
|
||||||
value file.
|
value file.
|
||||||
|
.SS "\s-1PUT FIELDS TO CLIPBOARD\s0"
|
||||||
|
.IX Subsection "PUT FIELDS TO CLIPBOARD"
|
||||||
|
You can let tablizer put fields to the clipboard using the option
|
||||||
|
\&\f(CW\*(C`\-y\*(C'\fR. This best fits the use-case when the result of your filtering
|
||||||
|
yields just one row. For example:
|
||||||
|
.PP
|
||||||
|
.Vb 1
|
||||||
|
\& cloudctl cluster ls | tablizer \-yid matchbox
|
||||||
|
.Ve
|
||||||
|
.PP
|
||||||
|
If \*(L"matchbox\*(R" matches one cluster, you can immediately use the id of
|
||||||
|
that cluster somewhere else and paste it. Of course, if there are
|
||||||
|
multiple matches, then all id's will be put into the clipboard
|
||||||
|
separated by one space.
|
||||||
.SS "\s-1ENVIRONMENT VARIABLES\s0"
|
.SS "\s-1ENVIRONMENT VARIABLES\s0"
|
||||||
.IX Subsection "ENVIRONMENT VARIABLES"
|
.IX Subsection "ENVIRONMENT VARIABLES"
|
||||||
\&\fBtablizer\fR supports certain environment variables which use can use
|
\&\fBtablizer\fR supports certain environment variables which use can use
|
||||||
to influence program behavior. Commandline flags have always
|
to influence program behavior. Commandline flags have always
|
||||||
precedence over environment variables.
|
precedence over environment variables.
|
||||||
.IP "<T_NO_HEADER_NUMBERING> \- disable numbering of header fields, like \fB\-n\fR." 4
|
.IP "<T_HEADER_NUMBERING> \- enable numbering of header fields, like \fB\-n\fR." 4
|
||||||
.IX Item "<T_NO_HEADER_NUMBERING> - disable numbering of header fields, like -n."
|
.IX Item "<T_HEADER_NUMBERING> - enable numbering of header fields, like -n."
|
||||||
.PD 0
|
.PD 0
|
||||||
.IP "<T_COLUMNS> \- comma separated list of columns to output, like \fB\-c\fR" 4
|
.IP "<T_COLUMNS> \- comma separated list of columns to output, like \fB\-c\fR" 4
|
||||||
.IX Item "<T_COLUMNS> - comma separated list of columns to output, like -c"
|
.IX Item "<T_COLUMNS> - comma separated list of columns to output, like -c"
|
||||||
|
|||||||
19
tablizer.pod
19
tablizer.pod
@@ -10,7 +10,7 @@ tablizer - Manipulate tabular output of other programs
|
|||||||
Operational Flags:
|
Operational Flags:
|
||||||
-c, --columns string Only show the speficied columns (separated by ,)
|
-c, --columns string Only show the speficied columns (separated by ,)
|
||||||
-v, --invert-match select non-matching rows
|
-v, --invert-match select non-matching rows
|
||||||
-n, --no-numbering Disable header numbering
|
-n, --numbering Enable header numbering
|
||||||
-N, --no-color Disable pattern highlighting
|
-N, --no-color Disable pattern highlighting
|
||||||
-H, --no-headers Disable headers display
|
-H, --no-headers Disable headers display
|
||||||
-s, --separator string Custom field separator
|
-s, --separator string Custom field separator
|
||||||
@@ -29,6 +29,8 @@ tablizer - Manipulate tabular output of other programs
|
|||||||
-C, --csv Enable CSV output
|
-C, --csv Enable CSV output
|
||||||
-A, --ascii Default output mode, ascii tabular
|
-A, --ascii Default output mode, ascii tabular
|
||||||
-L, --hightlight-lines Use alternating background colors for tables
|
-L, --hightlight-lines Use alternating background colors for tables
|
||||||
|
-y, --yank-columns Yank specified columns (separated by ,) to clipboard,
|
||||||
|
space separated
|
||||||
|
|
||||||
Sort Mode Flags (mutually exclusive):
|
Sort Mode Flags (mutually exclusive):
|
||||||
-a, --sort-age sort according to age (duration) string
|
-a, --sort-age sort according to age (duration) string
|
||||||
@@ -306,6 +308,19 @@ table and B<markdown> which prints a Markdown table, B<yaml>, which
|
|||||||
prints yaml encoding and CSV mode, which prints a comma separated
|
prints yaml encoding and CSV mode, which prints a comma separated
|
||||||
value file.
|
value file.
|
||||||
|
|
||||||
|
=head2 PUT FIELDS TO CLIPBOARD
|
||||||
|
|
||||||
|
You can let tablizer put fields to the clipboard using the option
|
||||||
|
C<-y>. This best fits the use-case when the result of your filtering
|
||||||
|
yields just one row. For example:
|
||||||
|
|
||||||
|
cloudctl cluster ls | tablizer -yid matchbox
|
||||||
|
|
||||||
|
If "matchbox" matches one cluster, you can immediately use the id of
|
||||||
|
that cluster somewhere else and paste it. Of course, if there are
|
||||||
|
multiple matches, then all id's will be put into the clipboard
|
||||||
|
separated by one space.
|
||||||
|
|
||||||
=head2 ENVIRONMENT VARIABLES
|
=head2 ENVIRONMENT VARIABLES
|
||||||
|
|
||||||
B<tablizer> supports certain environment variables which use can use
|
B<tablizer> supports certain environment variables which use can use
|
||||||
@@ -314,7 +329,7 @@ precedence over environment variables.
|
|||||||
|
|
||||||
=over
|
=over
|
||||||
|
|
||||||
=item <T_NO_HEADER_NUMBERING> - disable numbering of header fields, like B<-n>.
|
=item <T_HEADER_NUMBERING> - enable numbering of header fields, like B<-n>.
|
||||||
|
|
||||||
=item <T_COLUMNS> - comma separated list of columns to output, like B<-c>
|
=item <T_COLUMNS> - comma separated list of columns to output, like B<-c>
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user