From 57cff794ae3d0c96492b8bbb0a150cf7c96a6a16 Mon Sep 17 00:00:00 2001 From: huangshan Date: Tue, 9 Nov 2021 20:42:18 +0800 Subject: [PATCH] =?UTF-8?q?chore:=20shell=E5=AE=8C=E5=96=84=E5=B8=AE?= =?UTF-8?q?=E5=8A=A9=E4=BF=A1=E6=81=AF=EF=BC=8C=E7=89=B9=E6=AE=8A=E5=A4=84?= =?UTF-8?q?=E7=90=86=E4=B8=8D=E5=8F=AF=E8=A7=81=E5=AD=97=E7=AC=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: huangshan Change-Id: I3cbc559c388b5d5a524783c1f55c1e569a44465c --- components/shell/src/base/shmsg.c | 19 ++++++++++++++----- components/shell/src/cmds/shell_shellcmd.c | 8 ++++++-- 2 files changed, 20 insertions(+), 7 deletions(-) diff --git a/components/shell/src/base/shmsg.c b/components/shell/src/base/shmsg.c index b33f9cf2..26e515ac 100755 --- a/components/shell/src/base/shmsg.c +++ b/components/shell/src/base/shmsg.c @@ -42,6 +42,8 @@ EVENT_CB_S g_shellInputEvent; #define SHELL_CMD_MAX_SIZE 64 +#define VISIABLE_CHAR(ch) ((ch) > 0x1F && (ch) < 0x7F) + UINT32 ShellMsgTypeGet(CmdParsed *cmdParsed, const CHAR *cmdType) { CmdItemNode *curCmdItem = (CmdItemNode *)NULL; @@ -232,9 +234,17 @@ VOID ShellTaskEntry(VOID) CHAR buf[SHELL_CMD_MAX_SIZE] = {0}; CHAR *ptr = buf; PRINTK("OHOS # "); - while(1) { + while (1) { (VOID)LOS_EventRead(&g_shellInputEvent, 0x1, LOS_WAITMODE_AND | LOS_WAITMODE_CLR, LOS_WAIT_FOREVER); - while((*ptr = (UINT8)UartGetc()) != 0 && *ptr != 13) { + while ((*ptr = (UINT8)UartGetc()) != 0 && *ptr != 13) { + if (*ptr == '\x03') { /* ctrl + c */ + PRINTK("^C\n\rOHOS # ", *ptr); + ptr = buf; + break; + } + if (!VISIABLE_CHAR(*ptr)) { + break; + } PRINTK("%c", *ptr); if ((ptr - buf) == (sizeof(buf) - 1)) { break; @@ -243,14 +253,13 @@ VOID ShellTaskEntry(VOID) } if (ptr != buf) { if (*ptr == 13 || ((ptr - buf) == (sizeof(buf) - 1))) { - PRINTK("%c", *ptr); *ptr = '\0'; ptr = buf; - PRINTK("\n\r", buf); + PRINTK("\n\r"); ExecCmdline(buf); PRINTK("OHOS # "); } - } else { + } else if (*ptr == 13) { PRINTK("\n\rOHOS # "); } } diff --git a/components/shell/src/cmds/shell_shellcmd.c b/components/shell/src/cmds/shell_shellcmd.c index fd7cd309..c9692da9 100755 --- a/components/shell/src/cmds/shell_shellcmd.c +++ b/components/shell/src/cmds/shell_shellcmd.c @@ -31,6 +31,10 @@ #include "shcmd.h" +#define DEFAULT_SCREEN_WIDTH 80 +#define MAX_CMD_KEY_WIDTH 8 +#define CMD_ITEM_PER_LINE (DEFAULT_SCREEN_WIDTH / (MAX_CMD_KEY_WIDTH + 1)) + INT32 OsShellCmdHelp(INT32 argc, const CHAR **argv) { UINT32 loop = 0; @@ -45,10 +49,10 @@ INT32 OsShellCmdHelp(INT32 argc, const CHAR **argv) PRINTK("*******************shell commands:*************************\n"); LOS_DL_LIST_FOR_EACH_ENTRY(curCmdItem, &(cmdInfo->cmdList.list), CmdItemNode, list) { - if ((loop & (8 - 1)) == 0) { /* 8 - 1:just align print */ + if ((loop % CMD_ITEM_PER_LINE) == 0) { /* just align print */ PRINTK("\n"); } - PRINTK("%-12s ", curCmdItem->cmd->cmdKey); + PRINTK("%-8s ", curCmdItem->cmd->cmdKey); loop++; }