Detailed changes
@@ -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
@@ -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=
@@ -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.
@@ -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
@@ -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,
)