Как мы сделали так, чтобы файл не повредился, даже если приложение выключится во время сохранения
Что произойдёт с документом, если ноутбук выключится в момент сохранения? В mote ответ таков: «Либо до сохранения, либо после — одно из двух».

Что произойдёт, если питание отключится в момент сохранения файла?
Обычно файл может сохраниться лишь наполовину. В редакторе, которым пользуются долго, такого происходить не должно. Поэтому mote сохраняет исходный файл, даже если сохранение завершилось неудачей.
Сначала в той же папке, где находится документ, создаётся временный файл. Записав всё содержимое, mote сбрасывает его на диск и копирует права доступа исходного файла. Когда всё готово, временный файл переименовывается в исходное имя.
Переименование происходит за одну операцию. Даже если в процессе отключится питание, останется либо прежний, либо новый файл. Наполовину сохранённого файла не останется.
Права доступа также сохраняются без изменений. Ведь сохранение меняет содержимое, а не то, кто может читать файл.
Байты документа тоже не изменяются без необходимости. Переносы строк CRLF, BOM, смешанные переносы строк и даже наличие или отсутствие последнего переноса строки сохраняются в исходном виде. Если вы открыли файл и ничего в нём не изменили, после повторного сохранения не должен измениться ни один байт. mote проверяет соблюдение этого принципа при каждом выпуске.
Ссылки не разрываются
Даже безопасный способ сохранения нельзя одинаково применять ко всем файлам.
Если заменить символическую ссылку как обычный файл, ссылка исчезнет. Отредактированное содержимое также не попадёт в документ, на который она указывала. mote переходит по ссылке и сохраняет сам файл. Ссылка остаётся на месте.
При жёсткой ссылке несколько имён указывают на один и тот же файл. Если заменить новым файлом только одно из этих имён, связь разорвётся. Поэтому файлы с жёсткими ссылками перезаписываются на месте. Приходится отказаться от атомарности, но риск снижается благодаря резервной копии, созданной непосредственно перед сохранением.
Непрочитанные файлы не сохраняются
Перед сохранением mote сначала читает файл с диска.
Если файла нет, он создаётся. Если его можно прочитать, сначала создаётся резервная копия, а затем файл сохраняется. Если файл существует, но прочитать его невозможно, сохранение останавливается.
К таким случаям относятся старые документы с неподдерживаемой кодировкой, папки и файлы, к которым нет прав доступа. Если показать непрочитанный файл как пустой документ, а затем перезаписать его, вместе с ним может исчезнуть всё содержимое, которого пользователь даже не видел.
Если файл невозможно прочитать, невозможно создать и резервную копию. Поэтому отказ от сохранения — единственный способ защитить файл.
Резервные копии и черновики не создаются рядом с документом
Файл в состоянии перед сохранением копируется в папку состояния. В имени указываются название документа и время сохранения.
문서이름.2026-09-07-153914.md
Для каждого документа хранятся 20 последних резервных копий, а самые старые удаляются первыми. Уже по имени файла можно понять, когда была создана резервная копия, и сразу открыть её в привычном редакторе.
У документа, который ещё ни разу не сохраняли, нет исходного файла для резервного копирования. Вместо этого создаётся черновик. Через одну секунду после прекращения редактирования его копия сохраняется в папке состояния. В имя включаются время и первый заголовок документа.
Когда файл сохраняется или пользователь отказывается от документа, черновик также удаляется. То же происходит при завершении работы приложения. Если место сохранения задано, документ сохраняется в файл, а если нет — остаётся черновиком.
Временные файлы, оставшиеся после сбоя, также удаляются при следующем открытии документа. Однако, если процесс, создавший такой файл, всё ещё выполняется, mote не трогает его. Возможно, сохранение идёт в другом окне.
Документы в /tmp или папке кэша могут исчезнуть при перезагрузке. При открытии такого документа появляется уведомление с предложением сохранить его в другом месте.
Во всех остальных случаях в папке документа не создаются никакие вспомогательные файлы. Настройки, резервные копии, черновики и сведения о последнем открытом файле хранятся в папке состояния в домашней папке пользователя. В mote нет функций, которым требовалось бы отдельно сохранять состояние, не помещающееся в Markdown.

Резервная копия нужна тогда, когда отмена действий уже не поможет. Например, после повторного запуска приложения или когда ошибочное сохранение обнаружилось лишь спустя долгое время. Открыв резервные файлы, можно увидеть документ в том виде, в каком он находился непосредственно перед каждой перезаписью.
Файлы и сеть используются только с разрешения пользователя
Автоматическое сохранение нужно включить вручную в настройках. Там же можно выбрать задержку перед сохранением.
Когда оно включено, файл сохраняется по истечении заданного времени после прекращения редактирования. Способ сохранения тот же, что и при ручном сохранении. Сначала создаётся резервная копия, затем временный файл, после чего он заменяет исходный. Автоматическое сохранение — не отдельная функция сохранения, а таймер, который запускает то же самое сохранение вместо пользователя. Он срабатывает только при редактировании.

Проверку обновлений также нужно включить вручную. Когда она выключена, mote не использует сеть.
Когда она включена, приложение один раз выполняет проверку в фоновом режиме после запуска. Правило «раз в сутки» соблюдается не за счёт отсчёта времени приложением, а с помощью файла-метки в папке состояния. Пока отметка действует, повторная проверка не выполняется, и постоянно работающего таймера тоже нет.
Даже если доступна новая версия, она не загружается сразу. В правом нижнем углу экрана лишь появляется уведомление. Пока пользователь не нажмёт на него, не произойдут ни загрузка, ни установка, ни перезапуск.
Единственный формат, который приложение может обновлять самостоятельно, — AppImage. Достаточно заменить один файл. Если mote установлен через apt или Flatpak, приложение лишь показывает подходящую команду. Пользователь запускает её самостоятельно.
При проверке обновлений отправляются только сведения о платформе и канале распространения. Информация, позволяющая идентифицировать пользователя, и сведения об открытых документах не отправляются.
Безопасное сохранение — не то, которое всегда завершается успешно. Это сохранение, при котором ничего не теряется даже в случае неудачи.