use a pulsating spinner
This commit is contained in:
parent
a3fcecf943
commit
7550fd1b7f
14
main.go
14
main.go
@ -2,11 +2,25 @@ package main
|
||||
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
"os"
|
||||
"os/signal"
|
||||
"syscall"
|
||||
|
||||
"github.com/jmorganca/ollama/cmd"
|
||||
"github.com/spf13/cobra"
|
||||
)
|
||||
|
||||
func main() {
|
||||
sigChan := make(chan os.Signal, 1)
|
||||
signal.Notify(sigChan, syscall.SIGINT)
|
||||
|
||||
go func() {
|
||||
<-sigChan
|
||||
fmt.Print("\033[?25h")
|
||||
|
||||
os.Exit(0)
|
||||
}()
|
||||
|
||||
cobra.CheckErr(cmd.NewCLI().ExecuteContext(context.Background()))
|
||||
}
|
||||
|
@ -81,9 +81,6 @@ func (p *Progress) render() error {
|
||||
p.mu.Lock()
|
||||
defer p.mu.Unlock()
|
||||
|
||||
fmt.Fprint(p.w, "\033[?25l")
|
||||
defer fmt.Fprint(p.w, "\033[?25h")
|
||||
|
||||
// clear already rendered progress lines
|
||||
for i := 0; i < p.pos; i++ {
|
||||
if i > 0 {
|
||||
@ -107,6 +104,9 @@ func (p *Progress) render() error {
|
||||
|
||||
func (p *Progress) start() {
|
||||
p.ticker = time.NewTicker(100 * time.Millisecond)
|
||||
fmt.Fprint(p.w, "\033[?25l")
|
||||
defer fmt.Fprintln(p.w, "\033[?25h")
|
||||
|
||||
for range p.ticker.C {
|
||||
p.render()
|
||||
}
|
||||
|
@ -10,8 +10,6 @@ type Spinner struct {
|
||||
message string
|
||||
messageWidth int
|
||||
|
||||
parts []string
|
||||
|
||||
value int
|
||||
|
||||
ticker *time.Ticker
|
||||
@ -22,10 +20,8 @@ type Spinner struct {
|
||||
func NewSpinner(message string) *Spinner {
|
||||
s := &Spinner{
|
||||
message: message,
|
||||
parts: []string{
|
||||
"⠋", "⠙", "⠹", "⠸", "⠼", "⠴", "⠦", "⠧", "⠇", "⠏",
|
||||
},
|
||||
started: time.Now(),
|
||||
value: 231,
|
||||
}
|
||||
go s.start()
|
||||
return s
|
||||
@ -48,18 +44,21 @@ func (s *Spinner) String() string {
|
||||
}
|
||||
|
||||
if s.stopped.IsZero() {
|
||||
spinner := s.parts[s.value]
|
||||
sb.WriteString(spinner)
|
||||
sb.WriteString(" ")
|
||||
sb.WriteString(fmt.Sprintf("\033[48;5;%dm ", s.value))
|
||||
sb.WriteString("\033[0m")
|
||||
}
|
||||
|
||||
return sb.String()
|
||||
}
|
||||
|
||||
func (s *Spinner) start() {
|
||||
s.ticker = time.NewTicker(100 * time.Millisecond)
|
||||
s.ticker = time.NewTicker(40 * time.Millisecond)
|
||||
for range s.ticker.C {
|
||||
s.value = (s.value + 1) % len(s.parts)
|
||||
if s.value < 255 {
|
||||
s.value++
|
||||
} else {
|
||||
s.value = 231
|
||||
}
|
||||
if !s.stopped.IsZero() {
|
||||
return
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user