Skip to content

Commit 8493606

Browse files
authored
Fix command execution in terminal on Windows (#12620)
1 parent 803efc9 commit 8493606

File tree

8 files changed

+15
-11
lines changed

8 files changed

+15
-11
lines changed

packages/core/src/browser/common-frontend-contribution.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ import { AboutDialog } from './about-dialog';
3232
import * as browser from './browser';
3333
import URI from '../common/uri';
3434
import { ContextKey, ContextKeyService } from './context-key-service';
35-
import { OS, isOSX, isWindows } from '../common/os';
35+
import { OS, isOSX, isWindows, EOL } from '../common/os';
3636
import { ResourceContextKey } from './resource-context-key';
3737
import { UriSelection } from '../common/selection';
3838
import { StorageService } from './storage-service';
@@ -736,7 +736,7 @@ export class CommonFrontendContribution implements FrontendApplicationContributi
736736
isEnabled: uris => Array.isArray(uris) && uris.some(uri => uri instanceof URI),
737737
execute: async uris => {
738738
if (uris.length) {
739-
const lineDelimiter = isWindows ? '\r\n' : '\n';
739+
const lineDelimiter = EOL;
740740
const text = uris.map(resource => resource.path.fsPath()).join(lineDelimiter);
741741
await this.clipboardService.writeText(text);
742742
} else {

packages/core/src/browser/preloader.ts

+1
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@ async function loadBackendOS(): Promise<void> {
5555
OS.backend.isOSX = isOSX;
5656
OS.backend.isWindows = isWindows;
5757
OS.backend.type = () => osType;
58+
OS.backend.EOL = isWindows ? '\r\n' : '\n';
5859
}
5960

6061
function initBackground(): void {

packages/core/src/common/os.ts

+4-1
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,8 @@ function is(userAgent: string, platform: string): boolean {
2929
export const isWindows = is('Windows', 'win32');
3030
export const isOSX = is('Mac', 'darwin');
3131

32+
export const EOL = isWindows ? '\r\n' : '\n';
33+
3234
export type CMD = [string, string[]];
3335
export function cmd(command: string, ...args: string[]): CMD {
3436
return [
@@ -65,7 +67,8 @@ export namespace OS {
6567
export const backend = {
6668
type,
6769
isWindows,
68-
isOSX
70+
isOSX,
71+
EOL
6972
};
7073

7174
}

packages/monaco/src/browser/monaco-text-model-service.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,7 @@ export class MonacoTextModelService implements ITextModelService {
8888
if (eol && eol !== 'auto') {
8989
return eol;
9090
}
91-
return OS.backend.isWindows ? '\r\n' : '\n';
91+
return OS.backend.EOL;
9292
};
9393
}
9494
}

packages/search-in-workspace/src/browser/search-in-workspace-result-tree-widget.tsx

+2-2
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ import {
3333
codicon,
3434
TopDownTreeIterator
3535
} from '@theia/core/lib/browser';
36-
import { CancellationTokenSource, Emitter, Event, isWindows, ProgressService } from '@theia/core';
36+
import { CancellationTokenSource, Emitter, EOL, Event, ProgressService } from '@theia/core';
3737
import {
3838
EditorManager, EditorDecoration, TrackedRangeStickiness, OverviewRulerLane,
3939
EditorWidget, EditorOpenerOptions, FindMatch
@@ -1210,7 +1210,7 @@ export class SearchInWorkspaceResultTreeWidget extends TreeWidget {
12101210
strings.push(string);
12111211
}
12121212
}
1213-
return strings.join(isWindows ? '\r\n' : '\n');
1213+
return strings.join(EOL);
12141214
}
12151215
}
12161216

packages/task/src/node/task-abstract-line-matcher.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919
* Licensed under the MIT License. See License.txt in the project root for license information.
2020
*--------------------------------------------------------------------------------------------*/
2121

22-
import { isWindows } from '@theia/core/lib/common/os';
22+
import { EOL } from '@theia/core/lib/common/os';
2323
import { Diagnostic, DiagnosticSeverity, Range } from '@theia/core/shared/vscode-languageserver-protocol';
2424
import {
2525
FileLocationKind, ProblemMatcher, ProblemPattern,
@@ -31,7 +31,7 @@ import { URI as vscodeURI } from '@theia/core/shared/vscode-uri';
3131
import { Severity } from '@theia/core/lib/common/severity';
3232
import { MAX_SAFE_INTEGER } from '@theia/core/lib/common/numbers';
3333

34-
const endOfLine: string = isWindows ? '\r\n' : '\n';
34+
const endOfLine: string = EOL;
3535

3636
export interface ProblemData {
3737
kind?: ProblemLocationKind;

packages/terminal/src/browser/terminal-widget-impl.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -706,7 +706,7 @@ export class TerminalWidgetImpl extends TerminalWidget implements StatefulWidget
706706
}
707707

708708
async executeCommand(commandOptions: CommandLineOptions): Promise<void> {
709-
this.sendText(this.shellCommandBuilder.buildCommand(await this.processInfo, commandOptions) + '\n');
709+
this.sendText(this.shellCommandBuilder.buildCommand(await this.processInfo, commandOptions) + OS.backend.EOL);
710710
}
711711

712712
scrollLineUp(): void {

packages/workspace/src/browser/workspace-commands.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ import { WorkspaceCompareHandler } from './workspace-compare-handler';
3434
import { FileDownloadCommands } from '@theia/filesystem/lib/browser/download/file-download-command-contribution';
3535
import { FileSystemCommands } from '@theia/filesystem/lib/browser/filesystem-frontend-contribution';
3636
import { WorkspaceInputDialog } from './workspace-input-dialog';
37-
import { Emitter, Event, isWindows, OS } from '@theia/core/lib/common';
37+
import { Emitter, EOL, Event, OS } from '@theia/core/lib/common';
3838
import { FileService } from '@theia/filesystem/lib/browser/file-service';
3939
import { FileStat } from '@theia/filesystem/lib/common/files';
4040
import { nls } from '@theia/core/lib/common/nls';
@@ -313,7 +313,7 @@ export class WorkspaceCommandContribution implements CommandContribution {
313313
isEnabled: uris => !!uris.length,
314314
isVisible: uris => !!uris.length,
315315
execute: async uris => {
316-
const lineDelimiter = isWindows ? '\r\n' : '\n';
316+
const lineDelimiter = EOL;
317317
const text = uris.map((uri: URI) => {
318318
const workspaceRoot = this.workspaceService.getWorkspaceRootUri(uri);
319319
if (workspaceRoot) {

0 commit comments

Comments
 (0)