mirror of
https://github.com/microsoft/vscode.git
synced 2026-05-08 17:19:48 +01:00
Fixes #22688: Always use CRLF for clipboard on Windows
This commit is contained in:
@@ -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');
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user