Rich Enhanced Shell History - Contextual shell history for zsh and bash
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
resh/pkg/strat/frequent.go

53 lines
1.1 KiB

package strat
import (
"sort"
"github.com/curusarn/resh/pkg/records"
)
// Frequent prediction/recommendation strategy
type Frequent struct {
history map[string]int
}
type strFrqEntry struct {
cmdLine string
count int
}
// Init see name
func (s *Frequent) Init() {
s.history = map[string]int{}
}
// GetTitleAndDescription see name
func (s *Frequent) GetTitleAndDescription() (string, string) {
return "frequent", "Use frequent commands"
}
// GetCandidates see name
func (s *Frequent) GetCandidates() []string {
var mapItems []strFrqEntry
for cmdLine, count := range s.history {
mapItems = append(mapItems, strFrqEntry{cmdLine, count})
}
sort.Slice(mapItems, func(i int, j int) bool { return mapItems[i].count > mapItems[j].count })
var hist []string
for _, item := range mapItems {
hist = append(hist, item.cmdLine)
}
return hist
}
// AddHistoryRecord see name
func (s *Frequent) AddHistoryRecord(record *records.EnrichedRecord) error {
s.history[record.CmdLine]++
return nil
}
// ResetHistory see name
func (s *Frequent) ResetHistory() error {
s.Init()
return nil
}