new line on terminal size
This commit is contained in:
parent
f7cfab879a
commit
40676450c5
27
cmd/ls.go
27
cmd/ls.go
@ -18,9 +18,11 @@ package cmd
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"os"
|
"os"
|
||||||
|
"time"
|
||||||
|
|
||||||
"github.com/jedib0t/go-pretty/v6/table"
|
"github.com/jedib0t/go-pretty/v6/table"
|
||||||
"github.com/spf13/cobra"
|
"github.com/spf13/cobra"
|
||||||
|
"golang.org/x/sys/unix"
|
||||||
)
|
)
|
||||||
|
|
||||||
// lsCmd represents the ls command
|
// lsCmd represents the ls command
|
||||||
@ -35,17 +37,40 @@ This application is a tool to generate the needed files
|
|||||||
to quickly create a Cobra application.`,
|
to quickly create a Cobra application.`,
|
||||||
Run: func(cmd *cobra.Command, args []string) {
|
Run: func(cmd *cobra.Command, args []string) {
|
||||||
todos := getAllTodos()
|
todos := getAllTodos()
|
||||||
|
ws, err := unix.IoctlGetWinsize(int(os.Stdin.Fd()), unix.TIOCGWINSZ)
|
||||||
|
errPanic(err, "failed to determine terminal width")
|
||||||
|
cols := int(ws.Col)
|
||||||
t := table.NewWriter()
|
t := table.NewWriter()
|
||||||
t.SetOutputMirror(os.Stdout)
|
t.SetOutputMirror(os.Stdout)
|
||||||
t.AppendHeader(table.Row{"#", "Description", "Due date"})
|
t.AppendHeader(table.Row{"#", "Description", "Due date"})
|
||||||
for _, todo := range todos {
|
for _, todo := range todos {
|
||||||
t.AppendRow([]interface{}{todo.ID, todo.Desc, todo.DueDate.Format("02/01/2006 15:04")})
|
date := todo.DueDate.Format("02/01/2006 15:04")
|
||||||
|
d := time.Time{}
|
||||||
|
if todo.DueDate == d {
|
||||||
|
date = ""
|
||||||
|
}
|
||||||
|
desc := todo.Desc
|
||||||
|
if len(desc) > (cols - 20) {
|
||||||
|
desc = insertNth(desc, cols-20)
|
||||||
|
}
|
||||||
|
t.AppendRow([]interface{}{todo.ID, desc, date})
|
||||||
// data[i] = []string{strconv.FormatUint(todo.ID, 10), todo.Desc, todo.DueDate.Format("")}
|
// data[i] = []string{strconv.FormatUint(todo.ID, 10), todo.Desc, todo.DueDate.Format("")}
|
||||||
}
|
}
|
||||||
|
t.SetStyle(table.StyleLight)
|
||||||
|
t.SetAllowedRowLength(cols)
|
||||||
t.Render()
|
t.Render()
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// insertNth inserts new line on each nth position.
|
||||||
|
func insertNth(s string, n int) string {
|
||||||
|
for i := n - 1; i < len(s); i += n {
|
||||||
|
s = s[:i] + "\n" + s[i:]
|
||||||
|
}
|
||||||
|
|
||||||
|
return s
|
||||||
|
}
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
rootCmd.AddCommand(lsCmd)
|
rootCmd.AddCommand(lsCmd)
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user