Skip to content

Commit d406b8c

Browse files
authored
Fixed multicursor backspacing (#4880)
1 parent 6b83c9b commit d406b8c

File tree

1 file changed

+28
-18
lines changed

1 file changed

+28
-18
lines changed

notebook/static/notebook/js/codecell.js

Lines changed: 28 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -52,25 +52,35 @@ define([
5252
* @private
5353
*/
5454
CodeMirror.commands.delSpaceToPrevTabStop = function(cm){
55-
var from = cm.getCursor(true), to = cm.getCursor(false), sel = !posEq(from, to);
56-
if (sel) {
57-
var ranges = cm.listSelections();
58-
for (var i = ranges.length - 1; i >= 0; i--) {
59-
var head = ranges[i].head;
60-
var anchor = ranges[i].anchor;
61-
cm.replaceRange("", CodeMirror.Pos(head.line, head.ch), CodeMirror.Pos(anchor.line, anchor.ch));
55+
var tabSize = cm.getOption('tabSize');
56+
var ranges = cm.listSelections(); // handle multicursor
57+
for (var i = ranges.length - 1; i >= 0; i--) { // iterate reverse so any deletions don't overlap
58+
var head = ranges[i].head;
59+
var anchor = ranges[i].anchor;
60+
var sel = !posEq(head, anchor);
61+
if (sel) {
62+
// range is selection
63+
cm.replaceRange("", anchor, head);
64+
} else {
65+
// range is cursor
66+
var line = cm.getLine(head.line).substring(0, head.ch);
67+
if( line.match(/^\ +$/) !== null){
68+
// delete tabs
69+
var prevTabStop = (Math.ceil(head.ch/tabSize)-1)*tabSize;
70+
var from = {
71+
ch: prevTabStop,
72+
line: head.line
73+
};
74+
cm.replaceRange("", from, head);
75+
} else {
76+
// delete non-tabs
77+
var from = {
78+
ch: head.ch-1,
79+
line: head.line
80+
};
81+
cm.replaceRange("", from, head);
82+
}
6283
}
63-
return;
64-
}
65-
var cur = cm.getCursor(), line = cm.getLine(cur.line);
66-
var tabsize = cm.getOption('tabSize');
67-
var chToPrevTabStop = cur.ch-(Math.ceil(cur.ch/tabsize)-1)*tabsize;
68-
from = {ch:cur.ch-chToPrevTabStop,line:cur.line};
69-
var select = cm.getRange(from,cur);
70-
if( select.match(/^\ +$/) !== null){
71-
cm.replaceRange("",from,cur);
72-
} else {
73-
cm.deleteH(-1,"char");
7484
}
7585
};
7686

0 commit comments

Comments
 (0)