【问题标题】:ncurses terminal sizencurses 终端大小
【发布时间】:2010-12-21 04:22:58
【问题描述】:

如何找到 ncurses 应用程序的终端宽度和高度?

【问题讨论】:

  • @DylanJ,无需将答案放在问题中,尤其是在您接受答案后。

标签: c ncurses


【解决方案1】:

变量 COLS、LINES 在 initscr() 之后被初始化为屏幕尺寸。

来源:NCURSES Programming HOWTO

我不确定它们是否会在调整大小时得到更新。

【讨论】:

    【解决方案2】:

    ncurses 应用程序通常处理SIGWINCH 并使用ioctlTIOCGWINSZ 来获取系统的屏幕大小概念。这可能会被环境变量LINESCOLUMNS 覆盖(参见use_env)。

    鉴于此,当wgetch 返回KEY_RESIZE(响应SIGWINCH)时,ncurses 全局变量LINESCOLS 作为副作用被更新以给出stdscr 的大小(代表整个终端的标准屏幕)。

    您当然可以使用getmaxxgetmaxygetmaxyx 来获得窗口的x 和y 坐标的一个或两个限制。只有最后一个是标准的(并且是可移植的)。

    进一步阅读:

    【讨论】:

      【解决方案3】:

      void getmaxyx(WINDOW *win, int y, int x);我相信...

      另外,这可能会有所帮助...

      Getting terminal width in C?

      【讨论】:

      • 另外:不要忘记某些操作系统有 SIGWINCH,当终端调整大小时,您的进程会收到它...
      • initscr() 将清除屏幕。有什么办法可以获取终端大小而不清屏?
      • 不确定这是真的,因为y & x 不是指针,因此该函数不会向它们复制任何内容。来自mkssoftware.com:“getbegyx() and getmaxyx() macros store the current beginning coordinates and size of the specified window.
      • @afr0ck 正如您的报价所述,这些都是宏,因此 yx 不需要是指针。宏直接作用于给定的变量,不需要复制赋值或指针。
      【解决方案4】:

      我正在使用此代码:

      struct winsize size;
      if (ioctl(0, TIOCGWINSZ, (char *) &size) < 0)
          printf("TIOCGWINSZ error");
      printf("%d rows, %d columns\n", size.ws_row, size.ws_col);
      

      【讨论】:

      • 这不是很ncurses'ish。
      【解决方案5】:

      使用SCR_HSCR_W 怎么样?

      【讨论】:

        猜你喜欢
        • 2016-03-21
        • 1970-01-01
        • 1970-01-01
        • 2013-10-21
        • 1970-01-01
        • 1970-01-01
        • 2018-07-27
        • 2015-05-23
        • 1970-01-01
        相关资源
        最近更新 更多