Расширение VSCode напрямую использует многоступенчатый ввод

Я хочу использовать многоступенчатый ввод напрямую, например, пользователь выбирает F1 - и запускает шаги для выбора элементов.

В настоящее время я нашел следующий пример и удалил quickOpen и базовый ввод

https://github.com/microsoft/vscode-extension-samples/blob/master/quickinput-sample/src/extension.ts

import { window, commands, ExtensionContext } from 'vscode';
import { multiStepInput } from './multiStepInput';

export function activate(context: ExtensionContext) {
    context.subscriptions.push(commands.registerCommand('samples.quickInput', async () => {
        const options: { [key: string]: (context: ExtensionContext) => Promise<void> } = {
            multiStepInput,
        };
        const quickPick = window.createQuickPick();
        quickPick.items = Object.keys(options).map(label => ({ label }));
        quickPick.onDidChangeSelection(selection => {
            if (selection[0]) {
                options[selection[0].label](context)
                    .catch(console.error);
            }
        });
        quickPick.onDidHide(() => quickPick.dispose());
        quickPick.show();
    }));
}

Однако, когда я запускаю расширение, мне нужно выбрать первую запись multiStepInput, я хочу избежать ее и начать непосредственно с параметров выбора группы ресурсов (из примера) Как мне это сделать? Я не могу пропустить первый (фиктивный) шаг, когда пользователь должен выбрать следующее:

    showQuickPick,
    showInputBox,
    multiStepInput,
    quickOpen,

Поскольку я прямо хочу явно использовать multiStepInput и не просить его выбрать

https://github.com/microsoft/vscode-extension-samples/blob/master/quickinput-sample/src/multiStepInput.ts#L24

Я не хочу начинать с этого

введите здесь описание изображения

Я хочу начать с этого, когда пользователь использует F1

введите здесь описание изображения


person Beno Odr    schedule 10.06.2020    source источник
comment
что произойдет, если вы позвоните multiStepInput(context).catch(console.error);   -  person rioV8    schedule 10.06.2020
comment
@ rioV8 - не уверен, что понимаю контекст, не могли бы вы предоставить весь код? он должен быть в команде регистрации? как?   -  person Beno Odr    schedule 10.06.2020
comment
вы смотрели на аргумент вызова activate   -  person rioV8    schedule 10.06.2020
comment
@ rioV8 - да, много чего перепробовал ....   -  person Beno Odr    schedule 10.06.2020
comment
В настоящее время первые options - это const options = { multiStepInput, }. Если вы не хотите показывать этот шаг, установите options те параметры, которые вам действительно нужны.   -  person Mosh Feu    schedule 10.06.2020
comment
@MoshFeu - не могли бы вы добавить его в качестве ответа? полный код, который я добавил с модификацией, которую вы сделали. Благодарность!   -  person Beno Odr    schedule 10.06.2020
comment
Конечно :) С удовольствием.   -  person Mosh Feu    schedule 10.06.2020


Ответы (1)


В настоящее время варианты впервые: [multiStepInput]

const options = { multiStepInput }

Если вы не хотите показывать этот шаг, установите options как параметры, которые вам действительно нужны, типа _ 4_)

Что-то подобное:

commands.registerCommand('samples.quickInput', async () => {
  const options = ['vscode-data-function', 'vscode-appservice-microservices', 'vscode-appservice-monitor', 'vscode-appservice-preview', 'vscode-appservice-prod'].map(label => ({label}));
  const quickPick = window.createQuickPick();
  quickPick.items = options;
  quickPick.onDidChangeSelection(([{label}]) => {
    window.showInformationMessage(label);
    quickPick.hide();
  });
  quickPick.show();
})

Запись экрана

Обновить. Если вы просто хотите пропустить первый быстрый ввод и сразу начать multiStepInput, вы можете удалить весь остальной код в обработчике команд и просто использовать это

context.subscriptions.push(commands.registerCommand('samples.quickInput', async () => {
  multiStepInput(context);
}));

Что эквивалентно

options[selection[0].label](context)

Потому что options[selection[0].label] равно multiStepInput, когда выбрано multiStepInput.

person Mosh Feu    schedule 10.06.2020
comment
Я пробую, но не знаю, как использовать это в контексте. Не могли бы вы обновить код из моего вопроса? - person Beno Odr; 10.06.2020
comment
Я хочу, чтобы './multiStepInput' вызывался непосредственно при запуске этого расширения - person Beno Odr; 10.06.2020
comment
Я обновил ответ, дайте мне знать, если вы это имели в виду - person Mosh Feu; 10.06.2020
comment
Спасибо 1+, это близко :), я хочу, чтобы шаги продолжались с './multiStepInput' и все шаги из файла './multiStepInput', просто чтобы пропустить первый выбор. здесь вы используете только один шаг из примера с несколькими шагами, мне нужно, чтобы они все просто пропустили первый. Благодарность! - person Beno Odr; 10.06.2020
comment
Я обновил ответ. Код стал намного проще :) - person Mosh Feu; 11.06.2020
comment
С удовольствием :) Кстати, я написал серию сообщений о различных API vscode, вы можете найти их полезными - medium.com/@moshfeu/ - person Mosh Feu; 11.06.2020
comment
Greate проверит :) - person Beno Odr; 11.06.2020