c - 在 c 中使用 readline() 编辑命令

标签 c history edit readline prompt

我必须实现一些 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);
}

最佳答案

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

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

关于c - 在 c 中使用 readline() 编辑命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7265276/

相关文章:

java - C 客户端/JVM 服务器设置中双向、经过身份验证的加密连接的推荐集成机制?

language-agnostic - 尼曼的 13 条最低限度足够诫命的来源在哪里?

user-interface - BlackBerry - 滚动固定大小文本编辑,左侧和边框带有静态标签

php - 编辑 php mysqli CRUD 失败 - 仅更新数据 mysql 失败

c - Printf 干扰 I2C 模块值读取

c - while循环要求输入直到使用C的ctrl-d

c - 数组中的元素 O(nlogn) 查找对的复杂度方法

svn - 如何获取 SVN 中文件/文件夹属性的历史记录?

ajax - 如何在 UpdatePanel 中保存历史记录?

java - 当在 JTree Location 之外发生 Focus Lost 或 Left Click 时,如何使 JTree 停止单元格编辑?