未验证 提交 6190ed9c 编写于 作者: A Alex Dima

Fixes #71011

上级 33fb4feb
...@@ -628,9 +628,19 @@ export class ViewModel extends viewEvents.ViewEventEmitter implements IViewModel ...@@ -628,9 +628,19 @@ export class ViewModel extends viewEvents.ViewEventEmitter implements IViewModel
ranges = ranges.slice(0); ranges = ranges.slice(0);
ranges.sort(Range.compareRangesUsingStarts); ranges.sort(Range.compareRangesUsingStarts);
const nonEmptyRanges = ranges.filter((r) => !r.isEmpty());
if (nonEmptyRanges.length === 0) { let hasEmptyRange = false;
let hasNonEmptyRange = false;
for (const range of ranges) {
if (range.isEmpty()) {
hasEmptyRange = true;
} else {
hasNonEmptyRange = true;
}
}
if (!hasNonEmptyRange) {
// all ranges are empty
if (!emptySelectionClipboard) { if (!emptySelectionClipboard) {
return ''; return '';
} }
...@@ -650,9 +660,29 @@ export class ViewModel extends viewEvents.ViewEventEmitter implements IViewModel ...@@ -650,9 +660,29 @@ export class ViewModel extends viewEvents.ViewEventEmitter implements IViewModel
return result; return result;
} }
if (hasEmptyRange && emptySelectionClipboard) {
// mixed empty selections and non-empty selections
let result: string[] = [];
let prevModelLineNumber = 0;
for (const range of ranges) {
const modelLineNumber = this.coordinatesConverter.convertViewPositionToModelPosition(new Position(range.startLineNumber, 1)).lineNumber;
if (range.isEmpty()) {
if (modelLineNumber !== prevModelLineNumber) {
result.push(this.model.getLineContent(modelLineNumber));
}
} else {
result.push(this.getValueInRange(range, forceCRLF ? EndOfLinePreference.CRLF : EndOfLinePreference.TextDefined));
}
prevModelLineNumber = modelLineNumber;
}
return result.length === 1 ? result[0] : result;
}
let result: string[] = []; let result: string[] = [];
for (const nonEmptyRange of nonEmptyRanges) { for (const range of ranges) {
result.push(this.getValueInRange(nonEmptyRange, forceCRLF ? EndOfLinePreference.CRLF : EndOfLinePreference.TextDefined)); if (!range.isEmpty()) {
result.push(this.getValueInRange(range, forceCRLF ? EndOfLinePreference.CRLF : EndOfLinePreference.TextDefined));
}
} }
return result.length === 1 ? result[0] : result; return result.length === 1 ? result[0] : result;
} }
......
...@@ -210,7 +210,7 @@ suite('ViewModel', () => { ...@@ -210,7 +210,7 @@ suite('ViewModel', () => {
new Range(3, 2, 3, 2), new Range(3, 2, 3, 2),
], ],
true, true,
'ine2' ['ine2', 'line3']
); );
}); });
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册