首页 > 解决方案 > StatusBarItem 的注册命令

问题描述

我正在创建一个 Visual Studio Code 扩展并已阅读该扩展,为了向 StatusBarItem onclick 事件提供功能,我需要为状态栏项目注册一个命令。我该怎么做呢?当我使用 window.createStatusBarItem 创建一个 StatusBarItem 时,我得到一个对象,它似乎没有任何字符串作为标识符,但命令注册过程需要一个字符串作为第一个参数,我不知道如何将它与 StatusBarItem 关联。

我使用 yeoman 来引导一个 JavaScript 扩展。

扩展.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;

包.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"
    }
}

标签: javascriptvisual-studio-codevscode-extensionsstatusbaritem

解决方案


当我使用 window.createStatusBarItem 创建一个 StatusBarItem 时,我得到一个似乎没有任何字符串作为标识符的对象

默认情况下它不是,因为它是可选的,是的,但是您可以command对其进行设置:

statusBarItem.command = 'extension.sayHello';

检查 API 文档StatusBarItemhttps ://code.visualstudio.com/docs/extensionAPI/vscode-api#StatusBarItem


推荐阅读