Hilbish/readline/undo.go

43 lines
748 B
Go

package readline
type undoItem struct {
line string
pos int
}
func (rl *Instance) undoAppendHistory() {
defer func() { rl.viUndoSkipAppend = false }()
if rl.viUndoSkipAppend {
return
}
rl.viUndoHistory = append(rl.viUndoHistory, undoItem{
line: string(rl.line),
pos: rl.pos,
})
}
func (rl *Instance) undoLast() {
var undo undoItem
for {
if len(rl.viUndoHistory) == 0 {
return
}
undo = rl.viUndoHistory[len(rl.viUndoHistory)-1]
rl.viUndoHistory = rl.viUndoHistory[:len(rl.viUndoHistory)-1]
if string(undo.line) != string(rl.line) {
break
}
}
rl.line = []rune(undo.line)
rl.pos = undo.pos
if rl.modeViMode != VimInsert && len(rl.line) > 0 && rl.pos == len(rl.line) {
rl.pos--
}
rl.updateHelpers()
}