Emacs 和 Nano 等程序如何在终端中 运行 时获取用户输入而无需用户按回车键?

How do programs like Emacs and Nano get user input while running in terminal without the user having to press enter?

Emacs 和 Nano 等程序可以在终端 window 中 运行 并接受实时用户输入,我自己该如何完成?我正在寻找使用 C++,但我可以看到这可能需要与 bash 接口。如何在用户无需按 enter 键的情况下从终端 window 获取输入(通过鼠标或键盘输入)?

我的目标平台是 Mac OSX 版本 10.13.5,但也欢迎回答如何在 Windows 或 Linux 等其他平台上执行此操作。

这些程序将终端设置为 raw 模式,而不是 cooked 模式。 Cooked模式是一次读一行,由终端驱动处理,raw模式是一次读一个字符,并处理由 运行 程序代替。

This Answer 有更多信息。

This Repo是一个简单的项目,实现了这个模式,你可以借鉴。 man termios 还将为您提供有关操作终端模式的信息。