diff --git a/.github/actions/install-dependencies/action.yaml b/.github/actions/install-dependencies/action.yaml index d3a5603..29d66f5 100644 --- a/.github/actions/install-dependencies/action.yaml +++ b/.github/actions/install-dependencies/action.yaml @@ -67,7 +67,7 @@ runs: uses: dsaltares/fetch-gh-release-asset@master if: ${{ env.ACT || inputs.test == 'true' }} with: - file: "ripgrep_[0-9\\.]+_amd64.deb" + file: "ripgrep_[0-9\\.-]+_amd64.deb" repo: "BurntSushi/ripgrep" # version: "${{ inputs.version_ripgrep || "latest" }}" regex: true diff --git a/README.md b/README.md index ed60876..337bd61 100644 --- a/README.md +++ b/README.md @@ -53,11 +53,21 @@ All of the `bat-extras` scripts can be installed with `brew install bat-extras`. If you would prefer to only install the specific scripts you need, you can use the `eth-p/software` tap to install individual scripts: `brew install eth-p/software/bat-extras-[SCRIPT]` +### MacPorts + +The `bat-extras` scripts can also be installed via [MacPorts](https://www.macports.org) on macOS: + +```bash +sudo port install bat-extras +``` + +Port info [here](https://ports.macports.org/port/bat-extras/). + ### Pacman -`bat-extras` is [officially available](https://archlinux.org/packages/community/any/bat-extras/) on the Arch community repository! +`bat-extras` is [officially available](https://archlinux.org/packages/extra/any/bat-extras/) on the Arch extra repository! -If you have the community repository enabled, you can install `bat-extras` by running: +If you have the extra repository enabled, you can install `bat-extras` by running: ```bash pacman -S bat-extras diff --git a/banner.txt b/banner.txt index 22a82a8..e5742e5 100644 --- a/banner.txt +++ b/banner.txt @@ -1,5 +1,5 @@ # ----------------------------------------------------------------------------- -# bat-extras | Copyright (C) 2020 eth-p and contributors | MIT License +# bat-extras | Copyright (C) 2020-2024 eth-p and contributors | MIT License # # Repository: https://github.com/eth-p/bat-extras # Issues: https://github.com/eth-p/bat-extras/issues diff --git a/doc/batgrep.md b/doc/batgrep.md index e8757ab..b0077f7 100644 --- a/doc/batgrep.md +++ b/doc/batgrep.md @@ -31,7 +31,8 @@ Search through files or directories looking for matching regular expressions (or | | `--paging=["never"/"always"]`| Enable/disable paging. | | | `--pager=[PAGER]` | Specify the pager to use. | | | `--terminal-width=[COLS]` | Generate output for the specified terminal width. | -| | `--no-separator` | Disable printing separator between files | +| | `--no-separator` | Disable printing separator between files. | +| | `--rga` | Use `ripgrep-all` instead of `ripgrep`. | The following options are passed directly to ripgrep, and are not handled by this script. diff --git a/doc/batman.md b/doc/batman.md index d10dfe8..f3c5153 100644 --- a/doc/batman.md +++ b/doc/batman.md @@ -11,7 +11,19 @@ If you have `fzf` installed, you can even use `batman` to search through manual batman [SECTION] [ENTRY] +### As a Replacement for Man +With bash: + +```bash +eval "$(batman --export-env)" +``` + +With fish: + +```fish +batman --export-env | source +``` ## Environment diff --git a/doc/prettybat.md b/doc/prettybat.md index 83136f4..0dc19f3 100644 --- a/doc/prettybat.md +++ b/doc/prettybat.md @@ -21,22 +21,23 @@ See `man bat` for more information. ## Languages -| Language | Formatter | -| -------------------- | ----------------------------------------------------------- | -| JavaScript (JS, JSX) | [prettier](https://prettier.io/) | -| TypeScript (TS, TSX) | [prettier](https://prettier.io/) | -| CSS, SCSS, SASS | [prettier](https://prettier.io/) | -| Markdown | [prettier](https://prettier.io/) | -| JSON | [prettier](https://prettier.io/) | -| YAML | [prettier](https://prettier.io/) | -| HTML | [prettier](https://prettier.io/) | -| SVG | [prettier](https://prettier.io/) | -| Rust | [rustfmt](https://github.com/rust-lang/rustfmt) | -| Bash | [shfmt](https://github.com/mvdan/sh) | -| C | [ClangFormat](https://clang.llvm.org/docs/ClangFormat.html) | -| C++ | [ClangFormat](https://clang.llvm.org/docs/ClangFormat.html) | -| Objective-C | [ClangFormat](https://clang.llvm.org/docs/ClangFormat.html) | -| Python | [black](https://black.readthedocs.io/) | +| Language | Formatter | +| -------------------- | --------------------------------------------------------------- | +| JavaScript (JS, JSX) | [prettier](https://prettier.io/) | +| TypeScript (TS, TSX) | [prettier](https://prettier.io/) | +| CSS, SCSS, SASS | [prettier](https://prettier.io/) | +| Markdown | [prettier](https://prettier.io/) | +| JSON | [prettier](https://prettier.io/) | +| YAML | [prettier](https://prettier.io/) | +| HTML | [prettier](https://prettier.io/) | +| SVG | [prettier](https://prettier.io/) | +| Rust | [rustfmt](https://github.com/rust-lang/rustfmt) | +| Bash | [shfmt](https://github.com/mvdan/sh) | +| C | [ClangFormat](https://clang.llvm.org/docs/ClangFormat.html) | +| C++ | [ClangFormat](https://clang.llvm.org/docs/ClangFormat.html) | +| Objective-C | [ClangFormat](https://clang.llvm.org/docs/ClangFormat.html) | +| Python | [black](https://black.readthedocs.io/) | +| Elixir | [mix format](https://hexdocs.pm/mix/main/Mix.Tasks.Format.html) | diff --git a/src/batgrep.sh b/src/batgrep.sh index 1bd6b81..1f02138 100755 --- a/src/batgrep.sh +++ b/src/batgrep.sh @@ -97,7 +97,10 @@ Options: Generate output for the specified terminal width. --no-separator: - Disable printing separator between files + Disable printing separator between files. + + --rga: + Use ripgrep-all instead of ripgrep. Options passed directly to ripgrep: -F, --fixed-strings @@ -141,6 +144,7 @@ EOF # ----------------------------------------------------------------------------- # Options: # ----------------------------------------------------------------------------- +RIPGREP="$EXECUTABLE_RIPGREP" RG_ARGS=() BAT_ARGS=() PATTERN="" @@ -252,6 +256,14 @@ while shiftopt; do -p | --search-pattern) OPT_SEARCH_PATTERN=true ;; --no-search-pattern) OPT_SEARCH_PATTERN=false ;; --no-separator) OPT_NO_SEPARATOR=true ;; + --rga) { + if ! rga --version | grep 'ripgrep-all' &>/dev/null; then + printc "%{RED}%s: option '--rga' requires ripgrep-all to be installed%{CLEAR}\n" "$PROGRAM" 1>&2 + exit 1 + fi + + RIPGREP='rga' + };; # Option forwarding --rg:*) { @@ -377,10 +389,10 @@ main() { ) if "$READ_FROM_STDIN"; then - "$EXECUTABLE_RIPGREP" "${COMMON_RG_ARGS[@]}" <<< "$STDIN_DATA" + "$RIPGREP" "${COMMON_RG_ARGS[@]}" <<< "$STDIN_DATA" return $? else - "$EXECUTABLE_RIPGREP" "${COMMON_RG_ARGS[@]}" + "$RIPGREP" "${COMMON_RG_ARGS[@]}" return $? fi } diff --git a/src/batman.sh b/src/batman.sh index dc17459..4ea3f10 100755 --- a/src/batman.sh +++ b/src/batman.sh @@ -9,7 +9,6 @@ SELF_NC="${BASH_SOURCE:-$0}" SELF="$(cd "$(dirname "${SELF_NC}")" && cd "$(dirname "$(readlink "${SELF_NC}" || echo ".")")" && pwd)/$(basename "$(readlink "${SELF_NC}" || echo "${SELF_NC}")")" LIB="$(cd "$(dirname "${SELF_NC}")" && cd "$(dirname "$(readlink "${SELF_NC}" || echo ".")")/../lib" && pwd)" -if [[ -n "${MANPAGER}" ]]; then BAT_PAGER="$MANPAGER"; fi source "${LIB}/constants.sh" source "${LIB}/pager.sh" source "${LIB}/print.sh" @@ -23,10 +22,12 @@ hook_version FORWARDED_ARGS=() MAN_ARGS=() BAT_ARGS=() +OPT_EXPORT_ENV=false SHIFTOPT_SHORT_OPTIONS="SPLIT" while shiftopt; do case "$OPT" in + --export-env) OPT_EXPORT_ENV=true ;; --paging|--pager) shiftval; FORWARDED_ARGS+=("${OPT}=${OPT_VAL}"); BAT_ARGS+=("${OPT}=${OPT_VAL}") ;; *) MAN_ARGS+=("$OPT") ;; @@ -48,7 +49,8 @@ fi if [[ "${BATMAN_IS_BEING_MANPAGER:-}" = "yes" ]]; then print_manpage() { - col -bx | "$EXECUTABLE_BAT" --language=man "${BAT_ARGS[@]}" + sed -e 's/\x1B\[[0-9;]*m//g; s/.\x08//g' \ + | "$EXECUTABLE_BAT" --language=man "${BAT_ARGS[@]}" exit $? } @@ -64,9 +66,18 @@ if [[ "${BATMAN_IS_BEING_MANPAGER:-}" = "yes" ]]; then fi # ----------------------------------------------------------------------------- +if [[ -n "${MANPAGER}" ]]; then BAT_PAGER="$MANPAGER"; fi export MANPAGER="env BATMAN_IS_BEING_MANPAGER=yes bash $(printf "%q " "$SELF" "${FORWARDED_ARGS[@]}")" export MANROFFOPT='-c' +# If `--export-env`, print exports to use batman as the manpager directly. +if "$OPT_EXPORT_ENV"; then + printf "export %s=%q\n" \ + "MANPAGER" "$MANPAGER" \ + "MANROFFOPT" "$MANROFFOPT" + exit 0 +fi + # If no argument is provided and fzf is installed, use fzf to search for man pages. if [[ "${#MAN_ARGS[@]}" -eq 0 ]] && [[ -z "$BATMAN_LEVEL" ]] && command -v "$EXECUTABLE_FZF" &>/dev/null; then export BATMAN_LEVEL=1 diff --git a/src/prettybat.sh b/src/prettybat.sh index 1b45ae6..0d62cdc 100755 --- a/src/prettybat.sh +++ b/src/prettybat.sh @@ -14,6 +14,7 @@ source "${LIB}/str.sh" source "${LIB}/print.sh" source "${LIB}/version.sh" source "${LIB}/check.sh" +source "${LIB}/term.sh" # ----------------------------------------------------------------------------- # Init: # ----------------------------------------------------------------------------- @@ -22,7 +23,10 @@ hook_version # Formatters: # ----------------------------------------------------------------------------- -FORMATTERS=("prettier" "rustfmt" "shfmt" "clangformat" "black") +FORMATTERS=( + "prettier" "rustfmt" "shfmt" "clangformat" + "black" "mix_format" "column" +) # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -118,6 +122,55 @@ formatter_black_process() { return $? } +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + +formatter_mix_format_supports() { + case "$1" in + .ex | \ + .exs | \ + .eex | \ + .heex) + return 0 + ;; + esac + + return 1 +} + +formatter_mix_format_process() { + mix format + return $? +} + +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + +formatter_column_supports() { + case "$1" in + .tsv) + return 0 + ;; + esac + + return 1 +} + +formatter_column_process() { + local needs_newline=true + local args=( + -t + -s $'\t' + -c "$TERMINAL_WIDTH" + ) + + if column --help &>/dev/null; then + # GNU `column` + args+=(--keep-empty-lines) + needs_newline=false + fi + + { { "$needs_newline" && sed 's/$/\n/'; } || cat; } | column "${args[@]}" +} + # ----------------------------------------------------------------------------- # Functions: # ----------------------------------------------------------------------------- @@ -145,6 +198,9 @@ map_language_to_extension() { rust | rs) ext=".rs" ;; graphql | gql) ext=".graphql" ;; python | py) ext=".py" ;; + elixir | ex) ext=".ex" ;; + exs) ext=".exs" ;; + tsv) ext=".tsv" ;; esac echo "$ext" @@ -272,6 +328,8 @@ OPT_LANGUAGE= FILES=() DEBUG_PRINT_FORMATTER=false +TERMINAL_WIDTH="$(term_width)" + # Parse arguments. while shiftopt; do case "$OPT" in diff --git a/test/snapshot/batgrep/test_help.stdout.snapshot b/test/snapshot/batgrep/test_help.stdout.snapshot index 04bc883..db5022d 100644 --- a/test/snapshot/batgrep/test_help.stdout.snapshot +++ b/test/snapshot/batgrep/test_help.stdout.snapshot @@ -63,7 +63,10 @@ Options: Generate output for the specified terminal width. --no-separator: - Disable printing separator between files + Disable printing separator between files. + + --rga: + Use ripgrep-all instead of ripgrep. Options passed directly to ripgrep: -F, --fixed-strings diff --git a/version.txt b/version.txt index e044315..242bfc9 100644 --- a/version.txt +++ b/version.txt @@ -1 +1 @@ -2023.09.19 +2024.07.10