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  }