Merge pull request #543 from ajaxorg/vim

Changes in Vim branch
This commit is contained in:
Zef Hemel 2011-11-30 08:50:28 -08:00
commit 0d56cbade3
3 changed files with 24 additions and 13 deletions

View file

@ -86,7 +86,9 @@ var KeyBinding = function(editor) {
if (!toExecute || !toExecute.command) if (!toExecute || !toExecute.command)
return false; return false;
var success = false, commands = this.$editor.commands;
var success = false;
var commands = this.$editor.commands;
// allow keyboardHandler to consume keys // allow keyboardHandler to consume keys
if (toExecute.command != "null") if (toExecute.command != "null")

View file

@ -73,7 +73,7 @@ StateHandler.prototype = {
}); });
}, },
$composeBuffer: function(data, hashId, key) { $composeBuffer: function(data, hashId, key, e) {
// Initialize the data object. // Initialize the data object.
if (data.state == null || data.buffer == null) { if (data.state == null || data.buffer == null) {
data.state = "start"; data.state = "start";
@ -102,17 +102,23 @@ StateHandler.prototype = {
data.buffer = bufferToUse; data.buffer = bufferToUse;
} }
return { var bufferObj = {
bufferToUse: bufferToUse, bufferToUse: bufferToUse,
symbolicName: symbolicName symbolicName: symbolicName,
}; };
if (e) {
bufferObj.keyIdentifier = e.keyIdentifier
}
return bufferObj;
}, },
$find: function(data, buffer, symbolicName, hashId, key) { $find: function(data, buffer, symbolicName, hashId, key, keyIdentifier) {
// Holds the command to execute and the args if a command matched. // Holds the command to execute and the args if a command matched.
var result = {}; var result = {};
// Loop over all the bindings of the keymapp until a match is found. // Loop over all the bindings of the keymap until a match is found.
this.keymapping[data.state].some(function(binding) { this.keymapping[data.state].some(function(binding) {
var match; var match;
@ -127,7 +133,7 @@ StateHandler.prototype = {
} }
// Check if the match function matches. // Check if the match function matches.
if (binding.match && !binding.match(buffer, hashId, key, symbolicName)) { if (binding.match && !binding.match(buffer, hashId, key, symbolicName, keyIdentifier)) {
return false; return false;
} }
@ -194,20 +200,21 @@ StateHandler.prototype = {
/** /**
* This function is called by keyBinding. * This function is called by keyBinding.
*/ */
handleKeyboard: function(data, hashId, key) { handleKeyboard: function(data, hashId, key, keyCode, e) {
// If we pressed any command key but no other key, then ignore the input. // 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" // Otherwise "shift-" is added to the buffer, and later on "shift-g"
// which results in "shift-shift-g" which doesn't make senese. // which results in "shift-shift-g" which doesn't make sense.
if (hashId != 0 && (key == "" || key == String.fromCharCode(0))) { if (hashId != 0 && (key == "" || key == String.fromCharCode(0))) {
return null; return null;
} }
// Compute the current value of the keyboard input buffer. // Compute the current value of the keyboard input buffer.
var r = this.$composeBuffer(data, hashId, key); var r = this.$composeBuffer(data, hashId, key, e);
var buffer = r.bufferToUse; var buffer = r.bufferToUse;
var symbolicName = r.symbolicName; var symbolicName = r.symbolicName;
var keyId = r.keyIdentifier;
r = this.$find(data, buffer, symbolicName, hashId, key); r = this.$find(data, buffer, symbolicName, hashId, key, keyId);
if (DEBUG) { if (DEBUG) {
console.log("KeyboardStateMapper#match", buffer, symbolicName, r); console.log("KeyboardStateMapper#match", buffer, symbolicName, r);
} }

View file

@ -84,7 +84,9 @@ var Gutter = function(parentEl) {
}; };
for (var i=0; i<rowAnnotations.length; i++) { for (var i=0; i<rowAnnotations.length; i++) {
var annotation = rowAnnotations[i]; var annotation = rowAnnotations[i];
rowInfo.text.push(annotation.text.replace(/"/g, "&quot;").replace(/'/g, "&#8217;").replace(/</, "&lt;")); var annoText = annotation.text.replace(/"/g, "&quot;").replace(/'/g, "&#8217;").replace(/</, "&lt;");
if (rowInfo.text.indexOf(annoText) === -1)
rowInfo.text.push(annoText);
var type = annotation.type; var type = annotation.type;
if (type == "error") if (type == "error")
rowInfo.className = "ace_error"; rowInfo.className = "ace_error";