Интеграция с текстовым редактором

Ren'Py использует текстовый редактор, чтобы позволить пользователю редактировать игровые скрипты из лаунчера и сообщать пользователю об ошибках. Используемый редактор может быть настроен пользователем по мере необходимости.

Редактор настраивается путём создания класса Editor в файле .edit.py. Этот класс содержит методы, которые вызываются для управления редактированием текста.

При прямом запуске Ren'Py сначала ищет файл .edit.py для использования в переменной окружения RENPY_EDIT_PY. Если он находит его, он использует класс Editor, определённый в этом файле. Если нет, он использует встроенный класс редактора, который запускает редактор в зависимости от системы.

Когда запускается лаунчер Ren'Py, он сканирует поддиректории директории проектов и директории Ren'Py в поисках файлов вида name.edit.py. (Например, он найдёт launcher/jEdit.edit.py и myeditor/MyEditor.edit.py.) Самый последний редактор с заданным name представляется создателю как часть опций лаунчера. Лаунчер также устанавливает RENPY_EDIT_PY в выбранный файл, чтобы игры, запущенные из лаунчера, использовали выбранный редактор.

Написание файла .edit.py

Файл edit.py — это файл Python (не Ren'Py), который должен определять один класс с именем Editor. Ren'Py будет вызывать методы этого класса для выполнения редактирования.

Использование редактора происходит в рамках транзакции редактора, которая группирует связанные операции вместе. Например, если транзакция редактора запрашивает новое окно, все файлы в этой транзакции должны быть открыты в одном и том же новом окне. Транзакция редактора начинается с вызова метода begin, может содержать один или несколько вызовов методов операций и заканчивается вызовом метода end.

Файл .edit.py должен импортировать renpy.editor, а класс Editor должен наследоваться от renpy.editor.Editor. Поскольку в методы могут быть добавлены дополнительные именованные аргументы, каждый определяемый вами метод должен игнорировать неизвестные именованные аргументы. Поскольку ожидается, что вы определите свой собственный подкласс Editor, мы представляем методы с параметром self.

class Editor
begin(self, new_window=False, **kwargs)

Начинает транзакцию редактора.

Если new_window равно true, редактор должен попытаться открыть новое окно. В противном случае он должен попытаться выполнить транзакцию в существующем окне редактора.

end(self, **kwargs)

Завершает транзакцию.

open(self, filename, line=None, **kwargs)

Открывает filename в редакторе.

Если line не равно None, пытается спозиционировать курсор редактирования на строке line.