Skip to content

Commit 7120058

Browse files
committed
feat: introduce ModeReportMsg for terminal mode reports
1 parent 39e9984 commit 7120058

4 files changed

Lines changed: 49 additions & 3 deletions

File tree

go.mod

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ toolchain go1.24.4
88

99
require (
1010
github.com/charmbracelet/colorprofile v0.3.3
11-
github.com/charmbracelet/ultraviolet v0.0.0-20251112162901-46098fed0961
11+
github.com/charmbracelet/ultraviolet v0.0.0-20251113184013-02308a8418b9
1212
github.com/charmbracelet/x/ansi v0.11.1-0.20251110210702-903592506081
1313
github.com/charmbracelet/x/exp/golden v0.0.0-20241212170349-ad4b7ae0f25f
1414
github.com/charmbracelet/x/term v0.2.2

go.sum

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,8 @@ github.com/aymanbagabas/go-udiff v0.2.0 h1:TK0fH4MteXUDspT88n8CKzvK0X9O2xu9yQjWp
22
github.com/aymanbagabas/go-udiff v0.2.0/go.mod h1:RE4Ex0qsGkTAJoQdQQCA0uG+nAzJO/pI/QwceO5fgrA=
33
github.com/charmbracelet/colorprofile v0.3.3 h1:DjJzJtLP6/NZ8p7Cgjno0CKGr7wwRJGxWUwh2IyhfAI=
44
github.com/charmbracelet/colorprofile v0.3.3/go.mod h1:nB1FugsAbzq284eJcjfah2nhdSLppN2NqvfotkfRYP4=
5-
github.com/charmbracelet/ultraviolet v0.0.0-20251112162901-46098fed0961 h1:qneAb6lrvZEaliI3g91vFDYf4kCpotKU0bRXijfHRqA=
6-
github.com/charmbracelet/ultraviolet v0.0.0-20251112162901-46098fed0961/go.mod h1:ung4G52QJm6rlFYPYqPelzBHWWy966P9VMonX7UGT5g=
5+
github.com/charmbracelet/ultraviolet v0.0.0-20251113184013-02308a8418b9 h1:KxC15SbpWXFliFwrOKgE5DjUuQ/BAzpkuVL/ZYimwlE=
6+
github.com/charmbracelet/ultraviolet v0.0.0-20251113184013-02308a8418b9/go.mod h1:ung4G52QJm6rlFYPYqPelzBHWWy966P9VMonX7UGT5g=
77
github.com/charmbracelet/x/ansi v0.11.1-0.20251110210702-903592506081 h1:gWeRo2N77OeiZAL47lzvIot9VPpTzxT5ahdzQIyHEDY=
88
github.com/charmbracelet/x/ansi v0.11.1-0.20251110210702-903592506081/go.mod h1:M49wjzpIujwPceJ+t5w3qh2i87+HRtHohgb5iTyepL0=
99
github.com/charmbracelet/x/exp/golden v0.0.0-20241212170349-ad4b7ae0f25f h1:UytXHv0UxnsDFmL/7Z9Q5SBYPwSuRLXHbwx+6LycZ2w=

input.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,8 @@ func (p *Program) translateInputEvent(e uv.Event) Msg {
4747
return TerminalVersionMsg(e)
4848
case uv.KeyboardEnhancementsEvent:
4949
return KeyboardEnhancementsMsg(e)
50+
case uv.ModeReportEvent:
51+
return ModeReportMsg(e)
5052
}
5153
return e
5254
}

screen.go

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package tea
22

3+
import "github.com/charmbracelet/x/ansi"
4+
35
// WindowSizeMsg is used to report the terminal size. It's sent to Update once
46
// initially and then on every terminal resize. Note that Windows does not
57
// have support for reporting when resizes occur as it does not support the
@@ -31,3 +33,45 @@ type LayerHitMsg struct {
3133
ID string
3234
Mouse MouseMsg
3335
}
36+
37+
// ModeReportMsg is a message that represents a mode report event (DECRPM).
38+
//
39+
// This is sent by the terminal in response to a request for a terminal mode
40+
// report (DECRQM). It indicates the current setting of a specific terminal
41+
// mode like cursor visibility, mouse tracking, etc.
42+
//
43+
// Example:
44+
//
45+
// ```go
46+
// func (m model) Init() tea.Cmd {
47+
// // Does my terminal support reporting focus events?
48+
// return tea.Raw(ansi.RequestModeFocusEvent)
49+
// }
50+
//
51+
// func (m model) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
52+
// switch msg := msg.(type) {
53+
// case tea.ModeReportMsg:
54+
// if msg.Mode == ansi.ModeFocusEvent && !msg.Value.IsNotRecognized() {
55+
// // Terminal supports focus events
56+
// m.supportsFocus = true
57+
// }
58+
// }
59+
// return m, nil
60+
// }
61+
//
62+
// func (m model) View() tea.View {
63+
// var view tea.View
64+
// view.ReportFocus = m.supportsFocus
65+
// view.SetContent(fmt.Sprintf("Terminal supports focus events: %v", m.supportsFocus))
66+
// return view
67+
// }
68+
// ```
69+
//
70+
// See: https://vt100.net/docs/vt510-rm/DECRPM.html
71+
type ModeReportMsg struct {
72+
// Mode is the mode number.
73+
Mode ansi.Mode
74+
75+
// Value is the mode value.
76+
Value ansi.ModeSetting
77+
}

0 commit comments

Comments
 (0)