14std::optional<std::size_t> width_from_columns_env()
16 const char *columns = std::getenv(
"COLUMNS");
17 if (columns ==
nullptr) {
21 std::size_t consumed = 0;
22 const long value = std::stol(std::string{columns}, &consumed);
24 if (consumed == std::string{columns}.size() && value > 0) {
25 return static_cast<std::size_t
>(value);
35std::optional<std::size_t> width_from_ioctl(
const int fd)
38 if (ioctl(fd, TIOCGWINSZ, &ws) == 0 && ws.ws_col > 0) {
39 return static_cast<std::size_t
>(ws.ws_col);
50 if (
const auto from_env = width_from_columns_env()) {
53 if (
const auto from_ioctl = width_from_ioctl(fd)) {
std::size_t resolve_terminal_width(int fd, std::size_t fallback=80)
Resolves the column width to use for wrapping diagnostic output on fd.