Caret/js/keys.js

71 lines
1.8 KiB
JavaScript
Raw Normal View History

define(["settings!keys", "command", "editor", "dom2"], function(Settings, command, editor) {
2013-08-20 00:53:03 +00:00
/*
2013-09-01 04:21:21 +00:00
Still need to set Sublime keybindings
2013-08-20 00:53:03 +00:00
*/
2013-08-31 20:23:41 +00:00
2013-09-01 04:21:21 +00:00
var keycodes = {
9: "TAB",
13: "RETURN",
32: "SPACE",
37: "LEFT",
39: "RIGHT",
38: "UP",
40: "DOWN",
187: "=",
189: "-"
};
2013-09-01 04:21:21 +00:00
//need to remove existing Ace conflicts on init:start
var bindAce = function() {
var handler = editor.getKeyboardHandler();
var bindings = Settings.get("keys");
for (var k in bindings) {
var action = bindings[k];
if (!action.ace) continue;
k = k.replace("^", "Ctrl").replace("M", "Alt").replace(/-[A-Z]$/, function(match) {
return "-Shift" + match.toUpperCase();
}).replace(/-[a-z]$/, function(match) {
return match.toUpperCase();
});
handler.bindKey(k, action.ace);
}
};
command.on("init:startup", bindAce);
command.on("init:restart", bindAce);
2013-09-01 04:21:21 +00:00
//we have to listen on keydown, because keypress will get caught by the window manager
2013-08-31 20:23:41 +00:00
window.on("keydown", function(e) {
var char = String.fromCharCode(e.keyCode);
2013-09-01 04:21:21 +00:00
if (e.keyCode in keycodes) {
char = keycodes[e.keyCode];
}
if (!e.shiftKey) char = char.toLowerCase();
2013-09-06 02:44:42 +00:00
var prefix = "";
2013-10-12 23:25:25 +00:00
if (e.ctrlKey || e.metaKey) {
2013-09-06 02:44:42 +00:00
prefix += "^";
}
if (e.altKey) {
prefix += "M";
}
var combo = prefix + "-" + char;
var keyConfig = Settings.get("keys");
2013-08-31 20:23:41 +00:00
if (combo in keyConfig) {
e.preventDefault();
var action = keyConfig[combo];
if (typeof action == "string") {
action = {
command: action
};
}
if (action.ace) {
//we're going to bind these directly on startup
//so we shouldn't act on them
return;// editor.execCommand(action.ace);
}
command.fire(action.command, action.argument);
2013-08-31 20:23:41 +00:00
}
});
2013-08-20 00:53:03 +00:00
});