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"
"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)
}