code test

This commit is contained in:
foglar 2025-05-27 14:24:10 +02:00
parent 0e727c5a5b
commit 42ee1bd41c

97
main.go
View File

@ -4,12 +4,21 @@ import (
"fmt" "fmt"
"log" "log"
"strings" "strings"
//"whspbrd/systray"
"whspbrd/term_image"
"image"
_ "image/jpeg"
_ "image/png"
"os"
"github.com/jroimartin/gocui" "github.com/jroimartin/gocui"
"github.com/dolmen-go/kittyimg"
) )
var messages []string var messages []string
var users = []string{"Alice", "Bob", "Charlie"} var users = []string{"Alice\n", "Bob\n", "Charlie\n"}
func layout(g *gocui.Gui) error { func layout(g *gocui.Gui) error {
maxX, maxY := g.Size() maxX, maxY := g.Size()
@ -31,6 +40,7 @@ func layout(g *gocui.Gui) error {
} }
v.Title = "Chat" v.Title = "Chat"
v.Wrap = true v.Wrap = true
v.Autoscroll = true
updateChatView(v) updateChatView(v)
} }
@ -50,8 +60,30 @@ func layout(g *gocui.Gui) error {
} }
func updateChatView(v *gocui.View) { func updateChatView(v *gocui.View) {
v.Clear() v.Clear()
for _, msg := range messages { for i, msg := range messages {
fmt.Fprintln(v, msg) fmt.Fprintf(v, "%s\n\n", msg)
fmt.Printf("\033[%d;%dH", i*3+2, 23)
imagePath := "kogami-rounded.png"
file, err := os.Open(imagePath)
if err != nil {
log.Println("Error opening image:", err)
continue
}
defer file.Close()
img, _, err := image.Decode(file)
if err != nil {
log.Println("Error decoding image:", err)
continue
}
// Print image directly to terminal (stdout)
//term_image.RenderImage("output.png", 20, 20)
err = kittyimg.Fprintln(os.Stdout, img)
if err != nil {
log.Println("Error rendering image:", err)
}
} }
} }
@ -62,7 +94,7 @@ func sendMessage(g *gocui.Gui, v *gocui.View) error {
v.SetOrigin(0, 0) v.SetOrigin(0, 0)
if input != "" { if input != "" {
messages = append(messages, "You: "+input) messages = append(messages, "\t\t\t\tYou:\n\t\t\t\t"+input)
if chatView, err := g.View("chat"); err == nil { if chatView, err := g.View("chat"); err == nil {
updateChatView(chatView) updateChatView(chatView)
} }
@ -72,6 +104,41 @@ func sendMessage(g *gocui.Gui, v *gocui.View) error {
return nil return nil
} }
func cursorDown(g *gocui.Gui, v *gocui.View) error {
if v != nil {
cx, cy := v.Cursor()
if err := v.SetCursor(cx, cy+1); err != nil {
ox, oy := v.Origin()
if err := v.SetOrigin(ox, oy+1); err != nil {
return err
}
}
}
return nil
}
func cursorUp(g *gocui.Gui, v *gocui.View) error {
if v != nil {
ox, oy := v.Origin()
cx, cy := v.Cursor()
if err := v.SetCursor(cx, cy-1); err != nil && oy > 0 {
if err := v.SetOrigin(ox, oy-1); err != nil {
return err
}
}
}
return nil
}
func nextView(g *gocui.Gui, v *gocui.View) error {
if v == nil || v.Name() == "chat" {
_, err := g.SetCurrentView("input")
return err
}
_, err := g.SetCurrentView("chat")
return err
}
func keybindings(g *gocui.Gui) error { func keybindings(g *gocui.Gui) error {
// Ctrl+C to quit // Ctrl+C to quit
if err := g.SetKeybinding("", gocui.KeyCtrlC, gocui.ModNone, quit); err != nil { if err := g.SetKeybinding("", gocui.KeyCtrlC, gocui.ModNone, quit); err != nil {
@ -80,7 +147,14 @@ func keybindings(g *gocui.Gui) error {
// Enter to send message // Enter to send message
// Enter adds a new line (multiline input) // Enter adds a new line (multiline input)
if err := g.SetKeybinding("input", gocui.KeyArrowDown, gocui.ModNone, insertNewline); err != nil { //if err := g.SetKeybinding("input", gocui.KeyArrowDown, gocui.ModNone, insertNewline); err != nil {
// return err
//}
if err := g.SetKeybinding("chat", gocui.KeyCtrlSpace, gocui.ModNone, nextView); err != nil {
return err
}
if err := g.SetKeybinding("input", gocui.KeyCtrlSpace, gocui.ModNone, nextView); err != nil {
return err return err
} }
@ -89,6 +163,16 @@ func keybindings(g *gocui.Gui) error {
return err return err
} }
// Arrow up scrolls up in chat view
if err := g.SetKeybinding("chat", gocui.KeyArrowUp, gocui.ModNone, cursorUp); err != nil {
return err
}
// Arrow down scrolls down in chat view
if err := g.SetKeybinding("chat", gocui.KeyArrowDown, gocui.ModNone, cursorDown); err != nil {
return err
}
return nil return nil
} }
@ -102,6 +186,7 @@ func quit(g *gocui.Gui, v *gocui.View) error {
} }
func main() { func main() {
// systray.Systray()
g, err := gocui.NewGui(gocui.OutputNormal) g, err := gocui.NewGui(gocui.OutputNormal)
if err != nil { if err != nil {
log.Panicln(err) log.Panicln(err)
@ -117,4 +202,6 @@ func main() {
if err := g.MainLoop(); err != nil && err != gocui.ErrQuit { if err := g.MainLoop(); err != nil && err != gocui.ErrQuit {
log.Panicln(err) log.Panicln(err)
} }
term_image.RenderImage("output.png", 20, 20)
} }