- support history suggestions for aliases https://github.com/versenilvis/IRIS/commit/0ae25d05ce0faf8ff2eeee9aa3fbb5889d9ad511 - merge spec and history results (https://github.com/versenilvis/IRIS/commit/315c94f12bb689ad6b39b1f0ce5e0bdef71f38d5) - add 25ms pty throttle and optimize ctrl+l (https://github.com/versenilvis/IRIS/commit/1e603d74c208be00f6b2cb79a628416455711c3a) - align suggestion menu to col 1 (https://github.com/versenilvis/IRIS/commit/e307b210849af65276e93e1cff8895f3b54937ff) - resolve zsh ipc fd mismatch and generate autocomplete hooks (https://github.com/versenilvis/IRIS/pull/12/commits/2199607fad8122ec441ff4b99e562ca62bd948ff) - fix: eliminate prompt duplication and freeze UI movement during menu navigation https://github.com/versenilvis/IRIS/pull/12/commits/6783989a49f0a68d01bad542588983a5c7b597a2
75 lines
1.7 KiB
Go
75 lines
1.7 KiB
Go
package root
|
|
|
|
import (
|
|
"fmt"
|
|
"strings"
|
|
|
|
"github.com/versenilvis/iris/commands/core"
|
|
"github.com/versenilvis/iris/config"
|
|
"github.com/versenilvis/iris/integration"
|
|
)
|
|
|
|
// mergeResults collects and dedupes suggestions for a query and mode
|
|
// example: mergeResults("git ", "spec")
|
|
func MergeResults(query string, mode string) []core.Suggestion {
|
|
maxSugg := config.Get().UI.MaxSuggestions
|
|
seen := make(map[string]bool)
|
|
deduped := []core.Suggestion{}
|
|
|
|
// always call lookup to scan aliases and get spec suggestions
|
|
var cmdResults []core.Suggestion
|
|
if query != "" {
|
|
debugLog("[Merge] Calling Lookup for '%s'", query)
|
|
cmdResults = core.Lookup(query)
|
|
}
|
|
|
|
// search history if in history mode
|
|
var histResults []integration.HistResult
|
|
if mode == "history" {
|
|
aliases := core.GetAliasesCopy()
|
|
histResults, _ = integration.SearchHistory(query, aliases)
|
|
}
|
|
|
|
normalizedQuery := strings.TrimSpace(query)
|
|
|
|
// add suggestion helper to deduplicate
|
|
addSuggestion := func(s core.Suggestion) {
|
|
normalizedCmd := strings.TrimSpace(s.Cmd)
|
|
if normalizedCmd == "" {
|
|
return
|
|
}
|
|
// filter exact match to avoid loops and redundant suggestions
|
|
if normalizedCmd == normalizedQuery {
|
|
return
|
|
}
|
|
if !seen[s.Cmd] {
|
|
seen[s.Cmd] = true
|
|
deduped = append(deduped, s)
|
|
}
|
|
}
|
|
|
|
if mode == "history" {
|
|
// history mode: history first, then spec/alias
|
|
for _, h := range histResults {
|
|
addSuggestion(core.Suggestion{
|
|
Cmd: h.Cmd,
|
|
Desc: " history",
|
|
Icon: fmt.Sprintf("%d", h.ID),
|
|
})
|
|
}
|
|
for _, s := range cmdResults {
|
|
addSuggestion(s)
|
|
}
|
|
} else {
|
|
// spec mode: spec/alias only
|
|
for _, s := range cmdResults {
|
|
addSuggestion(s)
|
|
}
|
|
}
|
|
|
|
if len(deduped) > maxSugg {
|
|
deduped = deduped[:maxSugg]
|
|
}
|
|
return deduped
|
|
}
|