Change:
cc Standard sized (80 width) terminal: ! This is what is was like before: !
do you have any reason against using a community lib for this if I get the deps approved?
Not at all... I just think that the hard 80 column wrap is an unnecessary remnant of the past, given the resizing capabilities of terminal emulators of today.
yeah, I believe the community libs like yargs size the column dynamically but keep formatting similar to what it was like before.

Discussion:
import * as os from 'os'; import * as minimist from 'minimist'; <del> import pkg from 'vs/platform/package'; </del> import { localize } from 'vs/nls'; export interface ParsedArgs extends minimist.ParsedArgs {

'--verbose': localize('verbose', "Print verbose output (implies --wait)."), '-w, --wait': localize('wait', "Wait for the window to be closed before returning."), '--list-extensions': localize('listExtensions', "List the installed extensions."), <del> '--install-extension <extension>': localize('installExtension', "Installs an extension."), '--uninstall-extension <extension>': localize('uninstallExtension', "Uninstalls an extension."), </del> <ins> '--install-extension <ext>': localize('installExtension', "Installs an extension."), '--uninstall-extension <ext>': localize('uninstallExtension', "Uninstalls an extension."), </ins> '-v, --version': localize('version', "Print version."), '-h, --help': localize('help', "Print usage.") }; <del> function formatOptions(options: { [name: string]: string; }): string { return Object.keys(options) .reduce((r, key) => r.concat([`  ${ key }`, `      ${ options[key] }`]), []).join('n'); </del> <ins> export function formatOptions(options: { [name: string]: string; }, columns: number): string { let keys = Object.keys(options); let argLength = Math.max.apply(null, keys.map(k => k.length)) + 2/*left padding*/ + 1/*right padding*/; if (columns - argLength < 25) { // Use a condensed version on narrow terminals return keys.reduce((r, key) => r.concat([`  ${ key }`, `      ${ options[key] }`]), []).join('n'); } let descriptionColumns = columns - argLength - 1; let result = ''; keys.forEach(k => { let wrappedDescription = wrapText(options[k], descriptionColumns); let keyPadding = (<any>' ').repeat(argLength - k.length - 2/*left padding*/); if (result.length > 0) { result += 'n'; } result += '  ' + k + keyPadding + wrappedDescription[0]; for (var i = 1; i < wrappedDescription.length; i++) { result += 'n' + (<any>' ').repeat(argLength) + wrappedDescription[i]; } }); return result; </ins> } <del> export const helpMessage = `Visual Studio Code v${ pkg.version } </del> <ins> function wrapText(text: string, columns: number) : string[] { let lines = []; while (text.length) { let index = text.length < columns ? text.length : text.lastIndexOf(' ', columns); let line = text.slice(0, index).trim(); text = text.slice(index); lines.push(line); } return lines; } export function buildHelpMessage(version: string): string { let columns = (<any>process.stdout).isTTY ? (<any>process.stdout).columns : 80; return `Visual Studio Code v${ version } </ins> Usage: ${ executable } [arguments] [paths...] Options: <del> ${formatOptions(optionsHelp)}`; </del>  No newline at end of file <ins> ${formatOptions(optionsHelp, columns)}`; } </ins>  No newline at end of file

import { spawn } from 'child_process'; import { TPromise } from 'vs/base/common/winjs.base'; import { assign } from 'vs/base/common/objects'; <del> import { parseArgs, helpMessage, ParsedArgs } from 'vs/code/node/argv'; </del> <ins> import { parseArgs, buildHelpMessage, ParsedArgs } from 'vs/code/node/argv'; </ins> import pkg from 'vs/platform/package'; function shouldSpawnCliProcess(argv: ParsedArgs): boolean {

const argv = parseArgs(args); if (argv.help) { <del> console.log(helpMessage); </del> <ins> console.log(buildHelpMessage(pkg.version)); </ins> } else if (argv.version) { console.log(pkg.version); } else if (shouldSpawnCliProcess(argv)) {

<ins> /*--------------------------------------------------------------------------------------------- *  Copyright (c) Microsoft Corporation. All rights reserved. *  Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ 'use strict'; import assert = require('assert'); import {formatOptions} from 'vs/code/node/argv'; suite('formatOptions', () => { test('Text should display small columns correctly', () => { assert.equal(formatOptions({'foo': 'bar'}, 80), '  foo bar'); assert.equal( formatOptions({ 'f': 'bar', 'fo': 'ba', 'foo': 'b' }, 80), '  f   barn' + '  fo  ban' + '  foo b'); }); test('Text should wrap', () => { assert.equal( formatOptions({ 'foo': (<any>'bar ').repeat(9) }, 40), '  foo bar bar bar bar bar bar bar barn' + '      bar'); }); test('Text should revert to the condensed view when the terminal is too narrow', () => { assert.equal( formatOptions({ 'foo': (<any>'bar ').repeat(9) }, 30), '  foon' + '      bar bar bar bar bar bar bar bar bar '); }); }); </ins>