o -> переход в режим ввода после курсора, повторное нажатие выключает этот режим
parent
c405e36dcf
commit
2604dd5dab
|
@ -79,7 +79,10 @@ class EditStrategy(BaseStrategy):
|
|||
self.model.Backspace()
|
||||
case _:
|
||||
if not isAscii(symbolCode): return ReturnCode.GOOD
|
||||
if not self.model.inputAfterCursor:
|
||||
self.model.InsertSymbol(symbolCode)
|
||||
else:
|
||||
self.model.InsertSymbolAfterCursor(symbolCode)
|
||||
|
||||
self.model.Scroll()
|
||||
return ReturnCode.GOOD
|
||||
|
|
|
@ -24,10 +24,14 @@ class VimModel:
|
|||
self.scrollX = 0 # горизонтальная прокрутка
|
||||
self.file_path = "" # путь к файлу
|
||||
self.mode = ""
|
||||
self.inputAfterCursor = False
|
||||
self.keyLog = [] # лог нажатий клавиш (кортежи вида (код символа, юникс время нажатия))
|
||||
self.commandBuffer = [] # буффер для команды
|
||||
self.exchangeBuffer = [] # буффер обмена
|
||||
|
||||
def InputAfterCursor(self) -> None:
|
||||
self.inputAfterCursor = not self.inputAfterCursor
|
||||
|
||||
def UpdateKeyLog(self, symbolCode: int) -> None:
|
||||
if len(self.keyLog) > 5000: self.keyLog.clear()
|
||||
self.keyLog.append((symbolCode, tools.UnixSec()))
|
||||
|
@ -74,6 +78,10 @@ class VimModel:
|
|||
self.displayBuffer[self.currentLine].insert(self.currentCol, chr(symbolCode))
|
||||
self.currentCol += 1
|
||||
|
||||
def InsertSymbolAfterCursor(self, symbolCode: int) -> None:
|
||||
if self.currentCol <= len(self.displayBuffer[self.currentLine]): # проверяем, не превышает ли индекс колонки длину строки
|
||||
self.displayBuffer[self.currentLine].insert(self.currentCol, chr(symbolCode))
|
||||
|
||||
def ToLineStart(self) -> None:
|
||||
self.currentCol = 0
|
||||
|
||||
|
@ -179,6 +187,9 @@ class VimModel:
|
|||
self.currentCol = 0
|
||||
self.displayBuffer[self.currentLine] = []
|
||||
return ReturnCode.SET_EDIT_MODE
|
||||
case "o":
|
||||
self.InputAfterCursor()
|
||||
return ReturnCode.SET_EDIT_MODE
|
||||
case "h":
|
||||
self.LoadFile("config/usage.txt")
|
||||
return ReturnCode.SET_BASIC_MODE
|
||||
|
@ -340,14 +351,17 @@ class VimModel:
|
|||
print(f"Error writing file: {str(e)}")
|
||||
|
||||
def Reset(self) -> None:
|
||||
self.displayBuffer = []
|
||||
self.dump = []
|
||||
self.currentLine = 0
|
||||
self.currentCol = 0
|
||||
self.scrollY = 0
|
||||
self.scrollX = 0
|
||||
self.file_path = ""
|
||||
self.mode = ""
|
||||
self.showLineNumbers = True
|
||||
self.lastSearch = ()
|
||||
self.commandBuffer = []
|
||||
self.exchangeBuffer = []
|
||||
self.displayBuffer = [] # буфер для хранения всех строк
|
||||
self.dump = []
|
||||
self.currentLine = 0 # текущий индекс строки
|
||||
self.currentCol = 0 # текущий индекс колонки
|
||||
self.scrollY = 0 # вертикальная прокрутка
|
||||
self.scrollX = 0 # горизонтальная прокрутка
|
||||
self.file_path = "" # путь к файлу
|
||||
self.mode = ""
|
||||
self.inputAfterCursor = False
|
||||
self.keyLog = [] # лог нажатий клавиш (кортежи вида (код символа, юникс время нажатия))
|
||||
self.commandBuffer = [] # буффер для команды
|
||||
self.exchangeBuffer = [] # буффер обмена
|
16
mvc/views.py
16
mvc/views.py
|
@ -34,8 +34,9 @@ class CursesAdapter:
|
|||
self.lines = curses.LINES
|
||||
curses.curs_set(1) # Make cursor visible
|
||||
curses.start_color()
|
||||
curses.init_pair(1, curses.COLOR_MAGENTA, curses.COLOR_BLACK) # Фиолетовый текст на черном фоне
|
||||
self.colorPair = curses.color_pair(1)
|
||||
curses.init_pair(1, curses.COLOR_BLUE, curses.COLOR_BLACK) # Фиолетовый текст на черном фоне
|
||||
curses.init_pair(2, curses.COLOR_WHITE, curses.COLOR_BLUE) # Фиолетовый текст на черном фоне
|
||||
self.colorPairs = [curses.color_pair(1), curses.color_pair(2)]
|
||||
|
||||
def Refresh(self) -> None:
|
||||
"""Apply changes"""
|
||||
|
@ -52,6 +53,9 @@ class CursesAdapter:
|
|||
"""set char position (x, y)"""
|
||||
self.screen.addch(x, y, code)
|
||||
|
||||
def SetColorString(self, x: int, y: int, data: str, attr: int):
|
||||
self.screen.addstr(x, y, data, attr)
|
||||
|
||||
def SetString(self, x: int, y: int, data: str):
|
||||
"""set string begin position (x, y)"""
|
||||
self.screen.addstr(x, y, data)
|
||||
|
@ -86,7 +90,7 @@ class VimView:
|
|||
if show_line_numbers:
|
||||
line_number = f"{i + scrollY + 1:6} " # 6 символов на номер строки
|
||||
# Выводим номер строки фиолетовым цветом
|
||||
self.curses_adapter.screen.addstr(i, 0, line_number, self.curses_adapter.colorPair)
|
||||
self.curses_adapter.SetColorString(i, 0, line_number, self.curses_adapter.colorPairs[0])
|
||||
|
||||
# Выводим текст с учетом прокрутки и ширины нумерации
|
||||
visible_text_start = scrollX # Начало видимой части текста
|
||||
|
@ -113,6 +117,8 @@ class VimView:
|
|||
"""Print edit mode information panel"""
|
||||
if len(modeBarData) > self.curses_adapter.cols - 1:
|
||||
scrollX = len(modeBarData) - self.curses_adapter.cols
|
||||
self.curses_adapter.SetString(self.curses_adapter.lines - 1, 0, modeBarData[scrollX + 1:])
|
||||
self.curses_adapter.SetColorString(self.curses_adapter.lines - 1, 0,
|
||||
modeBarData[scrollX + 1:], self.curses_adapter.colorPairs[1])
|
||||
else:
|
||||
self.curses_adapter.SetString(self.curses_adapter.lines - 1, 0, modeBarData)
|
||||
self.curses_adapter.SetColorString(self.curses_adapter.lines - 1, 0,
|
||||
modeBarData, self.curses_adapter.colorPairs[1])
|
||||
|
|
Loading…
Reference in New Issue