Files
levi/internal/editor/run.go
2026-03-28 21:56:49 +09:00

341 lines
6.6 KiB
Go

package editor
func (ed *Editor) Run(c Cmd) bool {
switch c.Kind {
case CmdInvalid:
ed.Ring("not (yet) a vi command [" + ed.parser.String() + "]")
ed.parser.Clear()
return true
}
switch c.Kind {
case CmdMoveLeft:
ed.MoveLeft(c.Num)
return true
case CmdMoveDown:
ed.MoveDown(c.Num)
return true
case CmdMoveUp:
ed.MoveUp(c.Num)
return true
case CmdMoveRight:
ed.MoveRight(c.Num)
return true
case CmdMoveToStart:
ed.MoveToStart()
return true
case CmdMoveToEnd:
ed.MoveToEnd()
return true
case CmdMoveToNonBlank:
ed.MoveToNonBlank()
return true
case CmdMoveToColumn:
ed.MoveToColumn(c.Num)
return true
case CmdMoveByWord:
ed.MoveByWord(c.Num)
return true
case CmdMoveBackwardByWord:
ed.MoveBackwardByWord(c.Num)
return true
case CmdMoveToEndOfWord:
ed.MoveToEndOfWord(c.Num)
return true
case CmdMoveByLooseWord:
ed.MoveByLooseWord(c.Num)
return true
case CmdMoveBackwardByLooseWord:
ed.MoveBackwardByLooseWord(c.Num)
return true
case CmdMoveToEndOfLooseWord:
ed.MoveToEndOfLooseWord(c.Num)
return true
case CmdMoveToNonBlankOfNextLine:
ed.MoveToNonBlankOfNextLine(c.Num)
return true
case CmdMoveToNonBlankOfPrevLine:
ed.MoveToNonBlankOfPrevLine(c.Num)
return true
case CmdMoveToLastLine:
ed.MoveToLastLine()
return true
case CmdMoveToLine:
ed.MoveToLine(c.Num)
return true
case CmdMoveBySentence:
ed.MoveBySentence(c.Num)
return true
case CmdMoveBackwardBySentence:
ed.MoveBackwardBySentence(c.Num)
return true
case CmdMoveByParagraph:
ed.MoveByParagraph(c.Num)
return true
case CmdMoveBackwardByParagraph:
ed.MoveBackwardByParagraph(c.Num)
return true
case CmdMoveBySection:
ed.MoveBySection(c.Num)
return true
case CmdMoveBackwardBySection:
ed.MoveBackwardBySection(c.Num)
return true
case CmdMoveToTopOfView:
ed.MoveToTopOfView()
return true
case CmdMoveToMiddleOfView:
ed.MoveToMiddleOfView()
return true
case CmdMoveToBottomOfView:
ed.MoveToBottomOfView()
return true
case CmdMoveToBelowTopOfView:
ed.MoveToBelowTopOfView(c.Num)
return true
case CmdMoveToAboveBottomOfView:
ed.MoveToAboveBottomOfView(c.Num)
return true
}
switch c.Kind {
case CmdMarkSet:
ed.MarkSet(c.Letter)
return true
case CmdMarkMoveTo:
ed.MarkMoveTo(c.Letter)
return true
case CmdMarkMoveToLine:
ed.MarkMoveToLine(c.Letter)
return true
case CmdMarkBack:
ed.MarkBack()
return true
case CmdMarkBackToLine:
ed.MarkBackToLine()
return true
}
switch c.Kind {
case CmdViewDown:
ed.ViewDown(c.Num)
return true
case CmdViewUp:
ed.ViewUp(c.Num)
return true
case CmdViewDownHalf:
ed.ViewDownHalf(c.Num)
return true
case CmdViewUpHalf:
ed.ViewUpHalf(c.Num)
return true
case CmdViewDownLine:
ed.ViewDownLine(c.Num)
return true
case CmdViewUpLine:
ed.ViewUpLine(c.Num)
return true
case CmdViewToTop:
ed.ViewToTop()
return true
case CmdViewToMiddle:
ed.ViewToMiddle()
return true
case CmdViewToBottom:
ed.ViewToBottom()
return true
case CmdViewRedraw:
ed.ViewRedraw()
return true
}
switch c.Kind {
case CmdSearchForward:
ed.SearchForward(c.Pat)
return true
case CmdSearchBackward:
ed.SearchBackward(c.Pat)
return true
case CmdSearchNextMatch:
ed.SearchNextMatch()
return true
case CmdSearchPrevMatch:
ed.SearchPrevMatch()
return true
case CmdSearchRepeatForward:
ed.SearchRepeatForward()
return true
case CmdSearchRepeatBackward:
ed.SearchRepeatBackward()
return true
}
switch c.Kind {
case CmdFindForward:
ed.FindForward(c.Letter, c.Num)
return true
case CmdFindBackward:
ed.FindBackward(c.Letter, c.Num)
return true
case CmdFindBeforeForward:
ed.FindBeforeForward(c.Letter, c.Num)
return true
case CmdFindBeforeBackward:
ed.FindBeforeBackward(c.Letter, c.Num)
return true
case CmdFindNextMatch:
ed.FindNextMatch(c.Num)
return true
case CmdFindPrevMatch:
ed.FindPrevMatch(c.Num)
return true
}
switch c.Kind {
case CmdInsertBefore:
ed.InsertBefore(c.Num)
return true
case CmdInsertAfter:
ed.InsertAfter(c.Num)
return true
case CmdInsertBeforeNonBlank:
ed.InsertBeforeNonBlank(c.Num)
return true
case CmdInsertAfterEnd:
ed.InsertAfterEnd(c.Num)
return true
case CmdInsertOverwrite:
ed.InsertOverwrite(c.Num)
return true
case CmdInsertOpenBelow:
ed.InsertOpenBelow(c.Num)
return true
case CmdInsertOpenAbove:
ed.InsertOpenAbove(c.Num)
return true
case CmdOpCopyLine:
ed.OpCopyLine(c.Num)
return true
case CmdOpCopyRegion:
ed.OpCopyRegion(c.Start, c.End)
return true
case CmdOpCopyLineRegion:
ed.OpCopyLineRegion(c.StartRow, c.EndRow)
return true
case CmdOpCopyWord:
ed.OpCopyWord(c.Num)
return true
case CmdOpCopyToEnd:
ed.OpCopyToEnd(c.Num)
return true
case CmdOpCopyLineIntoReg:
ed.OpCopyLineIntoReg(c.Reg, c.Num)
return true
case CmdOpPaste:
ed.OpPaste(c.Num)
return true
case CmdOpPasteBefore:
ed.OpPasteBefore(c.Num)
return true
case CmdOpPasteFromReg:
ed.OpPasteFromReg(c.Reg, c.Num)
return true
case CmdOpDelete:
ed.OpDelete(c.Num)
return true
case CmdOpDeleteBefore:
ed.OpDeleteBefore(c.Num)
return true
case CmdOpDeleteLine:
ed.OpDeleteLine(c.Num)
return true
case CmdOpDeleteRegion:
ed.OpDeleteRegion(c.Start, c.End)
return true
case CmdOpDeleteLineRegion:
ed.OpDeleteLineRegion(c.StartRow, c.EndRow)
return true
case CmdOpDeleteWord:
ed.OpDeleteWord(c.Num)
return true
case CmdOpDeleteToEnd:
ed.OpDeleteToEnd(c.Num)
return true
case CmdOpChangeLine:
ed.OpChangeLine(c.Num)
return true
case CmdOpChangeRegion:
ed.OpChangeRegion(c.Start, c.End)
return true
case CmdOpChangeLineRegion:
ed.OpChangeLineRegion(c.StartRow, c.EndRow)
return true
case CmdOpChangeWord:
ed.OpChangeWord(c.Num)
return true
case CmdOpChangeToEnd:
ed.OpChangeToEnd(c.Num)
return true
case CmdOpSubst:
ed.OpSubst(c.Num)
return true
case CmdOpSubstLine:
ed.OpSubstLine(c.Num)
return true
}
switch c.Kind {
case CmdEditReplace:
ed.EditReplace(c.Letter, c.Num)
return true
case CmdEditJoin:
ed.EditJoin(c.Num)
return true
case CmdEditIndent:
ed.EditIndent(c.Num)
return true
case CmdEditOutdent:
ed.EditOutdent(c.Num)
return true
case CmdEditIndentRegion:
ed.EditIndentRegion(c.Start, c.End)
return true
case CmdEditOutdentRegion:
ed.EditOutdentRegion(c.Start, c.End)
return true
}
switch c.Kind {
case CmdMiscShowInfo:
ed.MiscShowInfo()
return true
case CmdMiscRepeat:
ed.MiscRepeat(c.Num)
return true
case CmdMiscUndo:
ed.MiscUndo(c.Num)
return true
case CmdMiscRestore:
ed.MiscRestore()
return true
case CmdMiscSaveAndQuit:
ed.MiscSaveAndQuit()
return true
}
return false
}