Skip to content

Commit 5a858bb

Browse files
committed
fix: fix paste override copyed lines
1 parent eb6f342 commit 5a858bb

File tree

4 files changed

+53
-13
lines changed

4 files changed

+53
-13
lines changed

.vscode/launch.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,8 @@
1010
"type": "extensionHost",
1111
"request": "launch",
1212
"args": [
13-
"--extensionDevelopmentPath=${workspaceFolder}",
14-
"--disable-extensions"
13+
"--extensionDevelopmentPath=${workspaceFolder}"
14+
// "--disable-extensions"
1515
],
1616
"outFiles": ["${workspaceFolder}/dist/**/*.js"],
1717
"preLaunchTask": "${defaultBuildTask}"

assets/decorations.gif

325 KB
Loading

src/decoration-manager.ts

Lines changed: 35 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,9 @@ export default class DecorationManager {
2727
isEdit: boolean = false,
2828
diffLine: number = 0,
2929
startLine?: number,
30-
endLine?: number
30+
endLine?: number,
31+
originalStartLine?: number,
32+
originalEndLine?: number
3133
) {
3234
/**
3335
* Active editor changed event
@@ -46,14 +48,32 @@ export default class DecorationManager {
4648

4749
if (throttle) {
4850
this.timeout = setTimeout(() => {
49-
this.setupDecorations(diffLine, startLine, endLine);
51+
this.setupDecorations(
52+
diffLine,
53+
startLine,
54+
endLine,
55+
originalStartLine,
56+
originalEndLine
57+
);
5058
}, 500);
5159
} else {
52-
this.setupDecorations(diffLine, startLine, endLine);
60+
this.setupDecorations(
61+
diffLine,
62+
startLine,
63+
endLine,
64+
originalStartLine,
65+
originalEndLine
66+
);
5367
}
5468
}
5569

56-
setupDecorations(diffLine: number, startLine?: number, endLine?: number) {
70+
setupDecorations(
71+
diffLine: number,
72+
startLine?: number,
73+
endLine?: number,
74+
originalStartLine?: number,
75+
originalEndLine?: number
76+
) {
5777
if (startLine && endLine) {
5878
const lines = this.getLines(startLine, endLine);
5979

@@ -68,6 +88,17 @@ export default class DecorationManager {
6888
}
6989

7090
if (diffLine > 0) {
91+
/**
92+
* paste override copyed lines
93+
*/
94+
if (originalStartLine && originalEndLine) {
95+
const originalLines = this.getLines(
96+
originalStartLine,
97+
originalEndLine
98+
);
99+
this.clearCurrentFileDecoration(originalLines);
100+
}
101+
71102
this.updateFileDecorationMap(diffLine, startLine);
72103
this.setDecorations(lines);
73104
}

src/listener.ts

Lines changed: 16 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -26,18 +26,18 @@ export default function setupEventListener(
2626
diffLine = activeEditor.document.lineCount - fileLineCount;
2727
fileLineCount = activeEditor.document.lineCount;
2828

29-
const [startLine, endLine] = getStartEndLine(
30-
event.document,
31-
event.contentChanges[0]
32-
);
29+
const [startLine, endLine, originalStartLine, originalEndLine] =
30+
getStartEndLine(event.document, event.contentChanges[0]);
3331

3432
decorationManager.setActiveEditor(activeEditor);
3533
decorationManager.triggerUpdateDecorations(
36-
diffLine === 0,
34+
event.reason ? false : diffLine === 0,
3735
true,
3836
diffLine,
3937
startLine,
40-
endLine
38+
endLine,
39+
originalStartLine,
40+
originalEndLine
4141
);
4242
}
4343
},
@@ -65,6 +65,8 @@ export default function setupEventListener(
6565
const newLines = change.text.split("\n").length;
6666
let startLine = change.range.start.line;
6767
let endLine = change.range.end.line;
68+
const originalStartLine = startLine;
69+
const originalEndLine = endLine;
6870
const startLinePos = document.lineAt(startLine);
6971

7072
const isStartLineEmpty = startLinePos.isEmptyOrWhitespace;
@@ -95,7 +97,7 @@ export default function setupEventListener(
9597
/**
9698
* enter
9799
*/
98-
if (!isStartLineEmpty && diffLine === 1) {
100+
if (!isStartLineEmpty && diffLine === 1 && startLine === endLine) {
99101
startLine += 1;
100102
endLine += 1;
101103
}
@@ -107,6 +109,13 @@ export default function setupEventListener(
107109
startLine += 1;
108110
}
109111

112+
/**
113+
* paste override copyed lines
114+
*/
115+
if (!isStartLineLastPos) {
116+
return [startLine, endLine, originalStartLine, originalEndLine];
117+
}
118+
110119
return [startLine, endLine];
111120
}
112121
}

0 commit comments

Comments
 (0)