summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authordelthas <delthas@dille.cc>2022-02-13 14:22:44 +0100
committerdelthas <delthas@dille.cc>2022-02-13 14:22:44 +0100
commitf6a5181eff5a827a907a13a609f7c38de4874579 (patch)
treea1f55607078d5db3c378dd22e88ff341d968f96c
parentMake CTRL+C alternatively clear the input and set '/quit' in it (diff)
Enable clicking on channel members to open a query with them
-rw-r--r--app.go27
-rw-r--r--ui/ui.go29
2 files changed, 48 insertions, 8 deletions
diff --git a/app.go b/app.go
index 8b52465..d26cf68 100644
--- a/app.go
+++ b/app.go
@@ -430,16 +430,39 @@ func (app *App) handleMouseEvent(ev *tcell.EventMouse) {
app.win.ScrollDownBy(4)
}
}
- if ev.Buttons()&tcell.ButtonPrimary != 0 && x < app.cfg.ChanColWidth {
- app.win.ClickBuffer(y + app.win.ChannelOffset())
+ if ev.Buttons()&tcell.ButtonPrimary != 0 {
+ if x < app.cfg.ChanColWidth {
+ app.win.ClickBuffer(y + app.win.ChannelOffset())
+ } else if x > w-app.cfg.MemberColWidth {
+ app.win.ClickMember(y + app.win.MemberOffset())
+ }
}
if ev.Buttons() == 0 {
if x < app.cfg.ChanColWidth {
if i := y + app.win.ChannelOffset(); i == app.win.ClickedBuffer() {
app.win.GoToBufferNo(i)
}
+ } else if x > w-app.cfg.MemberColWidth {
+ if i := y + app.win.MemberOffset(); i == app.win.ClickedMember() {
+ netID, target := app.win.CurrentBuffer()
+ s := app.sessions[netID]
+ if s != nil && target != "" {
+ members := s.Names(target)
+ if i < len(members) {
+ buffer := members[i].Name.Name
+ i, added := app.win.AddBuffer(netID, "", buffer)
+ app.win.JumpBufferIndex(i)
+ if added {
+ s.MonitorAdd(buffer)
+ s.ReadGet(buffer)
+ s.NewHistoryRequest(buffer).WithLimit(500).Before(time.Now())
+ }
+ }
+ }
+ }
}
app.win.ClickBuffer(-1)
+ app.win.ClickMember(-1)
}
}
diff --git a/ui/ui.go b/ui/ui.go
index fc1a2da..077f599 100644
--- a/ui/ui.go
+++ b/ui/ui.go
@@ -31,6 +31,7 @@ type UI struct {
status string
channelOffset int
+ memberClicked int
memberOffset int
}
@@ -125,6 +126,14 @@ func (ui *UI) ShowBufferNumbers(enable bool) {
ui.bs.ShowBufferNumbers(enable)
}
+func (ui *UI) ClickedMember() int {
+ return ui.memberClicked
+}
+
+func (ui *UI) ClickMember(i int) {
+ ui.memberClicked = i
+}
+
func (ui *UI) ScrollUp() {
ui.bs.ScrollUp(ui.bs.tlHeight / 2)
}
@@ -164,6 +173,10 @@ func (ui *UI) ChannelOffset() int {
return ui.channelOffset
}
+func (ui *UI) MemberOffset() int {
+ return ui.memberOffset
+}
+
func (ui *UI) ScrollMemberUpBy(n int) {
ui.memberOffset -= n
if ui.memberOffset < 0 {
@@ -358,7 +371,7 @@ func (ui *UI) Draw(members []irc.Member) {
ui.bs.DrawVerticalBufferList(ui.screen, 0, 0, ui.config.ChanColWidth, h, &ui.channelOffset)
}
if ui.config.MemberColWidth != 0 {
- drawVerticalMemberList(ui.screen, w-ui.config.MemberColWidth, 0, ui.config.MemberColWidth, h, members, &ui.memberOffset)
+ ui.drawVerticalMemberList(ui.screen, w-ui.config.MemberColWidth, 0, ui.config.MemberColWidth, h, members, &ui.memberOffset)
}
if ui.config.ChanColWidth == 0 {
ui.drawStatusBar(ui.config.ChanColWidth, h-3, w-ui.config.MemberColWidth)
@@ -403,13 +416,16 @@ func (ui *UI) drawStatusBar(x0, y, width int) {
printString(ui.screen, &x, y, s.StyledString())
}
-func drawVerticalMemberList(screen tcell.Screen, x0, y0, width, height int, members []irc.Member, offset *int) {
+func (ui *UI) drawVerticalMemberList(screen tcell.Screen, x0, y0, width, height int, members []irc.Member, offset *int) {
if y0+len(members)-*offset < height {
*offset = y0 + len(members) - height
if *offset < 0 {
*offset = 0
}
}
+ if ui.memberClicked >= len(members) {
+ ui.memberClicked = len(members) - 1
+ }
drawVerticalLine(screen, x0, y0, height)
x0++
@@ -425,15 +441,16 @@ func drawVerticalMemberList(screen tcell.Screen, x0, y0, width, height int, memb
}
for i, m := range members[*offset:] {
+ reverse := i+*offset == ui.memberClicked
x := x0
y := y0 + i
if m.Disconnected {
- disconnectedSt := tcell.StyleDefault.Foreground(tcell.ColorRed)
+ disconnectedSt := tcell.StyleDefault.Foreground(tcell.ColorRed).Reverse(reverse)
printString(screen, &x, y, Styled("\u274C", disconnectedSt))
} else if m.PowerLevel != "" {
x += padding - 1
powerLevelText := m.PowerLevel[:1]
- powerLevelSt := tcell.StyleDefault.Foreground(tcell.ColorGreen)
+ powerLevelSt := tcell.StyleDefault.Foreground(tcell.ColorGreen).Reverse(reverse)
printString(screen, &x, y, Styled(powerLevelText, powerLevelSt))
} else {
x += padding
@@ -442,9 +459,9 @@ func drawVerticalMemberList(screen tcell.Screen, x0, y0, width, height int, memb
var name StyledString
nameText := truncate(m.Name.Name, width-1, "\u2026")
if m.Away {
- name = Styled(nameText, tcell.StyleDefault.Foreground(tcell.ColorGray))
+ name = Styled(nameText, tcell.StyleDefault.Foreground(tcell.ColorGray).Reverse(reverse))
} else {
- name = PlainString(nameText)
+ name = Styled(nameText, tcell.StyleDefault.Reverse(reverse))
}
printString(screen, &x, y, name)