Skip to content

Редактор файлов. Идеально для Peer review и C#

Notifications You must be signed in to change notification settings

ik-edu-projects/Editka

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

34 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Фичи

Белые звёздочки (☆) — доп. функционал по ТЗ. Чёрные (★) — дополнение к доп. функционалу. Это те штуки, которые делают программу действительно полезной. Ведь смысл делать обычный скучный клон Notepad++?

  • Открывать, редактировать и сохранять простые текстовые файлы
    • ★ Открывать директории
    • ★ Создавать и удалять файлы в директориях.
  • Открывать, редактировать и сохранять текстовые файлы формата *.rtf
  • Вкладки
  • Важный вопрос при сохранении
  • Меню: Файл / Правка / Формат / Настройки
  • Настройки:
    • Период автосохранения.
    • Цветовая схема.
    • ★ Горячие клавиши.
  • Автосохранение по таймеру
    • ★ Автосохранение по расфокусу
  • Цветовая схема
  • Форматирование: курсив, жирный, подчёркнутый, зачёркнутый
  • Контекстное меню:
    • Выбрать весь текст;
    • Вырезать выделенный фрагмент;
    • Копировать выделенный фрагмент;
    • Вставить сохранённый в буфере обмена фрагмент;
    • Задать формат выделенного фрагмента текста
  • Хоткеи:
    • Создание документа в новом окне;
    • Создание документа в новой вкладке;
    • Сохранение текущего документа;
    • Сохранение всех открытых в окне документов.
    • Закрытие приложения
  • Восстановление состояния при перезапуске.
  • ☆ Журналирование
    • ★ Конвертация истории гита в историю эдитки. Скорее всего не на C#, а на питоне, наверное.
  • ☆ Ctrl+Z, Ctrl+Shift+Z
  • ☆ Открытие и редактирование C#
    • ★ Открытие всего решения или проекта, а не только одиночных файлов.
  • ☆ Реализовать автоматическое форматирование кода на языке C# для кода, расположенного в одном файле
    • ★ Форматирование всего решения/проекта.
  • ☆ Реализовать автоматическую подсветку синтаксиса кода на языке C#.
  • ☆ Реализовать возможность компиляции исходного кода в исполняемый файл с выводом ошибок компиляции в отдельное окно (часть окна). Путь к компилятору указывается с помощью настроек при первой попытке сборки исполняемого файла, в дальнейшем может быть изменён в настройках.
  • ★ Code review:
    • ★ Возможность писать комментарии к каждой строчке.
    • ★ Отображать число строк в функции.
    • ★ Подсвечивать отсутствие документации.
    • ★ Слишком длинные строки.
    • ★ Проверять точки в конце комментариев (шутка).

Заметки по реализации:

Несколько окон и как с этим жить

Очевидно, можно открывать несколько окон редактора и в этом нет ничего плохого. Проблема в том, что в каждом из окон подразумевается свой список файлов и свои настройки. Это не очень здорово, появляются последствия:

  • Не совсем понятно какие файлы надо заново открывать после закрытия. Кейс такой:
    1. Открыли окно А
    2. В нём открыли окно Б.
    3. Закрыли окно А.
    4. Закрыли окно Б.
    5. Открыли программу. Какие файлы в этот момент должны восстановиться? Скорее всего из Б, т.к. это окно было закрыто последним.
  • Практически та же проблема с настройками. В разных окнах были установлены разные настройки, что же делать при открытии нового? Надо выбирать те, которые были настроены самыми последними.
  • И не стоит забывать про то, что можно открывать новые окна из самой программы. Они должны выглядеть также, как и их родитель.

Решение:

Когда окно закрывается, оно создаёт в общей директории новый файлик с именем {year}/{date}/{hour}/{time}, который содержит:

  • Настройки
  • Список файлов, которые открыты в том или ином окне
  • Список всех файлов всех других окон, которые были запущены Тогда чтобы восстановить последнее состояние, нужно найти самый последний файл простой сортировкой.

Если открывается новое окно, то ему в аргументах передаётся путь к файлу родительского окна, из которого извлекаются текущие настройки.

В этом случае может возникнуть неприятная ситуация с настройками, т.к. не всегда последнее закрытое окно содержит последние настроенные настройки. Поэтому при нажатии кнопки "сохранить настройки" пишется файл settings, который всегда считывается при перезапуске и перекрывает те настройки, которые были у того окна. Т.е. при перезапуске из .editka извлекаются только файлы, но не настройки.

Лайфхак: если не нажимать кнопку сохранить, то настройки применятся только к текущему окну, но не повлияют на любые другие.

Настройки

Настройки представляют из себя обычный xml файл, который содержит всевозможные параметры.

Журналирование и комментарии

В директории с файлом создается поддиректория .editka, которая содержит:

  • .gitignore
  • Директорию с именем файла
    • В которой лежат файлы с именем, состоящем только из timestamp их создания.
    • А также файлы вида {timestamp}.comments с комментариями
    • Комментарии к последней версии находятся в файле comments

Пример файла с комментариями в файле foobar.txt:

foobar.txt:D7A8FBB307D7809469CA9ABCB0082E4F8D5651E46D3CDB762D02D0BF37C9E592

L10-13:
> Hello world.
> This is a foobar.txt.
> It does contain some text on lines 10-13
Это комментарий к строке 1 (на которой "Hello world.")
Комментарий к строке 2
Такой формат позволяет читать комментарии в отдельности от самого файла, не теряя контекста.

В случае с rtf здесь теряется форматирование, увы.

Виды файлов:

  • Директория
  • .txt или другие просто-текстовые форматы.
  • .rtf: Единственный умеет в форматирование, в остальных оно недоступно.
  • .cs: При открытии происходит поиск .sln и предлагается его загрузить вместо .cs. Каждый такой файл привязан к Roslyn's workspace, причём несколько файлов могут быть привязаны к одному и тому же, например когда грузится всё решение.
  • .sln: Является директорией, в которой находится загруженное решение. Все .cs внутри будут привязаны к этому решению. Отображается точно также, как и обычная папка, заморачиваться с Roslyn's workspace совсем не хочется.

About

Редактор файлов. Идеально для Peer review и C#

Resources

Stars

Watchers

Forks

Packages

No packages published

Languages