Skip to content

Commit 34bb463

Browse files
authored
fix: detect bg when no allocate pty (#268)
refs #262
1 parent c38c754 commit 34bb463

File tree

5 files changed

+42
-17
lines changed

5 files changed

+42
-17
lines changed

bubbletea/tea_unix.go

Lines changed: 33 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,14 @@
44
package bubbletea
55

66
import (
7+
"image/color"
8+
79
tea "github.com/charmbracelet/bubbletea"
810
"github.com/charmbracelet/lipgloss"
911
"github.com/charmbracelet/ssh"
1012
"github.com/charmbracelet/x/exp/term"
13+
"github.com/charmbracelet/x/exp/term/ansi"
14+
"github.com/charmbracelet/x/exp/term/input"
1115
"github.com/lucasb-eyer/go-colorful"
1216
"github.com/muesli/termenv"
1317
)
@@ -30,24 +34,45 @@ func makeOpts(s ssh.Session) []tea.ProgramOption {
3034
func newRenderer(s ssh.Session) *lipgloss.Renderer {
3135
pty, _, ok := s.Pty()
3236
env := sshEnviron(append(s.Environ(), "TERM="+pty.Term))
33-
if !ok || pty.Slave == nil {
34-
return lipgloss.NewRenderer(
37+
var r *lipgloss.Renderer
38+
var bg color.Color
39+
if ok && pty.Slave != nil {
40+
r = lipgloss.NewRenderer(
41+
pty.Slave,
42+
termenv.WithEnvironment(env),
43+
termenv.WithColorCache(true),
44+
)
45+
bg = term.BackgroundColor(pty.Slave, pty.Slave)
46+
} else {
47+
r = lipgloss.NewRenderer(
3548
s,
3649
termenv.WithEnvironment(env),
3750
termenv.WithUnsafe(),
3851
termenv.WithColorCache(true),
3952
)
53+
bg = queryBackgroundColor(s)
4054
}
41-
bg := term.BackgroundColor(pty.Slave, pty.Slave)
42-
r := lipgloss.NewRenderer(
43-
pty.Slave,
44-
termenv.WithEnvironment(env),
45-
termenv.WithColorCache(true),
46-
)
4755
c, ok := colorful.MakeColor(bg)
4856
if ok {
4957
_, _, l := c.Hsl()
5058
r.SetHasDarkBackground(l < 0.5)
5159
}
5260
return r
5361
}
62+
63+
// copied from x/exp/term
64+
func queryBackgroundColor(s ssh.Session) (bg color.Color) {
65+
_ = term.QueryTerminal(s, s, func(events []input.Event) bool {
66+
for _, e := range events {
67+
switch e := e.(type) {
68+
case input.BackgroundColorEvent:
69+
bg = e.Color
70+
continue // we need to consume the next DA1 event
71+
case input.PrimaryDeviceAttributesEvent:
72+
return false
73+
}
74+
}
75+
return true
76+
}, ansi.RequestBackgroundColor+ansi.RequestPrimaryDeviceAttributes)
77+
return
78+
}

examples/go.mod

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ go 1.18
44

55
require (
66
github.com/charmbracelet/bubbles v0.18.0
7-
github.com/charmbracelet/bubbletea v0.26.0
7+
github.com/charmbracelet/bubbletea v0.26.1
88
github.com/charmbracelet/lipgloss v0.10.0
99
github.com/charmbracelet/log v0.4.0
1010
github.com/charmbracelet/ssh v0.0.0-20240401141849-854cddfa2917
@@ -25,7 +25,7 @@ require (
2525
github.com/aymanbagabas/go-osc52/v2 v2.0.1 // indirect
2626
github.com/charmbracelet/keygen v0.5.0 // indirect
2727
github.com/charmbracelet/x/errors v0.0.0-20240117030013-d31dba354651 // indirect
28-
github.com/charmbracelet/x/exp/term v0.0.0-20240328150354-ab9afc214dfd // indirect
28+
github.com/charmbracelet/x/exp/term v0.0.0-20240503143715-36ea203beff4 // indirect
2929
github.com/cloudflare/circl v1.3.7 // indirect
3030
github.com/creack/pty v1.1.21 // indirect
3131
github.com/cyphar/filepath-securejoin v0.2.4 // indirect

examples/go.sum

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,8 @@ github.com/aymanbagabas/go-osc52/v2 v2.0.1/go.mod h1:uYgXzlJ7ZpABp8OJ+exZzJJhRNQ
1515
github.com/bwesterb/go-ristretto v1.2.3/go.mod h1:fUIoIZaG73pV5biE2Blr2xEzDoMj7NFEuV9ekS419A0=
1616
github.com/charmbracelet/bubbles v0.18.0 h1:PYv1A036luoBGroX6VWjQIE9Syf2Wby2oOl/39KLfy0=
1717
github.com/charmbracelet/bubbles v0.18.0/go.mod h1:08qhZhtIwzgrtBjAcJnij1t1H0ZRjwHyGsy6AL11PSw=
18-
github.com/charmbracelet/bubbletea v0.26.0 h1:LRS2uBclVfqh3gWBmU8uso2fXBsroW2Nb6HtAHfzbJI=
19-
github.com/charmbracelet/bubbletea v0.26.0/go.mod h1:FzKr7sKoO8iFVcdIBM9J0sJOcQv5nDQaYwsee3kpbgo=
18+
github.com/charmbracelet/bubbletea v0.26.1 h1:xujcQeF73rh4jwu3+zhfQsvV18x+7zIjlw7/CYbzGJ0=
19+
github.com/charmbracelet/bubbletea v0.26.1/go.mod h1:FzKr7sKoO8iFVcdIBM9J0sJOcQv5nDQaYwsee3kpbgo=
2020
github.com/charmbracelet/keygen v0.5.0 h1:XY0fsoYiCSM9axkrU+2ziE6u6YjJulo/b9Dghnw6MZc=
2121
github.com/charmbracelet/keygen v0.5.0/go.mod h1:DfvCgLHxZ9rJxdK0DGw3C/LkV4SgdGbnliHcObV3L+8=
2222
github.com/charmbracelet/lipgloss v0.10.0 h1:KWeXFSexGcfahHX+54URiZGkBFazf70JNMtwg/AFW3s=
@@ -29,8 +29,8 @@ github.com/charmbracelet/x/editor v0.0.0-20240202113029-6ff29cf0473e h1:tBDIREfN
2929
github.com/charmbracelet/x/editor v0.0.0-20240202113029-6ff29cf0473e/go.mod h1:oivrEbcP/AYt/Hpvk5pwDXXrQ933gQS6UzL6fxqAGSA=
3030
github.com/charmbracelet/x/errors v0.0.0-20240117030013-d31dba354651 h1:3RXpZWGWTOeVXCTv0Dnzxdv/MhNUkBfEcbaTY0zrTQI=
3131
github.com/charmbracelet/x/errors v0.0.0-20240117030013-d31dba354651/go.mod h1:2P0UgXMEa6TsToMSuFqKFQR+fZTO9CNGUNokkPatT/0=
32-
github.com/charmbracelet/x/exp/term v0.0.0-20240328150354-ab9afc214dfd h1:HqBjkSFXXfW4IgX3TMKipWoPEN08T3Pi4SA/3DLss/U=
33-
github.com/charmbracelet/x/exp/term v0.0.0-20240328150354-ab9afc214dfd/go.mod h1:6GZ13FjIP6eOCqWU4lqgveGnYxQo9c3qBzHPeFu4HBE=
32+
github.com/charmbracelet/x/exp/term v0.0.0-20240503143715-36ea203beff4 h1:zHstno0DfHRoZ+R+kPEDYYl/X16I3z9CO6j0nhGDKxw=
33+
github.com/charmbracelet/x/exp/term v0.0.0-20240503143715-36ea203beff4/go.mod h1:yQqGHmheaQfkqiJWjklPHVAq1dKbk8uGbcoS/lcKCJ0=
3434
github.com/cloudflare/circl v1.3.3/go.mod h1:5XYMA4rFBvNIrhs50XuiBJ15vF2pZn4nnUKZrLbUZFA=
3535
github.com/cloudflare/circl v1.3.7 h1:qlCDlTPz2n9fu58M0Nh1J/JzcFpfgkFHHX3O35r5vcU=
3636
github.com/cloudflare/circl v1.3.7/go.mod h1:sRTcRWXGLrKw6yIGJ+l7amYJFfAXbZG0kBSc8r4zxgA=

go.mod

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ require (
88
github.com/charmbracelet/lipgloss v0.10.0
99
github.com/charmbracelet/log v0.4.0
1010
github.com/charmbracelet/ssh v0.0.0-20240401141849-854cddfa2917
11-
github.com/charmbracelet/x/exp/term v0.0.0-20240328150354-ab9afc214dfd
11+
github.com/charmbracelet/x/exp/term v0.0.0-20240503143715-36ea203beff4
1212
github.com/go-git/go-git/v5 v5.12.0
1313
github.com/google/go-cmp v0.6.0
1414
github.com/hashicorp/golang-lru/v2 v2.0.7

go.sum

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,8 @@ github.com/charmbracelet/ssh v0.0.0-20240401141849-854cddfa2917 h1:NZKjJ7d/pzk/A
2323
github.com/charmbracelet/ssh v0.0.0-20240401141849-854cddfa2917/go.mod h1:8/Ve8iGRRIGFM1kepYfRF2pEOF5Y3TEZYoJaA54228U=
2424
github.com/charmbracelet/x/errors v0.0.0-20240117030013-d31dba354651 h1:3RXpZWGWTOeVXCTv0Dnzxdv/MhNUkBfEcbaTY0zrTQI=
2525
github.com/charmbracelet/x/errors v0.0.0-20240117030013-d31dba354651/go.mod h1:2P0UgXMEa6TsToMSuFqKFQR+fZTO9CNGUNokkPatT/0=
26-
github.com/charmbracelet/x/exp/term v0.0.0-20240328150354-ab9afc214dfd h1:HqBjkSFXXfW4IgX3TMKipWoPEN08T3Pi4SA/3DLss/U=
27-
github.com/charmbracelet/x/exp/term v0.0.0-20240328150354-ab9afc214dfd/go.mod h1:6GZ13FjIP6eOCqWU4lqgveGnYxQo9c3qBzHPeFu4HBE=
26+
github.com/charmbracelet/x/exp/term v0.0.0-20240503143715-36ea203beff4 h1:zHstno0DfHRoZ+R+kPEDYYl/X16I3z9CO6j0nhGDKxw=
27+
github.com/charmbracelet/x/exp/term v0.0.0-20240503143715-36ea203beff4/go.mod h1:yQqGHmheaQfkqiJWjklPHVAq1dKbk8uGbcoS/lcKCJ0=
2828
github.com/cloudflare/circl v1.3.3/go.mod h1:5XYMA4rFBvNIrhs50XuiBJ15vF2pZn4nnUKZrLbUZFA=
2929
github.com/cloudflare/circl v1.3.7 h1:qlCDlTPz2n9fu58M0Nh1J/JzcFpfgkFHHX3O35r5vcU=
3030
github.com/cloudflare/circl v1.3.7/go.mod h1:sRTcRWXGLrKw6yIGJ+l7amYJFfAXbZG0kBSc8r4zxgA=

0 commit comments

Comments
 (0)