From a9077f32ba868abcc77294bf47d39a9aa0d0a79f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Antoine=20Beaupr=C3=A9?= Date: Tue, 14 Jan 2025 12:24:00 -0500 Subject: [PATCH] add zbat wrapper to decompress files automatically This relies on bsdcat from archive-tools, which supports more formats than just gzip or, failing that, falls back to gunzip -c with a warning. Previously[1], @sharkdp stated that bat would not support compressed files, but would be open in implementing a wrapper. There was another implementation proposed elsewhere[2], but it seems overengineered to me. [1] https://github.com/sharkdp/bat/issues/642#issuecomment-526816644 [2] https://github.com/sharkdp/bat/issues/237#issuecomment-617079288 --- CHANGELOG.md | 1 + bin/zbat | 12 ++++++++++++ 2 files changed, 13 insertions(+) create mode 100755 bin/zbat diff --git a/CHANGELOG.md b/CHANGELOG.md index 941e4e3c..b704eec2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,7 @@ # unreleased ## Features +* Add a `zbat` wrapper script to automatically decompress files before display, see PR #3177 (@anarcat) ## Bugfixes * Fix `BAT_THEME_DARK` and `BAT_THEME_LIGHT` being ignored, see issue #3171 and PR #3168 (@bash) diff --git a/bin/zbat b/bin/zbat new file mode 100755 index 00000000..977c4a05 --- /dev/null +++ b/bin/zbat @@ -0,0 +1,12 @@ +#!/bin/sh + +set -e +set -u +# shellcheck disable=SC3040 +(set -o pipefail 2> /dev/null) && set -o pipefail + +cpath="$1" +# cpath without suffix +path="$(echo $cpath | sed 's/\.[^.]*$//')" + +( bsdcat "$path" || gunzip -c "$path" ) | batcat --file-name "$path"