In the Bash shell, I can use tab-completion to use file and directory hints. How can I achieve this with nodejs and readline ?
Examples:
/<Tab> should offer /root/ , /bin/ etc./et<Tab> should end before /etc/ .fo<Tab> should end before foobar , assuming that such a file exists in the current directory.
I was thinking about using globbing (pattern search_term.replace(/[?*]/g, "\\$&") + "*" ), but maybe there is a library that I missed?
This is my current approach using glob, it breaks when using //<Tab> , as it returns a canonical name and may have some other weirdness:
function command_completion(line) { var hits; // likely broken, one does not simply escape a glob char var pat = line.replace(/[?*]/g, "\\$&") + "*"; // depends: glob >= 3.0 var glob = require("glob").sync; hits = glob(pat, { silent: true, nobrace: true, noglobstar: true, noext: true, nocomment: true, nonegate: true }); return [hits, line]; } var readline = require("readline"); rl = readline.createInterface({ input: process.stdin, output: process.stdout, completer: command_completion }); rl.prompt();
source share