我想使用ANSI转义序列在Ada中打印样式文本。
这就是我尝试过的:
与Ada.Text_IO;使用Ada.Text_IO;与Ada.Characters.Latin_1;使用Ada.Characters.Latin_1;
程序……
我想在Windows 10上运行它:它不能与DOS控制台或Powershell一起使用。见下图。
批处理文件的工作原理来自 如何在Windows命令行中使用不同的颜色进行回显
我相信这与此处解释的问题有关: 带有Ada的Windows上的UTF-8
源代码 http://tpcg.io/N1wORl 要么 :
with Ada.Text_IO; with Ada.Wide_Text_IO; with Ada.Characters.Latin_1; with Ada.Characters.Wide_Latin_1; pragma Wide_Character_Encoding (Utf8); procedure hello is begin Ada.Text_IO.Put_Line (""); Ada.Text_IO.Put_Line ("Ada.Text_IO"); Ada.Text_IO.Put (Ada.Characters.Latin_1.Percent_Sign); Ada.Text_IO.Put (Ada.Characters.Latin_1.ESC & "[93m" & "Howdy!" & Ada.Characters.Latin_1.ESC & "[0m"); Ada.Text_IO.Put_Line (""); Ada.Text_IO.Put_Line (""); Ada.Text_IO.Put_Line ("Ada.Wide_Text_IO"); Ada.Wide_Text_IO.Set_Output (File => Ada.Wide_Text_IO.Standard_Output); Ada.Wide_Text_IO.Set_Error (File => Ada.Wide_Text_IO.Standard_Error); Ada.Wide_Text_IO.Put (Ada.Characters.Wide_Latin_1.Percent_Sign); Ada.Wide_Text_IO.Put_Line (""); Ada.Wide_Text_IO.Put (Ada.Characters.Wide_Latin_1.ESC & "[93m" & "Howdy!" & Ada.Characters.Wide_Latin_1.ESC & "[0m"); Ada.Text_IO.Put_Line (""); Ada.Text_IO.Put_Line (""); end;
我想通了 - 我太近了!
事实证明,字符序列 \033 是 ASCII转义字符,而不是带内信号的一部分。
\033
这是一个非常简单的修复,使用 ESC 由...定义的字符 Ada.Characters.Latin_1 :
ESC
Ada.Characters.Latin_1
Put_Line (ESC & "[93m" & "Howdy!" & ESC & "[0m");
用橙色文字打印“你好”。