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