一 目的
为了使linux下的程序在运行中的命令行界面输入命令时具有自动补齐和历史记录功能,比如像asterisk的控制台界面。
二 实现方法
实现方法相对于在远端实现(参见:为在telnet自己TCP服务器程序的界面上实现shell一样的自动补齐和历史记录的功能)要简单的多,因为有第三方库可以使用—libedit库,这个库可以处理很多与控制台界面有关的东西。Asterisk用的就是这个,最开始以为asterisk的这种方式可以远程使用,后来看了下源码发现只能在本地使用,因为它绑定的键位是本机键盘,在远端(一般是telnet)的”↑””↓”上翻下翻键无法是被检测到的。
三 详细实现
Cli.c
static History *el_hist; //命令历史记录列表
static EditLine *el; //本地编辑功能的主要实体
//用于显示提示符的回调函数
static char *cli_prompt(EditLine * el)
{
static char prompt[200];
sprintf(prompt, "CLI>");
return prompt;
}
//用于自动补齐的回调函数
static char *cli_complete(EditLine * el, int ch)
{