From 8f608d9d9e1a978bb148aff6d2cd3f9d85d826b1 Mon Sep 17 00:00:00 2001 From: sawka Date: Wed, 21 Sep 2022 12:39:55 -0700 Subject: [PATCH] number formatting and better termopts formatting --- pkg/cmdrunner/cmdrunner.go | 18 +++++++++-- pkg/scbase/scbase.go | 63 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 78 insertions(+), 3 deletions(-) diff --git a/pkg/cmdrunner/cmdrunner.go b/pkg/cmdrunner/cmdrunner.go index 0ce4afce..2476813d 100644 --- a/pkg/cmdrunner/cmdrunner.go +++ b/pkg/cmdrunner/cmdrunner.go @@ -3,7 +3,6 @@ package cmdrunner import ( "bytes" "context" - "encoding/json" "fmt" "os" "path" @@ -1310,8 +1309,7 @@ func LineShowCommand(ctx context.Context, pk *scpacket.FeCommandPacketType) (sst if cmd.RemoteState.Cwd != "" { buf.WriteString(fmt.Sprintf(" %-15s %s\n", "cwd", cmd.RemoteState.Cwd)) } - termOptsOut, _ := json.Marshal(cmd.TermOpts) - buf.WriteString(fmt.Sprintf(" %-15s %s\n", "termopts", string(termOptsOut))) + buf.WriteString(fmt.Sprintf(" %-15s %s\n", "termopts", formatTermOpts(cmd.TermOpts))) } update := sstore.ModelUpdate{ Info: &sstore.InfoMsgType{ @@ -1321,3 +1319,17 @@ func LineShowCommand(ctx context.Context, pk *scpacket.FeCommandPacketType) (sst } return update, nil } + +func formatTermOpts(termOpts sstore.TermOpts) string { + if termOpts.Cols == 0 { + return "???" + } + rtnStr := fmt.Sprintf("%dx%d", termOpts.Rows, termOpts.Cols) + if termOpts.FlexRows { + rtnStr += " flexrows" + } + if termOpts.MaxPtySize > 0 { + rtnStr += " maxbuf=" + scbase.NumFormatB2(termOpts.MaxPtySize) + } + return rtnStr +} diff --git a/pkg/scbase/scbase.go b/pkg/scbase/scbase.go index 1756bda2..c1b8cd0b 100644 --- a/pkg/scbase/scbase.go +++ b/pkg/scbase/scbase.go @@ -153,3 +153,66 @@ func GenSCUUID() string { return rtn } } + +func NumFormatDec(num int64) string { + var signStr string + absNum := num + if absNum < 0 { + absNum = -absNum + signStr = "-" + } + if absNum < 1000 { + // raw num + return signStr + strconv.FormatInt(absNum, 10) + } + if absNum < 1000000 { + // k num + kVal := float64(absNum) / 1000 + return signStr + strconv.FormatFloat(kVal, 'f', 2, 64) + "k" + } + if absNum < 1000000000 { + // M num + mVal := float64(absNum) / 1000000 + return signStr + strconv.FormatFloat(mVal, 'f', 2, 64) + "m" + } else { + // G num + gVal := float64(absNum) / 1000000000 + return signStr + strconv.FormatFloat(gVal, 'f', 2, 64) + "g" + } +} + +func NumFormatB2(num int64) string { + var signStr string + absNum := num + if absNum < 0 { + absNum = -absNum + signStr = "-" + } + if absNum < 1024 { + // raw num + return signStr + strconv.FormatInt(absNum, 10) + } + if absNum < 1000000 { + // k num + if absNum%1024 == 0 { + return signStr + strconv.FormatInt(absNum/1024, 10) + "K" + } + kVal := float64(absNum) / 1024 + return signStr + strconv.FormatFloat(kVal, 'f', 2, 64) + "K" + } + if absNum < 1000000000 { + // M num + if absNum%(1024*1024) == 0 { + return signStr + strconv.FormatInt(absNum/(1024*1024), 10) + "M" + } + mVal := float64(absNum) / (1024 * 1024) + return signStr + strconv.FormatFloat(mVal, 'f', 2, 64) + "M" + } else { + // G num + if absNum%(1024*1024*1024) == 0 { + return signStr + strconv.FormatInt(absNum/(1024*1024*1024), 10) + "G" + } + gVal := float64(absNum) / (1024 * 1024 * 1024) + return signStr + strconv.FormatFloat(gVal, 'f', 2, 64) + "G" + } +}