Getting terminal width in C?

后端 未结 8 662
自闭症患者
自闭症患者 2020-11-22 16:07

I\'ve been looking for a way to get the terminal width from within my C program. What I keep coming up with is something along the lines of:

#include 

        
8条回答
  •  感情败类
    2020-11-22 17:00

    This example is a bit on the lengthy side, but I believe it's the most portable way of detecting the terminal dimensions. This also handles resize events.

    As tim and rlbond suggests, I'm using ncurses. It guarantees a great improvement in terminal compatability as compared to reading environment variables directly.

    #include 
    #include 
    #include 
    
    // SIGWINCH is called when the window is resized.
    void handle_winch(int sig){
      signal(SIGWINCH, SIG_IGN);
    
      // Reinitialize the window to update data structures.
      endwin();
      initscr();
      refresh();
      clear();
    
      char tmp[128];
      sprintf(tmp, "%dx%d", COLS, LINES);
    
      // Approximate the center
      int x = COLS / 2 - strlen(tmp) / 2;
      int y = LINES / 2 - 1;
    
      mvaddstr(y, x, tmp);
      refresh();
    
      signal(SIGWINCH, handle_winch);
    }
    
    int main(int argc, char *argv[]){
      initscr();
      // COLS/LINES are now set
    
      signal(SIGWINCH, handle_winch);
    
      while(getch() != 27){
        /* Nada */
      }
    
      endwin();
    
      return(0);
    }
    

提交回复
热议问题