如何使用 System.Console.ANSI 将字符串包装在转义序列中以使其在终端中着色?

问题描述 投票:0回答:1

在这里我了解了

System.Console.ANSI
,在那个文档页面上我读到了“草莓”风味功能,我读到了它

具有

String
类型,仅包含转义码,可以在输出之前将其添加到任何其他文本位。

这正是我在纯代码中想要的,一种采用

String
并以某种方式将其包装在转义序列中的方法,这样当
String
IO
monad 中找到它的方式并将在终端中打印时,它会被打印成红色。

如何使用上述模块来实现此目的?

单击

Example.hs
链接会出现 404。

haskell functional-programming ansi terminal-emulator ansi-colors
1个回答
0
投票

“草莓”函数是以

Code
后缀结尾的函数。

请注意,它们不会 transform

String
值。它们只是 生成
String
值,当输出到 ANSI 终端时,执行所需的操作(更改颜色、移动光标等)。因此,例如,您可以通过连接代码和纯文本来定义纯
String
值:

redHelloWorld :: String
redHelloWorld
  = setSGRCode [SetColor Foreground Vivid Red]
  ++ "hello world"
  ++ setSGRCode [Reset]

并将其写入控制台

main
或其他
IO
函数:

main :: IO ()
main = do
  putStrLn redHelloWorld

完整的示例程序:

import System.Console.ANSI

redHelloWorld :: String
redHelloWorld
  = setSGRCode [SetColor Foreground Vivid Red]
  ++ "hello world"
  ++ setSGRCode [Reset]

main :: IO ()
main = do
  putStrLn redHelloWorld
© www.soinside.com 2019 - 2024. All rights reserved.