Редактор Ace вручную добавляет фрагменты

TL; DR

Я пытаюсь вручную вызывать фрагменты редактора ace через вызов функции, а не обычный подход (клавиши клавиатуры).

Объяснение

Мне нужна функция, которая принимает в редакторе и строку фрагмента в качестве параметров, и добавляет этот фрагмент в редактор. function addSnippet(editor, snippet).

Редактор Ace поддерживает фрагменты TextMate-ish.

if (${1:condition_name}) {
     ${2:body}
}

Поэтому, когда мы вызываем эту функцию, она должна добавить фрагмент, выделить маркеры и выбрать первый. После заполнения первого и нажатия вкладки редактор должен перейти к следующему маркеру фрагмента. Так же, как в примере Kitchen Sink (но я хочу добавить/вызвать фрагменты с помощью вызова функции).

Я попробовал взломать свой путь и сделал эту функцию. Но он грязный и неполный (не поддерживает маркеры и вкладки). Есть ли какой-нибудь родной метод для этого? Я видел несколько примеров, используя snippetManager, но они используют триггеры клавиатуры, а не ручные функции.

Любая помощь по этому вопросу будет оценена по достоинству. Спасибо.

Ответ 1

После нескольких часов хаков и исследований я наконец наткнулся на insertSnippet функцию snippetManager в ext-language_tools.js, он работает следующим образом:

var snippetManager = ace.require("ace/snippets").snippetManager;
snippetManager.insertSnippet(editor, snippet);

Довольно легко, на самом деле, не смог найти его раньше из-за отсутствия документации.

Ответ 2

Если вы не используете RequireJS, то работает следующий синтаксис:

ace.config.loadModule('ace/ext/language_tools', function () {
    editor.insertSnippet(snippetText);
});