okami.mom/ultraviolet

git clone https://git.nkp.pet/okami.mom/ultraviolet

Ayman Bagabaschore(examples): update terminal initialization in examples03f41d2

upstream
1.3 KiB74 linesraw
1package main
2
3import (
4	"fmt"
5	"log"
6	"math/rand"
7
8	uv "github.com/charmbracelet/ultraviolet"
9	"github.com/charmbracelet/ultraviolet/screen"
10	"github.com/charmbracelet/x/ansi"
11)
12
13func main() {
14	t := uv.DefaultTerminal()
15	scr := t.Screen()
16
17	if err := t.Start(); err != nil {
18		log.Fatalf("failed to start program: %v", err)
19	}
20
21	defer t.Stop()
22
23	scr.WriteString(ansi.SetWindowTitle("Hello, World!"))
24
25	var st uv.Style
26	bg := 1
27	st.Bg = ansi.BasicColor(bg)
28	st.Fg = ansi.Black
29
30	display := func() {
31		const hw = "Hello, World!"
32		bg := uv.EmptyCell
33		bg.Style = st
34		screen.FillArea(scr, &bg, uv.Rect(0, 0, scr.Bounds().Dx(), 1))
35		for i, r := range hw {
36			scr.SetCell(i, 0, &uv.Cell{
37				Content: string(r),
38				Style:   st,
39				Width:   1,
40			})
41		}
42		scr.Render()
43		scr.Flush()
44	}
45
46	// initial render
47	display()
48
49	var width int
50	for ev := range t.Events() {
51		switch ev := ev.(type) {
52		case uv.WindowSizeEvent:
53			width = ev.Width
54			scr.Resize(width, 1)
55			display()
56		case uv.KeyPressEvent:
57			switch {
58			case ev.MatchString("q", "ctrl+c"):
59				return
60			}
61
62			st.Bg = ansi.BasicColor(rand.Intn(16))
63		}
64
65		// Log event (this will appear above when we exit altscreen)
66		scr.InsertAbove(fmt.Sprintf("%T %v", ev, ev))
67
68		rd := rand.Intn(8)
69		st.Bg = ansi.BasicColor(rd)
70		display()
71	}
72
73	scr.WriteString(ansi.SetWindowTitle(""))
74}