未验证 提交 a3a1545b 编写于 作者: wafwerar's avatar wafwerar 提交者: GitHub

Merge pull request #14298 from taosdata/fix/ZhiqiangWang/TD-16357-win-shell-catch-ctrl-c

os: win shell catch ctrl-c
...@@ -29,6 +29,9 @@ extern "C" { ...@@ -29,6 +29,9 @@ extern "C" {
#define tcgetattr TCGETATTR_FUNC_TAOS_FORBID #define tcgetattr TCGETATTR_FUNC_TAOS_FORBID
#endif #endif
#define TAOS_CONSOLE_PROMPT_HEADER "taos> "
#define TAOS_CONSOLE_PROMPT_CONTINUE " -> "
typedef struct TdCmd *TdCmdPtr; typedef struct TdCmd *TdCmdPtr;
TdCmdPtr taosOpenCmd(const char* cmd); TdCmdPtr taosOpenCmd(const char* cmd);
......
...@@ -18,6 +18,10 @@ ...@@ -18,6 +18,10 @@
#include "os.h" #include "os.h"
#if defined(WINDOWS) #if defined(WINDOWS)
BOOL WINAPI CtrlHandler(DWORD fdwCtrlType) {
printf("\n" TAOS_CONSOLE_PROMPT_HEADER);
return TRUE;
}
#elif defined(_TD_DARWIN_64) #elif defined(_TD_DARWIN_64)
#else #else
#include <dlfcn.h> #include <dlfcn.h>
...@@ -124,7 +128,7 @@ int taosSetConsoleEcho(bool on) { ...@@ -124,7 +128,7 @@ int taosSetConsoleEcho(bool on) {
void taosSetTerminalMode() { void taosSetTerminalMode() {
#if defined(WINDOWS) #if defined(WINDOWS)
// assert(0); SetConsoleCtrlHandler(CtrlHandler, TRUE);
#else #else
struct termios newtio; struct termios newtio;
...@@ -158,7 +162,6 @@ void taosSetTerminalMode() { ...@@ -158,7 +162,6 @@ void taosSetTerminalMode() {
int32_t taosGetOldTerminalMode() { int32_t taosGetOldTerminalMode() {
#if defined(WINDOWS) #if defined(WINDOWS)
// assert(0);
#else #else
/* Make sure stdin is a terminal. */ /* Make sure stdin is a terminal. */
if (!isatty(STDIN_FILENO)) { if (!isatty(STDIN_FILENO)) {
...@@ -176,7 +179,7 @@ int32_t taosGetOldTerminalMode() { ...@@ -176,7 +179,7 @@ int32_t taosGetOldTerminalMode() {
void taosResetTerminalMode() { void taosResetTerminalMode() {
#if defined(WINDOWS) #if defined(WINDOWS)
// assert(0); SetConsoleCtrlHandler(CtrlHandler, FALSE);
#else #else
if (tcsetattr(0, TCSANOW, &oldtio) != 0) { if (tcsetattr(0, TCSANOW, &oldtio) != 0) {
fprintf(stderr, "Fail to reset the terminal properties!\n"); fprintf(stderr, "Fail to reset the terminal properties!\n");
......
...@@ -339,8 +339,8 @@ int32_t shellParseArgs(int32_t argc, char *argv[]) { ...@@ -339,8 +339,8 @@ int32_t shellParseArgs(int32_t argc, char *argv[]) {
shell.info.clientVersion = shell.info.clientVersion =
"Welcome to the TDengine shell from %s, Client Version:%s\n" "Welcome to the TDengine shell from %s, Client Version:%s\n"
"Copyright (c) 2022 by TAOS Data, Inc. All rights reserved.\n\n"; "Copyright (c) 2022 by TAOS Data, Inc. All rights reserved.\n\n";
shell.info.promptHeader = "taos> "; shell.info.promptHeader = TAOS_CONSOLE_PROMPT_HEADER;
shell.info.promptContinue = " -> "; shell.info.promptContinue = TAOS_CONSOLE_PROMPT_CONTINUE;
shell.info.promptSize = 6; shell.info.promptSize = 6;
snprintf(shell.info.programVersion, sizeof(shell.info.programVersion), "version: %s", version); snprintf(shell.info.programVersion, sizeof(shell.info.programVersion), "version: %s", version);
......
...@@ -411,8 +411,9 @@ char taosGetConsoleChar() { ...@@ -411,8 +411,9 @@ char taosGetConsoleChar() {
static char mbStr[5]; static char mbStr[5];
static unsigned long bufLen = 0; static unsigned long bufLen = 0;
static uint16_t bufIndex = 0, mbStrIndex = 0, mbStrLen = 0; static uint16_t bufIndex = 0, mbStrIndex = 0, mbStrLen = 0;
if (bufLen == 0) { while (bufLen == 0) {
ReadConsoleW(console, buf, SHELL_INPUT_MAX_COMMAND_SIZE, &bufLen, NULL); ReadConsoleW(console, buf, SHELL_INPUT_MAX_COMMAND_SIZE, &bufLen, NULL);
if (bufLen > 0 && buf[0] == 0) bufLen = 0;
bufIndex = 0; bufIndex = 0;
} }
if (mbStrLen == 0){ if (mbStrLen == 0){
...@@ -466,6 +467,8 @@ int32_t shellReadCommand(char *command) { ...@@ -466,6 +467,8 @@ int32_t shellReadCommand(char *command) {
} else if (c < '\033') { } else if (c < '\033') {
// Ctrl keys. TODO: Implement ctrl combinations // Ctrl keys. TODO: Implement ctrl combinations
switch (c) { switch (c) {
case 0:
break;
case 1: // ctrl A case 1: // ctrl A
shellPositionCursorHome(&cmd); shellPositionCursorHome(&cmd);
break; break;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册