Skip to content
This repository was archived by the owner on May 3, 2024. It is now read-only.

Commit 53ba979

Browse files
committed
Version bump 0.5.1
Add nick color support for users Update gocui to latest version Fix bugs
1 parent 318efbb commit 53ba979

39 files changed

+1398
-2067
lines changed

komanda/client/channel.go

+28-3
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package client
22

33
import (
44
"fmt"
5+
"math/rand"
56
"sort"
67

78
"github.com/fatih/color"
@@ -12,9 +13,22 @@ import (
1213

1314
type RenderHandlerFunc func(*Channel, *gocui.View) error
1415

16+
var (
17+
ANSIColors = []int{34, 36, 31, 35, 33, 37, 34, 32, 36, 31, 35, 33}
18+
)
19+
1520
type User struct {
16-
Nick string
17-
Mode string
21+
Nick string
22+
Mode string
23+
Color int
24+
}
25+
26+
func (u *User) String(color bool) string {
27+
if color {
28+
return fmt.Sprintf("\033[%dm%s%s\033[0m", u.Color, u.Mode, u.Nick)
29+
} else {
30+
return fmt.Sprintf("%s%s", u.Mode, u.Nick)
31+
}
1832
}
1933

2034
type NickSorter []*User
@@ -39,6 +53,16 @@ type Channel struct {
3953
Loading *nbc.NonBlockingChan
4054
}
4155

56+
func (channel *Channel) FindUser(nick string) *User {
57+
for _, u := range channel.Users {
58+
if u.Nick == nick {
59+
return u
60+
}
61+
}
62+
63+
return nil
64+
}
65+
4266
func (channel *Channel) View() (*gocui.View, error) {
4367
return channel.Server.Gui.View(channel.Name)
4468
}
@@ -98,7 +122,8 @@ func (channel *Channel) RemoveNick(nick string) {
98122

99123
func (channel *Channel) AddNick(nick string) {
100124
user := &User{
101-
Nick: nick,
125+
Nick: nick,
126+
Color: ANSIColors[rand.Intn(len(ANSIColors))],
102127
}
103128

104129
channel.Users = append(channel.Users, user)

komanda/client/server.go

+10
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,16 @@ func (server *Server) HasChannel(name string) (*Channel, int, bool) {
6767
return nil, -1, false
6868
}
6969

70+
func (server *Server) FindChannel(name string) *Channel {
71+
c, _, has := server.HasChannel(name)
72+
73+
if has {
74+
return c
75+
}
76+
77+
return nil
78+
}
79+
7080
func (server *Server) ChannelView(name string) (*gocui.View, error) {
7181
if c, _, ok := server.HasChannel(name); ok {
7282
return c.View()

komanda/command/part.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -42,14 +42,14 @@ func (e *PartCmd) Exec(args []string) error {
4242

4343
c := Server.GetCurrentChannel()
4444

45-
if err := g.SetCurrentView(c.Name); err != nil {
45+
if _, err := g.SetCurrentView(c.Name); err != nil {
4646
return err
4747
}
4848

4949
c.Unread = false
5050
}
5151

52-
if err := g.SetCurrentView("input"); err != nil {
52+
if _, err := g.SetCurrentView("input"); err != nil {
5353
return err
5454
}
5555

komanda/command/window.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -31,13 +31,13 @@ func (e *WindowCmd) Exec(args []string) error {
3131

3232
c := Server.GetCurrentChannel()
3333

34-
if err := g.SetCurrentView(c.Name); err != nil {
34+
if _, err := g.SetCurrentView(c.Name); err != nil {
3535
return err
3636
}
3737

3838
c.Unread = false
3939

40-
if err := g.SetCurrentView("input"); err != nil {
40+
if _, err := g.SetCurrentView("input"); err != nil {
4141
return err
4242
}
4343

komanda/gui.go

+4-5
Original file line numberDiff line numberDiff line change
@@ -25,26 +25,25 @@ func Run(build string, server *client.Server) {
2525
ui.VersionLine = fmt.Sprintf(" Version: %s%s Source Code: %s\n",
2626
Version, build, Website)
2727

28-
g := gocui.NewGui()
28+
g, err := gocui.NewGui()
2929

30-
if err := g.Init(); err != nil {
30+
if err != nil {
3131
log.Panicln(err)
3232
}
3333

3434
defer g.Close()
3535

3636
server.Gui = g
3737

38-
g.Editor = gocui.EditorFunc(simpleEditor)
39-
4038
client.New(server)
4139

4240
defer server.Client.Quit()
4341

4442
Server = server
4543
ui.Server = server
4644

47-
g.SetLayout(ui.Layout)
45+
ui.Editor = gocui.EditorFunc(simpleEditor)
46+
g.SetManagerFunc(ui.Layout)
4847

4948
command.Register(server)
5049

komanda/ui/color.go

+43
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
package ui
2+
3+
import (
4+
"fmt"
5+
"strings"
6+
7+
cc "github.com/fatih/color"
8+
9+
"github.com/aybabtme/rgbterm"
10+
"github.com/davecgh/go-spew/spew"
11+
"github.com/mephux/komanda-cli/komanda/logger"
12+
)
13+
14+
type Color struct {
15+
R uint8
16+
G uint8
17+
B uint8
18+
}
19+
20+
var (
21+
Red = Color{0, 0, 0}
22+
Purple = Color{252, 255, 43}
23+
MyNickColor = Color{22, 226, 46}
24+
TimestampColor = Color{53, 68, 55}
25+
MyTextColor = Color{192, 232, 32}
26+
)
27+
28+
func ColorString(color Color, str string) string {
29+
30+
logger.Logger.Println("BEFORE!!!", spew.Sdump(str))
31+
32+
c := rgbterm.FgString(str, color.R, color.G, color.B)
33+
c = strings.Replace(c, "\x1b", "\033", -1)
34+
35+
tt := cc.New(cc.FgGreen).SprintFunc()
36+
37+
logger.Logger.Println("AFTER!!!", spew.Sdump(c), spew.Sdump(tt("TEST")))
38+
return c
39+
}
40+
41+
func ColorStringF(color Color, format string, args ...interface{}) string {
42+
return rgbterm.FgString(fmt.Sprintf(format, args), color.R, color.G, color.B)
43+
}

komanda/ui/handlers.go

+15-1
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package ui
22

33
import (
44
"fmt"
5+
"math/rand"
56
"strconv"
67
"strings"
78
"time"
@@ -249,6 +250,7 @@ func BindHandlers() {
249250
// logger.Logger.Printf("ADD NICK %s\n", spew.Sdump(nick))
250251

251252
user.Nick = nick
253+
user.Color = client.ANSIColors[rand.Intn(len(client.ANSIColors))]
252254
c.Users = append(c.Users, user)
253255
}
254256

@@ -334,12 +336,24 @@ func BindHandlers() {
334336
Server.Exec(ircChan,
335337
func(g *gocui.Gui, v *gocui.View, s *client.Server) error {
336338
timestamp := time.Now().Format("03:04")
337-
fmt.Fprintf(v, "[%s] <- %s: %s\n", timestampColor(timestamp), nickColor(line.Nick), line.Text())
339+
340+
var highlight bool
338341

339342
if strings.Contains(line.Text(), Server.Client.Me().Nick) {
343+
highlight = true
340344
notify.Push(fmt.Sprintf("Highlight from %s", line.Nick), line.Text(), "", notificator.UR_NORMAL)
341345
}
342346

347+
text := line.Text()
348+
style := "<-"
349+
350+
if highlight {
351+
text = color.YellowString(text)
352+
style = color.YellowString("!!")
353+
}
354+
355+
fmt.Fprintf(v, "[%s] %s %s: %s\n", timestampColor(timestamp), style, c.FindUser(line.Nick).String(true), text)
356+
343357
return nil
344358
})
345359
}

komanda/ui/input.go

+5-1
Original file line numberDiff line numberDiff line change
@@ -12,12 +12,16 @@ func InputView(g *gocui.Gui, x, y, maxX, maxY int) error {
1212
return err
1313
}
1414

15-
if err := g.SetCurrentView("input"); err != nil {
15+
_, err := g.SetCurrentView("input")
16+
17+
if err != nil {
1618
return err
1719
}
1820

1921
logger.Logger.Println(" CHANGE:", "input", x, y, maxX, maxY)
2022

23+
v.Editor = Editor
24+
2125
// v.FgColor = gocui.ColorGreen
2226
v.BgColor = gocui.ColorDefault
2327

komanda/ui/layout.go

+3
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,9 @@ var (
1616
Server *client.Server
1717
Name = ""
1818
notify *notificator.Notificator
19+
20+
// Editor for input
21+
Editor gocui.Editor
1922
)
2023

2124
func Layout(g *gocui.Gui) error {

komanda/ui/menu.go

+3-1
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,9 @@ func MenuView(g *gocui.Gui, maxX, maxY int) error {
1616
return err
1717
}
1818

19-
if err := g.SetCurrentView("menu"); err != nil {
19+
_, err := g.SetCurrentView("menu")
20+
21+
if err != nil {
2022
return err
2123
}
2224

komanda/util.go

+9-6
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ var (
2626

2727
myNickColor = color.New(color.FgGreen).SprintFunc()
2828
myTimetampColor = color.New(color.FgMagenta).SprintFunc()
29-
myTextColor = color.New(color.FgCyan).SprintFunc()
29+
myTextColor = color.New(color.FgHiGreen).SprintFunc()
3030
)
3131

3232
// TODO: fix \x00 issues
@@ -239,10 +239,13 @@ func GetLine(g *gocui.Gui, v *gocui.View) error {
239239
return err
240240
} else {
241241
if mainView.Name() != client.StatusChannel {
242+
243+
c := Server.FindChannel(Server.CurrentChannel)
244+
242245
timestamp := time.Now().Format("03:04")
243246
fmt.Fprintf(mainView, "[%s] -> %s: %s\n",
244247
myTimetampColor(timestamp),
245-
myNickColor(Server.Client.Me().Nick),
248+
myNickColor(c.FindUser(Server.Client.Me().Nick).String(false)),
246249
myTextColor(strings.Replace(line, "\x00", "", -1)))
247250
}
248251
}
@@ -320,7 +323,7 @@ func FocusStatusView(g *gocui.Gui, v *gocui.View) error {
320323

321324
v.Autoscroll = true
322325

323-
if err := g.SetCurrentView(client.StatusChannel); err != nil {
326+
if _, err := g.SetCurrentView(client.StatusChannel); err != nil {
324327
return err
325328
}
326329

@@ -331,7 +334,7 @@ func FocusInputView(g *gocui.Gui, v *gocui.View) error {
331334

332335
v.SetCursor(len(v.Buffer()+"")-1, 0)
333336

334-
if err := g.SetCurrentView("input"); err != nil {
337+
if _, err := g.SetCurrentView("input"); err != nil {
335338
return err
336339
}
337340

@@ -366,7 +369,7 @@ func nextView(g *gocui.Gui, v *gocui.View) error {
366369
g.SetViewOnTop("header")
367370
}
368371

369-
if err := g.SetCurrentView(Server.Channels[next].Name); err != nil {
372+
if _, err := g.SetCurrentView(Server.Channels[next].Name); err != nil {
370373
return err
371374
}
372375

@@ -412,7 +415,7 @@ func prevView(g *gocui.Gui, v *gocui.View) error {
412415
g.SetViewOnTop("header")
413416
}
414417

415-
if err := g.SetCurrentView(Server.Channels[next].Name); err != nil {
418+
if _, err := g.SetCurrentView(Server.Channels[next].Name); err != nil {
416419
return err
417420
}
418421

komanda/version.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ const Name = "komanda"
1818
const Description = "IRC Client"
1919

2020
// Version number
21-
const Version = "0.5.0"
21+
const Version = "0.5.1"
2222

2323
// Website number
2424
const Website = "github.com/mephux/komanda"

vendor/github.com/aybabtme/rgbterm/LICENSE

+51
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)