try to detect terminal encoding when reading from stdin (for #6161)

This commit is contained in:
Benjamin Pasero
2017-12-04 12:00:20 +01:00
parent 0c8542b8e4
commit 3f9b66c2cd
3 changed files with 71 additions and 3 deletions

View File

@@ -15,6 +15,8 @@ import * as os from 'os';
import * as fs from 'fs';
import { whenDeleted } from 'vs/base/node/pfs';
import { findFreePort } from 'vs/base/node/ports';
import { resolveTerminalEncoding } from 'vs/base/node/encoding';
import * as iconv from 'iconv-lite';
function shouldSpawnCliProcess(argv: ParsedArgs): boolean {
return !!argv['install-source']
@@ -93,10 +95,13 @@ export async function main(argv: string[]): TPromise<any> {
let stdinFileError: Error;
stdinFilePath = paths.join(os.tmpdir(), `stdin-${Math.random().toString(36).replace(/[^a-z]+/g, '').substr(0, 6)}.txt`);
try {
const stdinFileStream = fs.createWriteStream(stdinFilePath);
resolveTerminalEncoding(verbose).done(encoding => {
// Pipe into tmp file
process.stdin.setEncoding('utf8');
process.stdin.pipe(fs.createWriteStream(stdinFilePath));
// Pipe into tmp file using terminals encoding
const converterStream = iconv.decodeStream(encoding);
process.stdin.pipe(converterStream).pipe(stdinFileStream);
});
// Make sure to open tmp file
argv.push(stdinFilePath);