VIM-like-text-editor/main.py

43 lines
1.5 KiB
Python

import sys
from mvc.models import VimModel
from mvc.views import VimView, CursesAdapter
from mvc.controllers import Controller, ReturnCode
from mvc.controllers import EditStrategy, CommandStrategy, NormalStrategy
import tools
from mystring import MyString as MyString
def main():
adapter = CursesAdapter()
model, view = VimModel(adapter.lines, adapter.cols), VimView(adapter)
# start mode - navigation mode
strategy = NormalStrategy(model, view.curses_adapter)
controller = Controller(strategy)
# load file from sys argv
if len(sys.argv) > 1: model.LoadFile(MyString(sys.argv[1]))
else: model.LoadFile(MyString("File not found but i create it").data()+\
MyString(str(tools.UnixSec())).data()+\
MyString(".txt").data())
view.SetModel(model) # view subscribe model
while True:
model.notify()
symbolCode = view.curses_adapter.GetChar()
match controller.HandleInput(symbolCode):
case ReturnCode.SET_BASIC_MODE:
controller.SetStrategy(NormalStrategy(model, view.curses_adapter))
case ReturnCode.SET_COMMAND_MODE:
controller.SetStrategy(CommandStrategy(model, view.curses_adapter))
case ReturnCode.SET_EDIT_MODE:
controller.SetStrategy(EditStrategy(model, view.curses_adapter))
case ReturnCode.EXIT_CODE:
break
view.curses_adapter.Cleanup()
if __name__ == "__main__":
main()