Ace Editor Javascript: как отключить все дополнительные команды, которые не используются по умолчанию в текстовой области?

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

Мой текущий подход состоит в том, чтобы создать массив стандартных команд в текстовой области (еще не знаю, как это сделать), а затем удалить их из всех команд следующим образом:

//Returns the set difference of this array and arr array
Array.prototype.diff = function(arr) {
    return this.filter(function(i) {return arr.indexOf(i) < 0;});
};

//Removes all Ace Editor commands which are not in the standardCommands array
function removeSpecialCommands(editor) {
    var commands = Object.keys(editor.commands.commands); //gets all commands
    var specialCommands = commands.diff(standardCommands); //gets extra ace cmnds
    editor.commands.removeCommands(specialCommands); //removes those commands
}

Однако выполнить каждую команду непросто, так как многие из них нельзя вызвать непосредственно в редакторе. Поэтому я не уверен, какие команды являются стандартными. Есть ли более простой способ получить только стандартные команды текстового поля (вкладка, вставка, удаление, перемещение курсора с домом, pgup, клавиши со стрелками и т. д.)?


person cgnorthcutt    schedule 19.07.2014    source источник
comment
Не могли бы вы описать немного подробнее, почему вы хотите это сделать? Я не могу придумать причину, по которой нужно отключить несколько курсоров.   -  person a user    schedule 19.07.2014
comment
Я хочу воссоздать набранный код из сохраненных событий, а работа с несколькими курсорами стала слишком сложной.   -  person cgnorthcutt    schedule 19.07.2014
comment
Я обновил свой ответ на ваш предыдущий вопрос stackoverflow.com/a/24608974/1743328, если вы используете execCommand там выиграл не будет проблем с несколькими курсорами   -  person a user    schedule 20.07.2014


Ответы (1)


Это во многом зависит от того, что вы считаете стандартной командой. Например. вы упоминаете tab, но текстовые области не обрабатывают tab.

Если ваша цель — просто отключить некоторые команды, которые переопределяют ключи браузера по умолчанию, вас может заинтересовать https://github.com/ajaxorg/ace/blob/master/lib/ace/keyboard/textarea.js

Чтобы также отключить создание множественного выбора с помощью мыши, используйте editor.setOption("enableMultiselect", false)

выполнить каждую команду непросто, так как многие из них нельзя вызвать непосредственно в редакторе.

все команды редактора можно вызывать с помощью editor.execCommand(commandName|commandObject)

person a user    schedule 19.07.2014
comment
Невероятно хороший ответ. Спасибо большое. Могу я спросить, как вы получили эту информацию? Его нет в документах Ace, и я не видел его в файле Ace commands.js. - person cgnorthcutt; 19.07.2014