javascript - Extensie VSCode folosește direct intrare în mai mulți pași
Vreau să folosesc intrarea în mai mulți pași direct, de exemplu utilizatorul alege F1 - și începe pașii pentru a alege obiecte.
În prezent am găsit următorul exemplu și am eliminat quickOpen și inputul de bază
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();
}));
}
Totuși, când pornesc extensia, primesc prima intrare de pas multiStepInput de ales, vreau să o evit și să încep direct de la opțiunile pentru a alege grupul de resurse (din exemplu). Cum pot face asta? Nu reușesc să omit primul pas (dummy) atunci când utilizatorul ar trebui să aleagă următorul.
showQuickPick,
showInputBox,
multiStepInput,
quickOpen,
Deoarece vreau să folosesc direct în mod explicit multiStepInput și să nu cer să fie ales
https://github.com/microsoft/vscode-extension-samples/blob/master/quickinput-sample/src/multiStepInput.ts#L24
Nu vreau să încep de aici
Vreau să încep de aici când utilizatorul folosește F1
Răspuns #1
În prezent, primele opțiuni sunt [multiStepInput]
const options = { multiStepInput }
Dacă nu doriți să afișați acel pas, setați options ca opțiunile pe care le doriți cu adevărat de tip QuickPickItem)
Ceva de genul acesta:
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();
})
Înregistrare ecran
Actualizare Dacă vrei doar să sari peste prima introducere rapidă și să începi multiStepInput imediat, poți șterge tot restul codului din handler-ul comenzii și să folosești doar acesta
context.subscriptions.push(commands.registerCommand('samples.quickInput', async () => {
multiStepInput(context);
}));
Care este echivalent cu
options[selection[0].label](context)
Pentru că options[selection[0].label] este multiStepInput atunci când multiStepInput este ales.

