From e1e76c6be71fdeb3b6246307b626734d8dc26f86 Mon Sep 17 00:00:00 2001 From: Sam Atkins Date: Fri, 28 Jun 2024 11:48:45 +0100 Subject: [PATCH] feat(backend): Add tab-completion to server console command names --- packages/backend/src/services/CommandService.js | 10 +++++++++- packages/backend/src/services/DevConsoleService.js | 10 ++++++++++ 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/packages/backend/src/services/CommandService.js b/packages/backend/src/services/CommandService.js index b78919792..c4824f18d 100644 --- a/packages/backend/src/services/CommandService.js +++ b/packages/backend/src/services/CommandService.js @@ -23,6 +23,10 @@ class Command { this.spec_ = spec; } + get id() { + return this.spec_.id; + } + async execute(args, log) { log = log ?? console; const { id, name, description, handler } = this.spec_; @@ -79,8 +83,12 @@ class CommandService extends BaseService { const args = text.split(/\s+/); await this.executeCommand(args, log); } + + get commandNames() { + return this.commands_.map(command => command.id); + } } module.exports = { CommandService -}; \ No newline at end of file +}; diff --git a/packages/backend/src/services/DevConsoleService.js b/packages/backend/src/services/DevConsoleService.js index ea17071f8..f14fcc949 100644 --- a/packages/backend/src/services/DevConsoleService.js +++ b/packages/backend/src/services/DevConsoleService.js @@ -131,6 +131,16 @@ class DevConsoleService extends BaseService { output: process.stdout, prompt: 'puter> ', terminal: true, + completer: line => { + // We only complete service and command names + if ( line.includes(' ') ) + return; + + const results = commands.commandNames + .filter(name => name.startsWith(line)) + .map(name => `${name} `); // Add a space after to make typing arguments more convenient + return [ results, line ]; + }, }); rl.on('line', async (input) => { this._before_cmd();