alecAbstraction Layer for Escape Codes | 
          
| git clone git://git.dimitrijedobrota.com/alec.git | 
| Log | Files | Refs | README | LICENSE | HACKING | CONTRIBUTING | CODE_OF_CONDUCT | BUILDING | 
| commit | 945169ba2c508fb533f155c9915ff6476dfa9ef3 | 
| parent | 970f2676dd7c05d9a8b34e278b2778c2a393d1eb | 
| author | Dimitrije Dobrota < mail@dimitrijedobrota.com > | 
| date | Wed, 5 Feb 2025 10:59:33 +0100 | 
Add function to determine the screen size
| M | CMakeLists.txt | | | + - | 
| M | source/alec.rules.hpp | | | ++++++++++++++++++++++++++ | 
2 files changed, 27 insertions(+), 1 deletions(-)
diff --git a/ CMakeLists.txt b/ CMakeLists.txt
          @@ -4,7 +4,7 @@ 
          include(cmake/prelude.cmake)
        
        
          project(
              alec
              VERSION 0.1.13
              VERSION 0.1.14
              DESCRIPTION "Abstraction Layer for Escape Codes"
              HOMEPAGE_URL "git://git.dimitrijedobrota.com/alec.git"
              LANGUAGES CXX
        
        diff --git a/ source/alec.rules.hpp b/ source/alec.rules.hpp
@@ -8,6 +8,7 @@
#include <stdexcept>
          #include <string>
          #include <sys/ioctl.h>
          #include <termios.h>
          #include <unistd.h>
          
          @@ -386,6 +387,8 @@ 
          enum error_code_t  // NOLINT
        
        
            TERMIOSWR,
            BUFFULL,
            CHARRD,
            IOCTL,
            SCREENSZ
          };
          template<error_code_t e>
        
        
          @@ -411,6 +414,10 @@ 
          private:
        
        
                  return "Buffer is full";
                case error_code_t::CHARRD:
                  return "Can't read character";
                case error_code_t::IOCTL:
                  return "ioctl error";
                case error_code_t::SCREENSZ:
                  return "Can't determine the screen size";
              }
              return "alec error, should not happen...";
        
        
          @@ -533,6 +540,25 @@ 
          inline void dest_buffer()
        
        
            get_buffer().reset();
          }
          inline std::pair<std::uint16_t, std::uint16_t> get_screen_size()
          {
          #ifdef TIOCGSIZE
            struct ttysize tts = {};
            if (ioctl(STDIN_FILENO, TIOCGSIZE, &tts) == -1) {  // NOLINT
              throw error<error_code_t::IOCTL>();
            }
            return {tts.ts_cols, tts.ts_lines};
          #elif defined(TIOCGWINSZ)
            struct winsize tts = {};
            if (ioctl(STDIN_FILENO, TIOCGWINSZ, &tts) == -1) {  // NOLINT
              throw error<error_code_t::IOCTL>();
            }
            return {tts.ws_col, tts.ws_row};
          #endif /* TIOCGSIZE */
            throw error<error_code_t::SCREENSZ>();
          }
          class event
          {
          public: