Trong trình bao Bash, tôi có thể sử dụng hoàn thành tab để sử dụng tên tệp và thư mục đề xuất. Làm thế nào tôi có thể đạt được điều này với nodejs và readline?Cách đề xuất tệp có hoàn thành tab bằng cách sử dụng readline?
Ví dụ:
/<Tab>
nên đề nghị/root/
,/bin/
vv/et<Tab>
nên hoàn thành để/etc/
.fo<Tab>
phải hoàn tất thànhfoobar
giả sử tệp như vậy tồn tại trong thư mục hiện tại.
Tôi đã nghĩ đến việc sử dụng globbing (pattern search_term.replace(/[?*]/g, "\\$&") + "*"
), nhưng có thể có thư viện mà tôi đã bỏ qua không?
Đây là cách tiếp cận hiện tại của tôi sử dụng glob, nó bị phá vỡ khi sử dụng //<Tab>
vì nó trả về tên canonicalized và có thể một số oddities khác:
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();