gpt4 book ai didi

linux - 使用 readline 的多平台(Windows、MacOSX、Linux)应用程序出现问题

转载 作者:太空狗 更新时间:2023-10-29 12:20:00 26 4
gpt4 key购买 nike

我正在使用 Netbeans IDE 用 C 编写一个多平台(Windows、Linux 和 MacOSX)应用程序。

它是基于 shell (bash) 的,我使用 readline 和 history 进行数据输入。

此外,我想覆盖快捷键(Ctrl + A,Ctrl + B,...),所以我使用了 rl_bind_key 函数。

rl_bind_key 在 Windows 中正常工作,但在 Linux 和 MacOSX 中不起作用,它总是返回 -1。

我遇到的另一个麻烦是,在 Netbeans(集成到 IDE 的 shell)中,一切运行正常,但在 Netbeans Shell 之外,我的应用程序看起来不完整。我认为这些行为是由于 shell 配置所致,我如何将配置从一个 shell 导出到另一个 ..?

最佳答案

如何修复:

OS X 使用 ancient 版本的 readline。要解决此问题,只需升级到较新的版本即可。只需在终端中运行它(我使用 Homebrew 作为我的包管理器):

brew install readline
brew link readline --force

force 是必需的,因为它应该覆盖系统库。

如果上面的代码对你有用,并且你不在乎它为什么失败,请停止阅读这里。

出了什么问题?

出于某种原因,该函数未实现接受回调,而只是启用或禁用 rl_insert 函数。即使它被记录为能够绑定(bind)任意回调。

下面是 readline 1.* (这是在 OS X 中使用的版本) 中函数的确切实现:

int rl_bind_key(int c, rl_command_func_t *func)
{
int retval = -1;

if (h == NULL || e == NULL)
rl_initialize();

if (func == rl_insert) {
/* XXX notice there is no range checking of ``c'' */
e->el_map.key[c] = ED_INSERT;
retval = 0;
}
return retval;
}

如您所见,除了 func == rl_insert 的情况外,函数总是返回 -1

关于linux - 使用 readline 的多平台(Windows、MacOSX、Linux)应用程序出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12584871/

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