2009-06-08 68 views
2

所以,我尝试使用的readline充塞一些默认的文本的用户输入,并且无法得到它在OSX 10.5工作:使用的ReadLine对OS X rl_insert_text 10.5

// rl_insert_text_ex.c 
// gcc -o rl_insert_text_ex rl_insert_text_ex.c -lreadline 
#include <stdio.h> 
#include <readline/readline.h> 

int my_startup_hook(void) { 
    return rl_insert_text("ponycorns"); 
} 
int main(int argc, char *argv[]) { 
    char *line; 
    rl_startup_hook = (Function*) my_startup_hook; 
    line = readline("What's your favorite mythical animal? "); 
    if (NULL == line || '\0' == *line) { 
    printf("Nothing given... :(\n"); 
    } 
    else { 
    printf("That's funny, I love %s too!\n", line); 
    } 
    return 0; 
} 

此代码没有按” t甚至可以在10.4上进行编译(在10.4上没有关于_rl_insert_text的定义,这有点令人讨厌),但在10.5上编译。但是,rl_insert_text()'d文本从不显示,也不会以用户输入形式返回。该回调正在使用,rl_insert_text()返回适当的值,(谢谢你,printf),所以我不知道这里发生了什么。

我检查/usr/include/readline/readline.h,并rl_insert_text()是下:

/* supported functions */ 

这是容易混淆的下:

/* 
* The following is not implemented 
*/ 

我也是SOL,或者我只是做错了我?

+0

为什么这个标签为ruby?代码看起来像是C代码 – 2009-07-10 15:15:38

+0

好问题!固定的。 – rampion 2009-07-10 17:54:51

回答

1

不幸的是,至少在OS X中包含readline库时,您可能会运气不佳。由于许可证兼容性问题,Apple使用libedit(显然)提供了不完整的readline仿真。 (该库在OS X附带的readline.h中的名称为“editline”。)

GNU Readline Library(“一个真正的”readline库)在GPL下,它是一个copyleft许可证,代码不完全是开源的。如果它涉及到(A)通过淘汰所有Xcode,OS X等或(B)来打开您真正喜欢使用的内容,Apple(与大多数公司一样)总是会选择B.这是一个无赖,但那就是生活。

就我个人而言,我认为这是GPL代码在土地上有些枯萎的原因之一,因为在“坚持它的人”的行为中,它通常也会扣留购买群众的代码软件。 {BSD,MIT,Apache}类型的许可证更适合在封闭源系统中使用,并且仍然允许商业实体提供补丁等。我的猜测是libedit尚未得到足够的关注以得到适当的修复。社区补丁肯定会受到欢迎,但如果我们可以使用代码而不必自己破解它,那么它会更好!......--)

顺便说一句,同样的事情适用于其他GPL项目 - 只要{ git,mercurial,bazaar}仍然处于GPL之下,不要屏住呼吸让苹果在Xcode中为他们提供整合。 :-(

更新:!新的Xcode 4提供Git支持好哇我的理解是,这是由于从主代码库的Xcode隔离GPL的代码,新的插件架构但是,我要强调很明显,有些人不同意(你是一个朋友,匿名downvoter),但事实是,GPL can restrict freedoms too - 通常是与闭源/专有软件不同的东西一般来说,但GPL在防止非法使用源代码方面也是非常有效的......区别在于道德上的优越感

相关问题