Зарегистрировать команду для StatusBarItem - PullRequest
0 голосов
/ 10 мая 2018

Я создаю расширение кода Visual Studio и прочитал, что для обеспечения функциональности события onclick StatusBarItem мне нужно зарегистрировать команду для элемента строки состояния . Как мне это сделать? Когда я создаю StatusBarItem с помощью window.createStatusBarItem, я получаю объект, который, кажется, не имеет какой-либо строки в качестве идентификатора, но процесс регистрации команды требует строку в качестве первого аргумента, и я не уверен, как связать ее с StatusBarItem.

Я использовал yeoman для загрузки расширения JavaScript.

extension.js

const vscode = require('vscode');
const { exec } = require('child_process')

function activate(context) {
    console.log('Thanks for installing me! Remember to add a script to run if you want this extension to do anything \
    instersting at all :P');

    // TODO: make status bar item clickable
    const statusBarItem = vscode.window.createStatusBarItem(vscode.StatusBarAlignment.Right, 1000);

    function runCommandAndUpdateStatusBarItem () {
        // TODO: fetch command from settings
        const command = 'git describe --dirty="-$USER"';
        exec(`cd ${vscode.workspace.rootPath} && ${command}`, [], (error, stdout, stderr) => {
            if (stdout) {
                statusBarItem.text = `$(git-commit) ${stdout}`;
                statusBarItem.show();
            }
            else {
                vscode.window.showErrorMessage(stderr);
                statusBarItem.hide();
            }
        });
    }

    statusBarItem.hide();

    let disposable = vscode.commands.registerCommand('extension.sayHello', runCommandAndUpdateStatusBarItem);

    context.subscriptions.push(statusBarItem);
    context.subscriptions.push(disposable);
}
exports.activate = activate;

function deactivate() {
    console.log('Oh...so, you hate me? Ok I go away now :(');
}
exports.deactivate = deactivate;

package.json

{
    "name": "script-result-info",
    "displayName": "Script Result Info",
    "description": "Runs a script in shell and puts the result in the statusBar",
    "version": "0.0.1",
    "publisher": "emilioidk",
    "engines": {
        "vscode": "^1.23.0"
    },
    "categories": [
        "Other"
    ],
    "activationEvents": [
        "onCommand:extension.sayHello"
    ],
    "main": "./extension",
    "contributes": {
        "commands": [
            {
                "command": "extension.sayHello",
                "title": "Hello world"
            }
        ]
    },
    "scripts": {
        "postinstall": "node ./node_modules/vscode/bin/install",
        "test": "node ./node_modules/vscode/bin/test"
    },
    "devDependencies": {
        "typescript": "^2.6.1",
        "vscode": "^1.1.6",
        "eslint": "^4.11.0",
        "@types/node": "^7.0.43",
        "@types/mocha": "^2.2.42"
    }
}

1 Ответ

0 голосов
/ 10 мая 2018

Когда я создаю StatusBarItem, используя window.createStatusBarItem, я получаю объект, который, кажется, не имеет никакой строки в качестве идентификатора

Это не по умолчанию, так как это необязательно, да, но вы можете установить command на нем:

statusBarItem.command = 'extension.sayHello';

Проверьте документы API для StatusBarItem: https://code.visualstudio.com/docs/extensionAPI/vscode-api#StatusBarItem

...