| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061 |
- package prompt
- // History stores the texts that are entered.
- type History struct {
- histories []string
- tmp []string
- selected int
- }
- // Add to add text in history.
- func (h *History) Add(input string) {
- h.histories = append(h.histories, input)
- h.Clear()
- }
- // Clear to clear the history.
- func (h *History) Clear() {
- h.tmp = make([]string, len(h.histories))
- for i := range h.histories {
- h.tmp[i] = h.histories[i]
- }
- h.tmp = append(h.tmp, "")
- h.selected = len(h.tmp) - 1
- }
- // Older saves a buffer of current line and get a buffer of previous line by up-arrow.
- // The changes of line buffers are stored until new history is created.
- func (h *History) Older(buf *Buffer) (new *Buffer, changed bool) {
- if len(h.tmp) == 1 || h.selected == 0 {
- return buf, false
- }
- h.tmp[h.selected] = buf.Text()
- h.selected--
- new = NewBuffer()
- new.InsertText(h.tmp[h.selected], false, true)
- return new, true
- }
- // Newer saves a buffer of current line and get a buffer of next line by up-arrow.
- // The changes of line buffers are stored until new history is created.
- func (h *History) Newer(buf *Buffer) (new *Buffer, changed bool) {
- if h.selected >= len(h.tmp)-1 {
- return buf, false
- }
- h.tmp[h.selected] = buf.Text()
- h.selected++
- new = NewBuffer()
- new.InsertText(h.tmp[h.selected], false, true)
- return new, true
- }
- // NewHistory returns new history object.
- func NewHistory() *History {
- return &History{
- histories: []string{},
- tmp: []string{""},
- selected: 0,
- }
- }
|