should be it
This commit is contained in:
122
external/duckdb/tools/shell/linenoise/include/terminal.hpp
vendored
Normal file
122
external/duckdb/tools/shell/linenoise/include/terminal.hpp
vendored
Normal file
@@ -0,0 +1,122 @@
|
||||
//===----------------------------------------------------------------------===//
|
||||
// DuckDB
|
||||
//
|
||||
// terminal.hpp
|
||||
//
|
||||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "duckdb/common/common.hpp"
|
||||
|
||||
namespace duckdb {
|
||||
|
||||
enum KEY_ACTION {
|
||||
KEY_NULL = 0, /* NULL */
|
||||
CTRL_A = 1, /* Ctrl+a */
|
||||
CTRL_B = 2, /* Ctrl-b */
|
||||
CTRL_C = 3, /* Ctrl-c */
|
||||
CTRL_D = 4, /* Ctrl-d */
|
||||
CTRL_E = 5, /* Ctrl-e */
|
||||
CTRL_F = 6, /* Ctrl-f */
|
||||
CTRL_G = 7, /* Ctrl-g */
|
||||
CTRL_H = 8, /* Ctrl-h */
|
||||
TAB = 9, /* Tab */
|
||||
CTRL_J = 10, /* Ctrl+j*/
|
||||
CTRL_K = 11, /* Ctrl+k */
|
||||
CTRL_L = 12, /* Ctrl+l */
|
||||
ENTER = 13, /* Enter */
|
||||
CTRL_N = 14, /* Ctrl-n */
|
||||
CTRL_O = 15, /* Ctrl-O */
|
||||
CTRL_P = 16, /* Ctrl-p */
|
||||
CTRL_R = 18, /* Ctrl-r */
|
||||
CTRL_S = 19, /* Ctrl-s */
|
||||
CTRL_T = 20, /* Ctrl-t */
|
||||
CTRL_U = 21, /* Ctrl+u */
|
||||
CTRL_W = 23, /* Ctrl+w */
|
||||
CTRL_X = 24, /* Ctrl+x */
|
||||
CTRL_Y = 25, /* Ctrl+y */
|
||||
CTRL_Z = 26, /* Ctrl+z */
|
||||
ESC = 27, /* Escape */
|
||||
BACKSPACE = 127 /* Backspace */
|
||||
};
|
||||
|
||||
enum class EscapeSequence {
|
||||
INVALID = 0,
|
||||
UNKNOWN = 1,
|
||||
CTRL_MOVE_BACKWARDS,
|
||||
CTRL_MOVE_FORWARDS,
|
||||
HOME,
|
||||
END,
|
||||
UP,
|
||||
DOWN,
|
||||
RIGHT,
|
||||
LEFT,
|
||||
DELETE,
|
||||
SHIFT_TAB,
|
||||
ESCAPE,
|
||||
ALT_A,
|
||||
ALT_B,
|
||||
ALT_C,
|
||||
ALT_D,
|
||||
ALT_E,
|
||||
ALT_F,
|
||||
ALT_G,
|
||||
ALT_H,
|
||||
ALT_I,
|
||||
ALT_J,
|
||||
ALT_K,
|
||||
ALT_L,
|
||||
ALT_M,
|
||||
ALT_N,
|
||||
ALT_O,
|
||||
ALT_P,
|
||||
ALT_Q,
|
||||
ALT_R,
|
||||
ALT_S,
|
||||
ALT_T,
|
||||
ALT_U,
|
||||
ALT_V,
|
||||
ALT_W,
|
||||
ALT_X,
|
||||
ALT_Y,
|
||||
ALT_Z,
|
||||
ALT_BACKSPACE,
|
||||
ALT_LEFT_ARROW,
|
||||
ALT_RIGHT_ARROW,
|
||||
ALT_BACKSLASH,
|
||||
};
|
||||
|
||||
struct TerminalSize {
|
||||
int ws_col = 0;
|
||||
int ws_row = 0;
|
||||
};
|
||||
|
||||
class Terminal {
|
||||
public:
|
||||
static int IsUnsupportedTerm();
|
||||
static int EnableRawMode();
|
||||
static void DisableRawMode();
|
||||
static bool IsMultiline();
|
||||
static void SetMultiLine(int ml);
|
||||
|
||||
static void ClearScreen();
|
||||
static void Beep();
|
||||
|
||||
static bool IsAtty();
|
||||
static int HasMoreData(int fd);
|
||||
static TerminalSize GetTerminalSize();
|
||||
|
||||
static char *EditNoTTY();
|
||||
static int EditRaw(char *buf, size_t buflen, const char *prompt);
|
||||
|
||||
static EscapeSequence ReadEscapeSequence(int ifd);
|
||||
|
||||
private:
|
||||
static TerminalSize TryMeasureTerminalSize();
|
||||
static TerminalSize GetCursorPosition();
|
||||
static idx_t ReadEscapeSequence(int ifd, char sequence[]);
|
||||
};
|
||||
|
||||
} // namespace duckdb
|
||||
Reference in New Issue
Block a user