作为学期长课程项目的一部分,我们正在编写模型训练系统。其中一部分是用于查看当前状态的监视器界面,以及用于系统命令的键盘输入。获取键盘输入时,我们不应该显示它们。
有没有办法禁止在屏幕上显示输入,或者我如何从键盘流中获取这些输入?
目前使用Ada.Text_IO包并使用Get和Get_Immediate进行测试。
其他
我们不是在为Linux系统开发。我们正在为MaRTE_OS开发基本上可以称为独立终端的东西。这个系统连接到许多硬件板上,其中大部分都是我没见过的,甚至可以告诉你它们的用途。
对于显示器,屏幕将完全填充经常更新的输出(系统的一部分,我有它刷新信息约0.05秒)。没有空间尝试不显示信息,然后向上移动一行(也没有真正一次打印一行,显示类直接打印到col,屏幕上的行所需的内容)
输入不需要输入它的用户检查,因为系统只是想读取它并生成一个要处理的命令(它也有一个错误输入的ERROR命令,除了允许系统循环回等待状态。)
答案 0 :(得分:3)
我不了解Ada,但您可以在unix系统上运行以下命令:
stty -echo
和stty -noecho
。他们切换回声模式。我在许多不同的语言中使用它,它总是有效。
答案 1 :(得分:2)
首先,我要验证要求。我可以看到不重复命令,但取消回声似乎有点用户敌意。或者,如果您的控制台支持VT100 ANSI Escape Sequences,则可以使用其中一个clear line
代码。
答案 2 :(得分:2)
以垃圾邮件建议为基础:
with Ada.Text_Io;
with Ada.Characters.Latin_1;
procedure Bsmain is
Achar : Character := ' ';
Escape: Character renames Ada.Characters.Latin_1.ESC;
begin
Ada.Text_Io.Put (Escape & "[8m"); -- invisible text mode
while Achar /= 'q' loop -- q=quit
Ada.Text_Io.Get (Achar);
Ada.Text_Io.Put (Escape & "[1A"); -- move cursor back up a line
end loop;
Ada.Text_Io.Put (Escape & "[m"); -- restore back to normal text mode
end Bsmain;
答案 3 :(得分:1)
如果您需要访问权限,则可以设置键盘中断,然后您可以“在通行证时将其关闭。”