linenoise 源码分析(一)

本文介绍了linenoise,一个简洁的命令行编辑库,由redis作者Antirez创建,常用于Redis、MongoDB等项目。它具有小巧、无配置、支持历史查询等特点,代码量仅1100行。文章详细分析了linenoise的数据结构,包括linenoiseCompletions用于自动补全,以及abuf结构体作为内部字符串操作工具。还概述了它们的功能和使用方法,为读者提供了深入理解linenoise的起点。
摘要由CSDN通过智能技术生成

linenoise是一个命令行编辑库(line editing library),由redis数据库设计者Antirez发布一个用于颠覆“一个命令行编辑库需要20000行C代码”的观点。目前linenoise已经使用在Redis, MongoDB,Android等应用上。其支持特性如下:

1) 尽可能简小,无配置,支持BSD license。

2) 单行或多行编辑模式,使用常用的快捷键绑定实现。

3)支持历史键入文本查询。

4)兼容性。

5)大约只有1100行代码,支持BSD license。

6)只使用VT100 escapes键码的子集。

我阅读了linenoise源码,非常简单,非常简练,其中也有很多值得学习的东西,于是将这些东西记录下来,供自己使用,也供各位参考。


一、 文件构成

linenoise库文件非常少,没有子目录,其中的核心文件仅仅是linenoise.c 和linenoise.h,还有一个example.c,作为使用的教学程序。当然,还有一个makefile和README.markdown,此处我只分析核心的linenoise.c和linenoise.h。


二、数据结构

(1)linenoiseCompletions:

typedef struct linenoiseCompletions {
  size_t len;
  char **cvec;
} linenoiseCompletions;

此结构用于帮助实现用户输入自动补全功能。就像我们使用linux命令行终端一样,当我们键入命令头几个字母,使用tab键便可以完成自动补全或查找匹配,或者我们指定cd路径,输入路径头几个字符,tab后完成后面的补全工作。而linenoise实现的也是这个功能,但真正的匹配工作需要你注册函数完成,就是linenoise中的completionCallback。

此结构体只有两个导出方法,第一个是:

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值