diff --git a/demo/demo.js b/demo/demo.js
index 991140ea..53f4d626 100644
--- a/demo/demo.js
+++ b/demo/demo.js
@@ -245,6 +245,7 @@ exports.launch = function(env) {
var highlightSelectedWordE = document.getElementById("highlight_selected_word");
var showHScrollEl = document.getElementById("show_hscroll");
var softTabEl = document.getElementById("soft_tab");
+ var behavioursEl = document.getElementById("enable_behaviours");
bindDropdown("doc", function(value) {
var doc = docs[value];
@@ -342,6 +343,7 @@ exports.launch = function(env) {
highlightSelectedWordE.checked = editor.getHighlightSelectedWord();
showHScrollEl.checked = editor.renderer.getHScrollBarAlwaysVisible();
softTabEl.checked = session.getUseSoftTabs();
+ behavioursEl.checked = editor.getBehavioursEnabled()
}
bindDropdown("mode", function(value) {
@@ -418,6 +420,10 @@ exports.launch = function(env) {
env.editor.getSession().setUseSoftTabs(checked);
});
+ bindCheckbox("enable_behaviours", function(checked) {
+ env.editor.setBehavioursEnabled(checked);
+ });
+
var secondSession = null;
bindDropdown("split", function(value) {
var sp = env.split;
diff --git a/index.html b/index.html
index c064d942..3b9d8298 100644
--- a/index.html
+++ b/index.html
@@ -196,10 +196,19 @@
|
- |
+ |
+
|
-
+
+
+ |
+
+ |
+
+
+ |
+
diff --git a/lib/ace/mode/behaviour/cstyle.js b/lib/ace/mode/behaviour/cstyle.js
index a85f796b..bfa14273 100644
--- a/lib/ace/mode/behaviour/cstyle.js
+++ b/lib/ace/mode/behaviour/cstyle.js
@@ -42,7 +42,7 @@ var oop = require("pilot/oop");
var Behaviour = require('ace/mode/behaviour').Behaviour;
var CstyleBehaviour = function () {
-
+
this.add("braces", "insertion", function (state, action, editor, session, text) {
if (text == '{') {
var selection = editor.getSelectionRange();
@@ -76,11 +76,13 @@ var CstyleBehaviour = function () {
var line = session.doc.getLine(cursor.row);
var rightChar = line.substring(cursor.column, cursor.column + 1);
if (rightChar == '}') {
- var openBracePos = session.findMatchingBracket({row: cursor.row, column: cursor.column});
-
+ var openBracePos = session.findMatchingBracket({row: cursor.row, column: cursor.column + 1});
+ if (!openBracePos)
+ return false;
+
var indent = this.getNextLineIndent(state, line.substring(0, line.length - 1), session.getTabString());
var next_indent = this.$getIndent(session.doc.getLine(openBracePos.row));
-
+
return {
text: '\n' + indent + '\n' + next_indent,
selection: [1, indent.length, 1, indent.length]
@@ -89,15 +91,15 @@ var CstyleBehaviour = function () {
}
return false;
});
-
+
this.add("braces", "deletion", function (state, action, editor, session, range) {
var selected = session.doc.getTextRange(range);
if (!range.isMultiLine() && selected == '{') {
var line = session.doc.getLine(range.start.row);
var rightChar = line.substring(range.end.column, range.end.column + 1);
if (rightChar == '}') {
- return new Range(range.start.row, range.start.column,
- range.start.row, range.end.column + 1);
+ range.end.column++;
+ return range;
}
}
return false;
@@ -134,15 +136,15 @@ var CstyleBehaviour = function () {
}
return false;
});
-
+
this.add("parens", "deletion", function (state, action, editor, session, range) {
var selected = session.doc.getTextRange(range);
if (!range.isMultiLine() && selected == '(') {
var line = session.doc.getLine(range.start.row);
var rightChar = line.substring(range.start.column + 1, range.start.column + 2);
if (rightChar == ')') {
- return new Range(range.start.row, range.start.column,
- range.start.row, range.end.column + 1);
+ range.end.column++;
+ return range;
}
}
return false;
@@ -161,17 +163,17 @@ var CstyleBehaviour = function () {
var cursor = editor.getCursorPosition();
var line = session.doc.getLine(cursor.row);
var leftChar = line.substring(cursor.column-1, cursor.column);
-
+
// We're escaped.
if (leftChar == '\\') {
return false;
}
-
+
// Find what token we're inside.
var tokens = session.getTokens(selection.start.row, selection.start.row)[0].tokens;
var col = 0, token;
var quotepos = -1; // Track whether we're inside an open quote.
-
+
for (var x = 0; x < tokens.length; x++) {
token = tokens[x];
if (token.type == "string") {
@@ -184,7 +186,7 @@ var CstyleBehaviour = function () {
}
col += tokens[x].value.length;
}
-
+
// Try and be smart about when we auto insert.
if (!token || (quotepos < 0 && token.type !== "comment" && (token.type !== "string" || ((selection.start.column !== token.value.length+col-1) && token.value.lastIndexOf('"') === token.value.length-1)))) {
return {
@@ -205,20 +207,20 @@ var CstyleBehaviour = function () {
}
return false;
});
-
+
this.add("string_dquotes", "deletion", function (state, action, editor, session, range) {
var selected = session.doc.getTextRange(range);
if (!range.isMultiLine() && selected == '"') {
var line = session.doc.getLine(range.start.row);
var rightChar = line.substring(range.start.column + 1, range.start.column + 2);
if (rightChar == '"') {
- return new Range(range.start.row, range.start.column,
- range.start.row, range.end.column + 1);
+ range.end.column++;
+ return range;
}
}
return false;
});
-
+
}
oop.inherits(CstyleBehaviour, Behaviour);