forked from varia/go-sh-manymanuals
wip: towards file name filtering
This commit is contained in:
parent
6de545a3d3
commit
828f9f6d35
33
gshmm.go
33
gshmm.go
@ -4,6 +4,7 @@ import (
|
|||||||
"flag"
|
"flag"
|
||||||
"fmt"
|
"fmt"
|
||||||
"os"
|
"os"
|
||||||
|
"strings"
|
||||||
|
|
||||||
"github.com/charmbracelet/bubbles/textinput"
|
"github.com/charmbracelet/bubbles/textinput"
|
||||||
tea "github.com/charmbracelet/bubbletea"
|
tea "github.com/charmbracelet/bubbletea"
|
||||||
@ -17,6 +18,10 @@ Options:
|
|||||||
-h output help
|
-h output help
|
||||||
`
|
`
|
||||||
|
|
||||||
|
// minCharsUntilFilter is the minimum amount of characters that are
|
||||||
|
// required before the filtering logic commences actually filtering.
|
||||||
|
const minCharsUntilFilter = 3
|
||||||
|
|
||||||
var helpFlag bool
|
var helpFlag bool
|
||||||
|
|
||||||
type Configuration struct {
|
type Configuration struct {
|
||||||
@ -30,6 +35,7 @@ func handleCliFlags() {
|
|||||||
|
|
||||||
type model struct {
|
type model struct {
|
||||||
filterInput textinput.Model
|
filterInput textinput.Model
|
||||||
|
datasheets []string
|
||||||
}
|
}
|
||||||
|
|
||||||
func initialModel() model {
|
func initialModel() model {
|
||||||
@ -38,16 +44,35 @@ func initialModel() model {
|
|||||||
|
|
||||||
return model{
|
return model{
|
||||||
filterInput: input,
|
filterInput: input,
|
||||||
|
datasheets: []string{},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m model) Init() tea.Cmd {
|
func (m model) Init() tea.Cmd {
|
||||||
|
// TODO(d1): implement reading all PDFs in cwd
|
||||||
|
// https://stackoverflow.com/a/67214584
|
||||||
|
// requires error reporting also
|
||||||
return textinput.Blink
|
return textinput.Blink
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m model) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
|
func (m model) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
|
||||||
var cmd tea.Cmd
|
var cmd tea.Cmd
|
||||||
|
|
||||||
|
if m.filterInput.Focused() {
|
||||||
|
var filtered []string
|
||||||
|
|
||||||
|
search := m.filterInput.Value()
|
||||||
|
if len(search) >= minCharsUntilFilter {
|
||||||
|
// NOTE(d1): naive prototype implementation
|
||||||
|
for _, ds := range m.datasheets {
|
||||||
|
if strings.HasPrefix(ds, search) {
|
||||||
|
filtered = append(filtered, ds)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
m.datasheets = filtered
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
switch msg := msg.(type) {
|
switch msg := msg.(type) {
|
||||||
case tea.KeyMsg:
|
case tea.KeyMsg:
|
||||||
switch msg.String() {
|
switch msg.String() {
|
||||||
@ -62,7 +87,13 @@ func (m model) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (m model) View() string {
|
func (m model) View() string {
|
||||||
return m.filterInput.View()
|
body := strings.Builder{}
|
||||||
|
|
||||||
|
body.WriteString(strings.Join(m.datasheets, "\n") + "\n")
|
||||||
|
|
||||||
|
body.WriteString(m.filterInput.View() + "\n")
|
||||||
|
|
||||||
|
return body.String()
|
||||||
}
|
}
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
|
Loading…
Reference in New Issue
Block a user