提交 c935020a 编写于 作者: A Alex Dima

Fixes #22688: Always use CRLF for clipboard on Windows

上级 b58327d4
......@@ -164,7 +164,7 @@ export class TextAreaHandler extends ViewPart {
const textAreaInputHost: ITextAreaInputHost = {
getPlainTextToCopy: (): string => {
const rawWhatToCopy = this._context.model.getPlainTextToCopy(this._selections, this._emptySelectionClipboard);
const rawWhatToCopy = this._context.model.getPlainTextToCopy(this._selections, this._emptySelectionClipboard, platform.isWindows);
const newLineCharacter = this._context.model.getEOL();
const isFromEmptySelection = (this._emptySelectionClipboard && this._selections.length === 1 && this._selections[0].isEmpty());
......
......@@ -147,7 +147,7 @@ export interface IViewModel {
deduceModelPositionRelativeToViewPosition(viewAnchorPosition: Position, deltaOffset: number, lineFeedCnt: number): Position;
getEOL(): string;
getPlainTextToCopy(ranges: Range[], emptySelectionClipboard: boolean): string | string[];
getPlainTextToCopy(ranges: Range[], emptySelectionClipboard: boolean, forceCRLF: boolean): string | string[];
getHTMLToCopy(ranges: Range[], emptySelectionClipboard: boolean): string;
}
......
......@@ -570,8 +570,8 @@ export class ViewModel extends viewEvents.ViewEventEmitter implements IViewModel
return this.model.getEOL();
}
public getPlainTextToCopy(ranges: Range[], emptySelectionClipboard: boolean): string | string[] {
const newLineCharacter = this.model.getEOL();
public getPlainTextToCopy(ranges: Range[], emptySelectionClipboard: boolean, forceCRLF: boolean): string | string[] {
const newLineCharacter = forceCRLF ? '\r\n' : this.model.getEOL();
ranges = ranges.slice(0);
ranges.sort(Range.compareRangesUsingStarts);
......@@ -599,7 +599,7 @@ export class ViewModel extends viewEvents.ViewEventEmitter implements IViewModel
let result: string[] = [];
for (let i = 0; i < nonEmptyRanges.length; i++) {
result.push(this.getValueInRange(nonEmptyRanges[i], EndOfLinePreference.TextDefined));
result.push(this.getValueInRange(nonEmptyRanges[i], forceCRLF ? EndOfLinePreference.CRLF : EndOfLinePreference.TextDefined));
}
return result.length === 1 ? result[0] : result;
}
......
......@@ -7,6 +7,7 @@
import * as assert from 'assert';
import { Range } from 'vs/editor/common/core/range';
import { testViewModel } from 'vs/editor/test/common/viewModel/testViewModel';
import { EndOfLineSequence } from 'vs/editor/common/model';
suite('ViewModel', () => {
......@@ -109,7 +110,7 @@ suite('ViewModel', () => {
function assertGetPlainTextToCopy(text: string[], ranges: Range[], emptySelectionClipboard: boolean, expected: string | string[]): void {
testViewModel(text, {}, (viewModel, model) => {
let actual = viewModel.getPlainTextToCopy(ranges, emptySelectionClipboard);
let actual = viewModel.getPlainTextToCopy(ranges, emptySelectionClipboard, false);
assert.deepEqual(actual, expected);
});
}
......@@ -250,4 +251,12 @@ suite('ViewModel', () => {
'line2\nline3\n'
);
});
test('issue #22688 - always use CRLF for clipboard on Windows', () => {
testViewModel(USUAL_TEXT, {}, (viewModel, model) => {
model.setEOL(EndOfLineSequence.LF);
let actual = viewModel.getPlainTextToCopy([new Range(2, 1, 5, 1)], true, true);
assert.deepEqual(actual, 'line2\r\nline3\r\nline4\r\n');
});
});
});
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册