将字符串添加到 window 时 Ncurses 无换行模式

Ncurses no-wrap mode when adding strings to window

我正在使用 waddwstr() 函数向 window 添加字符串,一行接一行,连续多行。我不希望 ncurses 为我自动换行 – 我通过连续调用 waddwstr() 覆盖它们,有时会显示上一行的尾部。 ncurses 可以在到达 window 的右边缘时停止吗?

非包装函数的名称中包含“ch”,例如 wadd_wchstr

非宽接口也是如此waddstr versus waddchstr

然而,wrapping/non-wrapping 函数的不同之处不止于此。它们使用不同的参数类型。环绕函数依赖于通过 wattr_set 等设置的视频属性,而非环绕函数将视频属性与字符数据相结合:

在两种形式之间进行转换可能会很麻烦,因为 X/Open 等没有定义进行转换的函数。

bkgd 的手册页描述了如何将这些视频属性与 背景字符 结合以获得实际显示。

已接受的答案(来自 Dickey 先生)是正确的。但是,“ch”函数不适用于普通的 C 字符串(字节数组)。另一个解决方案是为 waddstr 创建一个包装器,它检查当前光标位置和 window 大小并只打印适合的内容。

例如:

int waddstr_trunc(WINDOW *win, const char *str)
{
  int cur_x, max_x, dummy [[maybe_unused]];
  getyx(win, dummy, cur_x);
  getmaxyx(win, dummy, max_x);
  int w=max_x - cur_x;
  if (w <= 0) return 0;
  char *str2 = strndup(str, w);
  if (str2 == NULL) return 1;
  int rv = waddstr(win, str2);
  free(str2);
  return rv;
}