Readline (libedit) 非标准输入的输入
2017-5-23 12:4:43
收藏:0
阅读:167
评论:1
我试图为游戏内的lua控制台制作自动完成和历史记录功能。有人建议我使用readline库(确切地说是它的BSD模拟库libedit,但它具有相似的api和带有轻微头文件更改的rl-code构建),使用我选择的lua-rlcompleter带有历史记录补丁。历史记录可以正常工作,但我对readline函数有一些问题。对于自动完成,我需要将lua字符串传递给readline函数,但是默认情况下此函数从stdin读取。我在更改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的控制台仿真器中自动完成和记录历史记录?
点赞
评论区的留言会收到邮件通知哦~
推荐文章
- 如何将两个不同的lua文件合成一个 东西有点长 大佬请耐心看完 我是小白研究几天了都没搞定
- 如何在roblox studio中1:1导入真实世界的地形?
- 求解,lua_resume的第二次调用继续执行协程问题。
- 【上海普陀区】内向猫网络招募【Skynet游戏框架Lua后端程序员】
- SF爱好求教:如何用lua实现游戏内调用数据库函数实现账号密码注册?
- Lua实现网站后台开发
- LUA错误显式返回,社区常见的规约是怎么样的
- lua5.3下载库失败
- 请问如何实现文本框内容和某个网页搜索框内容连接,并把网页输出来的结果反馈到另外一个文本框上
- lua lanes多线程使用
- 一个kv数据库
- openresty 有没有比较轻量的 docker 镜像
- 想问一下,有大佬用过luacurl吗
- 在Lua执行过程中使用Load函数出现问题
- 为什么 neovim 里没有显示一些特殊字符?
- Lua比较两个表的值(不考虑键的顺序)
- 有个lua简单的项目,外包,有意者加微信 liuheng600456详谈,最好在成都
- 如何在 Visual Studio 2022 中运行 Lua 代码?
- addEventListener 返回 nil Lua
- Lua中获取用户配置主目录的跨平台方法
如果您继续在
libedit上遇到问题,请查看linenoise。