This commit is contained in:
30
node_modules/codemirror/src/edit/deleteNearSelection.js
generated
vendored
Normal file
30
node_modules/codemirror/src/edit/deleteNearSelection.js
generated
vendored
Normal file
@@ -0,0 +1,30 @@
|
||||
import { runInOp } from "../display/operations.js"
|
||||
import { ensureCursorVisible } from "../display/scrolling.js"
|
||||
import { cmp } from "../line/pos.js"
|
||||
import { replaceRange } from "../model/changes.js"
|
||||
import { lst } from "../util/misc.js"
|
||||
|
||||
// Helper for deleting text near the selection(s), used to implement
|
||||
// backspace, delete, and similar functionality.
|
||||
export function deleteNearSelection(cm, compute) {
|
||||
let ranges = cm.doc.sel.ranges, kill = []
|
||||
// Build up a set of ranges to kill first, merging overlapping
|
||||
// ranges.
|
||||
for (let i = 0; i < ranges.length; i++) {
|
||||
let toKill = compute(ranges[i])
|
||||
while (kill.length && cmp(toKill.from, lst(kill).to) <= 0) {
|
||||
let replaced = kill.pop()
|
||||
if (cmp(replaced.from, toKill.from) < 0) {
|
||||
toKill.from = replaced.from
|
||||
break
|
||||
}
|
||||
}
|
||||
kill.push(toKill)
|
||||
}
|
||||
// Next, remove those actual ranges.
|
||||
runInOp(cm, () => {
|
||||
for (let i = kill.length - 1; i >= 0; i--)
|
||||
replaceRange(cm.doc, "", kill[i].from, kill[i].to, "+delete")
|
||||
ensureCursorVisible(cm)
|
||||
})
|
||||
}
|
||||
Reference in New Issue
Block a user