diff --git a/go.mod b/go.mod index f29102d98222dc510e0c43f79ca0819a2447ce3d..3520c29558dabae9dee709b06851b1b08cc64848 100755 --- a/go.mod +++ b/go.mod @@ -2,6 +2,8 @@ module github.com/charmbracelet/soft-serve go 1.17 +replace github.com/charmbracelet/glamour => ../glamour + require ( github.com/alecthomas/chroma v0.10.0 github.com/caarlos0/env/v6 v6.9.1 @@ -22,7 +24,7 @@ require ( ) require ( - github.com/aymanbagabas/go-osc52 v1.0.2 + github.com/aymanbagabas/go-osc52 v1.0.3 github.com/charmbracelet/keygen v0.3.0 github.com/gobwas/glob v0.2.3 github.com/gogs/git-module v1.6.0 diff --git a/go.sum b/go.sum index 5a3108f5babe49c4cebba11147015995f7ab8370..97ce45e54432cbd848b665654cbc10fd77b47401 100644 --- a/go.sum +++ b/go.sum @@ -17,10 +17,10 @@ github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5 h1:0CwZNZbxp69SHPd github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5/go.mod h1:wHh0iHkYZB8zMSxRWpUBQtwG5a7fFgvEO+odwuTv2gs= github.com/atotto/clipboard v0.1.4 h1:EH0zSVneZPSuFR11BlR9YppQTVDbh5+16AmcJi4g1z4= github.com/atotto/clipboard v0.1.4/go.mod h1:ZY9tmq7sm5xIbd9bOK4onWV4S6X0u6GY7Vn0Yu86PYI= -github.com/aymanbagabas/go-osc52 v1.0.1 h1:juDXgeKhMfVnylcoA4S7p9E4q+9DErUZGkX8t2ZR2j8= -github.com/aymanbagabas/go-osc52 v1.0.1/go.mod h1:zT8H+Rk4VSabYN90pWyugflM3ZhpTZNC7cASDfUCdT4= github.com/aymanbagabas/go-osc52 v1.0.2 h1:tRqcFxSpoDFwHzgjjgU3rACsQHmKo7w7EJf+oCEFI6k= github.com/aymanbagabas/go-osc52 v1.0.2/go.mod h1:zT8H+Rk4VSabYN90pWyugflM3ZhpTZNC7cASDfUCdT4= +github.com/aymanbagabas/go-osc52 v1.0.3 h1:DTwqENW7X9arYimJrPeGZcV0ln14sGMt3pHZspWD+Mg= +github.com/aymanbagabas/go-osc52 v1.0.3/go.mod h1:zT8H+Rk4VSabYN90pWyugflM3ZhpTZNC7cASDfUCdT4= github.com/aymerick/douceur v0.2.0 h1:Mv+mAeH1Q+n9Fr+oyamOlAkUNPWPlA8PPGR0QAaYuPk= github.com/aymerick/douceur v0.2.0/go.mod h1:wlT5vV2O3h55X9m7iVYN0TBM0NH/MmbLnd30/FjWUq4= github.com/caarlos0/env/v6 v6.9.1 h1:zOkkjM0F6ltnQ5eBX6IPI41UP/KDGEK7rRPwGCNos8k= @@ -32,8 +32,6 @@ github.com/charmbracelet/bubbles v0.10.4-0.20220412141214-292a1dd7ba97/go.mod h1 github.com/charmbracelet/bubbletea v0.19.3/go.mod h1:VuXF2pToRxDUHcBUcPmCRUHRvFATM4Ckb/ql1rBl3KA= github.com/charmbracelet/bubbletea v0.20.0 h1:/b8LEPgCbNr7WWZ2LuE/BV1/r4t5PyYJtDb+J3vpwxc= github.com/charmbracelet/bubbletea v0.20.0/go.mod h1:zpkze1Rioo4rJELjRyGlm9T2YNou1Fm4LIJQSa5QMEM= -github.com/charmbracelet/glamour v0.4.0 h1:scR+smyB7WdmrlIaff6IVlm48P48JaNM7JypM/VGl4k= -github.com/charmbracelet/glamour v0.4.0/go.mod h1:9ZRtG19AUIzcTm7FGLGbq3D5WKQ5UyZBbQsMQN0XIqc= github.com/charmbracelet/harmonica v0.1.0/go.mod h1:KSri/1RMQOZLbw7AHqgcBycp8pgJnQMYYT8QZRqZ1Ao= github.com/charmbracelet/keygen v0.3.0 h1:mXpsQcH7DDlST5TddmXNXjS0L7ECk4/kLQYyBcsan2Y= github.com/charmbracelet/keygen v0.3.0/go.mod h1:1ukgO8806O25lUZ5s0IrNur+RlwTBERlezdgW71F5rM= @@ -129,6 +127,7 @@ github.com/muesli/reflow v0.3.0/go.mod h1:pbwTDkVPibjO2kyvBQRBxTWEEGDGq0FlB1BIKt github.com/muesli/roff v0.1.0 h1:YD0lalCotmYuF5HhZliKWlIx7IEhiXeSfq7hNjFqGF8= github.com/muesli/roff v0.1.0/go.mod h1:pjAHQM9hdUUwm/krAfrLGgJkXJ+YuhtsfZ42kieB2Ig= github.com/muesli/termenv v0.9.0/go.mod h1:R/LzAKf+suGs4IsO95y7+7DpFHO0KABgnZqtlyx2mBw= +github.com/muesli/termenv v0.11.0/go.mod h1:Bd5NYQ7pd+SrtBSrSNoBBmXlcY8+Xj4BMJgh8qcZrvs= github.com/muesli/termenv v0.11.1-0.20220212125758-44cd13922739 h1:QANkGiGr39l1EESqrE0gZw0/AJNYzIvoGLhIoVYtluI= github.com/muesli/termenv v0.11.1-0.20220212125758-44cd13922739/go.mod h1:Bd5NYQ7pd+SrtBSrSNoBBmXlcY8+Xj4BMJgh8qcZrvs= github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= diff --git a/ui/components/code/code.go b/ui/components/code/code.go index c45d1140f3e6a2ec8237061a7385c77ee022c03c..f52b213bd8dbd84a83783ac90d4a6caf2b07a234 100644 --- a/ui/components/code/code.go +++ b/ui/components/code/code.go @@ -70,17 +70,30 @@ func (r *Code) Init() tea.Cmd { if err != nil { return common.ErrorCmd(err) } - // FIXME reset underline and color + // FIXME: this is a hack to reset formatting at the end of every line. c = wrap.String(f, w) - r.viewport.Viewport.SetContent(c) + s := strings.Split(c, "\n") + for i, l := range s { + s[i] = l + "\x1b[0m" + } + r.viewport.Viewport.SetContent(strings.Join(s, "\n")) return nil } // Update implements tea.Model. func (r *Code) Update(msg tea.Msg) (tea.Model, tea.Cmd) { + cmds := make([]tea.Cmd, 0) + switch msg.(type) { + case tea.WindowSizeMsg: + // Recalculate content width and line wrap. + cmds = append(cmds, r.Init()) + } v, cmd := r.viewport.Update(msg) r.viewport = v.(*vp.ViewportBubble) - return r, cmd + if cmd != nil { + cmds = append(cmds, cmd) + } + return r, tea.Batch(cmds...) } // View implements tea.View. diff --git a/ui/components/selector/selector.go b/ui/components/selector/selector.go index 544c5f98f133f280c9a7ebc82aa552154aaf9d85..9e9868e81bfdcb5a744cc6c8a60d93a4e812bbce 100644 --- a/ui/components/selector/selector.go +++ b/ui/components/selector/selector.go @@ -15,7 +15,7 @@ type Selector struct { filterState list.FilterState } -// IdentifiableItem is an item that can be identified by a string and extends list.Item. +// IdentifiableItem is an item that can be identified by a string. Implements list.DefaultItem. type IdentifiableItem interface { list.DefaultItem ID() string diff --git a/ui/pages/selection/selection.go b/ui/pages/selection/selection.go index 08365f807d90aa7f207736017c954ce15137617b..11a04c1a8b12bb2b512f3dd818495a0340ff4e9d 100644 --- a/ui/pages/selection/selection.go +++ b/ui/pages/selection/selection.go @@ -70,10 +70,11 @@ func (s *Selection) ShortHelp() []key.Binding { kb := make([]key.Binding, 0) kb = append(kb, s.common.Keymap.UpDown, - s.common.Keymap.Select, + s.common.Keymap.Section, ) if s.activeBox == selectorBox { kb = append(kb, + s.common.Keymap.Select, k.Filter, k.ClearFilter, )