os: win shell catch ctrl-c
This commit is contained in:
parent
486f268353
commit
06e8ba9f14
|
@ -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 @@
|
||||||
#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) {
|
||||||
|
|
||||||
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() {
|
||||||
|
|
||||||
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() {
|
||||||
|
|
||||||
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[]) {
|
||||||
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() {
|
||||||
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) {
|
||||||
} 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;
|
||||||
|
|
Loading…
Reference in New Issue