ClickHouse/base/common/setTerminalEcho.cpp

29 lines
716 B
C++
Raw Normal View History

2019-02-02 00:25:12 +00:00
#include <common/setTerminalEcho.h>
2020-12-17 18:08:42 +00:00
#include <common/errnoToString.h>
#include <stdexcept>
#include <cstring>
2018-05-23 18:28:23 +00:00
#include <string>
#include <termios.h>
#include <unistd.h>
2019-02-02 00:25:12 +00:00
void setTerminalEcho(bool enable)
{
/// Obtain terminal attributes,
/// toggle the ECHO flag
/// and set them back.
struct termios tty{};
if (0 != tcgetattr(STDIN_FILENO, &tty))
2020-12-17 18:08:42 +00:00
throw std::runtime_error(std::string("setTerminalEcho failed get: ") + errnoToString(errno));
if (enable)
tty.c_lflag |= ECHO;
else
tty.c_lflag &= ~ECHO;
if (0 != tcsetattr(STDIN_FILENO, TCSANOW, &tty))
2020-12-17 18:08:42 +00:00
throw std::runtime_error(std::string("setTerminalEcho failed set: ") + errnoToString(errno));
}