Skip to content

Commit

Permalink
Fix selection on editor
Browse files Browse the repository at this point in the history
  • Loading branch information
xingrz committed Mar 25, 2024
1 parent 97eab2b commit a6c4429
Show file tree
Hide file tree
Showing 2 changed files with 18 additions and 6 deletions.
21 changes: 15 additions & 6 deletions src/composables/bindEditorSelection.ts
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ export default function bindEditorSelection(editorRef: Ref<Editor | undefined>,
editor.selection.on('changeCursor', () => {
const range = editor.getSelection().getRange();
const sel = toSelection(range);
if (typeof selection.value == 'undefined' || !isSelectionEqual(selection.value, sel)) {
if (!isRangeEqual(selection.value?.origin, range) && !isSelectionEqual(selection.value, sel)) {
selection.value = sel;
}
});
Expand All @@ -35,15 +35,17 @@ export default function bindEditorSelection(editorRef: Ref<Editor | undefined>,
});
}

function toRange({ row, offset, length }: ISelection): Range {
return {
function toRange({ row, offset, length, origin }: ISelection): Range {
return origin || {
start: { row: row, column: offset },
end: { row: row, column: offset + length },
} as Range;
}

function isRangeEqual(a: Range, b: Range): boolean {
function isRangeEqual(a: Range | undefined, b: Range | undefined): boolean {
return (
typeof a != 'undefined' &&
typeof b != 'undefined' &&
a.start.row == b.start.row &&
a.start.column == b.start.column &&
a.end.row == b.end.row &&
Expand All @@ -64,9 +66,16 @@ function toSelection(range: Range): ISelection {
row: range.start.row,
offset: range.start.column,
length: range.end.column - range.start.column,
origin: range,
} as ISelection;
}

function isSelectionEqual(a: ISelection, b: ISelection): boolean {
return a.row == b.row && a.offset == b.offset && a.length == b.length;
function isSelectionEqual(a: ISelection | undefined, b: ISelection | undefined): boolean {
return (
typeof a != 'undefined' &&
typeof b != 'undefined' &&
a.row == b.row &&
a.offset == b.offset &&
a.length == b.length
);
}
3 changes: 3 additions & 0 deletions src/types/selection.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@
import type { Range } from 'brace';

export default interface ISelection {
row: number;
offset: number;
length: number;
origin?: Range;
}

0 comments on commit a6c4429

Please sign in to comment.