【发布时间】:2017-12-01 07:02:14
【问题描述】:
我构建了一个 shell,尝试使用 rl_bind_key() 使制表符 (\t) 键执行一些自定义操作,但它在 macOS Sierra 中不起作用,但它在 Ubuntu、Fedora 和 CentOS 上起作用。这是 mcve:
#include <stdlib.h>
#include <stdio.h>
#include <readline/readline.h>
static int cmd_complete(int count, int key)
{
printf("\nCustom tab action goes here...\n");
rl_forced_update_display();
return 0;
}
char *interactive_input()
{
char *buffer = readline(" > ");
return buffer;
}
int main(int argc, char **argv)
{
rl_bind_key('\t', cmd_complete); // this doesn't seem to work in macOS
char *buffer = 0;
while (!buffer || strncmp(buffer, "exit", 4)) {
if (buffer) { free(buffer); buffer=0; }
// get command
buffer = interactive_input();
printf("awesome command: %s\n", buffer);
}
free(buffer);
return 0;
}
我像这样使用 Clang 编译:
$ cc -lreadline cli.c -o cli
此行为的原因是什么,我该如何解决?
【问题讨论】:
标签: c macos shell macos-sierra readline