C语言 使用readline()完成

jm81lzqq  于 2023-08-03  发布在  其他
关注(0)|答案(3)|浏览(126)

我有一个关于Readline Library的问题。
我想知道Readline是否可以在C程序中自动完成目录中的文件名?
我已经搜索过了,只看到命令名完成。
先谢谢你。
编辑:我复制了一个数组中的文件名.我使用的函数是:在文件rline. c中,char *command_generator,char**tab_completion(const char *text,int start,int end),void initialize_readline()。我想我必须使用char * filename_completion_function(char *text,int state)?当我输入“tab”键时,它什么也没调用,bind()似乎也没有被使用。你知道我是否使用了正确的功能吗?谢谢!!

0qx6xfy6

0qx6xfy61#

文件名补全是readline的一个内置特性,你不需要填充文件名列表等。下面的程序在readline 6.1中默认允许文件名补全。

#include <stdio.h>
#include <stdlib.h>

#include <readline/readline.h>
#include <readline/history.h>

int main()
{
    printf( "%s\n", readline( "test> " ) );
    return 0;
}

字符串
存在定制此机制的方法,例如你可以指定一些像rl_filename_quoting_functionrl_filename_dequoting_function这样的函数来帮助readline为你的应用程序提供正确的文件名引用。
我认为你需要指定你的readline版本,如果这对你不起作用。/etc/inputrc含量也应该检查。你有bash,它使用readline吗?文件名补全是否按预期工作?无论如何,info readline是一个非常好的文档,前提是您可以使用info本身:)如果没有,请查看Programming with GNU Readline

mftmpeh8

mftmpeh82#

要使用readline库,请在编译器中指定-lreadline。下面的代码段可以用

cc some.c -o some -lreadline

#include <stdio.h>

#include <readline/readline.h>
#include <readline/history.h>

int main()
{
        char *inpt;

        int i = 0;

        while ( i < 10 )
        {
                inpt = readline("Enter text: ");
                add_history(inpt);
                printf("%s", inpt);
                printf("\n");
                ++i;
        }

        return 0;

}

字符串

eyh26e7m

eyh26e7m3#

我对你所指的readline感到困惑,但有人向我指出,你指的是GNU库中的那个。
有关这方面的示例,请参阅Fredrik的GNU Readline库链接。
要将其应用于您的需要,而不是您看到的string cmd[],您需要使用当前目录中所有文件名的数组,其余代码应该大致相同。

相关问题