菜单

API 和库使用

相关源文件

此页面介绍了如何在 Rust 应用程序中使用 bat 作为库,允许开发者将 bat 的语法高亮和格式化功能集成到他们自己的项目中。有关使用 bat 命令行工具的信息,请参阅 概述安装和使用

基本用法

可以通过将 bat crate 添加到项目的 Cargo.toml 中来将其用作库

请注意,您应该禁用默认功能(这些功能是为命令行应用程序设计的),并且只启用您需要的功能

您需要选择一个正则表达式引擎

  • regex-onig:使用 "oniguruma" 正则表达式引擎
  • regex-fancy:使用纯 Rust 的 "fancy-regex" 引擎

来源: Cargo.toml36-42

最小示例

这是一个打印带语法高亮文件的简单示例

来源: examples/simple.rs1-7

彩色 cat 克隆示例

一个更完整的示例,展示了如何创建一个彩色的 cat 克隆

来源: examples/cat.rs1-14

架构概述

bat 库中的数据流

来源: examples/simple.rs1-7 examples/cat.rs1-14

PrettyPrinter API 流

来源: examples/simple.rs1-7 examples/cat.rs1-14 Cargo.toml41-43 Cargo.toml117-132 CHANGELOG.md129-132 CHANGELOG.md372-377

库组件集成

来源: Cargo.toml41-43 Cargo.toml117-132 CHANGELOG.md129-132 CHANGELOG.md372-377

核心API组件

PrettyPrinter

PrettyPrinter 是将 bat 用作库的主要入口点。它提供了一种构建器样式的 API,用于配置输出格式。

// Create a new PrettyPrinter instance
let mut printer = PrettyPrinter::new();

// Configure the printer
printer
    .header(true)        // Show file headers
    .grid(true)          // Show grid borders
    .line_numbers(true)  // Show line numbers
    .theme("Monokai")    // Set the theme
    .input_file("my_file.rs");

// Execute the printing operation
printer.print().unwrap();

来源: examples/simple.rs1-7 examples/cat.rs1-14

样式组件

PrettyPrinter 支持以下样式组件,可以单独启用或禁用

组件方法描述
行号line_numbers(bool)显示/隐藏行号
网格grid(bool)显示/隐藏网格边框
标题header(bool)显示/隐藏文件头
Header Filenameheader_filename(bool)显示/隐藏文件名在头信息中
Header Filesizeheader_filesize(bool)显示/隐藏文件大小在头信息中
Git Changesvcs_modification_markers(bool)显示/隐藏 Git 修改标记
Snipsnip(bool)显示/隐藏 snipped 标记
规则rule(bool)显示/隐藏水平分隔线

从 bat v0.25.0 开始,您可以添加或删除单个样式组件,而无需替换所有样式

来源: CHANGELOG.md49-50 CHANGELOG.md117-134

输入方式

PrettyPrinter 提供了几种指定输入源的方法

方法描述
input_file(path)打印单个文件
input_files(paths)打印多个文件
input_stdin()从标准输入读取
input_from_bytes(bytes)从字节数组读取
input_from_string(string)从字符串读取

来源: examples/simple.rs5 examples/cat.rs10 CHANGELOG.md173-175

输出方法

要生成输出,请调用以下方法之一

方法描述
print()打印到 stdout 或分页器
print_with_writer(writer)打印到自定义 writer

print_with_writer 方法已在 v0.25.0 中添加,以便写入到自定义输出目的地。

来源: CHANGELOG.md132 examples/simple.rs5 examples/cat.rs11

语法高亮

使用语法

使用语法定义

在 v0.25.0 版本中,语法相关的 API 发生了一些破坏性更改

  1. HighlightingAssets::default_theme 已被移除。请使用 theme::default_theme
  2. HighlightingAssets::syntaxes()HighlightingAssets::syntax_for_file_name() 已被弃用。请使用 HighlightingAssets::get_syntaxes()HighlightingAssets::get_syntax_for_path()

来源: CHANGELOG.md129-131 CHANGELOG.md372-374

语法映射

SyntaxMapping 组件提供了一种将文件模式映射到语法定义的方法

v0.25.0 中的破坏性更改

  • SyntaxMapping::{empty,builtin} 已被移除;请使用 SyntaxMapping::new
  • SyntaxMapping::mappingsSyntaxMapping::{builtin,custom,all}_mappings 替换

来源: CHANGELOG.md122-126

主题

主题选择

在 v0.25.0 版本中,添加了一个新的 theme::theme 函数,用于根据终端的颜色方案选择合适的主题。

来源: CHANGELOG.md128-131

错误处理

bat 库使用自定义错误类型来报告错误。

该错误类型在 v0.25.0 中进行了更改

  • Error::SyntectError(syntect::LoadingError) 已更改为 Error::SyntectError(syntect::Error)
  • 添加了 Error::SyntectLoadingError(syntect::LoadingError) 枚举变体
  • 该错误枚举被标记为 #[non_exhaustive],以便在不破坏语义版本的情况下添加新变体

来源: CHANGELOG.md293-296

高级配置

带有自定义错误处理程序的控制器

use bat::controller::Controller;

Controller::new()
    // Configure controller
    .run_with_error_handler(|error| {
        // Custom error handling logic
        eprintln!("Custom error handler: {}", error);
    });

在 v0.25.0 中,错误处理程序已更改为 FnMut,以便在处理程序内修改状态。

来源: CHANGELOG.md127

输出缓冲

您可以为 Controller::run() 提供可选的输出缓冲区

let mut buffer = Vec::new();
controller.run(&mut buffer)?;

来源: CHANGELOG.md174

功能标志

当将 bat 用作库时,应禁用默认功能,只选择您需要的功能

功能描述用例
regex-onig使用“oniguruma”正则表达式引擎建议用于完整的语法高亮功能
regex-fancy使用仅 Rust 的“fancy-regex”引擎纯 Rust 替代品,依赖项更少
git启用 Git 集成显示 Git 更改是必需的
paging启用分页功能使用 less 等分页器是必需的

功能选择决策树

来源: Cargo.toml16-42

重大更改历史

本节总结了您在升级时应注意的重要重大 API 更改

v0.25.0

  • 添加了 PrettyPrinter::print_with_writer 以用于自定义输出目标
  • 添加了 theme::theme 函数;移除了 HighlightingAssets::default_theme
  • SyntaxMapping API 的更改
  • Controller::run_with_error_handler 的错误处理程序已更改为 FnMut

v0.24.0

  • Controller::run()Controller::run_with_error_handler() 添加了可选的 output_buffer 参数

v0.23.0

  • PrettyPrinter::header 正确显示带文件名的标题

v0.22.0

  • bat::PrettyPrinter::syntaxes() 现在迭代新的 bat::Syntax 结构

v0.21.0

  • 由于延迟加载,syntaxes.bin 的二进制格式已更改
  • 错误枚举标记为 #[non_exhaustive]
  • Error::SyntectError 类型已更改

v0.18.0 - v0.20.0

  • 各种 API 方法已弃用并移除
  • 添加了 InputDescription
  • 添加了直接向 PrettyPrinter 提供 Inputs 的函数
  • 移除了 Input::theme_preview_file

来源: CHANGELOG.md117-132 CHANGELOG.md172-174 CHANGELOG.md212 CHANGELOG.md253-255 CHANGELOG.md290-296 CHANGELOG.md372-377 CHANGELOG.md474-479 CHANGELOG.md553-558