Created
March 14, 2024 13:51
-
-
Save m1cm1c/0248ef748db56d0cc1f7e4398a3f2fad to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
module m/main | |
go 1.21.7 | |
require ( | |
github.com/charmbracelet/bubbles v0.18.0 | |
github.com/charmbracelet/bubbletea v0.25.0 | |
github.com/muesli/reflow v0.3.0 | |
) | |
require ( | |
github.com/atotto/clipboard v0.1.4 // indirect | |
github.com/aymanbagabas/go-osc52/v2 v2.0.1 // indirect | |
github.com/charmbracelet/lipgloss v0.9.1 // indirect | |
github.com/containerd/console v1.0.4-0.20230313162750-1ae8d489ac81 // indirect | |
github.com/lucasb-eyer/go-colorful v1.2.0 // indirect | |
github.com/mattn/go-isatty v0.0.18 // indirect | |
github.com/mattn/go-localereader v0.0.1 // indirect | |
github.com/mattn/go-runewidth v0.0.15 // indirect | |
github.com/muesli/ansi v0.0.0-20211018074035-2e021307bc4b // indirect | |
github.com/muesli/cancelreader v0.2.2 // indirect | |
github.com/muesli/termenv v0.15.2 // indirect | |
github.com/rivo/uniseg v0.4.6 // indirect | |
golang.org/x/sync v0.1.0 // indirect | |
golang.org/x/sys v0.12.0 // indirect | |
golang.org/x/term v0.6.0 // indirect | |
golang.org/x/text v0.3.8 // indirect | |
) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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/v2 v2.0.1 h1:HwpRHbFMcZLEVr42D4p7XBqjyuxQH5SMiErDT4WkJ2k= | |
github.com/aymanbagabas/go-osc52/v2 v2.0.1/go.mod h1:uYgXzlJ7ZpABp8OJ+exZzJJhRNQ2ASbcXHWsFqH8hp8= | |
github.com/charmbracelet/bubbles v0.18.0 h1:PYv1A036luoBGroX6VWjQIE9Syf2Wby2oOl/39KLfy0= | |
github.com/charmbracelet/bubbles v0.18.0/go.mod h1:08qhZhtIwzgrtBjAcJnij1t1H0ZRjwHyGsy6AL11PSw= | |
github.com/charmbracelet/bubbletea v0.25.0 h1:bAfwk7jRz7FKFl9RzlIULPkStffg5k6pNt5dywy4TcM= | |
github.com/charmbracelet/bubbletea v0.25.0/go.mod h1:EN3QDR1T5ZdWmdfDzYcqOCAps45+QIJbLOBxmVNWNNg= | |
github.com/charmbracelet/lipgloss v0.9.1 h1:PNyd3jvaJbg4jRHKWXnCj1akQm4rh8dbEzN1p/u1KWg= | |
github.com/charmbracelet/lipgloss v0.9.1/go.mod h1:1mPmG4cxScwUQALAAnacHaigiiHB9Pmr+v1VEawJl6I= | |
github.com/containerd/console v1.0.4-0.20230313162750-1ae8d489ac81 h1:q2hJAaP1k2wIvVRd/hEHD7lacgqrCPS+k8g1MndzfWY= | |
github.com/containerd/console v1.0.4-0.20230313162750-1ae8d489ac81/go.mod h1:YynlIjWYF8myEu6sdkwKIvGQq+cOckRm6So2avqoYAk= | |
github.com/lucasb-eyer/go-colorful v1.2.0 h1:1nnpGOrhyZZuNyfu1QjKiUICQ74+3FNCN69Aj6K7nkY= | |
github.com/lucasb-eyer/go-colorful v1.2.0/go.mod h1:R4dSotOR9KMtayYi1e77YzuveK+i7ruzyGqttikkLy0= | |
github.com/mattn/go-isatty v0.0.18 h1:DOKFKCQ7FNG2L1rbrmstDN4QVRdS89Nkh85u68Uwp98= | |
github.com/mattn/go-isatty v0.0.18/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= | |
github.com/mattn/go-localereader v0.0.1 h1:ygSAOl7ZXTx4RdPYinUpg6W99U8jWvWi9Ye2JC/oIi4= | |
github.com/mattn/go-localereader v0.0.1/go.mod h1:8fBrzywKY7BI3czFoHkuzRoWE9C+EiG4R1k4Cjx5p88= | |
github.com/mattn/go-runewidth v0.0.12/go.mod h1:RAqKPSqVFrSLVXbA8x7dzmKdmGzieGRCM46jaSJTDAk= | |
github.com/mattn/go-runewidth v0.0.15 h1:UNAjwbU9l54TA3KzvqLGxwWjHmMgBUVhBiTjelZgg3U= | |
github.com/mattn/go-runewidth v0.0.15/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w= | |
github.com/muesli/ansi v0.0.0-20211018074035-2e021307bc4b h1:1XF24mVaiu7u+CFywTdcDo2ie1pzzhwjt6RHqzpMU34= | |
github.com/muesli/ansi v0.0.0-20211018074035-2e021307bc4b/go.mod h1:fQuZ0gauxyBcmsdE3ZT4NasjaRdxmbCS0jRHsrWu3Ho= | |
github.com/muesli/cancelreader v0.2.2 h1:3I4Kt4BQjOR54NavqnDogx/MIoWBFa0StPA8ELUXHmA= | |
github.com/muesli/cancelreader v0.2.2/go.mod h1:3XuTXfFS2VjM+HTLZY9Ak0l6eUKfijIfMUZ4EgX0QYo= | |
github.com/muesli/reflow v0.3.0 h1:IFsN6K9NfGtjeggFP+68I4chLZV2yIKsXJFNZ+eWh6s= | |
github.com/muesli/reflow v0.3.0/go.mod h1:pbwTDkVPibjO2kyvBQRBxTWEEGDGq0FlB1BIKtnHY/8= | |
github.com/muesli/termenv v0.15.2 h1:GohcuySI0QmI3wN8Ok9PtKGkgkFIk7y6Vpb5PvrY+Wo= | |
github.com/muesli/termenv v0.15.2/go.mod h1:Epx+iuz8sNs7mNKhxzH4fWXGNpZwUaJKRS1noLXviQ8= | |
github.com/rivo/uniseg v0.1.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= | |
github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= | |
github.com/rivo/uniseg v0.4.6 h1:Sovz9sDSwbOz9tgUy8JpT+KgCkPYJEN/oYzlJiYTNLg= | |
github.com/rivo/uniseg v0.4.6/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88= | |
golang.org/x/sync v0.1.0 h1:wsuoTGHzEhffawBOhz5CYhcrV4IdKZbEyZjBMuTp12o= | |
golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= | |
golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= | |
golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= | |
golang.org/x/sys v0.12.0 h1:CM0HF96J0hcLAwsHPJZjfdNzs0gftsLfgKt57wWHJ0o= | |
golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= | |
golang.org/x/term v0.6.0 h1:clScbb1cHjoCkyRbWwBEUZ5H/tIFu5TAXIqaZD0Gcjw= | |
golang.org/x/term v0.6.0/go.mod h1:m6U89DPEgQRMq3DNkDClhWw02AUbt2daBVO4cn4Hv9U= | |
golang.org/x/text v0.3.8 h1:nAL+RVCQ9uMn3vJZbV+MRnydTJFPf8qqY42YiA6MrqY= | |
golang.org/x/text v0.3.8/go.mod h1:E6s5w1FMmriuDzIBO73fBruAKo1PCIq6d2Q6DHfQ8WQ= |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package main | |
import ( | |
"fmt" | |
"github.com/charmbracelet/bubbles/textinput" | |
tea "github.com/charmbracelet/bubbletea" | |
"github.com/muesli/reflow/wordwrap" | |
) | |
func main() { | |
prompt := "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed orci nibh, pulvinar eget consequat id, ornare id lectus. Fusce est enim, porttitor eu molestie aliquam, pulvinar quis turpis. Cras tempor ligula tortor. Etiam id nulla id est porta sagittis id sit amet metus. Donec sodales tincidunt dolor ac rhoncus. Sed at iaculis risus. Aenean eget mauris tincidunt, accumsan magna a, tempus neque. Curabitur non pharetra libero, ut accumsan sapien. Nunc a justo vitae justo luctus finibus tempor sit amet lectus. Sed congue libero at lorem congue, at vulputate leo elementum. Suspendisse pharetra metus non ipsum aliquet facilisis. Vestibulum ac mollis lectus. Vestibulum vel bibendum sapien, ut egestas dolor. Ut in tincidunt lorem." | |
defaultAnswer := "answer" | |
p := tea.NewProgram(initialModelTextInput(prompt, defaultAnswer), tea.WithAltScreen()) | |
p.Run() | |
} | |
type ( | |
errMsg error | |
) | |
type modelTextInput struct { | |
windowWidth int | |
prompt string | |
textInput textinput.Model | |
err error | |
} | |
func initialModelTextInput(prompt string, defaultAnswer string) modelTextInput { | |
ti := textinput.New() | |
ti.Placeholder = "" | |
ti.Focus() | |
ti.CharLimit = 156 | |
ti.Width = -1 | |
ti.SetValue(defaultAnswer) | |
return modelTextInput{ | |
windowWidth: 0, | |
prompt: prompt, | |
textInput: ti, | |
err: nil, | |
} | |
} | |
func (m modelTextInput) Init() tea.Cmd { | |
return textinput.Blink | |
} | |
func (m modelTextInput) Update(msg tea.Msg) (tea.Model, tea.Cmd) { | |
var cmd tea.Cmd | |
switch msg := msg.(type) { | |
case tea.WindowSizeMsg: | |
m.windowWidth = msg.Width | |
case tea.KeyMsg: | |
switch msg.Type { | |
case tea.KeyEnter, tea.KeyCtrlC, tea.KeyEsc: | |
return m, tea.Quit | |
} | |
case errMsg: | |
m.err = msg | |
return m, nil | |
} | |
m.textInput, cmd = m.textInput.Update(msg) | |
return m, cmd | |
} | |
func (m modelTextInput) View() string { | |
return wordwrap.String(fmt.Sprintf( | |
m.prompt+"\n\n%s\n\n%s", | |
m.textInput.View(), | |
"(esc to quit)", | |
)+"\n", m.windowWidth) | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment