Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Macos 在Mac OS X上使用libedit自动完成_Macos_Autocomplete_Terminal_Readline - Fatal编程技术网

Macos 在Mac OS X上使用libedit自动完成

Macos 在Mac OS X上使用libedit自动完成,macos,autocomplete,terminal,readline,Macos,Autocomplete,Terminal,Readline,下面是一个简单的程序,它使用libedit或GNU readlines生成自动完成选项 #include <readline/readline.h> #include <stdlib.h> #include <string.h> char *command_generator(char *word, int state) { char *options[] = {"I_love_math", "he_love_math", "she_loves_ma

下面是一个简单的程序,它使用libedit或GNU readlines生成自动完成选项

#include <readline/readline.h>
#include <stdlib.h>
#include <string.h>

char *command_generator(char *word, int state) {
    char *options[] = {"I_love_math", "he_love_math", "she_loves_math", "they_love_math", NULL};
    return options[state] ? strdup(options[state]) : NULL;
}

int main(int argc, char **argv) {
    rl_readline_name = "rl_example";
    rl_completion_entry_function = (void*)command_generator;
    rl_initialize();
    rl_parse_and_bind("TAB: menu-complete");
    while (1) {
        char *line = readline("rl> ");
        if (line == NULL) break;
        printf("echo %s\n", line);
        free(line);
    }
    return 0;
}
即使在我按下tab键后,它也不会与he_love_math关联,它只是显示选项

通过一个小型的互联网搜索,我发现需要将TAB键绑定到menu complete,但是正如您所看到的,这两个键都没有运行

rl_parse_and_bind("TAB: menu-complete");
不在我的主目录中放置TAB:menu complete帮助

我怎样才能完成工作?如何使libedit用补全建议替换当前单词?

OSx上的readline是通过libedit中的例程实现的。 不幸的是,兼容性没有扩展到配置命令

将装订线更改为:

rl_parse_and_bind("bind ^I rl_complete");
或者把这个放在~/.editrc中

阅读editline和editrc的手册页;但是他们没有关于libedit库中rl_*例程的信息

rl_parse_and_bind("bind ^I rl_complete");
bind ^I rl_complete