diff --git a/resources/common/bin/code.sh b/resources/common/bin/code.sh new file mode 100755 index 0000000000000000000000000000000000000000..72ab09ff3fcf7c08d8454ac39103bd116eaa93a8 --- /dev/null +++ b/resources/common/bin/code.sh @@ -0,0 +1,32 @@ +#!/usr/bin/env bash +# +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. + +if [[ "$OSTYPE" == "darwin"* ]]; then + if [ -x "/Applications/Visual Studio Code.app" ]; then + VSCODE_DIR="/Applications/Visual Studio Code.app/Contents/MacOS" + elif [ -x "$HOME/Applications/Visual Studio Code.app" ]; then + VSCODE_DIR="$HOME/Applications/Visual Studio Code.app/Contents/MacOS" + else + echo "Could not locate Visual Studio Code.app" + exit 1 + fi + ELECTRON_FILE="Electron" +else + VSCODE_DIR="/usr/share/code" + if [ -x "$VSCODE_DIR/Code" ]; then + ELECTRON_FILE="Code" + elif [ -x "$VSCODE_DIR/Code - OSS" ]; then + ELECTRON_FILE="Code - OSS" + else + echo "Could not locate Visual Studio Code executable." + exit 1 + fi +fi + +VSCODE_LAUNCHER="$VSCODE_DIR/launcher.js" + +ATOM_SHELL_INTERNAL_RUN_AS_NODE=1 VSCODE_PATH="$VSCODE_DIR/$ELECTRON_FILE" \ + "$VSCODE_DIR/$ELECTRON_FILE" $VSCODE_LAUNCHER "$@" +exit $? diff --git a/resources/common/bin/launcher.js b/resources/common/bin/launcher.js new file mode 100644 index 0000000000000000000000000000000000000000..bcfc0d26fac82517d476f05c1a50e462caba5ace --- /dev/null +++ b/resources/common/bin/launcher.js @@ -0,0 +1,58 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +/* global process */ + +var packageJson = require('../../../package.json'); +var os = require('os'); +var spawn = require('child_process').spawn; + +function ArgParser(args) { + this.args = args; +} + +ArgParser.prototype.hasFlag = function (flag, alias) { + return (flag && this.args.indexOf('--' + flag) >= 0) || + (alias && this.args.indexOf('-' + alias) >= 0); +} + +ArgParser.prototype.printHelp = function () { + var executable = 'code' + (os.platform() == 'win32' ? '.exe' : ''); + console.log( + 'Visual Studio Code v' + packageJson.version + '\n' + + '\n' + + 'Usage: ' + executable + ' [arguments] [paths...]\n' + + '\n' + + 'Options:\n' + + ' -h, --help Print usage.\n' + + ' --locale Use a specific locale.\n' + + ' -n Force a new instance of code.\n' + + ' -v, --version Print version.'); +} + +function parseArgs() { + var argParser = new ArgParser(process.argv.slice(2)); + if (argParser.hasFlag('help', 'h')) { + argParser.printHelp(); + process.exit(0); + } + if (argParser.hasFlag('version', 'v')) { + console.log(packageJson.version); + process.exit(0); + } +} + +function launchCode() { + delete process.env['ATOM_SHELL_INTERNAL_RUN_AS_NODE']; + spawn(process.env['VSCODE_PATH'], process.argv.slice(2), { detached: true, stdio: 'ignore' }); +} + +function main() { + parseArgs(); + launchCode(); + process.exit(0); +} + +main();