【问题标题】:get the text in the display with ncurses使用 ncurses 获取显示中的文本
【发布时间】:2010-06-17 19:51:37
【问题描述】:

有什么方法可以取回输出到 ncurses 变量中的字符?

假设我愿意:

printw("test");

那么我希望能够:

somefunc(strbuffer);
printf("%s",strbuffer); // test

我需要一个函数将屏幕上的所有字符取回一个变量,scr_dump get 关闭但输出格式不可读..

【问题讨论】:

  • 答案仍然正确,应该被接受:-)

标签: c ncurses curses


【解决方案1】:

如果您使用 curses 函数(例如 addch、mvaddch、addstr)将内容放在屏幕上,您可以使用 inchstr)和相关函数从屏幕中读取字符(使用 AND 将返回值与 @ 提取它们987654322@).

但是,如果您使用 printf 或任何其他非诅咒方法将文本放在屏幕上(包括对另一个使用诅咒的程序的系统调用),您将无法读取屏幕内容。

Curses 在内部维护当前屏幕内容,而 inchstr 函数使用屏幕的内部表示来查找当前内容。

【讨论】:

    【解决方案2】:

    有两组用于从屏幕检索数据的函数。如果您的 printw 仅使用(如问题中的)表示为 8 位编码(ASCII、POSIX、ISO-8859-1)的文本,那么 inchinchstr 工作:

    • inch 检索单个单元格及其属性
    • inchstr 检索多个单元格及其属性

    或更简单地使用instr 及其变体。这些函数无需额外屏蔽字符的属性即可返回数据。

    但是,如果数据使用多字节编码(例如 UTF-8),则您必须使用不同的接口来检索字符。这些是inchinchstr 的等价物:

    复杂字符是一种结构,X/Open Curses 将其视为不透明的。您必须使用getcchar 从每个单元格的数据中提取数据(例如宽字符字符串)。

    一个(小)更简单的,你可以从一个窗口中读取宽字符字符串信息:

    总而言之,虽然您的应用程序可以将数据作为 char 数组(或单个 chtype 值),但在 UTF-8 环境中,它必须将其检索为 complex字符宽字符。如果您碰巧使用的是 Linux,则通常可以将 wchar_t 视为 Unicode 值。给定数据为 wchar_t 值的数组,您可以使用其他(非诅咒)函数来获取多字节 (UTF-8) 字符串。

    由于问题说的是 ncurses 而不是简单的 curses,因此需要指出使用 ncurses 的应用程序在放置数据的方式上可能与 X/Open Curses 不同屏幕(这会影响您对检索它的期望)。在 ncurses 中,addch(和类似的面向 char 的函数)将处理多字节字符串(如 UTF-8)中的字节,并将结果存储为宽字符。迄今为止,其他 X/Open Curses 实现都没有这样做。其他人将这些字节视为独立的,并可能将它们表示为无效的宽字符。

    顺便说一句,自从 2010 年提出这个问题以来,ncurses 的scr_dump format 已经扩展,使其“可读”。

    【讨论】:

      猜你喜欢
      • 2011-08-14
      • 2013-02-19
      • 1970-01-01
      • 1970-01-01
      • 2023-03-09
      • 1970-01-01
      • 2018-08-16
      • 2011-05-18
      • 2012-07-01
      相关资源
      最近更新 更多