vscode 调试控制台

Windows 终端

Dart 的控制台/终端文本着色和样式库

‘终端字符串样式尽善尽美’

我为我的 Dart/Flutter 开发日志创建这个已有近两年了,我终于花了时间对其进行清理并发布了一个包。在此期间,我为 Visual Studio Code 调试控制台添加了完整的 ANSI 支持,并刚刚完成了 Dart-Pad 控制台的完整 ANSI 支持。您可以在 VSCode 调试器中使用它来实现今天多彩、风格化的日志记录。?

查看 example/chalkdart_example.dart 以获取有关其功能的一些酷炫示例。

如果您使用过 npm/node.js 环境中的 Chalk.js 包,您就会知道它使文本着色和样式化变得多么方便!这个 ChalkDart 版本基本上可以与 js 版本完全相同地使用。

完整的 API Dart 文档可以在 这里找到

ChalkDart API 文档

功能和 Bug

请在 问题跟踪器 上提交功能请求和 Bug。

亮点

  • 富有表现力的 API
  • 高性能
  • 能够嵌套样式
  • 支持动态参数列表,并自动处理 Maps、Lists、Iterables 和 Function 闭包的打印
  • 256 色/真彩色支持
  • 可以通过名称访问所有标准的 X11/CSS/SVG 颜色。
  • 忽略自动检测到的 ANSI 颜色支持/因为常见的 Dart/Flutter IDE 会不正确地报告此项。
  • 不是 String 类的扩展。
  • 简洁专注
  • 积极维护

安装

$ dart pub add chalkdart

用法

import 'package:chalkdart/chalk.dart';

print(chalk.yellow.onBlue('Hello world!'));

Chalk 提供了一个易于使用的可组合 API,您只需链接和嵌套所需的样式即可。

import 'package:chalkdart/chalk.dart';

// Combine styled and normal strings
print(chalk.blue('Hello') + ' World' + chalk.red('!'));

// Compose multiple styles using the chainable API
print(chalk.blue.onRed.bold('Hello world!'));

// Pass in multiple arguments
print(chalk.blue('Hello', 'World!', 'Foo', 'bar', 'biz', 'baz'));

// Nest styles
print(chalk.red('Hello', chalk.underline.bgBlue('world') + '!'));

// Nest styles of the same type even (color, underline, background)
print(chalk.green(
     'I am a green line ' +
     chalk.blue.underline.bold('with a blue substring') +
     ' that becomes green again!'
));

// use in multiline string with interpolation
print('''
      CPU: ${chalk.red('90%')}
      RAM: ${chalk.green('40%')}
      DISK: ${chalk.yellow('70%')}
   ''');

// or with inline calcs
print('''
CPU: ${chalk.red(cpu.totalPercent)}%
RAM: ${chalk.green((ram.used / ram.total * 100))}%
DISK: ${chalk.rgb(255,131,0)((disk.used / disk.total * 100))}%
''');

// Use RGB colors in debug console or terminals that support it.
print(chalk.keyword('orange')('Yay for orange colored text!'));
print(chalk.rgb(123, 45, 67).underline('Underlined reddish color'));
print(chalk.hex('#DEADED').bold('Bold gray!'));

轻松定义您自己的主题

import 'package:chalkdart/chalk.dart';

const error = chalk.bold.red;
const warning = chalk.keyword('orange');

print(error('Error!'));
print(warning('Warning!'));

const name = 'Tim Maffett';
print(chalk.green('Hello $name'));

//=> ‘你好 Tim Maffett’

API

chalk.<style>[.<style>...](string, [string...])

示例:chalk.red.bold.underline('Hello', 'world');

链接 样式,并将最后一个样式调用为一个带字符串参数的方法。顺序无关紧要,在发生冲突时,后面的样式会优先。这仅仅意味着 chalk.red.yellow.green 等同于 chalk.green

可以使用字符串插值,或者列出多个参数,它们将用空格(或 joinWith 指定的字符串)分隔。参数可以是任何类型,Map<>、List<>、Iterable 和 Functions/Function 闭包也受支持。默认情况下,列表会用空格连接在一起,但可以使用 joinWith 方法指定不同的连接字符串。最多可以包含 15 个参数作为 Chalk 对象的参数。

样式

修饰符

  • reset – 重置当前颜色链。
  • blink – 使文本闪烁。
  • rapidblink – 使文本快速闪烁。
  • bold – 使文本加粗。
  • dim – 只发射少量光。
  • italic – 使文本倾斜。
  • underline – 使文本加下划线。
  • doubleunderline – 更粗的文本下划线。
  • overline – 使文本加顶线。
  • inverse (或 invert) – 反转前景色和背景色。
  • hidden – 打印文本,但使其不可见。
  • superscript – 使文本变为上标。
  • subscript – 使文本变为下标。
  • strikethrough – 在文本中间画一条水平线。
  • visible – 仅当 Chalk 的颜色级别 > 0 时打印文本。对于纯粹美学的东西可能很有用。
  • font1font10 – 更改字体

其中一些 ANSI 样式在所有终端模拟器中并不普遍支持,但我已为标准的 Visual Studio Code 调试控制台以及 Dart-Pad 控制台添加了完整的支持。Android Studio 也在其调试控制台中具有相当完整的支持。有关如何使用 CSS 将字体映射到 font1font10 的信息,请参阅 VSCode 部分。

颜色

基本 ANSI 颜色的确切 RGB 值取决于控制台/终端的渲染 — 并且可以在某些终端(如 Windows 终端)上进行配置 — 更多信息请参见此处

我包含了原始 JS Chalk 的 ‘xxxxBright’ 方法名称,以供可能需要与原始 JS Chalk 兼容的用户使用。

  • 黑色
  • 红色
  • 绿色
  • 黄色
  • 蓝色
  • 品红色
  • 青色
  • 白色
  • brightBlack      (别名 blackBright, gray, grey)
  • brightRed          (别名 redBright)
  • brightGreen      (别名 greenBright)
  • brightYellow     (别名 yellowBright)
  • brightBlue          (别名 blueBright)
  • brightMagenta    (别名 magentaBright)
  • brightCyan          (别名 cyanBright)
  • brightWhite        (别名 whiteBright)

背景色

它们通过在颜色前加上“on”来命名。Chalk’Dart 倾向于使用“onXXXXX”风格来指定背景色,因为动词“on”使得链式方法读起来更像一个句子(这是 Dart 的方式)。我包含了原始 Chalk 的 ‘bgXXXX’ 方法名称,以供可能偏爱该方案的用户使用(本质上是为了与原始 JS Chalk 的兼容性)。

例如,“onBlue”和“bgBlue”是相同的,这取决于用户如何阅读他们的代码。

  • onBlack      (别名 bgBlack)
  • onRed          (别名 bgRed)
  • onGreen      (别名 bgGreen)
  • onYellow     (别名 bgYellow)
  • onBlue         (别名 bgBlue)
  • onMagenta   (别名 bgMagenta)
  • onCyan         (别名 bgCyan)
  • onWhite       (别名 bgWhite)
  • onBrightBlack / onGray / onGrey      (别名:bgBlackBright, bgGray, bgGrey)
  • onBrightRed            (别名 bgRedBright)
  • onBrightGreen        (别名 bgGreenBright)
  • onBrightYellow      (别名 bgYellowBright)
  • onBrightBlue          (别名 bgBlueBright)
  • onBrightMagenta    (别名 bgMagentaBright)
  • onBrightCyan          (别名 bgCyanBright)
  • onBrightWhite        (别名 bgWhiteBright)

256 色和真彩色支持

Chalk 支持 256 色和 真彩色(1600 万色),支持这些颜色的终端应用程序。

颜色会从 1600 万 RGB 值降采样到终端模拟器支持的 ANSI 颜色格式(或通过指定 {level: n} 作为 Chalk 选项)。例如,配置为运行在级别 1(基本颜色支持)的 Chalk 会将 RGB 值 #FF0000(红色)降采样到 31(ANSI 红色转义码)。

示例

  • chalk.hex('#DEADED').underline('Hello, world!')
  • chalk.keyword('orange')('一些橙色文本')
  • chalk.rgb(15, 100, 204).inverse('Hello!')

这些模型的背景版本以 bg 开头,并且模块的第一级大写(例如,前景色为 keyword,背景色为 bgKeyword)。

  • chalk.onHex('#DEADED').underline('Hello, world!')
  • chalk.onKeyword('orange')('一些橙色文本')
  • chalk.onRgb(15, 100, 204).inverse('Hello!')

可以使用以下颜色模型

  • rgb – 示例:chalk.rgb(255, 136, 0).bold('Orange!')

  • hex – 示例:chalk.hex('#FF8800').bold('Orange!')

  • hsl – 示例:chalk.hsl(32, 100, 50).bold('Orange!')

  • hsv – 示例:chalk.hsv(32, 100, 100).bold('Orange!')

  • hwb – 示例:chalk.hwb(32, 0, 50).bold('Orange!')

  • xyz – 示例:chalk.xyz(0.9, 0.9, 0.1).bold('Yellow!')

  • lab – 示例:chalk.lab(85, 0, 108).bold('yellow-Orange!')

  • ansi – 示例:chalk.ansi(31).bgAnsi(93)('红底黄字')

  • ansi256 – 示例:chalk.onAnsi256(194)('蜜瓜色,差不多')

  • keyword (X11/CSS/SVG 颜色关键字) – 示例:chalk.cornFlowerBlue.onBeigechalk.keyword('orange').bold('Orange!') 关键字表可以通过.来扩展,并且可以通过.访问新关键字。

Chalk.addColorKeywordHex('myfavorite', 0x6495ED ); // using hex int
chalk.color.myfavorite('This is my favorite color');
Chalk.addColorKeywordHex('my2ndFavorite', '#6A5ACD' );  // or using string
chalk.color.my2ndfavorite('This is my 2nd favorite color');

或者

chalk.keyword('myfavorite)('Using the keyword() method');
chalk.color.my2ndfavorite('This is my 2nd favorite color');

或导入 X11 扩展方法以获得每个 X11/CSS/SVG 颜色名称的正确方法。通过此,您可以获得可用颜色的代码完成以及颜色名称的编译时检查。

import 'package:chalkdart/chalk.dart';
import 'package:chalkdart/chalk_x11.dart'; // get methods for x11/css/svg color name keywords

chalk.cornflowerBlue.onLimeGreen('Hey there!);

// without extension methods you can use the dynamic keyword lookup method:
chalk.color.cornflowerBlue.onLimeGreen('Hi Again!);
// or off x11
chalk.x11.cornflowerBlue.onLimeGreen('Hi Again!);
// or off csscolor
chalk.csscolor.cornflowerBlue.onLimeGreen('Hi Again!);

chalk.level

指定颜色支持的级别。

颜色支持会自动检测,但您可以覆盖它通过设置 level 属性。但是,您应该只在自己的代码中执行此操作,因为它会全局应用于所有 Chalk 用户。请注意,Dart 会确定 VSCode 调试控制台和 Android Studio 调试控制台不支持 ANSI 控制序列,而实际上它们支持,因此默认情况下级别设置为 3(完整颜色/序列支持),无论控制台/终端报告什么。如果您想要一个不同的值,则必须自己设置。

如果您需要在可重用模块中更改此设置,请创建一个新实例

var chalkWithLevel0 = chalk.instance(level: 0);
// this version is provided for users of the JS version of Chalk
var chalkWithLevel0 = chalk.Instance(level: 0);
级别 描述
0 禁用所有颜色
1 基本颜色支持(16 色)
2 256 色支持
3 真彩色支持(1600 万色)

IDE 支持

Android Studio、IntelliJ 和 Visual Studio Code 的当前版本的终端和调试控制台支持 24 位/1600 万色 ANSI 代码和大多数属性。但是,它们都报告它们*不*支持 ANSI 代码。因此,Chalk’Dart 默认支持完整的级别 3(24 位)ANSI 代码。

VSCode

可以在 VSCode 的调试控制台中设置使用的字体。有关更多信息,请在此处 查找

浏览器支持

Chrome、Firefox 和 Edge 在其各自的开发者控制台中本地支持 ANSI 转义码。从 Dart Web 代码中,您可以使用 window.console.log(...) 将消息记录到浏览器的调试控制台。

Windows

如果您使用的是 Windows,请善待自己,使用 Windows 终端而不是 cmd.exe

相关

  • chalk-js – JavaScript 的原始 Chalk 库模块,它是这个库的灵感来源(并且也是这个 README 的基础)!

作者/维护者

其他示例

chalkdart_example.dart 输出到 Windows 终端的图表

GitHub

查看 Github