diff --git a/CHANGELOG.md b/CHANGELOG.md index 34ce3c3e..98b571bd 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -83,6 +83,7 @@ - Add `theme::theme` for choosing an appropriate theme based on the terminal's color scheme, see #2896 (@bash) - [BREAKING] Remove `HighlightingAssets::default_theme`. Use `theme::default_theme` instead. +- Add `PrettyPrinter::print_with_writer` for custom output destinations, see #3070 (@kojix2) # v0.24.0 diff --git a/assets/themes/Nord-sublime b/assets/themes/Nord-sublime index 0d655b23..bf92a9e4 160000 --- a/assets/themes/Nord-sublime +++ b/assets/themes/Nord-sublime @@ -1 +1 @@ -Subproject commit 0d655b23d6b300e691676d9b90a68d92b267f7ec +Subproject commit bf92a9e4457dc2f97efebc59bbeac95933ec6515 diff --git a/assets/themes/sublime-snazzy b/assets/themes/sublime-snazzy index 70343201..48f43a73 160000 --- a/assets/themes/sublime-snazzy +++ b/assets/themes/sublime-snazzy @@ -1 +1 @@ -Subproject commit 70343201f1d7539adbba3c79e2fe81c2559a0431 +Subproject commit 48f43a735037195021fa69d99c1180bf12f38f78 diff --git a/src/pretty_printer.rs b/src/pretty_printer.rs index 51c9af80..a70ac021 100644 --- a/src/pretty_printer.rs +++ b/src/pretty_printer.rs @@ -281,6 +281,11 @@ impl<'a> PrettyPrinter<'a> { /// If you want to call 'print' multiple times, you have to call the appropriate /// input_* methods again. pub fn print(&mut self) -> Result { + self.print_with_writer(None::<&mut dyn std::fmt::Write>) + } + + /// Pretty-print all specified inputs to a specified writer. + pub fn print_with_writer(&mut self, writer: Option) -> Result { let highlight_lines = std::mem::take(&mut self.highlighted_lines); self.config.highlighted_lines = HighlightedLineRanges(LineRanges::from(highlight_lines)); self.config.term_width = self @@ -317,7 +322,13 @@ impl<'a> PrettyPrinter<'a> { // Run the controller let controller = Controller::new(&self.config, &self.assets); - controller.run(inputs.into_iter().map(|i| i.into()).collect(), None) + + // If writer is provided, pass it to the controller, otherwise pass None + if let Some(mut w) = writer { + controller.run(inputs.into_iter().map(|i| i.into()).collect(), Some(&mut w)) + } else { + controller.run(inputs.into_iter().map(|i| i.into()).collect(), None) + } } } diff --git a/src/theme.rs b/src/theme.rs index 9fbef238..5863bf85 100644 --- a/src/theme.rs +++ b/src/theme.rs @@ -164,7 +164,7 @@ impl fmt::Display for ThemeName { #[derive(Debug, Default, Clone, Copy, PartialEq, Eq, Hash)] pub enum DetectColorScheme { - /// Only query the terminal for its colors when appropriate (i.e. when the the output is not redirected). + /// Only query the terminal for its colors when appropriate (i.e. when the output is not redirected). #[default] Auto, /// Always query the terminal for its colors.