add togglefold to the list of default commands
This commit is contained in:
parent
1a462d53de
commit
92a3369bdb
3 changed files with 90 additions and 93 deletions
|
|
@ -548,95 +548,6 @@ exports.launch = function(env) {
|
|||
}
|
||||
});
|
||||
|
||||
canon.addCommand({
|
||||
name: "fold",
|
||||
bindKey: {
|
||||
win: "Alt-L",
|
||||
mac: "Alt-L",
|
||||
sender: "editor"
|
||||
},
|
||||
exec: function(env) {
|
||||
toggleFold(env, false);
|
||||
}
|
||||
});
|
||||
|
||||
canon.addCommand({
|
||||
name: "unfold",
|
||||
bindKey: {
|
||||
win: "Alt-Shift-L",
|
||||
mac: "Alt-Shift-L",
|
||||
sender: "editor"
|
||||
},
|
||||
exec: function(env) {
|
||||
toggleFold(env, true);
|
||||
}
|
||||
});
|
||||
|
||||
function isCommentRow(row) {
|
||||
var session = env.editor.session;
|
||||
var token;
|
||||
var tokens = session.getTokens(row, row)[0].tokens;
|
||||
var c = 0;
|
||||
for (var i = 0; i < tokens.length; i++) {
|
||||
token = tokens[i];
|
||||
if (/^comment/.test(token.type)) {
|
||||
return c;
|
||||
} else if (!/^text/.test(token.type)) {
|
||||
return false;
|
||||
}
|
||||
c += token.value.length;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
function toggleFold(env, tryToUnfold) {
|
||||
var session = env.editor.session;
|
||||
var selection = env.editor.selection;
|
||||
var range = selection.getRange();
|
||||
var addFold;
|
||||
|
||||
if(range.isEmpty()) {
|
||||
var br = session.findMatchingBracket(range.start);
|
||||
var fold = session.getFoldAt(range.start.row, range.start.column);
|
||||
var column;
|
||||
|
||||
if (fold) {
|
||||
session.expandFold(fold);
|
||||
selection.setSelectionRange(fold.range);
|
||||
} else if (br) {
|
||||
if (range.compare(br.row, br.column) == 1)
|
||||
range.end = br;
|
||||
else
|
||||
range.start = br;
|
||||
addFold = true;
|
||||
} else if ((column = isCommentRow(range.start.row)) !== false) {
|
||||
var firstCommentRow = range.start.row;
|
||||
var lastCommentRow = range.start.row;
|
||||
var t;
|
||||
while ((t = isCommentRow(firstCommentRow - 1)) !== false) {
|
||||
firstCommentRow --;
|
||||
column = t;
|
||||
}
|
||||
while (isCommentRow(lastCommentRow + 1) !== false) {
|
||||
lastCommentRow ++;
|
||||
}
|
||||
range.start.row = firstCommentRow;
|
||||
range.start.column = column + 2;
|
||||
range.end.row = lastCommentRow;
|
||||
range.end.column = session.getLine(lastCommentRow).length - 1;
|
||||
addFold = true;
|
||||
}
|
||||
} else {
|
||||
addFold = true;
|
||||
}
|
||||
if (addFold) {
|
||||
var placeHolder = session.getTextRange(range);
|
||||
if(placeHolder.length < 3)
|
||||
return;
|
||||
placeHolder = placeHolder.trim().substring(0, 3).replace(' ','','g') + "...";
|
||||
session.addFold(placeHolder, range);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
var themes = {};
|
||||
|
|
|
|||
|
|
@ -365,4 +365,33 @@ canon.addCommand({
|
|||
exec: function(env, args, request) { env.editor.transposeLetters(); }
|
||||
});
|
||||
|
||||
canon.addCommand({
|
||||
name: "fold",
|
||||
bindKey: bindKey("Alt-L", "Alt-L"),
|
||||
exec: function(env) {
|
||||
env.editor.session.toggleFold(false);
|
||||
}
|
||||
});
|
||||
canon.addCommand({
|
||||
name: "unfold",
|
||||
bindKey: bindKey("Alt-Shift-L", "Alt-Shift-L"),
|
||||
exec: function(env) {
|
||||
env.editor.session.toggleFold(true);
|
||||
}
|
||||
});
|
||||
canon.addCommand({
|
||||
name: "foldall",
|
||||
bindKey: bindKey("Alt-Shift-0", "Alt-Shift-0"),
|
||||
exec: function(env) {
|
||||
env.editor.session.foldAll();
|
||||
}
|
||||
});
|
||||
canon.addCommand({
|
||||
name: "unfoldall",
|
||||
bindKey: bindKey("Alt-Shift-0", "Alt-Shift-0"),
|
||||
exec: function(env) {
|
||||
env.editor.session.unFoldAll();
|
||||
}
|
||||
});
|
||||
|
||||
});
|
||||
|
|
|
|||
|
|
@ -52,7 +52,7 @@ function Folding() {
|
|||
var foldLine = this.getFoldLine(row);
|
||||
if (!foldLine)
|
||||
return null;
|
||||
|
||||
|
||||
var folds = foldLine.folds;
|
||||
for (var i = 0; i < folds.length; i++) {
|
||||
var fold = folds[i];
|
||||
|
|
@ -134,7 +134,7 @@ function Folding() {
|
|||
var foldLine = foldLine || this.getFoldLine(row);
|
||||
if (!foldLine)
|
||||
return null;
|
||||
|
||||
|
||||
var lastFold = {
|
||||
end: { column: 0 }
|
||||
};
|
||||
|
|
@ -251,7 +251,7 @@ function Folding() {
|
|||
var startColumn = fold.start.column;
|
||||
var endRow = fold.end.row;
|
||||
var endColumn = fold.end.column;
|
||||
|
||||
|
||||
// --- Some checking ---
|
||||
if (fold.placeholder.length < 2)
|
||||
throw "Placeholder has to be at least 2 characters";
|
||||
|
|
@ -489,8 +489,65 @@ function Folding() {
|
|||
|
||||
return fd;
|
||||
};
|
||||
}
|
||||
|
||||
this.toggleFold = function(tryToUnfold) {
|
||||
var selection = this.selection;
|
||||
var range = selection.getRange();
|
||||
|
||||
if(range.isEmpty()) {
|
||||
var cursor = range.start
|
||||
var fold = this.getFoldAt(cursor.row, cursor.column);
|
||||
var bracketPos, column;
|
||||
|
||||
if (fold) {
|
||||
this.expandFold(fold);
|
||||
return;
|
||||
} else if (bracketPos = this.findMatchingBracket(cursor)) {
|
||||
if (range.comparePoint(bracketPos) == 1) {
|
||||
range.end = bracketPos;
|
||||
} else {
|
||||
range.start = bracketPos;
|
||||
range.start.column++;
|
||||
range.end.column--;
|
||||
}
|
||||
} else if (bracketPos = this.findMatchingBracket({row: cursor.row, column: cursor.column + 1})) {
|
||||
if (range.comparePoint(bracketPos) == 1)
|
||||
range.end = bracketPos;
|
||||
else
|
||||
range.start = bracketPos;
|
||||
|
||||
range.start.column++;
|
||||
}
|
||||
} else {
|
||||
var folds = this.getFoldsInRange(range);
|
||||
if (tryToUnfold && folds.length) {
|
||||
this.expandFolds(folds);
|
||||
return;
|
||||
} else if (folds.length == 1 ) {
|
||||
fold = folds[0];
|
||||
}
|
||||
}
|
||||
|
||||
if (!fold)
|
||||
fold = this.getFoldAt(range.start.row, range.start.column);
|
||||
|
||||
if (fold && fold.range.toString() == range.toString()){
|
||||
this.expandFold(fold);
|
||||
return
|
||||
}
|
||||
|
||||
|
||||
var placeholder = "...";
|
||||
if (!range.isMultiLine()) {
|
||||
placeholder = this.getTextRange(range);
|
||||
if(placeholder.length < 4)
|
||||
return;
|
||||
placeholder = placeholder.trim().substring(0, 2) + ".."
|
||||
}
|
||||
|
||||
this.addFold(placeholder, range);
|
||||
};
|
||||
}
|
||||
exports.Folding = Folding;
|
||||
|
||||
});
|
||||
Loading…
Add table
Add a link
Reference in a new issue