diff --git a/admin.go b/admin.go index 5ca8677..10938d0 100644 --- a/admin.go +++ b/admin.go @@ -43,12 +43,16 @@ func adminscreen() { var avatarColors string getconfig("avatarcolors", &avatarColors) + loadLingo() - messages := []*struct { - name string - label string - text string - }{ + type adminfield struct { + name string + label string + text string + oneline bool + } + + messages := []*adminfield{ { name: "servermsg", label: "server", @@ -65,11 +69,20 @@ func adminscreen() { text: string(loginMsg), }, { - name: "avatarcolors", - label: "avatar colors (4 RGBA hex numbers)", - text: string(avatarColors), + name: "avatarcolors", + label: "avatar colors (4 RGBA hex numbers)", + text: string(avatarColors), + oneline: true, }, } + for _, l := range []string{"honked", "bonked", "honked back", "qonked", "evented"} { + messages = append(messages, &adminfield{ + name: "lingo-" + strings.ReplaceAll(l, " ", ""), + label: "lingo for " + l, + text: relingo[l], + oneline: true, + }) + } cursel := 0 hidecursor := func() { @@ -145,16 +158,19 @@ func adminscreen() { } msglineno := func(idx int) int { - off := 2 + off := 1 if idx == -1 { return off } for i, m := range messages { - off += 2 + off += 1 if i == idx { return off } - off += linecount(m.text) + if !m.oneline { + off += 1 + off += linecount(m.text) + } } off += 2 return off @@ -170,12 +186,14 @@ func adminscreen() { label := messages[idx].label if idx == cursel { label = reverse(label) - if editing { - label = magenta(label) - } } + label = magenta(label) text := forscreen(messages[idx].text) - stdout.WriteString(fmt.Sprintf("%s\n %s", label, text)) + if messages[idx].oneline { + stdout.WriteString(fmt.Sprintf("%s\t %s", label, text)) + } else { + stdout.WriteString(fmt.Sprintf("%s\n %s", label, text)) + } } drawscreen := func() { @@ -202,20 +220,20 @@ func adminscreen() { selectnext := func() { if cursel < len(messages)-1 { movecursor(4, msglineno(cursel)) - stdout.WriteString(messages[cursel].label) + stdout.WriteString(magenta(messages[cursel].label)) cursel++ movecursor(4, msglineno(cursel)) - stdout.WriteString(reverse(messages[cursel].label)) + stdout.WriteString(reverse(magenta(messages[cursel].label))) stdout.Flush() } } selectprev := func() { if cursel > 0 { movecursor(4, msglineno(cursel)) - stdout.WriteString(messages[cursel].label) + stdout.WriteString(magenta(messages[cursel].label)) cursel-- movecursor(4, msglineno(cursel)) - stdout.WriteString(reverse(messages[cursel].label)) + stdout.WriteString(reverse(magenta(messages[cursel].label))) stdout.Flush() } } @@ -231,6 +249,9 @@ func adminscreen() { case '\x1b': break loop case '\n': + if m.oneline { + break loop + } m.text += "\n" drawscreen() case 127: diff --git a/docs/changelog.txt b/docs/changelog.txt index 78df37b..af29eae 100644 --- a/docs/changelog.txt +++ b/docs/changelog.txt @@ -2,6 +2,8 @@ changelog === next +- Custom lingo for those who don't like honking. + + Better support for rich text bios. + Follow and unfollow should work a little better. diff --git a/fun.go b/fun.go index d5d08bc..8ed2ce2 100644 --- a/fun.go +++ b/fun.go @@ -51,6 +51,17 @@ func init() { allowedclasses["dl"] = true } +var relingo = make(map[string]string) + +func loadLingo() { + for _, l := range []string{"honked", "bonked", "honked back", "qonked", "evented"} { + v := l + k := "lingo-" + strings.ReplaceAll(l, " ", "") + getconfig(k, &v) + relingo[l] = v + } +} + func reverbolate(userid int64, honks []*Honk) { var user *WhatAbout somenumberedusers.Get(userid, &user) @@ -162,6 +173,7 @@ func reverbolate(userid int64, honks []*Honk) { h.HTPrecis = template.HTML(h.Precis) h.HTML = template.HTML(h.Noise) + h.What = relingo[h.What] } } diff --git a/web.go b/web.go index 7ea9992..ff0b0e7 100644 --- a/web.go +++ b/web.go @@ -2346,6 +2346,7 @@ func serve() { go redeliverator() go tracker() go bgmonitor() + loadLingo() w100 := wait100ms() readviews = templates.Load(debugMode,