滚动但在NCurses包裹垫

问题描述 投票:3回答:1

我正在尝试将文本阅读器/伪命令行设为la man,但我很难按照我喜欢的方式滚动文本。起初我在滚动时遇到新文本时遇到了麻烦,但最终我发现垫片会为我修复,我现在正在整合它们。

我的问题是,我怎样才能将文字包裹在垫内?我的程序当前调整大小时会自动刷新,因此将pad定义为具有与终端一样多的列将无法修复所有内容。当我的终端收到KEY_RESIZE时,我可以根据需要让垫自动调整大小吗?不仅仅是显示的尺寸,还有垫的尺寸,这样由于垫的末端,文本被向下推。另外,调整大小仍会保留文本,必要时将其向下移动,或者我是否需要刷新打击垫的内容?

不幸的是,我很难找到具有这些细节的资源,而ncurses中的文档没有详细说明调整pad的大小。

非常感谢!


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

c++ ncurses
1个回答
1
投票

在这种情况下,ncurses不会做你想要的事情:

  • pad就像一个窗口,true,addch将换行 - 但是用于在pad中显示数据的视口不是窗口,并且在pad的右侧包裹不一定与该视口相关。
  • 一旦文本被包装,ncurses将不记得那是什么,并且如果你调整窗口(或填充)的大小,则重新包装文本。
  • 当您只想显示窗口的一部分时,例如,如果屏幕不够大,无法显示您要显示的文本,则垫片非常有用。

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

© www.soinside.com 2019 - 2024. All rights reserved.