From 984fb4eb2faa15142cde5482e558c28c8f178ec6 Mon Sep 17 00:00:00 2001 From: "R. Aidan Campbell" Date: Sun, 6 Feb 2022 21:21:08 -0700 Subject: [PATCH] max width for softwraping now configured via maxwidth configuration item: default or invalid value falls back to previous 100 column --- client.go | 21 ++++++++++++++------- defaults.go | 1 + page.go | 7 +++++-- page_test.go | 10 +++++++--- pages.go | 4 ++-- 5 files changed, 29 insertions(+), 14 deletions(-) diff --git a/client.go b/client.go index b1795cb..1141030 100644 --- a/client.go +++ b/client.go @@ -73,7 +73,8 @@ func (c *client) Draw() { screen.WriteString("\033[0m") screen.WriteString(c.TopBar.Render(c.Width, c.Options["theme"])) screen.WriteString("\n") - pageContent := c.PageState.Render(c.Height, c.Width-1, (c.Options["theme"] == "color")) + maxWidth, _ := strconv.Atoi(c.Options["maxwidth"]) + pageContent := c.PageState.Render(c.Height, c.Width-1, maxWidth, (c.Options["theme"] == "color")) var re *regexp.Regexp if c.Options["theme"] == "inverse" { screen.WriteString("\033[7m") @@ -258,7 +259,8 @@ func (c *client) TakeControlInput() { } err = c.NextSearchItem(0) if err != nil { - c.PageState.History[c.PageState.Position].WrapContent(c.Width-1,(c.Options["theme"] == "color")) + maxWidth, _ := strconv.Atoi(c.Options["maxwidth"]) + c.PageState.History[c.PageState.Position].WrapContent(c.Width-1,maxWidth,(c.Options["theme"] == "color")) c.Draw() } case ':', ' ': @@ -988,7 +990,8 @@ func (c *client) handleGopher(u Url) { } else { pg.FileType = "text" } - pg.WrapContent(c.Width-1, (c.Options["theme"] == "color")) + maxWidth, _ := strconv.Atoi(c.Options["maxwidth"]) + pg.WrapContent(c.Width-1, maxWidth, (c.Options["theme"] == "color")) c.PageState.Add(pg) c.SetPercentRead() c.ClearMessage() @@ -1015,7 +1018,8 @@ func (c *client) handleGemini(u Url) { u.Mime = capsule.MimeMin pg := MakePage(u, capsule.Content, capsule.Links) pg.FileType = capsule.MimeMaj - pg.WrapContent(c.Width-1, (c.Options["theme"] == "color")) + maxWidth, _ := strconv.Atoi(c.Options["maxwidth"]) + pg.WrapContent(c.Width-1, maxWidth, (c.Options["theme"] == "color")) c.PageState.Add(pg) c.SetPercentRead() c.ClearMessage() @@ -1081,7 +1085,8 @@ func (c *client) handleLocal(u Url) { if ext == ".jpg" || ext == ".jpeg" || ext == ".gif" || ext == ".png" { pg.FileType = "image" } - pg.WrapContent(c.Width-1, (c.Options["theme"] == "color")) + maxWidth, _ := strconv.Atoi(c.Options["maxwidth"]) + pg.WrapContent(c.Width-1, maxWidth, (c.Options["theme"] == "color")) c.PageState.Add(pg) c.SetPercentRead() c.ClearMessage() @@ -1097,7 +1102,8 @@ func (c *client) handleFinger(u Url) { return } pg := MakePage(u, content, []string{}) - pg.WrapContent(c.Width-1, (c.Options["theme"] == "color")) + maxWidth, _ := strconv.Atoi(c.Options["maxwidth"]) + pg.WrapContent(c.Width-1, maxWidth, (c.Options["theme"] == "color")) c.PageState.Add(pg) c.SetPercentRead() c.ClearMessage() @@ -1117,7 +1123,8 @@ func (c *client) handleWeb(u Url) { return } pg := MakePage(u, page.Content, page.Links) - pg.WrapContent(c.Width-1, (c.Options["theme"] == "color")) + maxWidth, _ := strconv.Atoi(c.Options["maxwidth"]) + pg.WrapContent(c.Width-1, maxWidth, (c.Options["theme"] == "color")) c.PageState.Add(pg) c.SetPercentRead() c.ClearMessage() diff --git a/defaults.go b/defaults.go index 24429d7..92feaad 100644 --- a/defaults.go +++ b/defaults.go @@ -56,6 +56,7 @@ var defaultOptions = map[string]string{ "theme": "normal", // "normal", "inverted", "color" "timeout": "15", // connection timeout for gopher/gemini in seconds "webmode": "none", // "none", "gui", "lynx", "w3m", "elinks" + "maxwidth": "100", } // homePath will return the path to your home directory as a string diff --git a/page.go b/page.go index ac31168..99ebdce 100644 --- a/page.go +++ b/page.go @@ -65,12 +65,15 @@ func (p *Page) RenderImage(width int) { // width and updates the WrappedContent // of the Page struct width a string slice // of the wrapped data -func (p *Page) WrapContent(width int, color bool) { +func (p *Page) WrapContent(width, maxWidth int, color bool) { if p.FileType == "image" { p.RenderImage(width) return } - width = min(width, 100) + if maxWidth < 100 { + maxWidth = 100 + } + width = min(width, maxWidth) counter := 0 spacer := "" var content strings.Builder diff --git a/page_test.go b/page_test.go index b5e8f94..33de341 100644 --- a/page_test.go +++ b/page_test.go @@ -20,8 +20,9 @@ func Test_WrapContent_Wrapped_Line_Length(t *testing.T) { Color bool } type args struct { - width int - color bool + width int + maxWidth int + color bool } // create a Url for use by the MakePage function @@ -41,6 +42,7 @@ func Test_WrapContent_Wrapped_Line_Length(t *testing.T) { "", }, args{ + 10, 10, false, }, @@ -57,6 +59,7 @@ func Test_WrapContent_Wrapped_Line_Length(t *testing.T) { "", }, args{ + 10, 10, false, }, @@ -77,6 +80,7 @@ func Test_WrapContent_Wrapped_Line_Length(t *testing.T) { "", }, args{ + 10, 10, false, }, @@ -85,7 +89,7 @@ func Test_WrapContent_Wrapped_Line_Length(t *testing.T) { for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { p := MakePage(url, tt.input, []string{""}) - p.WrapContent(tt.args.width-1, tt.args.color) + p.WrapContent(tt.args.width-1, tt.args.maxWidth, tt.args.color) if !reflect.DeepEqual(p.WrappedContent, tt.expects) { t.Errorf("Test failed - %s\nexpects %s\nactual %s", tt.name, tt.expects, p.WrappedContent) } diff --git a/pages.go b/pages.go index e4ef964..647264e 100644 --- a/pages.go +++ b/pages.go @@ -60,7 +60,7 @@ func (p *Pages) Add(pg Page) { // Render wraps the content for the current page and returns // the page content as a string slice -func (p *Pages) Render(termHeight, termWidth int, color bool) []string { +func (p *Pages) Render(termHeight, termWidth, maxWidth int, color bool) []string { if p.Length < 1 { return make([]string, 0) } @@ -68,7 +68,7 @@ func (p *Pages) Render(termHeight, termWidth int, color bool) []string { prev := len(p.History[p.Position].WrappedContent) if termWidth != p.History[p.Position].WrapWidth || p.History[p.Position].Color != color { - p.History[p.Position].WrapContent(termWidth, color) + p.History[p.Position].WrapContent(termWidth, maxWidth, color) } now := len(p.History[p.Position].WrappedContent)