feat(tui): more ways to quit

This commit is contained in:
adamdotdevin 2025-07-16 14:20:19 -05:00
parent 93c779cf48
commit f7dd48e60d
No known key found for this signature in database
GPG key ID: 9CB48779AF150E75
4 changed files with 8 additions and 10 deletions

View file

@ -336,7 +336,7 @@ func LoadFromConfig(config *opencode.Config) CommandRegistry {
Name: AppExitCommand,
Description: "exit the app",
Keybindings: parseBindings("ctrl+c", "<leader>q"),
Trigger: []string{"exit", "quit"},
Trigger: []string{"exit", "quit", "q"},
},
}
registry := make(CommandRegistry)

View file

@ -77,7 +77,6 @@ func (c *CommandCompletionProvider) GetChildEntries(
return items, nil
}
// Use fuzzy matching for commands
var commandNames []string
commandMap := make(map[string]CompletionSuggestion)
@ -86,17 +85,13 @@ func (c *CommandCompletionProvider) GetChildEntries(
continue
}
space := space - lipgloss.Width(cmd.PrimaryTrigger())
// Add all triggers as searchable options
for _, trigger := range cmd.Trigger {
commandNames = append(commandNames, trigger)
commandMap[trigger] = c.getCommandCompletionItem(cmd, space)
}
}
// Find fuzzy matches
matches := fuzzy.RankFindFold(query, commandNames)
// Sort by score (best matches first)
sort.Sort(matches)
// Convert matches to completion items, deduplicating by command name

View file

@ -344,6 +344,12 @@ func (m *editorComponent) Submit() (tea.Model, tea.Cmd) {
if value == "" {
return m, nil
}
switch value {
case "exit", "quit", "q", ":q":
return m, tea.Quit
}
if len(value) > 0 && value[len(value)-1] == '\\' {
// If the last character is a backslash, remove it and add a newline
m.textarea.ReplaceRange(len(value)-1, len(value), "")

View file

@ -85,7 +85,7 @@ func (c *completionDialogComponent) getAllCompletions(query string) tea.Cmd {
}
// If there's a query, use fuzzy ranking to sort results
if query != "" && len(allItems) > 0 {
if query != "" && len(allItems) > 0 && len(c.providers) > 1 {
t := theme.CurrentTheme()
baseStyle := styles.NewStyle().Background(t.BackgroundElement())
// Create a slice of display values for fuzzy matching
@ -94,10 +94,7 @@ func (c *completionDialogComponent) getAllCompletions(query string) tea.Cmd {
displayValues[i] = item.Display(baseStyle)
}
// Get fuzzy matches with ranking
matches := fuzzy.RankFindFold(query, displayValues)
// Sort by score (best matches first)
sort.Sort(matches)
// Reorder items based on fuzzy ranking