selection update
This commit is contained in:
@@ -0,0 +1,38 @@
|
||||
export function hasSelection(selection) {
|
||||
return selection.anchor !== null &&
|
||||
(selection.anchor.line !== selection.head.line ||
|
||||
selection.anchor.col !== selection.head.col);
|
||||
}
|
||||
|
||||
export function selectedRange(selection) {
|
||||
if (selection.anchor === null || selection.head === null) return null;
|
||||
const a = selection.anchor;
|
||||
const h = selection.head;
|
||||
if (a.line === h.line && a.col === h.col) return null;
|
||||
if (a.line < h.line || (a.line === h.line && a.col < h.col))
|
||||
return { start: { ...a }, end: { ...h } };
|
||||
return { start: { ...h }, end: { ...a } };
|
||||
}
|
||||
|
||||
export function clearSelection(selection) {
|
||||
selection.anchor = null;
|
||||
selection.head = null;
|
||||
}
|
||||
|
||||
export function deleteSelection(buffer, cursor, selection) {
|
||||
const range = selectedRange(selection);
|
||||
if (!range) return;
|
||||
const { start, end } = range;
|
||||
if (start.line === end.line) {
|
||||
const line = buffer[start.line];
|
||||
buffer[start.line] = line.slice(0, start.col) + line.slice(end.col);
|
||||
} else {
|
||||
const before = buffer[start.line].slice(0, start.col);
|
||||
const after = buffer[end.line].slice(end.col);
|
||||
buffer[start.line] = before + after;
|
||||
buffer.splice(start.line + 1, end.line - start.line);
|
||||
}
|
||||
cursor.line = start.line;
|
||||
cursor.col = start.col;
|
||||
clearSelection(selection);
|
||||
}
|
||||
Reference in New Issue
Block a user