鼠标向上滚动(Ncurses / C++)
Posted
技术标签:
【中文标题】鼠标向上滚动(Ncurses / C++)【英文标题】:Mouse scroll Up (Ncurses / C++) 【发布时间】:2017-02-21 00:02:17 【问题描述】:我的问题是我不知道如何使用 ncurses5 和鼠标事件向下和向上滚动。
我知道这是 ncurses5.6+ 的一个功能,但我不知道我是否可以从打包者那里获得这个版本。
即使我能得到它,zsh、bash、sh 等在每个终端上都能很好地滚动(如何?),这是硬件功能吗?我可以在我的 c++ 程序中获得我自己的库而不添加比 ncurses、c 标准和 std 更多的库吗?
此代码适用于向下滚动,但在我尝试集成 BUTTON5_PRESSED 时无法编译(因为我的 ncurses 版本)。
等等,实际上我可以处理向下滚动,但不能处理向上滚动。有没有办法处理这两者?
// mouse event structure
MEVENT event;
if (getmouse(&event) == OK)
printw("mouse Event OK");
if (event.bstate & BUTTON4_PRESSED)
wprintw(_win, "Button4\n");
else if (event.bstate & BUTTON5_PRESSED) // does not compile
wprintw(_win, "Button5\n");
我的实际代码托管在 github https://github.com/Liroo/Nanotekspice/blob/master/lib/cli/mode/NcursesMode.cpp,如果你有动力就去看看吧! (顺便说一句,使用它和这个命令来获取 ncurses 格式:./nanotekspice resources/basics/test.nts c=1 --mode=ncurses
)
【问题讨论】:
不要垃圾标签。 C 不是 C++ 不是 C! 这种行为可以用 c 和 c++ 编码...我认为我可以同时使用这两个标签 当然,我不会重现这个错误。 @toohonestforthissite 在这种情况下你是不对的。该代码对 C 和 C++ 都有效,最重要的是,同一个包含的库适用于两种语言。在这种情况下使用这两个标签是完全有效的。此外,尽管它是一个.cpp
示例文件,但我怀疑更多的 C 用户会熟悉 ncurses
【参考方案1】:
简短:不,没有解决方法
长—— 滚轮鼠标(按照惯例)发送 button-4 和 button-5 用于向上/向下事件。 ncurses5 不为这两个按钮提供编码。这是 ncurses6 (August 2015) 的标准扩展(来自 September 2005):
这些说明适用于 2015 年 8 月 8 日发布的 ncurses 6.0。
此版本旨在与 ncurses 5.0 到 5.9 源代码兼容;提供新的应用程序二进制接口 (ABI)。虽然源代码仍然可以配置为支持 ncurses 5 ABI,但发布的目的是提供通常有用但与 ncurses 5 二进制不兼容的扩展:
扩展 cchar_t 结构以允许编码超过 16 种颜色。
修改鼠标状态的编码,为第 5 个鼠标按钮腾出空间。这样就可以将 ncurses 与带有 xterm 或类似 X 终端仿真器的滚轮鼠标一起使用。
进一步阅读:
Symbol-versioning in ncurses【讨论】:
感谢您的信息,您知道 apt-get / zypper 上是否有支持此功能的 ncurses 包吗? 软件包名称中包含“ncurses6”或“ncurses-6.0”的任何内容。Debian 在测试中已经这样做了大约一年。我不确定 OpenSUSE...以上是关于鼠标向上滚动(Ncurses / C++)的主要内容,如果未能解决你的问题,请参考以下文章