Как разрешить два отдельных сопоставления клавиш для одного ключа (скажем, Up) в CodeMirror, в зависимости от сценария
Я создаю расширение Chrome, которое добавляет автозаполнение к экземпляру CodeMirror (по какой-то причине развернуло мою собственную версию автозаполнения), а рассматриваемый экземпляр CodeMirror - v2.37, поэтому он довольно старый.
Все работает, за исключением того, что я хочу использовать "Ввод", "Вверх" и "Вниз" для отображения автозаполнения и, таким образом, выбрать запись или переместиться вверх / вниз по списку. Проблема, с которой я столкнулся, заключается в том, что, хотя это легко включить, когда отображается автозаполнение, в настоящее время оно также предотвращает действие по умолчанию, когда оно не отображается. Вот код, который у меня есть:
editor.setOption("extraKeys", {
"Enter": function(){
if($('.CodeMirror-completions').length > 0) {
var str = $('.CodeMirror-completions li.selected').text();
var from = $('.CodeMirror-completions ul').data('from');
var to = $('.CodeMirror-completions ul').data('to');
editor.replaceRange(str, from, to);
$('.CodeMirror-completions').remove();
setTimeout(function(){editor.focus();}, 50);
return editor.PASS;
} else {
CodeMirror.commands.newlineAndIndent(cm);
}
},
"Up": function(){
if($('.CodeMirror-completions').length > 0) {
var divSelected = $('.CodeMirror-completions li.selected');
var next = divSelected.prev('li');
divSelected.removeClass('selected');
if (next.length > 0){
divSelected = next.addClass('selected');
}
return editor.PASS;
} else {
CodeMirror.commands.goLineUp(cm);
}
}
});
Интересно, что "Enter" работает нормально, а "Up" - нет.
Сначала я думал, что это будет работать (в псевдокоде), но это не так:
"Enter": function(){
if(autocomplete showing) {
replaceRange()
return editor.PASS;
}
}
Есть ли эквивалент файла editor.PASS, в котором говорится, что для этого ключа используется действие по умолчанию?
1 ответ
Похоже, я сделал одну простую ошибку, опуская объект 'cm' из первой функции >> "Up": function(cm){
скорее, чем "Up": function(){
так что это не было передано.
полный код:
"Up": function(cm){
if($('.CodeMirror-completions').length > 0) {
var divSelected = $('.CodeMirror-completions li.selected');
var next = divSelected.prev('li');
divSelected.removeClass('selected');
if (next.length > 0){
divSelected = next.addClass('selected');
}
return editor.PASS;
}
CodeMirror.commands.goLineUp(cm);
}
Надеемся, что это поможет любому связать определенные события с часто используемыми раскладками клавиш в зависимости от рассматриваемого сценария.