Белые звёздочки (☆) — доп. функционал по ТЗ. Чёрные (★) — дополнение к доп. функционалу. Это те штуки, которые делают программу действительно полезной. Ведь смысл делать обычный скучный клон Notepad++?
- Открывать, редактировать и сохранять простые текстовые файлы
- ★ Открывать директории
- ★ Создавать и удалять файлы в директориях.
- Открывать, редактировать и сохранять текстовые файлы формата *.rtf
- Вкладки
- Важный вопрос при сохранении
- Меню: Файл / Правка / Формат / Настройки
- Настройки:
- Период автосохранения.
- Цветовая схема.
- ★ Горячие клавиши.
- Автосохранение по таймеру
- ★ Автосохранение по расфокусу
- Цветовая схема
- Форматирование: курсив, жирный, подчёркнутый, зачёркнутый
- Контекстное меню:
- Выбрать весь текст;
- Вырезать выделенный фрагмент;
- Копировать выделенный фрагмент;
- Вставить сохранённый в буфере обмена фрагмент;
- Задать формат выделенного фрагмента текста
- Хоткеи:
- Создание документа в новом окне;
- Создание документа в новой вкладке;
- Сохранение текущего документа;
- Сохранение всех открытых в окне документов.
- Закрытие приложения
- Восстановление состояния при перезапуске.
- ☆ Журналирование
- ★ Конвертация истории гита в историю эдитки. Скорее всего не на C#, а на питоне, наверное.
- ☆ Ctrl+Z, Ctrl+Shift+Z
- ☆ Открытие и редактирование C#
- ★ Открытие всего решения или проекта, а не только одиночных файлов.
- ☆ Реализовать автоматическое форматирование кода на языке C# для кода,
расположенного в одном файле
- ★ Форматирование всего решения/проекта.
- ☆ Реализовать автоматическую подсветку синтаксиса кода на языке C#.
- ☆ Реализовать возможность компиляции исходного кода в исполняемый файл с выводом ошибок компиляции в отдельное окно (часть окна). Путь к компилятору указывается с помощью настроек при первой попытке сборки исполняемого файла, в дальнейшем может быть изменён в настройках.
- ★ Code review:
- ★ Возможность писать комментарии к каждой строчке.
- ★ Отображать число строк в функции.
- ★ Подсвечивать отсутствие документации.
- ★ Слишком длинные строки.
- ★ Проверять точки в конце комментариев (шутка).
Очевидно, можно открывать несколько окон редактора и в этом нет ничего плохого. Проблема в том, что в каждом из окон подразумевается свой список файлов и свои настройки. Это не очень здорово, появляются последствия:
- Не совсем понятно какие файлы надо заново открывать после закрытия. Кейс такой:
- Открыли окно А
- В нём открыли окно Б.
- Закрыли окно А.
- Закрыли окно Б.
- Открыли программу. Какие файлы в этот момент должны восстановиться? Скорее всего из Б, т.к. это окно было закрыто последним.
- Практически та же проблема с настройками. В разных окнах были установлены разные настройки, что же делать при открытии нового? Надо выбирать те, которые были настроены самыми последними.
- И не стоит забывать про то, что можно открывать новые окна из самой программы. Они должны выглядеть также, как и их родитель.
Решение:
Когда окно закрывается, оно создаёт в общей директории новый файлик с именем {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 совсем не хочется.