blob: c53494fe9a0cd81ec7e78081d5482a8a0a6b41d8 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
|
#include <unistd.h>
#include <sys/ioctl.h>
#if defined(OS_SUNOS)
# include <sys/termios.h>
#endif
#include <Common/Exception.h>
#include <Common/TerminalSize.h>
#include <boost/program_options.hpp>
namespace DB::ErrorCodes
{
extern const int SYSTEM_ERROR;
}
uint16_t getTerminalWidth()
{
struct winsize terminal_size {};
if (isatty(STDIN_FILENO))
{
if (ioctl(STDIN_FILENO, TIOCGWINSZ, &terminal_size))
DB::throwFromErrno("Cannot obtain terminal window size (ioctl TIOCGWINSZ)", DB::ErrorCodes::SYSTEM_ERROR);
}
else if (isatty(STDERR_FILENO))
{
if (ioctl(STDERR_FILENO, TIOCGWINSZ, &terminal_size))
DB::throwFromErrno("Cannot obtain terminal window size (ioctl TIOCGWINSZ)", DB::ErrorCodes::SYSTEM_ERROR);
}
/// Default - 0.
return terminal_size.ws_col;
}
po::options_description createOptionsDescription(const std::string & caption, uint16_t terminal_width)
{
unsigned line_length = po::options_description::m_default_line_length;
unsigned min_description_length = line_length / 2;
std::string longest_option_desc = "--http_native_compression_disable_checksumming_on_decompress";
line_length = std::max(static_cast<uint16_t>(longest_option_desc.size()), terminal_width);
min_description_length = std::min(min_description_length, line_length - 2);
return po::options_description(caption, line_length, min_description_length);
}
|