mirror of
https://github.com/sharkdp/bat
synced 2024-11-04 18:00:24 +00:00
Updates for review of PR 899
This commit is contained in:
parent
014d754588
commit
42e3825daf
1
ci/script.bash
vendored
1
ci/script.bash
vendored
@ -17,3 +17,4 @@ fi
|
||||
cargo check --target "$TARGET" --verbose --lib --no-default-features
|
||||
cargo check --target "$TARGET" --verbose --lib --no-default-features --features git
|
||||
cargo check --target "$TARGET" --verbose --lib --no-default-features --features paging
|
||||
cargo check --target "$TARGET" --verbose --lib --no-default-features --features git,paging
|
||||
|
@ -5,14 +5,14 @@ pub use crate::syntax_mapping::{MappingTarget, SyntaxMapping};
|
||||
pub use crate::wrap::OutputWrap;
|
||||
|
||||
#[derive(Debug, Clone, Copy, PartialEq)]
|
||||
#[cfg(feature = "paging")]
|
||||
pub enum PagingMode {
|
||||
#[cfg(feature = "paging")]
|
||||
Always,
|
||||
#[cfg(feature = "paging")]
|
||||
QuitIfOneScreen,
|
||||
Never,
|
||||
}
|
||||
|
||||
#[cfg(feature = "paging")]
|
||||
impl Default for PagingMode {
|
||||
fn default() -> Self {
|
||||
PagingMode::Never
|
||||
@ -53,6 +53,7 @@ pub struct Config<'a> {
|
||||
pub output_wrap: OutputWrap,
|
||||
|
||||
/// Pager or STDOUT
|
||||
#[cfg(feature = "paging")]
|
||||
pub paging_mode: PagingMode,
|
||||
|
||||
/// Specifies the lines that should be printed
|
||||
|
@ -1,8 +1,9 @@
|
||||
use std::io::{self, Write};
|
||||
use std::path::Path;
|
||||
|
||||
use crate::assets::HighlightingAssets;
|
||||
use crate::config::{Config, PagingMode};
|
||||
use crate::config::Config;
|
||||
#[cfg(feature = "paging")]
|
||||
use crate::config::PagingMode;
|
||||
use crate::errors::*;
|
||||
use crate::inputfile::{InputFile, InputFileReader};
|
||||
use crate::line_range::{LineRanges, RangeCheckResult};
|
||||
@ -24,22 +25,34 @@ impl<'b> Controller<'b> {
|
||||
}
|
||||
|
||||
pub fn run_with_error_handler(&self, handle_error: impl Fn(&Error)) -> Result<bool> {
|
||||
// Do not launch the pager if NONE of the input files exist
|
||||
let mut paging_mode = self.config.paging_mode;
|
||||
if self.config.paging_mode != PagingMode::Never {
|
||||
let call_pager = self.config.files.iter().any(|file| {
|
||||
if let InputFile::Ordinary(path) = file {
|
||||
return Path::new(path).exists();
|
||||
} else {
|
||||
return true;
|
||||
let mut output_type;
|
||||
|
||||
#[cfg(feature = "paging")]
|
||||
{
|
||||
use std::path::Path;
|
||||
|
||||
// Do not launch the pager if NONE of the input files exist
|
||||
let mut paging_mode = self.config.paging_mode;
|
||||
if self.config.paging_mode != PagingMode::Never {
|
||||
let call_pager = self.config.files.iter().any(|file| {
|
||||
if let InputFile::Ordinary(path) = file {
|
||||
return Path::new(path).exists();
|
||||
} else {
|
||||
return true;
|
||||
}
|
||||
});
|
||||
if !call_pager {
|
||||
paging_mode = PagingMode::Never;
|
||||
}
|
||||
});
|
||||
if !call_pager {
|
||||
paging_mode = PagingMode::Never;
|
||||
}
|
||||
output_type = OutputType::from_mode(paging_mode, self.config.pager)?;
|
||||
}
|
||||
|
||||
#[cfg(not(feature = "paging"))]
|
||||
{
|
||||
output_type = OutputType::stdout();
|
||||
}
|
||||
|
||||
let mut output_type = OutputType::from_mode(paging_mode, self.config.pager)?;
|
||||
let writer = output_type.handle()?;
|
||||
let mut no_errors: bool = true;
|
||||
|
||||
|
@ -2,20 +2,20 @@ use error_chain::error_chain;
|
||||
|
||||
error_chain! {
|
||||
foreign_links {
|
||||
Clap(clap::Error);
|
||||
Io(std::io::Error);
|
||||
SyntectError(syntect::LoadingError);
|
||||
ParseIntError(std::num::ParseIntError);
|
||||
GlobParsingError(globset::Error);
|
||||
Clap(::clap::Error) #[cfg(feature = "application")];
|
||||
Io(::std::io::Error);
|
||||
SyntectError(::syntect::LoadingError);
|
||||
ParseIntError(::std::num::ParseIntError);
|
||||
GlobParsingError(::globset::Error);
|
||||
}
|
||||
}
|
||||
|
||||
pub fn default_error_handler(error: &Error) {
|
||||
match error {
|
||||
Error(ErrorKind::Io(ref io_error), _)
|
||||
if io_error.kind() == std::io::ErrorKind::BrokenPipe =>
|
||||
if io_error.kind() == ::std::io::ErrorKind::BrokenPipe =>
|
||||
{
|
||||
std::process::exit(0);
|
||||
::std::process::exit(0);
|
||||
}
|
||||
_ => {
|
||||
use ansi_term::Colour::Red;
|
||||
@ -23,36 +23,3 @@ pub fn default_error_handler(error: &Error) {
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
// Mock out a type for clap::Error if we aren't pulling in a dependency on clap.
|
||||
//
|
||||
// This can be removed after migrating away from error_chain to some modern
|
||||
// derive-based error library such as thiserror, in favor of:
|
||||
//
|
||||
// #[derive(Error)]
|
||||
// pub enum Error {
|
||||
// #[cfg(feature = "application")]
|
||||
// Clap(clap::Error),
|
||||
// ...
|
||||
// }
|
||||
//
|
||||
#[cfg(not(feature = "application"))]
|
||||
mod clap {
|
||||
use std::fmt::{self, Debug, Display};
|
||||
|
||||
pub struct Error(());
|
||||
|
||||
impl Display for Error {
|
||||
fn fmt(&self, _formatter: &mut fmt::Formatter) -> fmt::Result {
|
||||
unreachable!()
|
||||
}
|
||||
}
|
||||
|
||||
impl Debug for Error {
|
||||
fn fmt(&self, _formatter: &mut fmt::Formatter) -> fmt::Result {
|
||||
unreachable!()
|
||||
}
|
||||
}
|
||||
|
||||
impl std::error::Error for Error {}
|
||||
}
|
||||
|
@ -2,6 +2,7 @@ use std::io::{self, Write};
|
||||
#[cfg(feature = "paging")]
|
||||
use std::process::Child;
|
||||
|
||||
#[cfg(feature = "paging")]
|
||||
use crate::config::PagingMode;
|
||||
use crate::errors::*;
|
||||
#[cfg(feature = "paging")]
|
||||
@ -15,13 +16,12 @@ pub enum OutputType {
|
||||
}
|
||||
|
||||
impl OutputType {
|
||||
#[cfg(feature = "paging")]
|
||||
pub fn from_mode(mode: PagingMode, pager: Option<&str>) -> Result<Self> {
|
||||
let _ = pager;
|
||||
use self::PagingMode::*;
|
||||
Ok(match mode {
|
||||
#[cfg(feature = "paging")]
|
||||
PagingMode::Always => OutputType::try_pager(false, pager)?,
|
||||
#[cfg(feature = "paging")]
|
||||
PagingMode::QuitIfOneScreen => OutputType::try_pager(true, pager)?,
|
||||
Always => OutputType::try_pager(false, pager)?,
|
||||
QuitIfOneScreen => OutputType::try_pager(true, pager)?,
|
||||
_ => OutputType::stdout(),
|
||||
})
|
||||
}
|
||||
@ -116,7 +116,7 @@ impl OutputType {
|
||||
}
|
||||
}
|
||||
|
||||
fn stdout() -> Self {
|
||||
pub(crate) fn stdout() -> Self {
|
||||
OutputType::Stdout(io::stdout())
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user