在 NCurses 中滚动但包裹垫

Scrolling but wrapped pad in NCurses

我正在尝试使文本 reader/pseudo-command-line 变成 la man,但我很难让文本按我希望的方式滚动。起初我在滚动时无法显示新文本,但最终我发现垫可以为我解决这个问题,我目前正在整合它们。

我的问题是,如何让文本在便笺簿中换行?我的程序当前在调整大小时会自动刷新,因此将 pad 定义为具有与终端一样多的列并不能解决所有问题。当我的终端收到 KEY_RESIZE 时,我能否让 pad 根据需要自动调整大小?不仅是显示的大小,还有 pad 的大小,这样文本就会由于 pad 的末端而被向下推一行。此外,调整它的大小是否仍会保留文本,必要时将其向下移动,还是我需要刷新便笺簿的内容?

不幸的是,我无法找到包含这些细节的资源,而且 ncurses 中的文档没有详细说明调整 pad 大小的行为。

非常感谢!


回答后编辑:ncurses 不会这样做,所以我将尝试制作一些字符串数组,一个用于存储文件中的文本(在 \n 处损坏),另一个对于换行(在 KEY_RESIZE 上刷新,每个字符串都有终端行的最大长度),其中的一部分根据滚动位置等打印到正文 window。我正在进行此编辑,以便将来看到此问题的任何其他人都可以看到我的解决方案。我还没有这样做,所以如果失败我会再次编辑。再次感谢 Stack Overflow 的帮助!

在这种情况下,ncurses 不会执行您想要的操作:

  • A pad 就像 window,是的,并且 addch 会换行——但是 您用来在 pad 中显示数据的 viewport 不是 window,pad 右侧的环绕不一定与该视口相关。
  • 文本换行后,ncurses 将不会记住那是什么,如果您调整 window(或 pad)的大小,则重新换行文本。
  • 当您只想显示 window 的一部分时,例如,如果屏幕不够大,无法显示您要显示的文本,便笺簿主要有用。

如果你想调整大小和重新换行,你的程序应该允许重写 window 中的所有文本(按照你的意图布局)而不是依赖 ncurses 来决定如何重新包装文本。