1
0
mirror of https://github.com/NevermindZZT/letter-shell.git synced 2025-01-21 10:02:54 +08:00

修复在开启密码功能时,在未验证密码的情况下,按下Tab会显示命令列表的问题

This commit is contained in:
Letter 2019-11-17 12:12:36 +08:00
parent 8533a0d8bc
commit b3af0b44e7
2 changed files with 149 additions and 123 deletions

View File

@ -5,6 +5,26 @@
一个体积极小的嵌入式shell
- [letter shell](#letter-shell)
- [功能](#%e5%8a%9f%e8%83%bd)
- [移植说明](#%e7%a7%bb%e6%a4%8d%e8%af%b4%e6%98%8e)
- [使用方式](#%e4%bd%bf%e7%94%a8%e6%96%b9%e5%bc%8f)
- [函数定义](#%e5%87%bd%e6%95%b0%e5%ae%9a%e4%b9%89)
- [main函数形式](#main%e5%87%bd%e6%95%b0%e5%bd%a2%e5%bc%8f)
- [普通C函数形式](#%e6%99%ae%e9%80%9ac%e5%87%bd%e6%95%b0%e5%bd%a2%e5%bc%8f)
- [在函数中获取当前shell对象](#%e5%9c%a8%e5%87%bd%e6%95%b0%e4%b8%ad%e8%8e%b7%e5%8f%96%e5%bd%93%e5%89%8dshell%e5%af%b9%e8%b1%a1)
- [命令定义](#%e5%91%bd%e4%bb%a4%e5%ae%9a%e4%b9%89)
- [命令导出方式](#%e5%91%bd%e4%bb%a4%e5%af%bc%e5%87%ba%e6%96%b9%e5%bc%8f)
- [命令表方式](#%e5%91%bd%e4%bb%a4%e8%a1%a8%e6%96%b9%e5%bc%8f)
- [组合按键](#%e7%bb%84%e5%90%88%e6%8c%89%e9%94%ae)
- [shell变量](#shell%e5%8f%98%e9%87%8f)
- [导出变量](#%e5%af%bc%e5%87%ba%e5%8f%98%e9%87%8f)
- [读取变量](#%e8%af%bb%e5%8f%96%e5%8f%98%e9%87%8f)
- [修改变量](#%e4%bf%ae%e6%94%b9%e5%8f%98%e9%87%8f)
- [变量作为命令参数](#%e5%8f%98%e9%87%8f%e4%bd%9c%e4%b8%ba%e5%91%bd%e4%bb%a4%e5%8f%82%e6%95%b0)
- [建议终端软件](#%e5%bb%ba%e8%ae%ae%e7%bb%88%e7%ab%af%e8%bd%af%e4%bb%b6)
- [更新日志](#%e6%9b%b4%e6%96%b0%e6%97%a5%e5%bf%97)
## 功能
- 命令自动补全使用tab键补全命令
@ -108,7 +128,7 @@ SHELL_EXPORT_CMD(func, func, test)
终端调用
```
```sh
letter>>func "hello world"
2 parameter(s)
hello world
@ -128,7 +148,7 @@ SHELL_EXPORT_CMD(func, func, test)
终端调用
```
```sh
letter>>func 666 'A' "hello world"
input int: 666, char: A, string: hello world
```
@ -209,7 +229,7 @@ SHELL_EXPORT_VAR_INT(testVar1, testVar1, var for test);
shell变量使用`$[var]`的方式读取,直接在命令行输入即可,例如:
```
```sh
letter>>$testVar1
testVar1 = 100, 0x00000064
```
@ -218,7 +238,7 @@ testVar1 = 100, 0x00000064
使用`setVar`命令修改变量,例如:
```
```sh
letter>>setVar testVar1 200
testVar1 = 200, 0x000000c8
```
@ -227,7 +247,7 @@ testVar1 = 200, 0x000000c8
直接使用`$[var]`即可将变量的值作为参数传递给shell命令例如
```
```sh
letter>>getVar $testVar1
```
@ -235,103 +255,102 @@ letter>>getVar $testVar1
- 对于基于串口移植letter shell建议使用secureCRT软件letter shell中的相关按键映射都是按照secureCRT进行设计的使用其他串口软件可能会出现某些功能无法使用的情况
## 更新日志
### 2018/4/20 v1.0
- 2018/4/20 v1.0
- 第一版
### 2018/4/23 v1.1
- 2018/4/23 v1.1
- 加入对带参命令的支持
### 2018/4/25 v1.2
- 2018/4/25 v1.2
- 合并带参函数和不带参函数命令表
### 2018/7/10 v1.3
- 2018/7/10 v1.3
- 修复带参命令最后输入空格时传入参数数量出错的问题
- 修复不带参数调用带参命令时程序跑死的问题,指令处理相关代码优化
- 加入对于输入超出命令长度的情况的处理措施
### 2018/7/11 v1.4
- 2018/7/11 v1.4
- 新增对于方向键的处理,暂时未对方向键添加具体功能
- 修复单独的空格,制表符等无效操作被识别为指令进行解析,造成程序死机的问题
- 取消制表符作为参数分隔符的用途
### 2018/7/12 v1.5
- 2018/7/12 v1.5
- 新增历史命令的功能,使用上下方向键操作
- 新增tab键输入最近一条命令
- 无历史记录时tab键输入help命令
- 新增一条用于清屏的默认指令
### 2018/7/18 v1.6
- 2018/7/18 v1.6
- 修改tab键功能加入自动补全
- 无输入情况下按下tab输入help命令
- 有输入情况下,进行自动补全
### 2018/7/24 v1.7
- 2018/7/24 v1.7
- 增加SHELL_TypeDef结构体
- 采用新的命令添加方式,现在可以在任意文件的函数 外部采用宏SHELL_EXPORT_CMD进行命令定义
### 2018/7/26 v1.7.1
- 2018/7/26 v1.7.1
- 修复不使用带参函数(SHELL_USE_PARAMETER = 0)的情况下,无法匹配命令的问题
- 修复不使用历史命令(SHELL_USE_HISTORY = 0)的情况下,无法使用命令补全的问题
### 2018/8/9 v1.8
- 2018/8/9 v1.8
- 新增左右键移动光标功能方便对输错的命令进行修改使用宏SHELL_ALLOW_SHIFT开启
- 优化结构体成员命名
- 对开启移动光标功能后,输入参数过长的情况采用新的处理方式
### 2018/11/19 v1.8.3
- 2018/11/19 v1.8.3
- 修复不使用光标移动功能的时候,输入命令过长时无法正常删除的问题
- 针对不使用MDK编译重新加入命令表定义的方式
- 新增对双引号的识别处理,支持带空格的参数
### 2019/01/07 2.0.0
- 2019/01/07 2.0.0
- 重构代码,优化逻辑结构,减少内存开销
- 新增shell扩展模块支持函数参数自动转化
- 精简shell可选项
- 新增多shell支持
### 2019/02/20 2.0.1
- 2019/02/20 2.0.1
- 新增命令导出方式对于IARGCC的支持
- 新增命令长帮助
- 新增二进制参数支持
- 修复bug以及一些优化
### 2019/03/29 2.0.2
- 2019/03/29 2.0.2
- 新增函数返回值打印
- 新增shell对象管理支持在shell调用的函数中获取当前shell对象
- bug修复
### 2019/08/16 2.0.3
- 2019/08/16 2.0.3
- 新增一个shell格式化输出函数
### 2019/08/20 2.0.4
- 2019/08/20 2.0.4
- 新增组合按键功能自定义
- 新增shell变量
### 2019/08/21 2.0.5
- 2019/08/21 2.0.5
- 新增shell常量
- 修复bug以及一些优化
### 2019/11/16 2.0.6
- 2019/11/16 2.0.6
- 修复历史命令概率性异常的问题
- 新增shell密码

View File

@ -751,6 +751,13 @@ static void shellTab(SHELL_TypeDef *shell)
unsigned short length;
SHELL_CommandTypeDef *base = shell->commandBase;
#if SHELL_USING_AUTH == 1
if (!shell->isPasswordConfirm)
{
return;
}
#endif
if (shell->length != 0)
{
shell->buffer[shell->length] = 0;