okami.mom/ultraviolet

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

Ayman Bagabasfix(examples): update altscreen example to use new APId6f8a4b

main
1.3 KiB72 linesraw
1package main
2
3import (
4	"log"
5	"strings"
6
7	uv "github.com/charmbracelet/ultraviolet"
8	"github.com/charmbracelet/ultraviolet/screen"
9)
10
11func main() {
12	t := uv.DefaultTerminal()
13	scr := t.Screen()
14
15	if err := t.Start(); err != nil {
16		log.Fatalf("failed to start program: %v", err)
17	}
18
19	defer t.Stop()
20
21	help := "Press space to toggle screen mode or any other key to exit."
22	var altScreen bool
23
24	display := func() {
25		var str string
26		if altScreen {
27			str = "This is using alternate screen mode."
28		} else {
29			str = "This is using inline mode."
30		}
31
32		str = strings.Join([]string{str, help}, "\n")
33
34		screen.Clear(scr)
35		screen.NewContext(scr).Print(str)
36		scr.Render()
37		scr.Flush()
38	}
39
40	// initial render
41	display()
42
43	var physicalWidth, physicalHeight int
44	for ev := range t.Events() {
45		switch ev := ev.(type) {
46		case uv.WindowSizeEvent:
47			physicalWidth = ev.Width
48			physicalHeight = ev.Height
49			if altScreen {
50				scr.Resize(physicalWidth, physicalHeight)
51			} else {
52				scr.Resize(physicalWidth, 2)
53			}
54			display()
55		case uv.KeyPressEvent:
56			switch {
57			case ev.MatchString("space"):
58				if altScreen {
59					scr.ExitAltScreen()
60					scr.Resize(physicalWidth, 2)
61				} else {
62					scr.EnterAltScreen()
63					scr.Resize(physicalWidth, physicalHeight)
64				}
65				altScreen = !altScreen
66				display()
67			default:
68				return
69			}
70		}
71	}
72}