未验证 提交 96cd039f 编写于 作者: H Haojun Liao 提交者: GitHub

Merge pull request #7029 from taosdata/fix/TD-5533

[TD-5533]<feature>:add 'ctrl+u' and 'ctrl+k' shortcut for taosshell
...@@ -35,6 +35,8 @@ struct Command { ...@@ -35,6 +35,8 @@ struct Command {
}; };
extern void backspaceChar(Command *cmd); extern void backspaceChar(Command *cmd);
extern void clearLineBefore(Command *cmd);
extern void clearLineAfter(Command *cmd);
extern void deleteChar(Command *cmd); extern void deleteChar(Command *cmd);
extern void moveCursorLeft(Command *cmd); extern void moveCursorLeft(Command *cmd);
extern void moveCursorRight(Command *cmd); extern void moveCursorRight(Command *cmd);
......
...@@ -102,6 +102,28 @@ void backspaceChar(Command *cmd) { ...@@ -102,6 +102,28 @@ void backspaceChar(Command *cmd) {
} }
} }
void clearLineBefore(Command *cmd) {
assert(cmd->cursorOffset <= cmd->commandSize && cmd->endOffset >= cmd->screenOffset);
clearScreen(cmd->endOffset + prompt_size, cmd->screenOffset + prompt_size);
memmove(cmd->command, cmd->command + cmd->cursorOffset,
cmd->commandSize - cmd->cursorOffset);
cmd->commandSize -= cmd->cursorOffset;
cmd->cursorOffset = 0;
cmd->screenOffset = 0;
cmd->endOffset = cmd->commandSize;
showOnScreen(cmd);
}
void clearLineAfter(Command *cmd) {
assert(cmd->cursorOffset <= cmd->commandSize && cmd->endOffset >= cmd->screenOffset);
clearScreen(cmd->endOffset + prompt_size, cmd->screenOffset + prompt_size);
cmd->commandSize -= cmd->endOffset - cmd->cursorOffset;
cmd->endOffset = cmd->cursorOffset;
showOnScreen(cmd);
}
void deleteChar(Command *cmd) { void deleteChar(Command *cmd) {
assert(cmd->cursorOffset <= cmd->commandSize && cmd->endOffset >= cmd->screenOffset); assert(cmd->cursorOffset <= cmd->commandSize && cmd->endOffset >= cmd->screenOffset);
......
...@@ -238,10 +238,16 @@ int32_t shellReadCommand(TAOS *con, char *command) { ...@@ -238,10 +238,16 @@ int32_t shellReadCommand(TAOS *con, char *command) {
updateBuffer(&cmd); updateBuffer(&cmd);
} }
break; break;
case 11: // Ctrl + K;
clearLineAfter(&cmd);
break;
case 12: // Ctrl + L; case 12: // Ctrl + L;
system("clear"); system("clear");
showOnScreen(&cmd); showOnScreen(&cmd);
break; break;
case 21: // Ctrl + U
clearLineBefore(&cmd);
break;
} }
} else if (c == '\033') { } else if (c == '\033') {
c = getchar(); c = getchar();
......
...@@ -238,10 +238,16 @@ int32_t shellReadCommand(TAOS *con, char *command) { ...@@ -238,10 +238,16 @@ int32_t shellReadCommand(TAOS *con, char *command) {
updateBuffer(&cmd); updateBuffer(&cmd);
} }
break; break;
case 11: // Ctrl + K;
clearLineAfter(&cmd);
break;
case 12: // Ctrl + L; case 12: // Ctrl + L;
system("clear"); system("clear");
showOnScreen(&cmd); showOnScreen(&cmd);
break; break;
case 21: // Ctrl + U;
clearLineBefore(&cmd);
break;
} }
} else if (c == '\033') { } else if (c == '\033') {
c = (char)getchar(); c = (char)getchar();
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册