автохоткеи в редакторе ace

Я пытаюсь сделать несколько автогорячих клавиш в редакторе ace. Например, я хочу сопоставить \R с символом Юникода ℝ. Вот мой jsfiddle: http://jsfiddle.net/U5JtP/2/

Это мой код:

editor.getSession().setMode("ace/mode/latex");
 editor.commands.addCommand({

        bindKey: {win: '\R'},
        exec: function(editor) {
            editor.insert("ℝ");
            var selection = editor.getSelection();
            selection.moveCursorBy(0,0);
        },
        readOnly: false // false if this command should not apply in readOnly mode
    });     

Это работает, если я использую: bindKey: {win: 'Ctrl-R'}, но я не понимаю, почему это не работает с этим кодом.


person 90intuition    schedule 30.10.2013    source источник


Ответы (1)


в принципе нужно сделать

var Range = ace.require("ace/range").Range

var autohotkeys = [["\\R", "ℝ"]];
editor.commands.on("afterExec", function(e) {
    if (e.command.name == "insertstring") {
        var pos = editor.getCursorPosition()
        var line = editor.session.getLine(pos.row).substring(0, pos.column);
        for (var i = 0; i < autohotkeys.length; i++) {
            var key = autohotkeys[i]
            if (line.slice(-key[0].length) == key[0]) {
                editor.session.replace(new Range(
                   pos.row, pos.column - key[0].length,
                   pos.row, pos.column
                   ), key[1])
                return
            }
        }
    }
})
person a user    schedule 31.10.2013