diff --git a/go.mod b/go.mod index 0d0efc4..72479d1 100644 --- a/go.mod +++ b/go.mod @@ -90,6 +90,7 @@ require ( golang.org/x/exp v0.0.0-20231006140011-7918f672742d // indirect golang.org/x/image v0.0.0-20191206065243-da761ea9ff43 // indirect golang.org/x/net v0.55.0 // indirect - golang.org/x/sys v0.45.0 // indirect + golang.org/x/sys v0.46.0 // indirect + golang.org/x/term v0.44.0 // indirect golang.org/x/text v0.37.0 // indirect ) diff --git a/go.sum b/go.sum index b3fc283..391e875 100644 --- a/go.sum +++ b/go.sum @@ -200,6 +200,10 @@ golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20220310020820-b874c991c1a5/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.45.0 h1:dO4czNzziLiiXplLQgBCEpCvXQ3dnkn0SdaZSYdQ+FY= golang.org/x/sys v0.45.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw= +golang.org/x/sys v0.46.0 h1:noSf2Fq6F8DBgS+LysIkx7rIExoNHJsxOAtPp4rthXw= +golang.org/x/sys v0.46.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw= +golang.org/x/term v0.44.0 h1:0rLvDRCtNj0gZkyIXhCyOb2OAzEhLVqc4B+hrsBhrmc= +golang.org/x/term v0.44.0/go.mod h1:7ze4MdzUzLXpSAoFP1H0bOI9aXDqveSvatT5vKcFh2Y= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.37.0 h1:Cqjiwd9eSg8e0QAkyCaQTNHFIIzWtidPahFWR83rTrc= golang.org/x/text v0.37.0/go.mod h1:a5sjxXGs9hsn/AJVwuElvCAo9v8QYLzvavO5z2PiM38= diff --git a/pkg/es/api.go b/pkg/es/api.go index 420328b..171eab3 100644 --- a/pkg/es/api.go +++ b/pkg/es/api.go @@ -41,9 +41,12 @@ import ( "github.com/charmbracelet/lipgloss" "github.com/chzyer/readline" "github.com/go-openapi/spec" + "golang.org/x/term" ) -const intro = `Input format: verb path [data]" +const ( + DefaultMargin = 4 + intro = `Input format: verb path [data]" Example: @@ -59,6 +62,7 @@ put /yourindex/_settings If you do NOT supply a JSON in the first line, you need to hit ENTER twice to complete.` +) // holds an API operation via go-openapi/spec type Op struct { @@ -313,18 +317,19 @@ func ApiShow(conf *cfg.Config, showpath, verb string) error { cleanMarkup := regexp.MustCompile(`<[^<>]+>`) - params := getApiParameters(op, showpath) + width := getTermWidth() + params := getApiParameters(op, showpath, width) sample := getApiExample(op) - description := markdown.Render(cleanMarkup.ReplaceAllString(op.Op.Description, ""), 80, 6) + description := markdown.Render(cleanMarkup.ReplaceAllString(op.Op.Description, ""), width, DefaultMargin) var bold = lipgloss.NewStyle(). Bold(true) var paragraph = lipgloss.NewStyle(). MarginBottom(1). - MarginLeft(4) + MarginLeft(DefaultMargin) var boldparagraph = lipgloss.NewStyle(). MarginBottom(1). - MarginLeft(4). + MarginLeft(DefaultMargin). Bold(true) var indentparagraph = lipgloss.NewStyle(). MarginBottom(1). @@ -372,7 +377,7 @@ func findTags(op *Op) []string { } // Get API parameters -func getApiParameters(op *Op, path string) Params { +func getApiParameters(op *Op, path string, width int) Params { params := Params{} pathParams := []string{} pathParamsReg := regexp.MustCompile(`{([a-z_]+)}`) @@ -400,7 +405,7 @@ func getApiParameters(op *Op, path string) Params { } } else { par := Param{ - Description: string(markdown.Render(param.Description, 80, 6)), + Description: string(markdown.Render(param.Description, width, DefaultMargin)), Param: param.Name, } @@ -501,3 +506,17 @@ func findOperation(item spec.PathItemProps) []*Op { return ops } + +func getTermWidth() int { + if term.IsTerminal(int(os.Stdout.Fd())) { + println("in a term") + } else { + println("not in a term") + } + width, _, err := term.GetSize(int(os.Stdout.Fd())) + if err != nil { + return 80 + } + + return width - DefaultMargin +}