(cm, compute)
| 4805 | // Helper for deleting text near the selection(s), used to implement |
| 4806 | // backspace, delete, and similar functionality. |
| 4807 | function deleteNearSelection(cm, compute) { |
| 4808 | var ranges = cm.doc.sel.ranges, kill = []; |
| 4809 | // Build up a set of ranges to kill first, merging overlapping |
| 4810 | // ranges. |
| 4811 | for (var i = 0; i < ranges.length; i++) { |
| 4812 | var toKill = compute(ranges[i]); |
| 4813 | while (kill.length && cmp(toKill.from, lst(kill).to) <= 0) { |
| 4814 | var replaced = kill.pop(); |
| 4815 | if (cmp(replaced.from, toKill.from) < 0) { |
| 4816 | toKill.from = replaced.from; |
| 4817 | break; |
| 4818 | } |
| 4819 | } |
| 4820 | kill.push(toKill); |
| 4821 | } |
| 4822 | // Next, remove those actual ranges. |
| 4823 | runInOp(cm, function() { |
| 4824 | for (var i = kill.length - 1; i >= 0; i--) |
| 4825 | replaceRange(cm.doc, "", kill[i].from, kill[i].to, "+delete"); |
| 4826 | ensureCursorVisible(cm); |
| 4827 | }); |
| 4828 | } |
| 4829 | |
| 4830 | // Used for horizontal relative motion. Dir is -1 or 1 (left or |
| 4831 | // right), unit can be "char", "column" (like char, but doesn't |
no test coverage detected