commit f6a5181
delthas
·
2022-02-13 13:22:44 +0000 UTC
parent 31f9033
Enable clicking on channel members to open a query with them
M
app.go
+25,
-2
1@@ -430,16 +430,39 @@ func (app *App) handleMouseEvent(ev *tcell.EventMouse) {
2 app.win.ScrollDownBy(4)
3 }
4 }
5- if ev.Buttons()&tcell.ButtonPrimary != 0 && x < app.cfg.ChanColWidth {
6- app.win.ClickBuffer(y + app.win.ChannelOffset())
7+ if ev.Buttons()&tcell.ButtonPrimary != 0 {
8+ if x < app.cfg.ChanColWidth {
9+ app.win.ClickBuffer(y + app.win.ChannelOffset())
10+ } else if x > w-app.cfg.MemberColWidth {
11+ app.win.ClickMember(y + app.win.MemberOffset())
12+ }
13 }
14 if ev.Buttons() == 0 {
15 if x < app.cfg.ChanColWidth {
16 if i := y + app.win.ChannelOffset(); i == app.win.ClickedBuffer() {
17 app.win.GoToBufferNo(i)
18 }
19+ } else if x > w-app.cfg.MemberColWidth {
20+ if i := y + app.win.MemberOffset(); i == app.win.ClickedMember() {
21+ netID, target := app.win.CurrentBuffer()
22+ s := app.sessions[netID]
23+ if s != nil && target != "" {
24+ members := s.Names(target)
25+ if i < len(members) {
26+ buffer := members[i].Name.Name
27+ i, added := app.win.AddBuffer(netID, "", buffer)
28+ app.win.JumpBufferIndex(i)
29+ if added {
30+ s.MonitorAdd(buffer)
31+ s.ReadGet(buffer)
32+ s.NewHistoryRequest(buffer).WithLimit(500).Before(time.Now())
33+ }
34+ }
35+ }
36+ }
37 }
38 app.win.ClickBuffer(-1)
39+ app.win.ClickMember(-1)
40 }
41 }
42
M
ui/ui.go
+23,
-6
1@@ -31,6 +31,7 @@ type UI struct {
2 status string
3
4 channelOffset int
5+ memberClicked int
6 memberOffset int
7 }
8
9@@ -125,6 +126,14 @@ func (ui *UI) ShowBufferNumbers(enable bool) {
10 ui.bs.ShowBufferNumbers(enable)
11 }
12
13+func (ui *UI) ClickedMember() int {
14+ return ui.memberClicked
15+}
16+
17+func (ui *UI) ClickMember(i int) {
18+ ui.memberClicked = i
19+}
20+
21 func (ui *UI) ScrollUp() {
22 ui.bs.ScrollUp(ui.bs.tlHeight / 2)
23 }
24@@ -164,6 +173,10 @@ func (ui *UI) ChannelOffset() int {
25 return ui.channelOffset
26 }
27
28+func (ui *UI) MemberOffset() int {
29+ return ui.memberOffset
30+}
31+
32 func (ui *UI) ScrollMemberUpBy(n int) {
33 ui.memberOffset -= n
34 if ui.memberOffset < 0 {
35@@ -358,7 +371,7 @@ func (ui *UI) Draw(members []irc.Member) {
36 ui.bs.DrawVerticalBufferList(ui.screen, 0, 0, ui.config.ChanColWidth, h, &ui.channelOffset)
37 }
38 if ui.config.MemberColWidth != 0 {
39- drawVerticalMemberList(ui.screen, w-ui.config.MemberColWidth, 0, ui.config.MemberColWidth, h, members, &ui.memberOffset)
40+ ui.drawVerticalMemberList(ui.screen, w-ui.config.MemberColWidth, 0, ui.config.MemberColWidth, h, members, &ui.memberOffset)
41 }
42 if ui.config.ChanColWidth == 0 {
43 ui.drawStatusBar(ui.config.ChanColWidth, h-3, w-ui.config.MemberColWidth)
44@@ -403,13 +416,16 @@ func (ui *UI) drawStatusBar(x0, y, width int) {
45 printString(ui.screen, &x, y, s.StyledString())
46 }
47
48-func drawVerticalMemberList(screen tcell.Screen, x0, y0, width, height int, members []irc.Member, offset *int) {
49+func (ui *UI) drawVerticalMemberList(screen tcell.Screen, x0, y0, width, height int, members []irc.Member, offset *int) {
50 if y0+len(members)-*offset < height {
51 *offset = y0 + len(members) - height
52 if *offset < 0 {
53 *offset = 0
54 }
55 }
56+ if ui.memberClicked >= len(members) {
57+ ui.memberClicked = len(members) - 1
58+ }
59
60 drawVerticalLine(screen, x0, y0, height)
61 x0++
62@@ -425,15 +441,16 @@ func drawVerticalMemberList(screen tcell.Screen, x0, y0, width, height int, memb
63 }
64
65 for i, m := range members[*offset:] {
66+ reverse := i+*offset == ui.memberClicked
67 x := x0
68 y := y0 + i
69 if m.Disconnected {
70- disconnectedSt := tcell.StyleDefault.Foreground(tcell.ColorRed)
71+ disconnectedSt := tcell.StyleDefault.Foreground(tcell.ColorRed).Reverse(reverse)
72 printString(screen, &x, y, Styled("\u274C", disconnectedSt))
73 } else if m.PowerLevel != "" {
74 x += padding - 1
75 powerLevelText := m.PowerLevel[:1]
76- powerLevelSt := tcell.StyleDefault.Foreground(tcell.ColorGreen)
77+ powerLevelSt := tcell.StyleDefault.Foreground(tcell.ColorGreen).Reverse(reverse)
78 printString(screen, &x, y, Styled(powerLevelText, powerLevelSt))
79 } else {
80 x += padding
81@@ -442,9 +459,9 @@ func drawVerticalMemberList(screen tcell.Screen, x0, y0, width, height int, memb
82 var name StyledString
83 nameText := truncate(m.Name.Name, width-1, "\u2026")
84 if m.Away {
85- name = Styled(nameText, tcell.StyleDefault.Foreground(tcell.ColorGray))
86+ name = Styled(nameText, tcell.StyleDefault.Foreground(tcell.ColorGray).Reverse(reverse))
87 } else {
88- name = PlainString(nameText)
89+ name = Styled(nameText, tcell.StyleDefault.Reverse(reverse))
90 }
91
92 printString(screen, &x, y, name)