mirror of
https://github.com/sharkdp/bat.git
synced 2024-11-26 17:53:54 +01:00
Simplify stdout handling
This commit is contained in:
parent
438f3df345
commit
9a0e444e09
26
src/main.rs
26
src/main.rs
@ -23,7 +23,7 @@ mod terminal;
|
|||||||
use std::collections::HashMap;
|
use std::collections::HashMap;
|
||||||
use std::env;
|
use std::env;
|
||||||
use std::fs::{self, File};
|
use std::fs::{self, File};
|
||||||
use std::io::{self, BufRead, BufReader, Stdout, StdoutLock, Write};
|
use std::io::{self, BufRead, BufReader, Write};
|
||||||
use std::path::Path;
|
use std::path::Path;
|
||||||
use std::process::{self, Child, Command, Stdio};
|
use std::process::{self, Child, Command, Stdio};
|
||||||
|
|
||||||
@ -69,12 +69,12 @@ pub struct Options<'a> {
|
|||||||
pub paging: bool,
|
pub paging: bool,
|
||||||
}
|
}
|
||||||
|
|
||||||
enum OutputType<'a> {
|
enum OutputType {
|
||||||
Pager(Child),
|
Pager(Child),
|
||||||
Stdout(StdoutLock<'a>),
|
Stdout(io::Stdout),
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<'a> OutputType<'a> {
|
impl OutputType {
|
||||||
fn pager() -> Result<Self> {
|
fn pager() -> Result<Self> {
|
||||||
Ok(OutputType::Pager(Command::new("less")
|
Ok(OutputType::Pager(Command::new("less")
|
||||||
.args(&["--quit-if-one-screen", "--RAW-CONTROL-CHARS", "--no-init"])
|
.args(&["--quit-if-one-screen", "--RAW-CONTROL-CHARS", "--no-init"])
|
||||||
@ -83,8 +83,8 @@ impl<'a> OutputType<'a> {
|
|||||||
.chain_err(|| "Could not spawn pager")?))
|
.chain_err(|| "Could not spawn pager")?))
|
||||||
}
|
}
|
||||||
|
|
||||||
fn stdout(stdout: &'a Stdout) -> Self {
|
fn stdout() -> Self {
|
||||||
OutputType::Stdout(stdout.lock())
|
OutputType::Stdout(io::stdout())
|
||||||
}
|
}
|
||||||
|
|
||||||
fn handle(&mut self) -> Result<&mut Write> {
|
fn handle(&mut self) -> Result<&mut Write> {
|
||||||
@ -98,7 +98,7 @@ impl<'a> OutputType<'a> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<'a> Drop for OutputType<'a> {
|
impl Drop for OutputType {
|
||||||
fn drop(&mut self) {
|
fn drop(&mut self) {
|
||||||
if let OutputType::Pager(ref mut command) = *self {
|
if let OutputType::Pager(ref mut command) = *self {
|
||||||
let _ = command.wait();
|
let _ = command.wait();
|
||||||
@ -259,14 +259,11 @@ fn get_git_diff(filename: &str) -> Option<LineChanges> {
|
|||||||
Some(line_changes)
|
Some(line_changes)
|
||||||
}
|
}
|
||||||
|
|
||||||
fn get_output_type(stdout: &Stdout, paging: bool) -> OutputType {
|
fn get_output_type(paging: bool) -> OutputType {
|
||||||
if paging {
|
if paging {
|
||||||
match OutputType::pager() {
|
OutputType::pager().unwrap_or_else(|_| OutputType::stdout())
|
||||||
Ok(pager) => pager,
|
|
||||||
Err(_) => OutputType::stdout(&stdout),
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
OutputType::stdout(&stdout)
|
OutputType::stdout()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -508,8 +505,7 @@ fn run() -> Result<()> {
|
|||||||
})
|
})
|
||||||
.unwrap_or_else(|| vec![None]); // read from stdin (None) if no args are given
|
.unwrap_or_else(|| vec![None]); // read from stdin (None) if no args are given
|
||||||
|
|
||||||
let stdout = io::stdout();
|
let mut output_type = get_output_type(options.paging);
|
||||||
let mut output_type = get_output_type(&stdout, options.paging);
|
|
||||||
let handle = output_type.handle()?;
|
let handle = output_type.handle()?;
|
||||||
let mut printer = Printer::new(handle, &options);
|
let mut printer = Printer::new(handle, &options);
|
||||||
|
|
||||||
|
@ -95,8 +95,6 @@ impl<'a> Printer<'a> {
|
|||||||
.join(" ")
|
.join(" ")
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
self.handle.flush()?;
|
|
||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user