【问题标题】:Block terminal input while running a terminal program运行终端程序时阻止终端输入
【发布时间】:2023-12-18 18:59:01
【问题描述】:

当我在终端程序运行时按 Enter 键时,会添加一个新行。我怎样才能禁用它?我不想使用 ncurses。我在 Ubuntu 上。

【问题讨论】:

  • 砍掉用户的手?!
  • 我认为标准 c++ 中没有办法。也许你应该使用 linux 的 API
  • 您需要在终端上禁用本地回显。
  • @ikh:我使用 ANSI 代码来移动光标,所以这样也可以!
  • @n.m:像这样的东西:ttynew.c_lflag &= ~ECHO; ?你能详细说明一下它到底是做什么的吗?

标签: c++ unix terminal


【解决方案1】:

按照 n.m 的提示,我找到了this 并想出了这个:

static struct termios t;
tcgetattr( STDIN_FILENO, &t);
t.c_lflag &= ~ECHO;
tcsetattr( STDIN_FILENO, TCSANOW, &t);

这似乎阻止了终端的所有输入。

【讨论】:

  • 可能还想设置非规范模式或“原始”模式,并自己回显所有正常(非控制)字符。见man termios