diff --git a/command.go b/command.go index e8bf61d..d145aa7 100644 --- a/command.go +++ b/command.go @@ -26,6 +26,10 @@ func initCommandMap() { } app.AppendSystemMessage("commands: %s", s.String()) }, + "send": func(app *App, rest string) { + app.AppendMessage(rest) + app.outgoing <- MessageEvent(rest) + }, "dial": func(app *App, rest string) { args := strings.Fields(rest) if len(args) < 1 || len(args) > 2 { diff --git a/display.go b/display.go index cf1b2a8..a685d97 100644 --- a/display.go +++ b/display.go @@ -108,6 +108,10 @@ func (app *App) HandleTerminalEvent(ev vaxis.Event) { app.pager.ScrollUp() case "Down": app.pager.ScrollDown() + case "Page_Up": + app.pager.ScrollUpN(app.w.log.Height * 2 / 3) + case "Page_Down": + app.pager.ScrollDownN(app.w.log.Height * 2 / 3) case "Enter": app.submitTextInput() case "Ctrl+p": diff --git a/event.go b/event.go index 6b9e1aa..70c744d 100644 --- a/event.go +++ b/event.go @@ -27,7 +27,9 @@ func (ev DialEvent) HandleOutgoing(app *App) error { var err error if app.conn != nil { - app.incoming <- SystemMessageEvent(fmt.Sprintf("already connected to %s:%s", app.conn.host, app.conn.port)) + app.incoming <- SystemMessageEvent( + fmt.Sprintf("already connected to %s:%s", app.conn.host, app.conn.port), + ) return nil } conn, err := net.Dial("tcp", net.JoinHostPort(ev.Host, ev.Port)) @@ -51,8 +53,8 @@ func (ev DialEvent) HandleOutgoing(app *App) error { if err != nil { return err } - delta := time.Since(latStart).Round(time.Second) - delta = min(max(time.Second, delta*3/2), 5*time.Second) + delta := time.Since(latStart) + delta = min(max(time.Second, delta*3/2), 5*time.Second).Round(time.Second) app.conn.rate = delta app.conn.ticker = time.NewTicker(delta) diff --git a/main.go b/main.go index 2fe48bc..bfb0beb 100644 --- a/main.go +++ b/main.go @@ -31,12 +31,13 @@ type App struct { outgoing chan OutgoingEvent error chan error - vx *vaxis.Vaxis - w struct { + vx *vaxis.Vaxis + pager *pager.Model + input *textinput.Model + w struct { log, title, input vaxis.Window } - pager *pager.Model - input *textinput.Model + cfgHome string } @@ -60,7 +61,7 @@ func (app *App) AppendMessage(data string) { vaxis.Segment{Text: data, Style: style}, vaxis.Segment{Text: "\n"}, ) - app.last += 1 + app.pager.Offset = math.MaxInt } @@ -76,7 +77,7 @@ func (app *App) AppendSystemMessage(format string, args ...any) { func (app *App) SetNick(nick string) { nick = strings.TrimSpace(nick) - app.input.SetPrompt(fmt.Sprintf("%s: ", nick)) + app.input.SetPrompt(fmt.Sprintf("[%s] ", nick)) app.input.Prompt.Attribute = vaxis.AttrBold app.nick = nick } diff --git a/protocol.go b/protocol.go index 82ceb3a..1b4c00f 100644 --- a/protocol.go +++ b/protocol.go @@ -96,23 +96,20 @@ func (app *App) Last(n int) (num int, err error) { return 0, err } - var nsrv int if !app.conn.Scanner.Scan() { return 0, app.conn.Scanner.Err() } - nsrvRaw := app.conn.Scanner.Text() - nsrv, err = strconv.Atoi(nsrvRaw) + numRaw := app.conn.Scanner.Text() + num, err = strconv.Atoi(numRaw) if err != nil { return 0, err } - if nsrv != 0 { - for range nsrv { - if !app.conn.Scanner.Scan() { - return 0, app.conn.Scanner.Err() - } - app.incoming <- MessageEvent(app.conn.Scanner.Text()) + for range num { + if !app.conn.Scanner.Scan() { + return 0, app.conn.Scanner.Err() } + app.incoming <- MessageEvent(app.conn.Scanner.Text()) } var last int @@ -126,5 +123,5 @@ func (app *App) Last(n int) (num int, err error) { } app.incoming <- SetLastEvent(last) - return nsrv, nil + return num, nil }