#pragma once #include #include #include namespace term { inline auto use_unicode() { std::locale unicode( std::locale(), new std::codecvt_utf8_utf16 ); std::cout.imbue(unicode); std::wcout.imbue(unicode); } inline auto size() { struct winsize result{}; ioctl(STDOUT_FILENO, TIOCGWINSZ, &result); //POSIX return std::make_tuple(result.ws_col, result.ws_row); } std::basic_ostream& hr(std::basic_ostream& os) { auto [width, height] = size(); os << std::setfill('-') << std::setw(width) << "\n" << std::setfill(' ') << std::setw(0); return os; } std::basic_ostream& hr(std::basic_ostream& os) { auto [width, height] = size(); os << std::setfill(L'─') << std::setw(width) << "\n" << std::setfill(L' ') << std::setw(0); return os; } }