Rust 的 pancurses 库正在打开一个新终端,而不是在当前终端中运行

sgf*_*gfw 0 pdcurses rust

我希望使用 Rust 中名为“pancurses”的诅咒库开发一个跨平台 CUI,但我在 Windows 中遇到了一个奇怪的问题。由于某种原因,某些新的终端仿真器不是在当前终端仿真器(即 cmd)中运行 CUI,而是打开并运行 CUI,而 stdout 则定向到当前终端。例如,这与我在 python 中的 windows-curses 库中看到的不同,因此我怀疑这是 pancurses、pdcurses 或 rust 编译器中的某种配置选项,但我找不到任何文档这似乎相关。任何帮助表示赞赏。

编辑以包含最小可重现示例(使用 pancurses 0.17):

extern crate pancurses;
use pancurses::{initscr, noecho};

fn main() {
    let window = initscr();
    window.refresh();
    window.keypad(true);
    noecho();

    window.getch();
}
Run Code Online (Sandbox Code Playgroud)

这会产生一个如下所示的终端: 在此输入图像描述

小智 5

pancurses构建于Linux 上的ncurses-rs和 Windows 上的pdcurses-sys之上。

正如pdcurses-sys 和 pancurses 的README中提到的:

PDCurses (Windows) 详细信息
pdcurses-sys 支持两种类型的 PDCurses:win32a 和 win32。win32a是GDI模式,而win32在Windows控制台中运行。win32a 对颜色和文本效果有更好的支持。

要为 pancurses 启用 win32 功能,您可以使用以下命令在 Cargo.toml 文件中配置功能:

$ cargo add pancurses --features win32
Run Code Online (Sandbox Code Playgroud)

或者将其添加到您的 Cargo.toml 中:

[dependencies]
pancurses = { version = "0.17.0", features = ["win32"] }
Run Code Online (Sandbox Code Playgroud)