gpt4 book ai didi

c - 在命令行中使用 Tab 自动完成文本

转载 作者:行者123 更新时间:2023-12-01 03:40:46 25 4
gpt4 key购买 nike

我想知道如何用 C 实现一个程序,它可以自动完成您在命令行中输入的命令或文本。例如,假设您的程序提示用户输入文件名。大多数情况下会使用 scanf()否则就这样做。然后在命令行中用户会像 please input the file name:_ 一样提示.
假设有一个 shakespeare.txt在同一个目录中。现在我输入了shakes ,然后我希望计算机自动完成 shakespeare.txt对我来说,就像大多数程序在用户点击 Tab 时一样.如何实现?
编辑 :为了更清楚,再举一个例子:
如果您使用 grep在你的命令行中,比如 grep -i "shakespeare" shakespeare.txt , 在您完成之前 shakespeare.txt你自己,如果你只是使用 Tab ,会有一些候选人出现。
当我尝试在使用类似 scanf() 之类的函数时提示用户输入时,如何实现我的程序以使其拥有这些实用程序?

最佳答案

如果您考虑使用现有的实用程序,
看看GNU readline library它提供了您正在寻找的内容的非常简洁的实现。
还有一些其他有用的功能,例如在输入中移动光标,提供输入历史记录和类似输入 shell 的提示。

该库的功能在不同平台上的工作方式相同。

this example从维基百科显示,可以轻松设置指示完成的键:

#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
#include <readline/readline.h>
#include <readline/history.h>

int main()
{
char* input, shell_prompt[100];

// Configure readline to auto-complete paths when the tab key is hit.
rl_bind_key('\t', rl_complete);

for(;;) {
// Create prompt string from user name and current working directory.
snprintf(shell_prompt, sizeof(shell_prompt), "%s:%s $ ", getenv("USER"), getcwd(NULL, 1024));

// Display prompt and read input (NB: input must be freed after use)...
input = readline(shell_prompt);

// Check for EOF.
if (!input)
break;

// Add input to history.
add_history(input);

// Do stuff...

// Free input.
free(input);
}
return 0;
}

关于c - 在命令行中使用 Tab 自动完成文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31073999/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com