static/ext/src/ux/AceEditor.js
function(data, hashId, key) {
        // If we pressed any command key but no other key, then ignore the input.
        // Otherwise "shift-" is added to the buffer, and later on "shift-g"
        // which results in "shift-shift-g" which doesn't make senese.
        if (hashId != 0 && (key == "" || String.fromCharCode(0))) {
            return null;
        }

        // Compute the current value of the keyboard input buffer.
        var r = this.$composeBuffer(data, hashId, key);
        var buffer = r.bufferToUse;
        var symbolicName = r.symbolicName;

        r = this.$find(data, buffer, symbolicName, hashId, key);
        if (DEBUG) {
            console.log("KeyboardStateMapper#match", buffer, symbolicName, r);
        }

        return r;
    }
function(data, hashId, key) {
        // If we pressed any command key but no other key, then ignore the input.
        // Otherwise "shift-" is added to the buffer, and later on "shift-g"
        // which results in "shift-shift-g" which doesn't make senese.
        if (hashId != 0 && (key == "" || String.fromCharCode(0))) {
            return null;
        }

        // Compute the current value of the keyboard input buffer.
        var r = this.$composeBuffer(data, hashId, key);
        var buffer = r.bufferToUse;
        var symbolicName = r.symbolicName;

        r = this.$find(data, buffer, symbolicName, hashId, key);
        if (DEBUG) {
            console.log("KeyboardStateMapper#match", buffer, symbolicName, r);
        }

        return r;
    }
This function is called by keyBinding.