diff options
author | delthas <delthas@dille.cc> | 2021-07-14 00:13:46 +0200 |
---|---|---|
committer | Hubert Hirtz <hubert@hirtz.pm> | 2021-07-14 11:17:54 +0200 |
commit | 2c7bc6ac7a8adcb591a975fbc3ab3abe47fa99fa (patch) | |
tree | fc2d3f60fefd7c1b665a1d82b6202ca322b03767 | |
parent | Automatically join channels on start (diff) |
Add notify types for fine-grained control of unread/highlight state
Namely, we want the unread light to show up only on actual messages, not
commands etc.
This opens the way for not showing an unread light when printing topic
on join.
-rw-r--r-- | app.go | 22 | ||||
-rw-r--r-- | commands.go | 30 | ||||
-rw-r--r-- | ui/buffers.go | 14 | ||||
-rw-r--r-- | ui/ui.go | 4 | ||||
-rw-r--r-- | window.go | 6 |
5 files changed, 45 insertions, 31 deletions
@@ -405,7 +405,7 @@ func (app *App) handleKeyEvent(ev *tcell.EventKey) { input := app.win.InputEnter() err := app.handleInput(buffer, input) if err != nil { - app.win.AddLine(app.win.CurrentBuffer(), false, ui.Line{ + app.win.AddLine(app.win.CurrentBuffer(), ui.NotifyUnread, ui.Line{ At: time.Now(), Head: "!!", HeadColor: tcell.ColorRed, @@ -468,7 +468,7 @@ func (app *App) handleIRCEvent(ev interface{}) { body.WriteString(" as ") body.WriteString(app.s.Nick()) } - app.win.AddLine(Home, false, ui.Line{ + app.win.AddLine(Home, ui.NotifyUnread, ui.Line{ At: msg.TimeOrNow(), Head: "--", Body: body.StyledString(), @@ -499,7 +499,7 @@ func (app *App) handleIRCEvent(ev interface{}) { body.SetStyle(tcell.StyleDefault.Foreground(tcell.ColorGray)) body.WriteString(ev.User) for _, c := range app.s.ChannelsSharedWith(ev.User) { - app.win.AddLine(c, false, ui.Line{ + app.win.AddLine(c, ui.NotifyNone, ui.Line{ At: msg.TimeOrNow(), Head: "--", HeadColor: tcell.ColorGray, @@ -522,7 +522,7 @@ func (app *App) handleIRCEvent(ev interface{}) { body.WriteByte('+') body.SetStyle(tcell.StyleDefault.Foreground(tcell.ColorGray)) body.WriteString(ev.User) - app.win.AddLine(ev.Channel, false, ui.Line{ + app.win.AddLine(ev.Channel, ui.NotifyNone, ui.Line{ At: msg.TimeOrNow(), Head: "--", HeadColor: tcell.ColorGray, @@ -538,7 +538,7 @@ func (app *App) handleIRCEvent(ev interface{}) { body.WriteByte('-') body.SetStyle(tcell.StyleDefault.Foreground(tcell.ColorGray)) body.WriteString(ev.User) - app.win.AddLine(ev.Channel, false, ui.Line{ + app.win.AddLine(ev.Channel, ui.NotifyNone, ui.Line{ At: msg.TimeOrNow(), Head: "--", HeadColor: tcell.ColorGray, @@ -553,7 +553,7 @@ func (app *App) handleIRCEvent(ev interface{}) { body.SetStyle(tcell.StyleDefault.Foreground(tcell.ColorGray)) body.WriteString(ev.User) for _, c := range ev.Channels { - app.win.AddLine(c, false, ui.Line{ + app.win.AddLine(c, ui.NotifyNone, ui.Line{ At: msg.TimeOrNow(), Head: "--", HeadColor: tcell.ColorGray, @@ -567,7 +567,7 @@ func (app *App) handleIRCEvent(ev interface{}) { body.SetStyle(tcell.StyleDefault.Foreground(tcell.ColorGray)) body.WriteString("Topic changed to: ") body.WriteString(ev.Topic) - app.win.AddLine(ev.Channel, false, ui.Line{ + app.win.AddLine(ev.Channel, ui.NotifyUnread, ui.Line{ At: msg.TimeOrNow(), Head: "--", HeadColor: tcell.ColorGray, @@ -575,7 +575,13 @@ func (app *App) handleIRCEvent(ev interface{}) { }) case irc.MessageEvent: buffer, line, hlNotification := app.formatMessage(ev) - app.win.AddLine(buffer, hlNotification, line) + var notify ui.NotifyType + if hlNotification { + notify = ui.NotifyHighlight + } else { + notify = ui.NotifyUnread + } + app.win.AddLine(buffer, notify, line) if hlNotification { app.notifyHighlight(buffer, ev.User, line.Body.String()) } diff --git a/commands.go b/commands.go index b9ac392..3f92540 100644 --- a/commands.go +++ b/commands.go @@ -140,7 +140,7 @@ func noCommand(app *App, buffer, content string) error { Content: content, Time: time.Now(), }) - app.win.AddLine(buffer, false, line) + app.win.AddLine(buffer, ui.NotifyNone, line) } return nil @@ -149,7 +149,7 @@ func noCommand(app *App, buffer, content string) error { func commandDoHelp(app *App, buffer string, args []string) (err error) { t := time.Now() if len(args) == 0 { - app.win.AddLine(app.win.CurrentBuffer(), false, ui.Line{ + app.win.AddLine(app.win.CurrentBuffer(), ui.NotifyNone, ui.Line{ At: t, Head: "--", Body: ui.PlainString("Available commands:"), @@ -158,22 +158,22 @@ func commandDoHelp(app *App, buffer string, args []string) (err error) { if cmd.Desc == "" { continue } - app.win.AddLine(app.win.CurrentBuffer(), false, ui.Line{ + app.win.AddLine(app.win.CurrentBuffer(), ui.NotifyNone, ui.Line{ At: t, Body: ui.PlainSprintf(" \x02%s\x02 %s", cmdName, cmd.Usage), }) - app.win.AddLine(app.win.CurrentBuffer(), false, ui.Line{ + app.win.AddLine(app.win.CurrentBuffer(), ui.NotifyNone, ui.Line{ At: t, Body: ui.PlainSprintf(" %s", cmd.Desc), }) - app.win.AddLine(app.win.CurrentBuffer(), false, ui.Line{ + app.win.AddLine(app.win.CurrentBuffer(), ui.NotifyNone, ui.Line{ At: t, }) } } else { search := strings.ToUpper(args[0]) found := false - app.win.AddLine(app.win.CurrentBuffer(), false, ui.Line{ + app.win.AddLine(app.win.CurrentBuffer(), ui.NotifyNone, ui.Line{ At: t, Head: "--", Body: ui.PlainSprintf("Commands that match \"%s\":", search), @@ -189,21 +189,21 @@ func commandDoHelp(app *App, buffer string, args []string) (err error) { usage.SetStyle(tcell.StyleDefault) usage.WriteByte(' ') usage.WriteString(cmd.Usage) - app.win.AddLine(app.win.CurrentBuffer(), false, ui.Line{ + app.win.AddLine(app.win.CurrentBuffer(), ui.NotifyNone, ui.Line{ At: t, Body: usage.StyledString(), }) - app.win.AddLine(app.win.CurrentBuffer(), false, ui.Line{ + app.win.AddLine(app.win.CurrentBuffer(), ui.NotifyNone, ui.Line{ At: t, Body: ui.PlainSprintf(" %s", cmd.Desc), }) - app.win.AddLine(app.win.CurrentBuffer(), false, ui.Line{ + app.win.AddLine(app.win.CurrentBuffer(), ui.NotifyNone, ui.Line{ At: t, }) found = true } if !found { - app.win.AddLine(app.win.CurrentBuffer(), false, ui.Line{ + app.win.AddLine(app.win.CurrentBuffer(), ui.NotifyNone, ui.Line{ At: t, Body: ui.PlainSprintf(" no command matches %q", args[0]), }) @@ -236,7 +236,7 @@ func commandDoMe(app *App, buffer string, args []string) (err error) { Content: content, Time: time.Now(), }) - app.win.AddLine(buffer, false, line) + app.win.AddLine(buffer, ui.NotifyNone, line) } return } @@ -254,7 +254,7 @@ func commandDoMsg(app *App, buffer string, args []string) (err error) { Content: content, Time: time.Now(), }) - app.win.AddLine(buffer, false, line) + app.win.AddLine(buffer, ui.NotifyNone, line) } return } @@ -274,7 +274,7 @@ func commandDoNames(app *App, buffer string, args []string) (err error) { } body := sb.StyledString() // TODO remove last space - app.win.AddLine(buffer, false, ui.Line{ + app.win.AddLine(buffer, ui.NotifyNone, ui.Line{ At: time.Now(), Head: "--", HeadColor: tcell.ColorGray, @@ -351,7 +351,7 @@ func commandDoR(app *App, buffer string, args []string) (err error) { Content: args[0], Time: time.Now(), }) - app.win.AddLine(buffer, false, line) + app.win.AddLine(buffer, ui.NotifyNone, line) } return } @@ -366,7 +366,7 @@ func commandDoTopic(app *App, buffer string, args []string) (err error) { } else { body = fmt.Sprintf("Topic (by %s, %s): %s", who, at.Local().Format("Mon Jan 2 15:04:05"), topic) } - app.win.AddLine(buffer, false, ui.Line{ + app.win.AddLine(buffer, ui.NotifyNone, ui.Line{ At: time.Now(), Head: "--", HeadColor: tcell.ColorGray, diff --git a/ui/buffers.go b/ui/buffers.go index 6de3923..4726447 100644 --- a/ui/buffers.go +++ b/ui/buffers.go @@ -16,6 +16,14 @@ type point struct { Split bool } +type NotifyType int + +const ( + NotifyNone NotifyType = iota + NotifyUnread + NotifyHighlight +) + type Line struct { At time.Time Head string @@ -251,7 +259,7 @@ func (bs *BufferList) Remove(title string) (ok bool) { return } -func (bs *BufferList) AddLine(title string, highlight bool, line Line) { +func (bs *BufferList) AddLine(title string, notify NotifyType, line Line) { idx := bs.idx(title) if idx < 0 { return @@ -280,10 +288,10 @@ func (bs *BufferList) AddLine(title string, highlight bool, line Line) { } } - if !line.Mergeable && idx != bs.current { + if notify != NotifyNone && idx != bs.current { b.unread = true } - if highlight && idx != bs.current { + if notify == NotifyHighlight && idx != bs.current { b.highlights++ } } @@ -136,8 +136,8 @@ func (ui *UI) RemoveBuffer(title string) { _ = ui.bs.Remove(title) } -func (ui *UI) AddLine(buffer string, highlight bool, line Line) { - ui.bs.AddLine(buffer, highlight, line) +func (ui *UI) AddLine(buffer string, notify NotifyType, line Line) { + ui.bs.AddLine(buffer, notify, line) } func (ui *UI) AddLines(buffer string, lines []Line) { @@ -15,7 +15,7 @@ const welcomeMessage = "senpai dev build. See senpai(1) for a list of keybinding func (app *App) initWindow() { app.win.AddBuffer(Home) - app.win.AddLine(Home, false, ui.Line{ + app.win.AddLine(Home, ui.NotifyNone, ui.Line{ Head: "--", Body: ui.PlainString(welcomeMessage), At: time.Now(), @@ -35,9 +35,9 @@ func (app *App) queueStatusLine(line ui.Line) { func (app *App) addStatusLine(line ui.Line) { buffer := app.win.CurrentBuffer() if buffer != Home { - app.win.AddLine(Home, false, line) + app.win.AddLine(Home, ui.NotifyNone, line) } - app.win.AddLine(buffer, false, line) + app.win.AddLine(buffer, ui.NotifyNone, line) } func (app *App) setStatus() { |