From 42ee1bd41c4e7007688923e6c1ed0ddaf31d7ce6 Mon Sep 17 00:00:00 2001 From: foglar Date: Tue, 27 May 2025 14:24:10 +0200 Subject: [PATCH] code test --- main.go | 97 ++++++++++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 92 insertions(+), 5 deletions(-) diff --git a/main.go b/main.go index b38418e..20b73f4 100644 --- a/main.go +++ b/main.go @@ -4,12 +4,21 @@ import ( "fmt" "log" "strings" + //"whspbrd/systray" + "whspbrd/term_image" + + "image" + _ "image/jpeg" + _ "image/png" + "os" "github.com/jroimartin/gocui" + + "github.com/dolmen-go/kittyimg" ) var messages []string -var users = []string{"Alice", "Bob", "Charlie"} +var users = []string{"Alice\n", "Bob\n", "Charlie\n"} func layout(g *gocui.Gui) error { maxX, maxY := g.Size() @@ -31,6 +40,7 @@ func layout(g *gocui.Gui) error { } v.Title = "Chat" v.Wrap = true + v.Autoscroll = true updateChatView(v) } @@ -50,8 +60,30 @@ func layout(g *gocui.Gui) error { } func updateChatView(v *gocui.View) { v.Clear() - for _, msg := range messages { - fmt.Fprintln(v, msg) + for i, msg := range messages { + 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) 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 { updateChatView(chatView) } @@ -72,6 +104,41 @@ func sendMessage(g *gocui.Gui, v *gocui.View) error { 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 { // Ctrl+C to quit 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 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 } @@ -89,6 +163,16 @@ func keybindings(g *gocui.Gui) error { 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 } @@ -102,6 +186,7 @@ func quit(g *gocui.Gui, v *gocui.View) error { } func main() { + // systray.Systray() g, err := gocui.NewGui(gocui.OutputNormal) if err != nil { log.Panicln(err) @@ -117,4 +202,6 @@ func main() { if err := g.MainLoop(); err != nil && err != gocui.ErrQuit { log.Panicln(err) } + + term_image.RenderImage("output.png", 20, 20) }