mirror of
https://github.com/charmbracelet/glow.git
synced 2026-08-22 16:14:17 +02:00
Change 'search' to 'filter'
This commit is contained in:
parent
fb5a81f4d6
commit
f9883e8f8d
3 changed files with 50 additions and 50 deletions
86
ui/stash.go
86
ui/stash.go
|
|
@ -61,7 +61,7 @@ const (
|
|||
stashStateLoadingDocument
|
||||
stashStateSettingNote
|
||||
stashStateShowingError
|
||||
stashStateSearchNotes
|
||||
stashStateFilterNotes
|
||||
stashStateShowFiltered
|
||||
)
|
||||
|
||||
|
|
@ -74,7 +74,7 @@ type stashModel struct {
|
|||
markdowns []*markdown
|
||||
spinner spinner.Model
|
||||
noteInput textinput.Model
|
||||
searchInput textinput.Model
|
||||
filterInput textinput.Model
|
||||
terminalWidth int
|
||||
terminalHeight int
|
||||
stashFullyLoaded bool // have we loaded all available stashed documents from the server?
|
||||
|
|
@ -126,7 +126,7 @@ func (m *stashModel) setSize(width, height int) {
|
|||
m.setTotalPages()
|
||||
|
||||
m.noteInput.Width = m.terminalWidth - stashViewHorizontalPadding*2 - ansi.PrintableRuneWidth(m.noteInput.Prompt)
|
||||
m.searchInput.Width = m.terminalWidth - stashViewHorizontalPadding*2 - ansi.PrintableRuneWidth(m.searchInput.Prompt)
|
||||
m.filterInput.Width = m.terminalWidth - stashViewHorizontalPadding*2 - ansi.PrintableRuneWidth(m.filterInput.Prompt)
|
||||
}
|
||||
|
||||
// Sets the total paginator pages according to the amount of markdowns for the
|
||||
|
|
@ -214,13 +214,13 @@ func (m stashModel) countMarkdowns(t markdownType) (found int) {
|
|||
}
|
||||
|
||||
// Returns the stashed markdown notes. When the model state indicates that
|
||||
// filtering is desired, this also filters and ranks the notes by the search
|
||||
// term in the searchInput field.
|
||||
// filtering is desired, this also filters and ranks the notes by the filter
|
||||
// term in the filterInput field.
|
||||
func (m *stashModel) getNotes() []*markdown {
|
||||
if m.searchInput.Value() == "" {
|
||||
if m.filterInput.Value() == "" {
|
||||
return m.markdowns
|
||||
}
|
||||
if m.state != stashStateSearchNotes &&
|
||||
if m.state != stashStateFilterNotes &&
|
||||
m.state != stashStateShowFiltered &&
|
||||
m.state != stashStatePromptDelete &&
|
||||
m.state != stashStateSettingNote {
|
||||
|
|
@ -243,7 +243,7 @@ func (m *stashModel) getNotes() []*markdown {
|
|||
targets = append(targets, note)
|
||||
}
|
||||
|
||||
ranks := fuzzy.RankFindFold(m.searchInput.Value(), targets)
|
||||
ranks := fuzzy.RankFindFold(m.filterInput.Value(), targets)
|
||||
sort.Sort(ranks)
|
||||
|
||||
filtered := []*markdown{}
|
||||
|
|
@ -323,7 +323,7 @@ func newStashModel(cfg *Config, as authStatus) stashModel {
|
|||
ni.Focus()
|
||||
|
||||
si := textinput.NewModel()
|
||||
si.Prompt = stashTextInputPromptStyle("Search: ")
|
||||
si.Prompt = stashTextInputPromptStyle("Filter: ")
|
||||
si.CursorColor = common.Fuschia.String()
|
||||
si.CharLimit = noteCharacterLimit
|
||||
si.Focus()
|
||||
|
|
@ -333,7 +333,7 @@ func newStashModel(cfg *Config, as authStatus) stashModel {
|
|||
authStatus: as,
|
||||
spinner: sp,
|
||||
noteInput: ni,
|
||||
searchInput: si,
|
||||
filterInput: si,
|
||||
page: 1,
|
||||
paginator: p,
|
||||
loadingFromNetwork: true,
|
||||
|
|
@ -459,10 +459,10 @@ func stashUpdate(msg tea.Msg, m stashModel) (stashModel, tea.Cmd) {
|
|||
m.paginator.Page = m.paginator.TotalPages - 1
|
||||
m.index = m.paginator.ItemsOnPage(pages) - 1
|
||||
|
||||
// esc only passed trough in stashStateSearchNotes
|
||||
// esc only passed trough in stashStateFilterNotes
|
||||
case "esc":
|
||||
m.state = stashStateReady
|
||||
m.searchInput.SetValue("") // clear the searchInput
|
||||
m.filterInput.SetValue("") // clear the filter input
|
||||
m.setTotalPages()
|
||||
|
||||
// Open document
|
||||
|
|
@ -486,15 +486,15 @@ func stashUpdate(msg tea.Msg, m stashModel) (stashModel, tea.Cmd) {
|
|||
|
||||
cmds = append(cmds, spinner.Tick)
|
||||
|
||||
// Search through your notes
|
||||
// Filter your notes
|
||||
case "/":
|
||||
m.hideStatusMessage()
|
||||
|
||||
m.paginator.Page = 0
|
||||
m.index = 0
|
||||
m.state = stashStateSearchNotes
|
||||
m.searchInput.CursorEnd()
|
||||
m.searchInput.Focus()
|
||||
m.state = stashStateFilterNotes
|
||||
m.filterInput.CursorEnd()
|
||||
m.filterInput.Focus()
|
||||
return m, textinput.Blink
|
||||
|
||||
// Set note
|
||||
|
|
@ -634,7 +634,7 @@ func stashUpdate(msg tea.Msg, m stashModel) (stashModel, tea.Cmd) {
|
|||
|
||||
// Set state and delete
|
||||
m.state = stashStateReady
|
||||
if m.searchInput.Value() != "" {
|
||||
if m.filterInput.Value() != "" {
|
||||
m.state = stashStateShowFiltered
|
||||
}
|
||||
|
||||
|
|
@ -644,19 +644,19 @@ func stashUpdate(msg tea.Msg, m stashModel) (stashModel, tea.Cmd) {
|
|||
|
||||
default:
|
||||
m.state = stashStateReady
|
||||
if m.searchInput.Value() != "" {
|
||||
if m.filterInput.Value() != "" {
|
||||
m.state = stashStateShowFiltered
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
case stashStateSearchNotes:
|
||||
case stashStateFilterNotes:
|
||||
if msg, ok := msg.(tea.KeyMsg); ok {
|
||||
switch msg.String() {
|
||||
case "esc":
|
||||
// Cancel search
|
||||
// Cancel filtering
|
||||
m.state = stashStateReady
|
||||
m.searchInput.Reset()
|
||||
m.filterInput.Reset()
|
||||
case "enter", "tab", "shift+tab", "ctrl+k", "up", "ctrl+j", "down":
|
||||
m.hideStatusMessage()
|
||||
|
||||
|
|
@ -666,10 +666,10 @@ func stashUpdate(msg tea.Msg, m stashModel) (stashModel, tea.Cmd) {
|
|||
|
||||
h := m.getNotes()
|
||||
|
||||
// If we've filtered down to nothing, cancel the search
|
||||
// If we've filtered down to nothing, clear the filter
|
||||
if len(h) == 0 {
|
||||
m.state = stashStateReady
|
||||
m.searchInput.Reset()
|
||||
m.filterInput.Reset()
|
||||
break
|
||||
}
|
||||
|
||||
|
|
@ -678,7 +678,7 @@ func stashUpdate(msg tea.Msg, m stashModel) (stashModel, tea.Cmd) {
|
|||
// markdown view
|
||||
if len(h) == 1 && h[0].ID == m.selectedMarkdown().ID {
|
||||
m.state = stashStateReady
|
||||
m.searchInput.Reset()
|
||||
m.filterInput.Reset()
|
||||
|
||||
var cmd tea.Cmd
|
||||
m, cmd = stashUpdate(msg, m)
|
||||
|
|
@ -686,19 +686,19 @@ func stashUpdate(msg tea.Msg, m stashModel) (stashModel, tea.Cmd) {
|
|||
break
|
||||
}
|
||||
|
||||
m.searchInput.Blur()
|
||||
m.filterInput.Blur()
|
||||
|
||||
m.state = stashStateShowFiltered
|
||||
if m.searchInput.Value() == "" {
|
||||
m.searchInput.Reset()
|
||||
if m.filterInput.Value() == "" {
|
||||
m.filterInput.Reset()
|
||||
m.state = stashStateReady
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Update the search text input component
|
||||
newSearchInputModel, cmd := m.searchInput.Update(msg)
|
||||
m.searchInput = newSearchInputModel
|
||||
// Update the filter text input component
|
||||
newFilterInputModel, cmd := m.filterInput.Update(msg)
|
||||
m.filterInput = newFilterInputModel
|
||||
cmds = append(cmds, cmd)
|
||||
|
||||
// Update pagination
|
||||
|
|
@ -710,7 +710,7 @@ func stashUpdate(msg tea.Msg, m stashModel) (stashModel, tea.Cmd) {
|
|||
case "esc":
|
||||
// Cancel note
|
||||
m.state = stashStateReady
|
||||
if m.searchInput.Value() != "" {
|
||||
if m.filterInput.Value() != "" {
|
||||
m.state = stashStateShowFiltered
|
||||
}
|
||||
m.noteInput.Reset()
|
||||
|
|
@ -722,7 +722,7 @@ func stashUpdate(msg tea.Msg, m stashModel) (stashModel, tea.Cmd) {
|
|||
md.Note = newNote
|
||||
m.noteInput.Reset()
|
||||
m.state = stashStateReady
|
||||
if m.searchInput.Value() != "" {
|
||||
if m.filterInput.Value() != "" {
|
||||
m.state = stashStateShowFiltered
|
||||
}
|
||||
return m, cmd
|
||||
|
|
@ -755,7 +755,7 @@ func stashView(m stashModel) string {
|
|||
return errorView(m.err, false)
|
||||
case stashStateLoadingDocument:
|
||||
s += " " + m.spinner.View() + " Loading document..."
|
||||
case stashStateReady, stashStateSettingNote, stashStatePromptDelete, stashStateSearchNotes, stashStateShowFiltered:
|
||||
case stashStateReady, stashStateSettingNote, stashStatePromptDelete, stashStateFilterNotes, stashStateShowFiltered:
|
||||
|
||||
loadingIndicator := " "
|
||||
if !m.localOnly() && (!m.loadingDone() || m.loadingFromNetwork || m.spinner.Visible()) {
|
||||
|
|
@ -788,11 +788,11 @@ func stashView(m stashModel) string {
|
|||
header = stashHeaderView(m)
|
||||
}
|
||||
|
||||
logoOrSearch := glowLogoView(" Glow ")
|
||||
logoOrFilter := glowLogoView(" Glow ")
|
||||
|
||||
// If we're filtering we replace the logo with the search field
|
||||
if m.state == stashStateSearchNotes || m.state == stashStateShowFiltered {
|
||||
logoOrSearch = m.searchInput.View()
|
||||
// If we're filtering we replace the logo with the filter field
|
||||
if m.state == stashStateFilterNotes || m.state == stashStateShowFiltered {
|
||||
logoOrFilter = m.filterInput.View()
|
||||
}
|
||||
|
||||
var pagination string
|
||||
|
|
@ -814,7 +814,7 @@ func stashView(m stashModel) string {
|
|||
s += fmt.Sprintf(
|
||||
"%s %s\n\n %s\n\n%s\n\n%s %s\n\n %s",
|
||||
loadingIndicator,
|
||||
logoOrSearch,
|
||||
logoOrFilter,
|
||||
header,
|
||||
stashPopulatedView(m),
|
||||
blankLines,
|
||||
|
|
@ -944,18 +944,18 @@ func stashHelpView(m stashModel) string {
|
|||
h = append(h, "enter: confirm", "esc: cancel")
|
||||
} else if m.state == stashStatePromptDelete {
|
||||
h = append(h, "y: delete", "n: cancel")
|
||||
} else if m.state == stashStateSearchNotes && numDocs == 1 {
|
||||
} else if m.state == stashStateFilterNotes && numDocs == 1 {
|
||||
h = append(h, "enter: open", "esc: cancel")
|
||||
} else if m.state == stashStateSearchNotes && numDocs == 0 {
|
||||
} else if m.state == stashStateFilterNotes && numDocs == 0 {
|
||||
h = append(h, "enter/esc: cancel")
|
||||
} else if m.state == stashStateSearchNotes {
|
||||
} else if m.state == stashStateFilterNotes {
|
||||
h = append(h, "enter: confirm", "esc: cancel", "ctrl+j/ctrl+k, ↑/↓: choose")
|
||||
} else {
|
||||
if len(m.markdowns) > 0 {
|
||||
h = append(h, "enter: open")
|
||||
}
|
||||
if m.state == stashStateShowFiltered {
|
||||
h = append(h, "esc: clear search")
|
||||
h = append(h, "esc: clear filter")
|
||||
}
|
||||
if len(m.markdowns) > 1 {
|
||||
h = append(h, "j/k, ↑/↓: choose")
|
||||
|
|
@ -971,7 +971,7 @@ func stashHelpView(m stashModel) string {
|
|||
if m.err != nil {
|
||||
h = append(h, "!: errors")
|
||||
}
|
||||
h = append(h, "/: search")
|
||||
h = append(h, "/: filter")
|
||||
h = append(h, "q: quit")
|
||||
}
|
||||
return stashHelpViewBuilder(m.terminalWidth, h...)
|
||||
|
|
|
|||
|
|
@ -41,14 +41,14 @@ func stashItemView(b *strings.Builder, m stashModel, index int, md *markdown) {
|
|||
}
|
||||
|
||||
isSelected := index == m.index
|
||||
notSearchingNotes := m.state != stashStateSearchNotes
|
||||
notFilteringNotes := m.state != stashStateFilterNotes
|
||||
|
||||
// If there are multiple items being filtered we don't highlight a selected
|
||||
// item in the results. If we've filtered down to one item, however,
|
||||
// highlight that first item since pressing return will open it.
|
||||
singleFilteredItem := m.state == stashStateSearchNotes && len(m.getNotes()) == 1
|
||||
singleFilteredItem := m.state == stashStateFilterNotes && len(m.getNotes()) == 1
|
||||
|
||||
if isSelected && notSearchingNotes || singleFilteredItem {
|
||||
if isSelected && notFilteringNotes || singleFilteredItem {
|
||||
// Selected item
|
||||
|
||||
switch m.state {
|
||||
|
|
@ -73,14 +73,14 @@ func stashItemView(b *strings.Builder, m stashModel, index int, md *markdown) {
|
|||
|
||||
if md.markdownType == newsMarkdown {
|
||||
gutter = " "
|
||||
if m.state == stashStateSearchNotes && m.searchInput.Value() == "" {
|
||||
if m.state == stashStateFilterNotes && m.filterInput.Value() == "" {
|
||||
title = dimIndigoFg(title)
|
||||
date = dimSubtleIndigoFg(date)
|
||||
} else {
|
||||
title = indigoFg(title)
|
||||
date = subtleIndigoFg(date)
|
||||
}
|
||||
} else if m.state == stashStateSearchNotes && m.searchInput.Value() == "" {
|
||||
} else if m.state == stashStateFilterNotes && m.filterInput.Value() == "" {
|
||||
icon = dimGreenFg(icon)
|
||||
if title == noMemoTitle {
|
||||
title = dimWarmGrayFg(title)
|
||||
|
|
|
|||
4
ui/ui.go
4
ui/ui.go
|
|
@ -159,7 +159,7 @@ func (m *model) unloadDocument() []tea.Cmd {
|
|||
m.pager.unload()
|
||||
m.pager.showHelp = false
|
||||
|
||||
if m.stash.searchInput.Value() == "" {
|
||||
if m.stash.filterInput.Value() == "" {
|
||||
m.stash.state = stashStateReady
|
||||
} else {
|
||||
m.stash.state = stashStateShowFiltered
|
||||
|
|
@ -248,7 +248,7 @@ func (m model) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
|
|||
|
||||
// Send q/esc through in these cases
|
||||
case stashStateSettingNote, stashStatePromptDelete,
|
||||
stashStateShowingError, stashStateSearchNotes,
|
||||
stashStateShowingError, stashStateFilterNotes,
|
||||
stashStateShowFiltered:
|
||||
|
||||
// If we're fitering, only send esc through so we can clear
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue