【问题标题】:How do I make an interactive command line interface?如何制作交互式命令行界面?
【发布时间】:2016-12-09 06:55:11
【问题描述】:

我正在尝试编写一个工具来比较我的文件,但我发现很难与之交互。我想支持 2 种操作:1)将我的文件加载到内存中 2)比较已经加载的文件。

思路如下

while (true) {
    getline(&line, &linesize, stdin);
    if (strlen(line) < 2) continue;
    token = strtok(line, DELIM);
    if (!strcmp(token,"load")) {
        puts("you want to load something");
    } else if (!strcmp(token, "compare")) {
        puts("you want to compare something");
    } else if (!strcmp(token, "exit")) {
        puts("exiting...");
        exit(1);
    } else {
        puts("Cannot parse, try again");
    }
}

在终端中,如果我想比较一些MyVeryLongFileNameFile.fooAnotherVeryLongFileNameFile.bar,我可以输入diff My\tab Ano\tab \enter,它会自动为我完成文件名。

我想在我的程序中也有这些功能,比如使用 tab 自动完成,使用 up/down 从以前的命令中选择等等。我应该如何实现?

【问题讨论】:

    标签: c++ shell command-line-interface


    【解决方案1】:

    使用ncurses.h library 帮助您完成此任务。

    【讨论】:

    • @interputed 我刚刚发现了这个讨论。我想改进我的正在建设中的 GUI,其中用户可以用来输入的文本字段将像终端一样,我找到了你的答案。非常感谢。请问ncurses库是否允许我将用户写入的文本行发送到“真实”终端(Ubuntu 14.04)并在那里执行字符串?
    • 向 Ubuntu 终端发送字符串需要系统调用。如果包含标题#include &lt;cstdlib&gt;,则可以使用system(),它接受一个在终端中运行的字符串。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-20
    • 1970-01-01
    • 1970-01-01
    • 2012-09-29
    • 1970-01-01
    • 2017-09-06
    相关资源
    最近更新 更多