q -> выйти, но если файл был изменен, то возможен выход без сохранения только через q!

master
serr 2025-02-05 22:36:12 +03:00
parent 7cd502a806
commit 0dc325466e
2 changed files with 6 additions and 3 deletions

View File

@ -14,7 +14,7 @@ class VimModel:
def __init__(self, displayLinesCount: int, displayColsCount: int):
self.displayLinesCount = displayLinesCount
self.displayColsCount = displayColsCount
self.showLineNumbers = False
self.showLineNumbers = True
self.displayBuffer = [] # буфер для хранения всех строк
self.dump = []
self.currentLine = 0 # текущий индекс строки
@ -157,7 +157,8 @@ class VimModel:
self.commandBuffer.clear()
match cmd:
case "q": # Выход из программы
return ReturnCode.EXIT_CODE
if self.displayBuffer == self.dump:
return ReturnCode.EXIT_CODE
case "q!": # Выход без сохранения
return ReturnCode.EXIT_CODE
case "wq!" | "x": # Записать в текущий файл + выйти
@ -288,6 +289,7 @@ class VimModel:
with open(file_path, "w") as file:
for line in self.displayBuffer:
file.write(''.join(line) + '\n')
self.Dump()
print(f"In file '{file_path}' written successfully.")
except Exception as e:
print(f"Error writing file: {str(e)}")

View File

@ -34,6 +34,7 @@ class CursesAdapter:
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)
def Refresh(self) -> None:
"""Apply changes"""
@ -84,7 +85,7 @@ class VimView:
if show_line_numbers:
line_number = f"{i + scrollY + 1:6} " # 6 символов на номер строки
# Выводим номер строки фиолетовым цветом
self.curses_adapter.screen.addstr(i, 0, line_number, curses.color_pair(1))
self.curses_adapter.screen.addstr(i, 0, line_number, self.curses_adapter.colorPair)
# Выводим текст с учетом прокрутки и ширины нумерации
visible_text_start = scrollX # Начало видимой части текста