github.com/ladydascalie/elvish@v0.0.0-20170703214355-2964dd3ece7f/edit/history/fuser.go (about) 1 package history 2 3 // Fuser provides a unified view into a shared storage-backed command history 4 // and per-session history. 5 type Fuser struct { 6 store Store 7 storeUpper int 8 9 // Per-session history. 10 cmds []string 11 seqs []int 12 } 13 14 func NewFuser(store Store) (*Fuser, error) { 15 upper, err := store.NextCmdSeq() 16 if err != nil { 17 return nil, err 18 } 19 return &Fuser{store, upper, nil, nil}, nil 20 } 21 22 func (f *Fuser) AddCmd(cmd string) error { 23 seq, err := f.store.AddCmd(cmd) 24 if err != nil { 25 return err 26 } 27 f.cmds = append(f.cmds, cmd) 28 f.seqs = append(f.seqs, seq) 29 return nil 30 } 31 32 func (f *Fuser) AllCmds() ([]string, error) { 33 cmds, err := f.store.Cmds(0, f.storeUpper) 34 if err != nil { 35 return nil, err 36 } 37 return append(cmds, f.cmds...), nil 38 } 39 40 func (f *Fuser) SessionCmds() []string { 41 return f.cmds 42 } 43 44 func (f *Fuser) Walker(prefix string) *Walker { 45 return NewWalker(f.store, f.storeUpper, f.cmds, f.seqs, prefix) 46 }