Enumeration: EventId
Перечисление типов событий редактора.
Определяет все события, на которые надстройки могут подписываться для получения уведомлений о различных изменениях в состоянии редактора и документа.
Remarks
Четыре основных типа событий:
EditorError— внутренние ошибки редактораDocumentChange— изменения содержимого документаSelectionChange— изменения выделения и курсораViewportChange— изменения видимой области
Использование:
editorApi.events.subscribe(EventId.DocumentChange, (payload) => {
console.log('Документ изменился:', payload);
});
Enumeration Members
DocumentChange
DocumentChange:
"documentChange"
Возникает при любом изменении содержания документа.
Remarks
Включает:
- Локальные изменения текущего пользователя (печать, удаление, форматирование)
- Удалённые изменения от других пользователей (в коллаборативных документах)
- Любые структурные изменения документа
Когда срабатывает:
- После каждого нажатия клавиши (печати)
- При удалении текста
- При вставке/вставке из буфера обмена
- При изменении форматирования
- При изменениях от других пользователей
Частота:
- Может срабатывать часто (на каждое нажатие клавиши в реальном времени)
- Рекомендуется использовать debounce/throttle для тяжёлых операций
Payload: DocumentChangeEventPayload
Default
'documentChange'
Example
let changeTimeout: NodeJS.Timeout;
editorApi.events.subscribe('documentChange', (payload) => {
clearTimeout(changeTimeout);
changeTimeout = setTimeout(() => {
console.log('Документ изменился, обработка...');
saveDocument();
}, 1000);
});
EditorError
EditorError:
"editorError"
Генерируется при возникновении внутренней ошибки в редакторе.
Remarks
Когда срабатывает:
- Критические ошибки в логике редактора
- Проблемы при обработке команд
- Ошибки синхронизации в коллаборативных документах
- Проблемы с загрузкой/сохранением
Что делать:
- Логировать ошибки для анализа
- Информировать пользователя о проблемах
- Предпринять восстановительные действия
Payload: ErrorEventPayload
Default
'editorError'
SelectionChange
SelectionChange:
"selectionChange"
Возникает при каждом изменении состояния выделения текста или перемещения курсора.
Remarks
Что отслеживает:
- Перемещение курсора (кликом или клавишами)
- Выделение текста (мышью или Shift+стрелками)
- Отмена/повторение (Undo/Redo)
- Изменения от других пользователей (коллаборативные документы)
Когда срабатывает:
- При клике в документ (новая позиция курсора)
- При перемещении курсора стрелками
- При выделении текста мышью
- При выделении текста клавиатурой (Shift+стрелки)
- При Undo/Redo операциях
- При изменениях от других пользователей
Использование:
- Подсвечивание синтаксиса на основе позиции курсора
- Обновление инструментов в зависимости от выделения
- Показ информации о текущей позиции
- Проверка контекста для валидации
Payload: SelectionChangeEventPayload
Default
'selectionChange'
Example
editorApi.events.subscribe('selectionChange', (payload) => {
const { selection } = payload;
const hasSelection = selection.start !== selection.end;
// Активировать кнопку "Копировать" только если что-то выбрано
editorApi.ui.updateUiNodes([
{
id: 'plugin:button:copy',
disabled: !hasSelection,
}
]);
});
ViewportChange
ViewportChange:
"viewportChange"
Сигнализирует о смене видимой части документа.
Remarks
Что отслеживает:
- Прокрутку документа пользователем (мышь, скролл, клавиши)
- Изменение масштаба (zoom in/out)
- Автоматическую прокрутку к курсору
- Изменение размера окна редактора
Когда срабатывает:
- При скролле мышью или колесом
- При нажатии Page Up/Page Down
- При изменении масштаба
- При изменении размера окна
- При навигации к определённой позиции
Использование:
- Отслеживание видимых элементов (для ленивой загрузки)
- Обновление миниатюры навигации
- Контроль видимости панелей/меню
- Отслеживание просмотра пользователем
- Синхронизация представлений в разных панелях
Payload: ViewportChangeEventPayload
Default
'viewportChange'
Example
editorApi.events.subscribe('viewportChange', (payload) => {
const { viewport } = payload;
console.log(`Видимая область: от ${viewport.top} до ${viewport.bottom}`);
console.log(`Масштаб: ${viewport.zoom}%`);
// Загрузить только видимые элементы
loadVisibleContent(viewport);
});