v0.0.1 - refact
This commit is contained in:
parent
5ce1b15734
commit
a15a1b74a4
88
echo/echo.go
Normal file
88
echo/echo.go
Normal file
|
@ -0,0 +1,88 @@
|
||||||
|
package echo
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"strings"
|
||||||
|
|
||||||
|
"gitea.meta-tech.academy/go/core/style"
|
||||||
|
"gitea.meta-tech.academy/go/core/sys"
|
||||||
|
)
|
||||||
|
|
||||||
|
var curStyles *style.Styles
|
||||||
|
var hasCurStyle bool = false
|
||||||
|
|
||||||
|
func Cstyle(name string) *style.Style {
|
||||||
|
if !hasCurStyle {
|
||||||
|
panic("Missing current style, you should call style.SetCurrentStyles(styles *style.Styles) first\n")
|
||||||
|
}
|
||||||
|
return curStyles.Get(name)
|
||||||
|
}
|
||||||
|
|
||||||
|
func Ln(a ...any) {
|
||||||
|
Cstyle("").Ln()
|
||||||
|
}
|
||||||
|
|
||||||
|
func SetCurrentStyles(styles *style.Styles) {
|
||||||
|
curStyles = styles
|
||||||
|
hasCurStyle = true
|
||||||
|
}
|
||||||
|
|
||||||
|
func Title(title string, subtitle string) {
|
||||||
|
Cstyle("").Echof("\n ")
|
||||||
|
Cstyle("appSep").Echof(" :: ")
|
||||||
|
Cstyle("appTitle").Echof(title)
|
||||||
|
if subtitle != "" {
|
||||||
|
Cstyle("appSubTitle").Echof(" %s", subtitle)
|
||||||
|
}
|
||||||
|
Cstyle("appSep").Echof(" :: ")
|
||||||
|
Ln()
|
||||||
|
}
|
||||||
|
|
||||||
|
func Action(action string, param string) {
|
||||||
|
Ln()
|
||||||
|
Cstyle("actionSep").Echo(" * ")
|
||||||
|
Cstyle("action").Echof("%s ", action)
|
||||||
|
Cstyle("param").Echo(param)
|
||||||
|
Ln()
|
||||||
|
}
|
||||||
|
|
||||||
|
func State(done bool) {
|
||||||
|
c := Cstyle("ok")
|
||||||
|
label := " OK "
|
||||||
|
if !done {
|
||||||
|
c = Cstyle("ko")
|
||||||
|
label = " KO "
|
||||||
|
}
|
||||||
|
fmt.Print(strings.Repeat(" ", 2))
|
||||||
|
for i := 0; i < sys.TERM_WIDTH-20; i++ {
|
||||||
|
Cstyle("sep").Echo("-")
|
||||||
|
// time.Sleep(3 * time.Millisecond)
|
||||||
|
}
|
||||||
|
Cstyle("sep").Echo(" ")
|
||||||
|
c.Echo(label)
|
||||||
|
Ln()
|
||||||
|
}
|
||||||
|
|
||||||
|
func Msg(msg string) {
|
||||||
|
fmt.Printf("%s%s\n", strings.Repeat(" ", 4), msg)
|
||||||
|
}
|
||||||
|
|
||||||
|
func LineUp(count int) {
|
||||||
|
fmt.Printf("\033[%dA", count)
|
||||||
|
}
|
||||||
|
|
||||||
|
func GetArg(msg string) string {
|
||||||
|
return Cstyle("usageArg").Applyf(" % s", msg)
|
||||||
|
}
|
||||||
|
|
||||||
|
func GetArgOpt(msg string) string {
|
||||||
|
return Cstyle("usageSep").Apply("[") + Cstyle("usageArg").Apply(msg) + Cstyle("usageSep").Apply("] ")
|
||||||
|
}
|
||||||
|
|
||||||
|
func GetComment(msg string) string {
|
||||||
|
return Cstyle("usageCom").Apply(msg)
|
||||||
|
}
|
||||||
|
|
||||||
|
func GetApp(msg string, cmd string) string {
|
||||||
|
return Cstyle("usageApp").Applyf("%s ", msg) + Cstyle("usageCmd").Apply(cmd)
|
||||||
|
}
|
|
@ -2,9 +2,10 @@ package style
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"strconv"
|
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
|
"gitea.meta-tech.academy/go/core/util"
|
||||||
|
|
||||||
"github.com/gookit/color"
|
"github.com/gookit/color"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -12,6 +13,8 @@ const KEY_STYLE_NAME = 0
|
||||||
const KEY_STYLE_COLOR = 1
|
const KEY_STYLE_COLOR = 1
|
||||||
const KEY_STYLE_OPTION = 2
|
const KEY_STYLE_OPTION = 2
|
||||||
|
|
||||||
|
var defStyle *Style = &Style{color: color.HEXStyle("#ffffff"), Name: "default"}
|
||||||
|
|
||||||
type Style struct {
|
type Style struct {
|
||||||
color *color.RGBStyle
|
color *color.RGBStyle
|
||||||
Name string
|
Name string
|
||||||
|
@ -25,28 +28,24 @@ type Styles struct {
|
||||||
DefaultIndent string
|
DefaultIndent string
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *Style) Printf(format string, a ...any) {
|
func (s *Style) Echof(format string, a ...any) {
|
||||||
s.color.Printf(format, a...)
|
s.color.Printf(format, a...)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *Style) Sprintf(format string, a ...any) string {
|
func (s *Style) Applyf(format string, a ...any) string {
|
||||||
return s.color.Sprintf(format, a...)
|
return s.color.Sprintf(format, a...)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *Style) Echo(data string, format ...string) {
|
func (s *Style) Echo(data string) {
|
||||||
fmt := "%s"
|
s.Echof("%s", data)
|
||||||
if len(format) > 1 {
|
|
||||||
fmt = format[0]
|
|
||||||
}
|
|
||||||
s.Printf(fmt, data)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *Style) Apply(data string, format ...string) string {
|
func (s *Style) Apply(data string) string {
|
||||||
if len(format) > 1 {
|
return s.Applyf("%s", data)
|
||||||
return s.Sprintf(format[0], data)
|
|
||||||
} else {
|
|
||||||
return s.Sprintf(data)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (s *Style) Ln() {
|
||||||
|
s.Echo("\n")
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewStyleByDef(def string) *Style {
|
func NewStyleByDef(def string) *Style {
|
||||||
|
@ -56,7 +55,7 @@ func NewStyleByDef(def string) *Style {
|
||||||
if len(d) > KEY_STYLE_OPTION {
|
if len(d) > KEY_STYLE_OPTION {
|
||||||
o = strings.Split(d[KEY_STYLE_OPTION], ",")
|
o = strings.Split(d[KEY_STYLE_OPTION], ",")
|
||||||
}
|
}
|
||||||
prependToSliceStr(&c, "#")
|
util.PrependToSliceStr(&c, "#")
|
||||||
var s *color.RGBStyle
|
var s *color.RGBStyle
|
||||||
switch len(c) {
|
switch len(c) {
|
||||||
case 1:
|
case 1:
|
||||||
|
@ -66,7 +65,7 @@ func NewStyleByDef(def string) *Style {
|
||||||
}
|
}
|
||||||
for _, elm := range o {
|
for _, elm := range o {
|
||||||
|
|
||||||
s.AddOpts(color.Color(str2int(elm, 10, 0)))
|
s.AddOpts(color.Color(util.Str2int(elm, 10, 0)))
|
||||||
}
|
}
|
||||||
// s.Printf(" %-20s\n", d[KEY_STYLE_NAME])
|
// s.Printf(" %-20s\n", d[KEY_STYLE_NAME])
|
||||||
return &Style{s, d[KEY_STYLE_NAME]}
|
return &Style{s, d[KEY_STYLE_NAME]}
|
||||||
|
@ -83,46 +82,43 @@ func NewStyles() *Styles {
|
||||||
return l
|
return l
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *Styles) Apply(name string, data string) string {
|
func (s *Styles) Get(name string) *Style {
|
||||||
return s.List[name].Apply(data)
|
style, ok := s.List[name]
|
||||||
|
if !ok {
|
||||||
|
style = defStyle
|
||||||
|
}
|
||||||
|
return style
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *Styles) Echo(name string, data string) {
|
func (s *Styles) Echo(name string, data string) {
|
||||||
s.List[name].Echo(data)
|
s.Get(name).Echof("%s", data)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *Styles) Apply(name string, data string) string {
|
||||||
|
return s.List[name].Applyf("%s", data)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *Styles) Echof(name string, format string, a ...any) {
|
||||||
|
s.Get(name).Echof(format, a...)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *Styles) Applyf(name string, format string, a ...any) string {
|
||||||
|
return s.Get(name).Applyf(format, a...)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *Styles) Keyval(key string, val string, names ...string) {
|
func (s *Styles) Keyval(key string, val string, names ...string) {
|
||||||
sk := s.List[s.DefaultKeyStyle]
|
sk := s.Get(s.DefaultKeyStyle)
|
||||||
sv := s.List[s.DefaultValStyle]
|
sv := s.Get(s.DefaultValStyle)
|
||||||
if len(names) > 1 {
|
if len(names) > 1 {
|
||||||
sk = s.List[names[0]]
|
sk = s.Get(names[0])
|
||||||
if len(names) > 2 {
|
if len(names) > 2 {
|
||||||
sv = s.List[names[1]]
|
sv = s.Get(names[1])
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
fmt.Printf(
|
fmt.Printf(
|
||||||
"%-"+s.DefaultIndent+"s%s : %s\n",
|
"%-"+s.DefaultIndent+"s%s : %s\n",
|
||||||
" ",
|
" ",
|
||||||
sk.Sprintf("%-"+s.DefaultKeyPadding+"s", key),
|
sk.Applyf("%-"+s.DefaultKeyPadding+"s", key),
|
||||||
sv.Apply(val),
|
sv.Apply(val),
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
func prependToSliceStr(strs *[]string, prefix string) {
|
|
||||||
for i, elm := range *strs {
|
|
||||||
(*strs)[i] = prefix + elm
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func str2int(str string, base int, fallback int) int {
|
|
||||||
return int(str2int64(str, base, int64(fallback)))
|
|
||||||
}
|
|
||||||
|
|
||||||
func str2int64(str string, base int, fallback int64) int64 {
|
|
||||||
str = strings.TrimSuffix(str, "\n")
|
|
||||||
num, err := strconv.ParseInt(str, base, 64)
|
|
||||||
if err != nil {
|
|
||||||
num = fallback
|
|
||||||
}
|
|
||||||
return num
|
|
||||||
}
|
|
||||||
|
|
|
@ -94,10 +94,8 @@ func UpdateTermSize() error {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func HandleTermChange() {
|
func HandleTermChange(sigwinch chan os.Signal) {
|
||||||
// set signal handler
|
// set signal handler
|
||||||
sigwinch := make(chan os.Signal, 1)
|
|
||||||
defer close(sigwinch)
|
|
||||||
signal.Notify(sigwinch, syscall.SIGWINCH)
|
signal.Notify(sigwinch, syscall.SIGWINCH)
|
||||||
go func() {
|
go func() {
|
||||||
for {
|
for {
|
||||||
|
|
Loading…
Reference in New Issue
Block a user