commit 7824063

Hubert Hirtz  ·  2020-06-03 20:31:57 +0000 UTC
parent 2236a7d
Nick colors
2 files changed,  +29, -5
+27, -4
 1@@ -7,6 +7,7 @@ import (
 2 	"git.sr.ht/~taiite/senpai/irc"
 3 	"git.sr.ht/~taiite/senpai/ui"
 4 	"github.com/gdamore/tcell"
 5+	"hash/fnv"
 6 	"log"
 7 	"os/user"
 8 	"strings"
 9@@ -167,8 +168,10 @@ func handleInput(s *irc.Session, buffer, content string) {
10 }
11 
12 func formatIRCMessage(nick, content string) (line string) {
13+	c := color(nick)
14+
15 	if content == "" {
16-		line = fmt.Sprintf("\x02%s\x00:", nick)
17+		line = fmt.Sprintf("%s%s\x00:", string(c[:]), nick)
18 		return
19 	}
20 
21@@ -176,15 +179,35 @@ func formatIRCMessage(nick, content string) (line string) {
22 		content = strings.TrimSuffix(content[1:], "\x01")
23 
24 		if strings.HasPrefix(content, "ACTION") {
25-			line = fmt.Sprintf("*\x02%s\x00%s", nick, content[6:])
26+			line = fmt.Sprintf("%s%s\x00%s", string(c[:]), nick, content[6:])
27 		} else {
28-			line = fmt.Sprintf("\x1dCTCP request from\x1d \x02%s\x00: %s", nick, content)
29+			line = fmt.Sprintf("\x1dCTCP request from\x1d %s%s\x00: %s", string(c[:]), nick, content)
30 		}
31 
32 		return
33 	}
34 
35-	line = fmt.Sprintf("\x02%s\x00  %s", nick, content)
36+	line = fmt.Sprintf("%s%s\x00:  %s", string(c[:]), nick, content)
37+
38+	return
39+}
40+
41+func color(nick string) (c [3]rune) {
42+	h := fnv.New32()
43+	_, _ = h.Write([]byte(nick))
44+
45+	sum := h.Sum32() % 14
46+
47+	if 1 <= sum {
48+		sum++
49+	}
50+	if 8 <= sum {
51+		sum++
52+	}
53+
54+	c[0] = '\x03'
55+	c[1] = rune(sum/10) + '0'
56+	c[2] = rune(sum%10) + '0'
57 
58 	return
59 }
+2, -1
 1@@ -364,7 +364,8 @@ func (ui *UI) drawBuffer() {
 2 				bold = false
 3 				italic = false
 4 				underline = false
 5-				st = st.Normal()
 6+				colorState = 0
 7+				st = tcell.StyleDefault
 8 				continue
 9 			}
10 			if r == 0x02 {