gpt4 book ai didi

c - Readline (libedit) 非标准输入

转载 作者:太空宇宙 更新时间:2023-11-04 04:54:05 25 4
gpt4 key购买 nike

我正在尝试为游戏中的 lua 控制台制作自动完成和历史记录功能。我被提议使用 readline 库(准确地说,它的 BSD 模拟 libedit,但它具有类似的 api 和 rl 代码构建,但 header 略有变化),我选择的 lua 绑定(bind) lua-rlcompleter with history patches . History 运行良好,但我在 readline 函数方面遇到了一些问题。对于自动完成,我需要将 lua 字符串传递给 readline 函数,但默认情况下此函数从标准输入读取。我找到了 solution将 rl_instream 更改为 FILE*。为此,我创建了 tmpfile 并写入其中。但它工作起来很奇怪,当以这种方式读取字符串时,readline 不返回任何内容。

// This definitions is just example, not working code 
// it shows the environment
static FILE *tempfile = tmpfile();
rl_instream = tempfile;
rl_initialize();

static int lreadline(lua_State *L)
{
const char *prompt = lua_tostring(L, 1);
char *line;
if(rl_instream == NULL)
// In case we using stdin
line = readline(prompt);
else{
fputs(prompt, tempfile);
/* maybe I need a fseek here? It not helps though.
* fseek(tempfile, -strlen(prompt), SEEK_CUR);
*/
line = readline(NULL);
}
lua_pushstring(L, line);
free(line);
return 1;
}

我不确定发生了什么,但认为它可能与 readline 函数在文件中的读取位置有某种关系。我试图阅读 libedit 的源代码,但我的代码无法按预期工作的原因是没有意义的。由于使用 eclipse 调试共享库时出现问题,我无法对此进行调试,但计划使用纯 gdb,不确定它是否有帮助。

此外,也许我做错了,还有另一种简单的方法可以在基于 lua 的控制台模拟器中自动完成和历史记录?

最佳答案

如果您在使用 libedit 时仍然遇到问题,请查看 linenoise

关于c - Readline (libedit) 非标准输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11291278/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com