Authentication-Results: mail-b.sr.ht; dkim=pass header.d=librem.one header.i=@librem.one Received: from mx1.librem.one (mx1.librem.one [138.201.176.93]) by mail-b.sr.ht (Postfix) with ESMTPS id 3D83011EF31 for <~taiite/public-inbox@lists.sr.ht>; Tue, 14 Dec 2021 21:20:10 +0000 (UTC) Received: from smtp.librem.one (unknown [192.241.214.14]) by mx1.librem.one (Postfix) with ESMTPS id 2708281E1B for <~taiite/public-inbox@lists.sr.ht>; Tue, 14 Dec 2021 13:20:06 -0800 (PST) From: Zach DeCook DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=librem.one; s=smtp; t=1639516802; bh=VOEbbXssgqtGJOrFc7Tot03UcvEhknUY/hbtlkPvjj8=; h=From:To:Cc:Subject:Date:From; b=RPkH7UNWS86dbB9jvrW9f73M8YTZ5bkcfq+cWMfdXY4zuDPpS0uK2VeHUtXE5fjNJ Lz7MvFWZ+aow2sUzSo0bpCtphq2fkwGleAQHpG3yg+6f5b3zt0+PAup54zSKpBKnkA i8OkHqfwXGoDwLIrBVqdsZcIQzrj2CQHzeAqWjt5RhBfiHrbz+kSPCKILBTq/g9h0L Sj/i6jBILpz4W7fiaumWhre8CisR/Z9nx4Jwkn65z1ML8ERDc4p1Ha9vEGwq3aLuN8 4CE6yAMNeE/rEDQhWqZYIwJ+bimRS7dMPcixdOC+75qSNvKLom179m6FtIl431ZW6W 2I2R8reIgbHrg== To: ~taiite/public-inbox@lists.sr.ht Cc: Zach DeCook Subject: [PATCH senpai] config: allow gaps to be customized Date: Tue, 14 Dec 2021 16:19:27 -0500 Message-Id: <20211214211927.8827-1-zachdecook@librem.one> Content-Transfer-Encoding: 8bit --- app.go | 1 + config.go | 11 +++++++++++ doc/senpai.5.scd | 3 +++ ui/buffers.go | 10 +++++----- ui/draw_utils.go | 3 +-- ui/ui.go | 42 ++++++++++++++++-------------------------- 6 files changed, 37 insertions(+), 33 deletions(-) diff --git a/app.go b/app.go index 1144560..ca8b1d1 100644 --- a/app.go +++ b/app.go @@ -118,6 +118,7 @@ func NewApp(cfg Config) (app *App, err error) { app.win, err = ui.New(ui.Config{ NickColWidth: cfg.NickColWidth, + GapsColWidth: cfg.GapsColWidth, ChanColWidth: cfg.ChanColWidth, MemberColWidth: cfg.MemberColWidth, AutoComplete: func(cursorIdx int, text []rune) []ui.Completion { diff --git a/config.go b/config.go index 35857ba..69efbf6 100644 --- a/config.go +++ b/config.go @@ -65,6 +65,7 @@ type Config struct { Highlights []string OnHighlightPath string NickColWidth int + GapsColWidth int ChanColWidth int MemberColWidth int @@ -95,6 +96,7 @@ func Defaults() (cfg Config, err error) { Highlights: nil, OnHighlightPath: "", NickColWidth: 16, + GapsColWidth: 2, ChanColWidth: 0, MemberColWidth: 0, Colors: ConfigColors{ @@ -203,6 +205,15 @@ func unmarshal(filename string, cfg *Config) (err error) { if cfg.NickColWidth, err = strconv.Atoi(nicknames); err != nil { return err } + case "gaps": + var gaps string + if err := child.ParseParams(&gaps); err != nil { + return err + } + + if cfg.GapsColWidth, err = strconv.Atoi(gaps); err != nil { + return err + } case "channels": var channels string if err := child.ParseParams(&channels); err != nil { diff --git a/doc/senpai.5.scd b/doc/senpai.5.scd index e75513d..fc221ab 100644 --- a/doc/senpai.5.scd +++ b/doc/senpai.5.scd @@ -113,6 +113,9 @@ pane-widths { The number of cells that the column for nicknames occupies in the timeline. By default, 16. + *gaps* + The number of cells separating the timestamps, nicknames, and messages. By default, 2. + *channels* Make the channel list vertical, with a width equals to the given amount of cells. By default, the channel list is horizontal. diff --git a/ui/buffers.go b/ui/buffers.go index 1ccb921..4d400d0 100644 --- a/ui/buffers.go +++ b/ui/buffers.go @@ -555,15 +555,15 @@ func (bs *BufferList) DrawHorizontalBufferList(screen tcell.Screen, x0, y0, widt } } -func (bs *BufferList) DrawTimeline(screen tcell.Screen, x0, y0, nickColWidth int) { - clearArea(screen, x0, y0, bs.tlInnerWidth+nickColWidth+9, bs.tlHeight+2) +func (bs *BufferList) DrawTimeline(screen tcell.Screen, x0, y0, nickColWidth int, gapsColWidth int) { + clearArea(screen, x0, y0, 5+gapsColWidth+nickColWidth+gapsColWidth+bs.tlInnerWidth, bs.tlHeight+2) b := &bs.list[bs.current] xTopic := x0 printString(screen, &xTopic, y0, Styled(b.topic, tcell.StyleDefault)) y0++ - for x := x0; x < x0+bs.tlInnerWidth+nickColWidth+9; x++ { + for x := x0; x < x0+5+gapsColWidth+nickColWidth+gapsColWidth+bs.tlInnerWidth; x++ { st := tcell.StyleDefault.Foreground(tcell.ColorGray) screen.SetContent(x, y0, 0x2500, nil, st) } @@ -575,7 +575,7 @@ func (bs *BufferList) DrawTimeline(screen tcell.Screen, x0, y0, nickColWidth int break } - x1 := x0 + 9 + nickColWidth + x1 := x0 + 5 + gapsColWidth + nickColWidth + gapsColWidth line := &b.lines[i] nls := line.NewLines(bs.tlInnerWidth) @@ -593,7 +593,7 @@ func (bs *BufferList) DrawTimeline(screen tcell.Screen, x0, y0, nickColWidth int identSt := tcell.StyleDefault. Foreground(line.HeadColor). Reverse(line.Highlight) - printIdent(screen, x0+7, yi, nickColWidth, Styled(line.Head, identSt)) + printIdent(screen, x0+5+gapsColWidth, yi, nickColWidth, Styled(line.Head, identSt)) } x := x1 diff --git a/ui/draw_utils.go b/ui/draw_utils.go index 45e81db..394523c 100644 --- a/ui/draw_utils.go +++ b/ui/draw_utils.go @@ -27,14 +27,13 @@ func printIdent(screen tcell.Screen, x, y, width int, s StyledString) { if len(s.styles) != 0 && s.styles[0].Start == 0 { st = s.styles[0].Style } - screen.SetContent(x-1, y, ' ', nil, st) + screen.SetContent(x, y, ' ', nil, st) printString(screen, &x, y, s) if len(s.styles) != 0 { // TODO check if it's not a style that is from the truncated // part of s. st = s.styles[len(s.styles)-1].Style } - screen.SetContent(x, y, ' ', nil, st) } func printNumber(screen tcell.Screen, x *int, y int, st tcell.Style, n int) { diff --git a/ui/ui.go b/ui/ui.go index 7e02812..a16b296 100644 --- a/ui/ui.go +++ b/ui/ui.go @@ -11,6 +11,7 @@ import ( type Config struct { NickColWidth int + GapsColWidth int ChanColWidth int MemberColWidth int AutoComplete func(cursorIdx int, text []rune) []Completion @@ -315,7 +316,7 @@ func (ui *UI) InputBackSearch() { func (ui *UI) Resize() { w, h := ui.screen.Size() - innerWidth := w - 9 - ui.config.ChanColWidth - ui.config.NickColWidth - ui.config.MemberColWidth + innerWidth := w - ui.config.ChanColWidth - 5 - ui.config.GapsColWidth - ui.config.NickColWidth - ui.config.GapsColWidth - ui.config.MemberColWidth ui.e.Resize(innerWidth) if ui.config.ChanColWidth == 0 { ui.bs.ResizeTimeline(innerWidth, h-3) @@ -332,38 +333,27 @@ func (ui *UI) Size() (int, int) { func (ui *UI) Draw(members []irc.Member) { w, h := ui.screen.Size() + chanRow := 0 if ui.config.ChanColWidth == 0 { - ui.e.Draw(ui.screen, 9+ui.config.NickColWidth, h-2) - } else { - ui.e.Draw(ui.screen, 9+ui.config.ChanColWidth+ui.config.NickColWidth, h-1) + chanRow = 1 } - ui.bs.DrawTimeline(ui.screen, ui.config.ChanColWidth, 0, ui.config.NickColWidth) - if ui.config.ChanColWidth == 0 { - ui.bs.DrawHorizontalBufferList(ui.screen, 0, h-1, w-ui.config.MemberColWidth) - } else { - ui.bs.DrawVerticalBufferList(ui.screen, 0, 0, ui.config.ChanColWidth, h, &ui.channelOffset) - } + ui.e.Draw(ui.screen, 5 + ui.config.GapsColWidth + ui.config.NickColWidth + ui.config.GapsColWidth, h-1-chanRow) + + + ui.bs.DrawTimeline(ui.screen, ui.config.ChanColWidth, 0, ui.config.NickColWidth, ui.config.GapsColWidth) + ui.bs.DrawHorizontalBufferList(ui.screen, 0, h-chanRow, w-ui.config.MemberColWidth) + if ui.config.MemberColWidth != 0 { 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) - } else { - ui.drawStatusBar(ui.config.ChanColWidth, h-2, w-ui.config.ChanColWidth-ui.config.MemberColWidth) - } + ui.drawStatusBar(ui.config.ChanColWidth, h-2-chanRow, w-ui.config.MemberColWidth) - if ui.config.ChanColWidth == 0 { - for x := 0; x < 9+ui.config.NickColWidth; x++ { - ui.screen.SetContent(x, h-2, ' ', nil, tcell.StyleDefault) - } - printIdent(ui.screen, 7, h-2, ui.config.NickColWidth, ui.prompt) - } else { - for x := ui.config.ChanColWidth; x < 9+ui.config.ChanColWidth+ui.config.NickColWidth; x++ { - ui.screen.SetContent(x, h-1, ' ', nil, tcell.StyleDefault) - } - printIdent(ui.screen, ui.config.ChanColWidth+7, h-1, ui.config.NickColWidth, ui.prompt) + for x := 0; x < 5 + ui.config.GapsColWidth + ui.config.NickColWidth + ui.config.GapsColWidth; x++ { + ui.screen.SetContent(x, h-1-chanRow, ' ', nil, tcell.StyleDefault) } + printIdent(ui.screen, 5 + ui.config.GapsColWidth, h-1-chanRow, ui.config.NickColWidth, ui.prompt) + ui.screen.Show() } @@ -381,7 +371,7 @@ func (ui *UI) drawStatusBar(x0, y, width int) { x := x0 + 5 + ui.config.NickColWidth printString(ui.screen, &x, y, s.StyledString()) - x += 2 + x += ui.config.GapsColWidth s.Reset() s.SetStyle(tcell.StyleDefault.Foreground(tcell.ColorGray)) -- 2.34.1