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