Change-Id: Icb18d8fec97ea9268e460188183a36612f51a88e
This commit is contained in:
weidonglin 2021-11-29 01:46:12 +08:00
commit 5f9b9ff1af
3 changed files with 58 additions and 51 deletions

View File

@ -14,8 +14,8 @@
extern "C" { extern "C" {
#endif #endif
typedef int(*cmd_func_t)(int argv, char* argc[]); typedef int(*cmd_func_t)(int, char**);
typedef int(*cmd_key_func_t)(void *data); typedef int(*cmd_key_func_t)(void *);
typedef struct __cmd typedef struct __cmd
{ {
@ -35,7 +35,7 @@ typedef struct __key
/** /**
* @description: * @description:
* @param {func*} get_c * @param {func*} get_c
* @param {func*} put_c * @param {func*} put_c
* @return {*} * @return {*}
@ -67,17 +67,17 @@ int xcmd_key_register(xcmd_key_t* keys, uint16_t number);
/** /**
* @description: next指针可以遍历所有指令 * @description: next指针可以遍历所有指令
* @param {xcmd_key_t*} keys * @param {*}
* @param {uint16_t} number * @param {}
* @return {int} * @return {xcmd_t *}
*/ */
xcmd_t *xcmd_cmdlist_get(void); xcmd_t *xcmd_cmdlist_get(void);
/** /**
* @description: next指针可以遍历所有案件 * @description: next指针可以遍历所有按键
* @param {xcmd_key_t*} keys * @param {*}
* @param {uint16_t} number * @param {}
* @return {int} * @return {xcmd_key_t *}
*/ */
xcmd_key_t *xcmd_keylist_get(void); xcmd_key_t *xcmd_keylist_get(void);
@ -104,11 +104,9 @@ int xcmd_exec(char *str);
/** /**
* @description: * @description:
* @param {char*} str
* @return
*/ */
void xcmd_print(const char *fmt, ...); void xcmd_print(const char *fmt, ...);
void xcmd_put_str(const char *str);
/** /**
* @description: * @description:
@ -150,16 +148,9 @@ char* xcmd_display_get(void);
* @param {char*} * @param {char*}
* @return * @return
*/ */
void xcmd_display_print(const char *msg); void xcmd_display_print(const char *fmt, ...);
void xcmd_display_write(const char* buf, uint16_t len); void xcmd_display_write(const char* buf, uint16_t len);
/**
* @description:
* @param {*}
* @return {*}
*/
char* xcmd_display_line_end(void);
/** /**
* @description: * @description:
* @param {*} * @param {*}
@ -225,6 +216,13 @@ char *xcmd_history_current(void);
*/ */
void xcmd_history_slider_reset(void); void xcmd_history_slider_reset(void);
/**
* @description:
* @param {*}
* @return {*}
*/
char* xcmd_end_of_input(void);
#ifdef __cplusplus #ifdef __cplusplus
} }
#endif #endif

View File

@ -206,8 +206,10 @@ static void xcmd_key_match(char* key)
{ {
if(strcmp(key, p->key) == 0) if(strcmp(key, p->key) == 0)
{ {
p->func(&g_xcmder); if(p->func(&g_xcmder) == 0)
break; {
break;
}
} }
p = p->next; p = p->next;
} }
@ -264,7 +266,7 @@ static uint8_t xcmd_rcv_encode(uint8_t byte)
return ret; return ret;
} }
char* xcmd_display_line_end(void) char* xcmd_end_of_input(void)
{ {
char* ret = g_xcmder.parser.display_line; char* ret = g_xcmder.parser.display_line;
if(g_xcmder.parser.byte_num) if(g_xcmder.parser.byte_num)
@ -313,6 +315,14 @@ static void xcmd_parser(uint8_t byte)
} }
} }
void xcmd_put_str(const char *str)
{
for(uint16_t i=0; str[i]; i++)
{
g_xcmder.io.put_c(str[i]);
};
}
void xcmd_print(const char *fmt, ...) void xcmd_print(const char *fmt, ...)
{ {
char ucstring[XCMD_PRINT_BUF_MAX_LENGTH] = {0}; char ucstring[XCMD_PRINT_BUF_MAX_LENGTH] = {0};
@ -320,35 +330,31 @@ void xcmd_print(const char *fmt, ...)
va_start(arg, fmt); va_start(arg, fmt);
vsnprintf(ucstring, XCMD_PRINT_BUF_MAX_LENGTH, fmt, arg); vsnprintf(ucstring, XCMD_PRINT_BUF_MAX_LENGTH, fmt, arg);
va_end(arg); va_end(arg);
xcmd_put_str(ucstring);
for(uint16_t i=0; ucstring[i]; i++)
{
g_xcmder.io.put_c(ucstring[i]);
};
return;
} }
void xcmd_display_write(const char* buf, uint16_t len) void xcmd_display_write(const char* buf, uint16_t len)
{ {
xcmd_display_clear();
if(len > XCMD_LINE_MAX_LENGTH) if(len > XCMD_LINE_MAX_LENGTH)
{ {
len = XCMD_LINE_MAX_LENGTH; len = XCMD_LINE_MAX_LENGTH;
} }
memcpy(g_xcmder.parser.display_line, buf, len); for(uint16_t i=0; i<len; i++)
g_xcmder.parser.display_line[len] = '\0'; {
xcmd_print(g_xcmder.parser.display_line); xcmd_display_insert_char(buf[i]);
g_xcmder.parser.byte_num = len; }
g_xcmder.parser.cursor = len;
} }
void xcmd_display_print(const char *msg) void xcmd_display_print(const char *fmt, ...)
{ {
xcmd_display_write(msg, strlen(msg)); char ucstring[XCMD_PRINT_BUF_MAX_LENGTH] = {0};
va_list arg;
va_start(arg, fmt);
vsnprintf(ucstring, XCMD_PRINT_BUF_MAX_LENGTH, fmt, arg);
va_end(arg);
xcmd_display_write(ucstring, strlen(ucstring));
} }
char* xcmd_display_get(void) char* xcmd_display_get(void)
{ {
char *line = g_xcmder.parser.display_line; char *line = g_xcmder.parser.display_line;
@ -358,11 +364,13 @@ char* xcmd_display_get(void)
void xcmd_display_clear(void) void xcmd_display_clear(void)
{ {
char *line = xcmd_display_get(); char *line = xcmd_display_get();
xcmd_print(DL(0)); xcmd_put_str("\x1B[0M");
#ifndef XCMD_DEFAULT_PROMPT_CLOLR #ifndef XCMD_DEFAULT_PROMPT_CLOLR
xcmd_print("%s", xcmd_get_prompt()); xcmd_put_str(xcmd_get_prompt());
#else #else
xcmd_print(XCMD_DEFAULT_PROMPT_CLOLR "%s" TX_DEF, xcmd_get_prompt()); xcmd_put_str(XCMD_DEFAULT_PROMPT_CLOLR);
xcmd_put_str(xcmd_get_prompt());
xcmd_put_str(TX_DEF);
#endif #endif
g_xcmder.parser.byte_num = 0; g_xcmder.parser.byte_num = 0;
g_xcmder.parser.cursor = 0; g_xcmder.parser.cursor = 0;

View File

@ -1,7 +1,7 @@
/* /*
* @Author: your name * @Author: your name
* @Date: 2021-09-15 00:11:50 * @Date: 2021-09-15 00:11:50
* @LastEditTime: 2021-10-11 21:38:26 * @LastEditTime: 2021-10-27 09:16:27
* @LastEditors: Please set LastEditors * @LastEditors: Please set LastEditors
* @Description: In User Settings Edit * @Description: In User Settings Edit
* @FilePath: /xcmd/src/xcmd_default_keys.c * @FilePath: /xcmd/src/xcmd_default_keys.c
@ -31,8 +31,8 @@ static int xcmd_del_char(void *pv)
static int xcmd_enter(void *pv) static int xcmd_enter(void *pv)
{ {
char *cmd = xcmd_display_line_end(); char *cmd = xcmd_end_of_input();
xcmd_print(" \n\r"); xcmd_print("\n\r");
if(cmd[0]) if(cmd[0])
{ {
xcmd_exec(cmd); xcmd_exec(cmd);
@ -70,14 +70,12 @@ static int xcmd_cursor_right(void *pv)
static int xcmd_history_dw(void *pv) static int xcmd_history_dw(void *pv)
{ {
char *line = xcmd_history_prev(); char *line = xcmd_history_prev();
xcmd_display_clear();
if(line) if(line)
{ {
xcmd_display_print(line); xcmd_display_print(line);
} }
else
{
xcmd_display_clear();
}
return 0; return 0;
} }
@ -86,6 +84,7 @@ static int xcmd_history_up(void *pv)
char *line = xcmd_history_next(); char *line = xcmd_history_next();
if(line) if(line)
{ {
xcmd_display_clear();
xcmd_display_print(line); xcmd_display_print(line);
} }
return 0; return 0;
@ -133,11 +132,13 @@ static int xcmd_auto_completion(void *pv)
if(match_num == 1) if(match_num == 1)
{ {
xcmd_display_print(match_cmd_first->name); xcmd_display_clear();
xcmd_display_print("%s", match_cmd_first->name);
} }
else if(match_num > 1) else if(match_num > 1)
{ {
xcmd_print("\r\n"); xcmd_print("\r\n");
xcmd_display_clear();
xcmd_display_write(match_cmd_first->name, match_subscript_min); xcmd_display_write(match_cmd_first->name, match_subscript_min);
} }
return 0; return 0;