Browse and select files with the file picker bubble!

package main
import (
"github.com/charmbracelet/bubbles/v2/filepicker"
tea "github.com/charmbracelet/bubbletea/v2"
)
type model struct {
filepicker filepicker.Model
selectedFile string
}
func (m model) Init() tea.Cmd {
return m.filepicker.Init()
}
func (m model) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
switch msg := msg.(type) {
case tea.KeyPressMsg:
if msg.String() == "q" {
return m, tea.Quit
}
}
var cmd tea.Cmd
m.filepicker, cmd = m.filepicker.Update(msg)
// Did the user select a file?
if didSelect, path := m.filepicker.DidSelectFile(msg); didSelect {
m.selectedFile = path
}
return m, cmd
}
func (m model) View() string {
var s string
if m.selectedFile != "" {
s = "Selected: " + m.selectedFile + "\n\n"
}
return s + m.filepicker.View()
}
func main() {
fp := filepicker.New()
fp.CurrentDirectory = "."
fp.AllowedTypes = []string{".go", ".md", ".txt"}
tea.NewProgram(model{filepicker: fp}, tea.WithAltScreen()).Run()
}
fp.AllowedTypes = []string{".go", ".md"} // Filter by extension
fp.ShowHidden = true // Show hidden files
fp.CurrentDirectory = "/home/user" // Start directory