# Nice_Cmdline
  这是一个基于Linux由C语言编写的交互式命令行库。
</br>  导入它后,你可以向其中添加属于自己的命令组。而在此基础之上,它也可以完成若干Shell操作:比如说历史记录、命令补全、若干快捷键操作等。
## 项目安装
### 1.安装
```shell
$ git clone https://github.com/zgg2001/NiceCmdline
$ cd NiceCmdline/
$ sudo make
$ sudo make install
```
### 2.编译执行样例程序
```shell
$ cd example/
$ make
$ ./test
```
## 实现功能
* 自定义命令组
* 对自定义命令的补全
</br>[tab]
* 对自定义命令的匹配执行
</br>[回车]
* 对已执行的命令进行历史记录
</br>[up / ctrl p / down / ctrl n]
* Shell中常见的操作
</br>[光标向左: left / ctrl b]
</br>[光标向右: right / ctrl f]
</br>[退格]
</br>[移动光标至最左: ctrl a]
</br>[移动光标至最右: ctrl e]
</br>[剪切光标右侧的内容: ctrl k]
</br>[粘贴剪切的内容: ctrl y]
</br>[重置命令行: ctrl c]
</br>[删除光标右侧的第一个字符: delete / ctrl d]
</br>[剪切光标左侧的第一个词: alt 退格 / ctrl w]
</br>[剪切光标右侧的第一个词: alt d]
</br>[光标向左移动到当前单词最前端: alt b]
</br>[光标向右移动到当前单词最后端: alt f]
## 快速了解
*基于(2022/1/9)版本</br>
本项目中源码文件共有8个部分,简单进行介绍:
##### 1. cmdline
  命令行的主体部分,命令行的启动、交互、停止等操作均由其控制。
##### 2. receiver
  cmdline中的接收器部分,输入内容由其接收并存入inputbuf缓冲区。</br>
  接受器不止进行输入的接收,也会对输入进行初步解析,根据输入来触发回车、删除、历史查询等操作。
##### 3. parser_vt102
  receiver中的控制码解析器部分,对用户输入的控制码进行解析匹配。</br>
  由于receiver中是以字符为单位进行解析的,为了可以识别多字符控制码(例如ctrl a、ctrl e等),需要一个独立的二级缓冲区进行控制码的匹配,由此这部分就是干这个工作的。
##### 4. inputbuf
  receiver中的输入缓冲区部分。receiver中存在三个缓冲区,其中左右缓冲区分别储存光标左、右的命令内容,而命令缓冲区储存左右缓冲区整合后的完整命令内容。</br>
  inputbuf使用连续内存+记录首尾下标的思路,使得连续内存下首尾添加字符的时间复杂度为O(1),而且实现起来也非常简单。
##### 5. history
  receiver中的历史记录部分。使用双向链表实现,其每个节点中储存一条历史命令。</br>
  由于节点中储存命令的空间以及节点本身是malloc出来的,所以需要注意释放(已有实现,调用即可)。这样的实现使得用户可以完全自定义历史记录数量(空间允许的情况下)。
##### 6. parse
  此部分定义了"命令"的数据结构以及所属于它的结构"令牌"。另外此部分也定义了命令解析逻辑以及命令补全逻辑(均基于对"命令"数据结构的比对)。</br>
  "命令"中主要包含一个回调函数和若干"令牌"。回调函数规定了此命令触发后执行的内容,而"令牌"则固定了命令的格式内容。</br>
  例如命令"set mode 1"可以被看做"字符串 字符串 数字"的格式,则对应到数据结构"命令"中就是三个"令牌":两个字符串令牌和一个数字令牌。由此只要添加对应的令牌并规定令牌的正确匹配内容,便可以设计出想要的命令。
##### 7. parse_string
  字符串类型令牌。</br>
  支持一个令牌匹配多个字符串。
##### 8. parse_num
  数字类型令牌。</br>
  支持8、16、32位的有、无符号整数 以及 32位单精度浮点数。
## 作者
zgg2001
## 版权说明
该项目签署了 Apache-2.0 授权许可,详情请参阅 [LICENSE](https://github.com/zgg2001/NiceCmdline/blob/main/LICENSE)
## 参考开源项目
1. aversive的parse部分</br>https://www.droids-corp.org/~zer0/doxygen_aversive/html/files.html
2. dpdk的cmdline部分</br>http://doc.dpdk.org/api-16.04/cmdline_8h.html
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
基于Linux由C语言编写的交互式命令行库,可以自定义命令组实现Interactive_comman_NiceCmdline.zip (21个子文件)
NiceCmdline-main
Makefile 258B
LICENSE 11KB
nice_cmd
inputbuf.h 4KB
parse_string.h 4KB
history.h 3KB
parse.h 5KB
parse.c 14KB
history.c 5KB
receiver.h 5KB
parser_vt102.c 4KB
inputbuf.c 4KB
receiver.c 21KB
parse_num.h 4KB
parse_string.c 6KB
cmdline.c 6KB
cmdline.h 3KB
parser_vt102.h 5KB
parse_num.c 14KB
example
test.c 4KB
Makefile 33B
README.md 4KB
共 21 条
- 1
资源评论
好家伙VCC
- 粉丝: 2103
- 资源: 9145
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- coco.names 文件
- (源码)基于Spring Boot和Vue的房屋租赁管理系统.zip
- (源码)基于Android的饭店点菜系统.zip
- (源码)基于Android平台的权限管理系统.zip
- (源码)基于CC++和wxWidgets框架的LEGO模型火车控制系统.zip
- (源码)基于C语言的操作系统实验项目.zip
- (源码)基于C++的分布式设备配置文件管理系统.zip
- (源码)基于ESP8266和Arduino的HomeMatic水表读数系统.zip
- (源码)基于Django和OpenCV的智能车视频处理系统.zip
- (源码)基于ESP8266的WebDAV服务器与3D打印机管理系统.zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功