github.com/markusbkk/elvish@v0.0.0-20231204143114-91dc52438621/pkg/cli/histutil/store.go (about) 1 package histutil 2 3 import ( 4 "errors" 5 6 "github.com/markusbkk/elvish/pkg/store/storedefs" 7 ) 8 9 // Store is an abstract interface for history store. 10 type Store interface { 11 // AddCmd adds a new command history entry and returns its sequence number. 12 // Depending on the implementation, the Store might respect cmd.Seq and 13 // return it as is, or allocate another sequence number. 14 AddCmd(cmd storedefs.Cmd) (int, error) 15 // AllCmds returns all commands kept in the store. 16 AllCmds() ([]storedefs.Cmd, error) 17 // Cursor returns a cursor that iterating through commands with the given 18 // prefix. The cursor is initially placed just after the last command in the 19 // store. 20 Cursor(prefix string) Cursor 21 } 22 23 // Cursor is used to navigate a Store. 24 type Cursor interface { 25 // Prev moves the cursor to the previous command. 26 Prev() 27 // Next moves the cursor to the next command. 28 Next() 29 // Get returns the command the cursor is currently at, or any error if the 30 // cursor is in an invalid state. If the cursor is "over the edge", the 31 // error is ErrEndOfHistory. 32 Get() (storedefs.Cmd, error) 33 } 34 35 // ErrEndOfHistory is returned by Cursor.Get if the cursor is currently over the 36 // edge. 37 var ErrEndOfHistory = errors.New("end of history")