From 1b63bd16ed56df5d03f04da6c19f9a50a451b638 Mon Sep 17 00:00:00 2001 From: Ryan Dahl Date: Wed, 12 Jan 2011 10:32:48 -0800 Subject: [PATCH] tab completion for commands in debugger --- lib/_debugger.js | 38 +++++++++++++++++++++++++++++++++++++- 1 file changed, 37 insertions(+), 1 deletion(-) diff --git a/lib/_debugger.js b/lib/_debugger.js index 3fd61238f02..422858ee43e 100644 --- a/lib/_debugger.js +++ b/lib/_debugger.js @@ -351,7 +351,10 @@ function SourceInfo(body) { // "node debug" function Interface() { var self = this; - var term = this.term = readline.createInterface(process.stdout); + var term = this.term = + readline.createInterface(process.stdout, function (line) { + return self.complete(line); + }); var child; var client; var term; @@ -396,6 +399,39 @@ function Interface() { } +var commands = [ + 'backtrace', + 'continue', + 'help', + 'info breakpoints', + 'kill', + 'list', + 'next', + 'print', + 'quit', + 'run', + 'scripts', + 'step', + 'version', +]; + + +Interface.prototype.complete = function(line) { + // Match me with a command. + var matches = []; + // Remove leading whitespace + line = line.replace(/^\s*/, ''); + + for (var i = 0; i < commands.length; i++) { + if (commands[i].indexOf(line) >= 0) { + matches.push(commands[i]); + } + } + + return [matches, line]; +}; + + Interface.prototype.handleSIGINT = function() { if (this.paused) { this.child.kill('SIGINT');