【问题标题】:using readline() to edit commands, in c在 c 中使用 readline() 来编辑命令
【发布时间】:2011-09-01 01:30:36
【问题描述】:

我必须实现一些 CLI 功能,现在我正在尝试使用 readline() 以便用户可以编辑或执行他们的命令。到目前为止,它的工作原理是它允许用户输入他们的命令并滚动浏览历史记录。当用户尝试编辑命令时。光标以某种方式设法传递命令并进入提示,例如 "desktop r1234|5$: ls" 其中 "desktop r12345(sp)$:" 是显示工作目录和根目录的提示符;和“|”是光标。光标应该停在 '$' 和 'ls' 之间,即 "desktop r12345$:| ls" 。showWrkngDir() 方法只是像普通终端一样显示提示。

int main (int argc, char * argv[])
{

    showWrkngDir();
    static char *line_read = (char *)NULL;
    using_history();
    rl_readline_name = basename(argv[0]);
    if (line_read)
    {
            free (line_read);
            line_read = (char *)NULL;
    }

    while(strcmp((line_read = readline ("")) , "EXIT") != 0)
    {
            if (line_read && *line_read)
                    add_history (line_read);

            tokenize(line_read);
            showWrkngDir();
    }

    return 0;
}


void showWrkngDir()
{
    char curDir[MAX_COMMAND_SZ];
    char *env;

    getcwd(curDir, sizeof(curDir));
    env = (char *)getenv("USER");

    printf("%s ",basename(curDir));

    printf("%s(sp)$ ", env);
}

【问题讨论】:

    标签: c history edit readline prompt


    【解决方案1】:

    我相当确定 readline 想要显示提示本身,因为有时它需要擦除整个屏幕行并从头开始重新绘制。尤其是在浏览历史记录时会发生这种情况,而且在编辑溢出到下一行的命令或按下 ^L 时也会发生这种情况。

    将您的提示作为 readline() 的参数,

    【讨论】:

      【解决方案2】:

      将提示传递给readline,让它打印而不是使用printf自己打印。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-10-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-26
        • 2019-05-14
        • 2015-08-15
        • 1970-01-01
        相关资源
        最近更新 更多