Full Code of sharkdp/bat for AI

master 4a38eab3eaa1 cached
885 files
6.0 MB
1.6M tokens
1774 symbols
1 requests
Download .txt
Showing preview only (6,436K chars total). Download the full file or copy to clipboard to get everything.
Repository: sharkdp/bat
Branch: master
Commit: 4a38eab3eaa1
Files: 885
Total size: 6.0 MB

Directory structure:
gitextract_65sk4665/

├── .cargo/
│   └── audit.toml
├── .envrc
├── .github/
│   ├── .codecov.yml
│   ├── FUNDING.yml
│   ├── ISSUE_TEMPLATE/
│   │   ├── bug_report.md
│   │   ├── config.yml
│   │   ├── feature_request.md
│   │   ├── question.md
│   │   └── syntax_request.md
│   ├── dependabot.yml
│   └── workflows/
│       ├── CICD.yml
│       └── require-changelog-for-PRs.yml
├── .gitignore
├── .gitmodules
├── CHANGELOG.md
├── CONTRIBUTING.md
├── Cargo.toml
├── LICENSE-APACHE
├── LICENSE-MIT
├── NOTICE
├── README.md
├── SECURITY.md
├── assets/
│   ├── .gitattributes
│   ├── .ignore
│   ├── completions/
│   │   ├── _bat.ps1.in
│   │   ├── bat.bash.in
│   │   ├── bat.fish.in
│   │   └── bat.zsh.in
│   ├── create.sh
│   ├── manual/
│   │   └── bat.1.in
│   ├── patches/
│   │   ├── 1337.tmTheme.patch
│   │   ├── C#.sublime-syntax.patch
│   │   ├── Groff.sublime-syntax.patch
│   │   ├── JavaDoc.sublime-syntax.patch
│   │   ├── JavaScript.sublime-syntax.patch
│   │   ├── Lisp.sublime-syntax.patch
│   │   ├── Makefile.sublime-syntax.patch
│   │   ├── Markdown.sublime-syntax.patch
│   │   ├── MediaWiki.sublime-syntax.patch
│   │   ├── Monokai-Extended.tmTheme.patch
│   │   ├── OneHalfDark.tmTheme.patch
│   │   ├── Python.sublime-syntax.patch
│   │   ├── Rust.sublime-syntax.patch
│   │   ├── ShellScript.sublime-syntax.patch
│   │   ├── TodoTxt.sublime-syntax.patch
│   │   ├── TwoDark.tmTheme.patch
│   │   └── XML.sublime-syntax.patch
│   ├── syntaxes/
│   │   └── 02_Extra/
│   │       ├── Apache.sublime-syntax
│   │       ├── AsciiDoc.sublime-syntax
│   │       ├── Assembly (ARM).sublime-syntax
│   │       ├── Assembly (x86_64).sublime-syntax
│   │       ├── CSV/
│   │       │   ├── CSV-comma.sublime-syntax
│   │       │   ├── CSV-pipe.sublime-syntax
│   │       │   ├── CSV-semi-colon.sublime-syntax
│   │       │   ├── CSV.sublime-syntax
│   │       │   └── TSV.sublime-syntax
│   │       ├── Cabal.sublime-syntax
│   │       ├── CoffeeScript.sublime-syntax
│   │       ├── CpuInfo.sublime-syntax
│   │       ├── Crystal.sublime-syntax
│   │       ├── Dart.sublime-syntax
│   │       ├── DotENV.sublime-syntax
│   │       ├── Fstab.sublime-syntax
│   │       ├── Group.sublime-syntax
│   │       ├── HTML (Twig).sublime-syntax
│   │       ├── INI.sublime-syntax
│   │       ├── JavaScript (Babel).sublime-syntax
│   │       ├── Kotlin.sublime-syntax
│   │       ├── Lean.sublime-syntax
│   │       ├── LiveScript.sublime-syntax
│   │       ├── Manpage.sublime-syntax
│   │       ├── MemInfo.sublime-syntax
│   │       ├── Nim.sublime-syntax
│   │       ├── Ninja.sublime-syntax
│   │       ├── Nix.sublime-syntax
│   │       ├── Org mode.sublime-syntax
│   │       ├── Passwd.sublime-syntax
│   │       ├── PowerShell.sublime-syntax
│   │       ├── QML.sublime-syntax
│   │       ├── Racket.sublime-syntax
│   │       ├── Rego.sublime-syntax
│   │       ├── Requirementstxt.sublime-syntax
│   │       ├── Resolv.sublime-syntax
│   │       ├── Robot.sublime-syntax
│   │       ├── SML.sublime-syntax
│   │       ├── Slim.sublime-syntax
│   │       ├── Stylus.sublime-syntax
│   │       ├── Swift.sublime-syntax
│   │       ├── TypeScript.sublime-syntax
│   │       ├── TypsecriptReact.sublime-syntax
│   │       ├── Verilog.sublime-syntax
│   │       ├── VimHelp.sublime-syntax
│   │       ├── apt-source-list.sublime-syntax
│   │       ├── gnuplot.sublime-syntax
│   │       ├── log.sublime-syntax
│   │       ├── show-nonprintable.sublime-syntax
│   │       ├── syntax_test_csv.csv
│   │       ├── syntax_test_helphelp.txt
│   │       ├── syntax_test_man.man
│   │       ├── syntax_test_requirements.txt
│   │       ├── syntax_test_tsv.tsv
│   │       ├── syslog.sublime-syntax
│   │       └── wgsl.sublime-syntax
│   ├── theme_preview.rs
│   └── themes/
│       ├── ansi.tmTheme
│       ├── base16-256.tmTheme
│       └── base16.tmTheme
├── build/
│   ├── application.rs
│   ├── main.rs
│   ├── syntax_mapping.rs
│   └── util.rs
├── diagnostics/
│   ├── .gitattributes
│   └── info.sh
├── doc/
│   ├── README-ja.md
│   ├── README-ko.md
│   ├── README-ru.md
│   ├── README-zh.md
│   ├── alternatives.md
│   ├── assets.md
│   ├── long-help.txt
│   ├── release-checklist.md
│   ├── short-help.txt
│   └── sponsors.md
├── examples/
│   ├── advanced.rs
│   ├── buffer.rs
│   ├── cat.rs
│   ├── inputs.rs
│   ├── list_syntaxes_and_themes.rs
│   ├── simple.rs
│   └── yaml.rs
├── flake.nix
├── rustfmt.toml
├── src/
│   ├── assets/
│   │   ├── assets_metadata.rs
│   │   ├── build_assets/
│   │   │   └── acknowledgements.rs
│   │   ├── build_assets.rs
│   │   ├── lazy_theme_set.rs
│   │   └── serialized_syntax_set.rs
│   ├── assets.rs
│   ├── bin/
│   │   └── bat/
│   │       ├── app.rs
│   │       ├── assets.rs
│   │       ├── clap_app.rs
│   │       ├── completions.rs
│   │       ├── config.rs
│   │       ├── directories.rs
│   │       ├── input.rs
│   │       └── main.rs
│   ├── config.rs
│   ├── controller.rs
│   ├── decorations.rs
│   ├── diff.rs
│   ├── error.rs
│   ├── input.rs
│   ├── less.rs
│   ├── lessopen.rs
│   ├── lib.rs
│   ├── line_range.rs
│   ├── macros.rs
│   ├── nonprintable_notation.rs
│   ├── output.rs
│   ├── pager.rs
│   ├── paging.rs
│   ├── preprocessor.rs
│   ├── pretty_printer.rs
│   ├── printer.rs
│   ├── style.rs
│   ├── syntax_mapping/
│   │   ├── builtin.rs
│   │   ├── builtins/
│   │   │   ├── README.md
│   │   │   ├── bsd-family/
│   │   │   │   ├── .gitkeep
│   │   │   │   └── 50-os-release.toml
│   │   │   ├── common/
│   │   │   │   ├── .gitkeep
│   │   │   │   ├── 50-apache.toml
│   │   │   │   ├── 50-aws-credentials.toml
│   │   │   │   ├── 50-bat.toml
│   │   │   │   ├── 50-citation.toml
│   │   │   │   ├── 50-container.toml
│   │   │   │   ├── 50-cpp.toml
│   │   │   │   ├── 50-diff.toml
│   │   │   │   ├── 50-dotnet-xml.toml
│   │   │   │   ├── 50-f-sharp.toml
│   │   │   │   ├── 50-gcloud-cli-config.toml
│   │   │   │   ├── 50-git.toml
│   │   │   │   ├── 50-json.toml
│   │   │   │   ├── 50-markdown.toml
│   │   │   │   ├── 50-mill.toml
│   │   │   │   ├── 50-nginx.toml
│   │   │   │   ├── 50-nix.toml
│   │   │   │   ├── 50-nmap.toml
│   │   │   │   ├── 50-proxy-auto-config.toml
│   │   │   │   ├── 50-ron.toml
│   │   │   │   ├── 50-sarif.toml
│   │   │   │   ├── 50-ssh.toml
│   │   │   │   ├── 90-ignore-files.toml
│   │   │   │   ├── 99-unset-ambiguous-extensions.toml
│   │   │   │   ├── 99-unset-ambiguous-filenames.toml
│   │   │   │   └── xonsh.toml
│   │   │   ├── linux/
│   │   │   │   ├── .gitkeep
│   │   │   │   ├── 50-containers.toml
│   │   │   │   ├── 50-flatpak.toml
│   │   │   │   ├── 50-kubernetes.toml
│   │   │   │   ├── 50-os-release.toml
│   │   │   │   ├── 50-pacman.toml
│   │   │   │   ├── 50-paru.toml
│   │   │   │   ├── 50-podman-quadlet.toml
│   │   │   │   └── 50-systemd.toml
│   │   │   ├── macos/
│   │   │   │   └── .gitkeep
│   │   │   ├── unix-family/
│   │   │   │   ├── .gitkeep
│   │   │   │   ├── 50-apache.toml
│   │   │   │   ├── 50-certbot.toml
│   │   │   │   ├── 50-fish-shell.toml
│   │   │   │   ├── 50-korn-shell.toml
│   │   │   │   ├── 50-mail-spool.toml
│   │   │   │   ├── 50-nginx.toml
│   │   │   │   ├── 50-shell.toml
│   │   │   │   ├── 50-syslog.toml
│   │   │   │   └── 50-wireguard.toml
│   │   │   └── windows/
│   │   │       └── .gitkeep
│   │   └── ignored_suffixes.rs
│   ├── syntax_mapping.rs
│   ├── terminal.rs
│   ├── theme.rs
│   ├── vscreen.rs
│   └── wrapping.rs
└── tests/
    ├── .gitattributes
    ├── assets.rs
    ├── benchmarks/
    │   ├── .gitignore
    │   ├── .ignore
    │   ├── highlighting-speed-src/
    │   │   ├── grep-output-ansi-sequences.txt
    │   │   ├── jquery.js
    │   │   ├── miniz.c
    │   │   └── numpy_test_multiarray.py
    │   ├── many-small-files/
    │   │   ├── small-file-0.txt
    │   │   ├── small-file-1.txt
    │   │   ├── small-file-10.txt
    │   │   ├── small-file-100.txt
    │   │   ├── small-file-11.txt
    │   │   ├── small-file-12.txt
    │   │   ├── small-file-13.txt
    │   │   ├── small-file-14.txt
    │   │   ├── small-file-15.txt
    │   │   ├── small-file-16.txt
    │   │   ├── small-file-17.txt
    │   │   ├── small-file-18.txt
    │   │   ├── small-file-19.txt
    │   │   ├── small-file-2.txt
    │   │   ├── small-file-20.txt
    │   │   ├── small-file-21.txt
    │   │   ├── small-file-22.txt
    │   │   ├── small-file-23.txt
    │   │   ├── small-file-24.txt
    │   │   ├── small-file-25.txt
    │   │   ├── small-file-26.txt
    │   │   ├── small-file-27.txt
    │   │   ├── small-file-28.txt
    │   │   ├── small-file-29.txt
    │   │   ├── small-file-3.txt
    │   │   ├── small-file-30.txt
    │   │   ├── small-file-31.txt
    │   │   ├── small-file-32.txt
    │   │   ├── small-file-33.txt
    │   │   ├── small-file-34.txt
    │   │   ├── small-file-35.txt
    │   │   ├── small-file-36.txt
    │   │   ├── small-file-37.txt
    │   │   ├── small-file-38.txt
    │   │   ├── small-file-39.txt
    │   │   ├── small-file-4.txt
    │   │   ├── small-file-40.txt
    │   │   ├── small-file-41.txt
    │   │   ├── small-file-42.txt
    │   │   ├── small-file-43.txt
    │   │   ├── small-file-44.txt
    │   │   ├── small-file-45.txt
    │   │   ├── small-file-46.txt
    │   │   ├── small-file-47.txt
    │   │   ├── small-file-48.txt
    │   │   ├── small-file-49.txt
    │   │   ├── small-file-5.txt
    │   │   ├── small-file-50.txt
    │   │   ├── small-file-51.txt
    │   │   ├── small-file-52.txt
    │   │   ├── small-file-53.txt
    │   │   ├── small-file-54.txt
    │   │   ├── small-file-55.txt
    │   │   ├── small-file-56.txt
    │   │   ├── small-file-57.txt
    │   │   ├── small-file-58.txt
    │   │   ├── small-file-59.txt
    │   │   ├── small-file-6.txt
    │   │   ├── small-file-60.txt
    │   │   ├── small-file-61.txt
    │   │   ├── small-file-62.txt
    │   │   ├── small-file-63.txt
    │   │   ├── small-file-64.txt
    │   │   ├── small-file-65.txt
    │   │   ├── small-file-66.txt
    │   │   ├── small-file-67.txt
    │   │   ├── small-file-68.txt
    │   │   ├── small-file-69.txt
    │   │   ├── small-file-7.txt
    │   │   ├── small-file-70.txt
    │   │   ├── small-file-71.txt
    │   │   ├── small-file-72.txt
    │   │   ├── small-file-73.txt
    │   │   ├── small-file-74.txt
    │   │   ├── small-file-75.txt
    │   │   ├── small-file-76.txt
    │   │   ├── small-file-77.txt
    │   │   ├── small-file-78.txt
    │   │   ├── small-file-79.txt
    │   │   ├── small-file-8.txt
    │   │   ├── small-file-80.txt
    │   │   ├── small-file-81.txt
    │   │   ├── small-file-82.txt
    │   │   ├── small-file-83.txt
    │   │   ├── small-file-84.txt
    │   │   ├── small-file-85.txt
    │   │   ├── small-file-86.txt
    │   │   ├── small-file-87.txt
    │   │   ├── small-file-88.txt
    │   │   ├── small-file-89.txt
    │   │   ├── small-file-9.txt
    │   │   ├── small-file-90.txt
    │   │   ├── small-file-91.txt
    │   │   ├── small-file-92.txt
    │   │   ├── small-file-93.txt
    │   │   ├── small-file-94.txt
    │   │   ├── small-file-95.txt
    │   │   ├── small-file-96.txt
    │   │   ├── small-file-97.txt
    │   │   ├── small-file-98.txt
    │   │   └── small-file-99.txt
    │   ├── run-benchmarks.sh
    │   └── startup-time-src/
    │       ├── Containerfile
    │       ├── mystery-file
    │       ├── small-CpuInfo-file.cpuinfo
    │       └── small-Markdown-file.md
    ├── examples/
    │   ├── bat-tabs.conf
    │   ├── bat-theme.conf
    │   ├── bat-windows.conf
    │   ├── bat.conf
    │   ├── cache
    │   ├── cache.c
    │   ├── cache_source/
    │   │   ├── syntaxes/
    │   │   │   └── c.sublime-syntax
    │   │   └── themes/
    │   │       └── example.tmTheme
    │   ├── control_characters.txt
    │   ├── empty.txt
    │   ├── empty_lines.txt
    │   ├── git/
    │   │   ├── .config/
    │   │   │   └── git/
    │   │   │       └── config
    │   │   └── .gitconfig
    │   ├── git-commit.man
    │   ├── long-single-line.txt
    │   ├── longline.json
    │   ├── map-syntax_case.Config
    │   ├── multiline.txt
    │   ├── nonprintable.txt
    │   ├── overstrike.txt
    │   ├── regression_tests/
    │   │   ├── first_line_fallback.invalid-syntax
    │   │   ├── issue_190.md
    │   │   ├── issue_2541.txt
    │   │   ├── issue_28.md
    │   │   ├── issue_314.hs
    │   │   ├── issue_914.rb
    │   │   ├── issue_915.vue
    │   │   └── issue_985.js
    │   ├── single-line.txt
    │   ├── sub_directory/
    │   │   └── dummy.txt
    │   ├── system_config/
    │   │   └── bat/
    │   │       └── config
    │   ├── tabs.txt
    │   ├── test.A—B가
    │   ├── test.binary
    │   ├── test.demo.foo.suffix
    │   ├── test.demo.suffix
    │   ├── test.json.suffix
    │   ├── test.json~
    │   ├── test.txt
    │   ├── test_BOM.txt
    │   ├── test_UTF-16BE-complicated.txt
    │   ├── test_UTF-16BE.txt
    │   ├── test_UTF-16LE-complicated.txt
    │   ├── test_UTF-16LE.txt
    │   ├── this-file-path-is-really-long-and-would-have-broken-the-layout-of-the-header.txt
    │   ├── unicode-wrap.txt
    │   └── word-wrap.txt
    ├── github-actions.rs
    ├── integration_tests.rs
    ├── mocked-pagers/
    │   ├── echo.bat
    │   ├── more
    │   ├── more.bat
    │   ├── most
    │   └── most.bat
    ├── no_duplicate_extensions.rs
    ├── scripts/
    │   ├── find-slow-to-highlight-files.py
    │   └── license-checks.sh
    ├── snapshot_tests.rs
    ├── snapshots/
    │   ├── generate_snapshots.py
    │   ├── output/
    │   │   ├── changes.snapshot.txt
    │   │   ├── changes_grid.snapshot.txt
    │   │   ├── changes_grid_header.snapshot.txt
    │   │   ├── changes_grid_header_numbers.snapshot.txt
    │   │   ├── changes_grid_header_numbers_rule.snapshot.txt
    │   │   ├── changes_grid_header_rule.snapshot.txt
    │   │   ├── changes_grid_numbers.snapshot.txt
    │   │   ├── changes_grid_numbers_rule.snapshot.txt
    │   │   ├── changes_grid_rule.snapshot.txt
    │   │   ├── changes_header.snapshot.txt
    │   │   ├── changes_header_numbers.snapshot.txt
    │   │   ├── changes_header_numbers_rule.snapshot.txt
    │   │   ├── changes_header_rule.snapshot.txt
    │   │   ├── changes_numbers.snapshot.txt
    │   │   ├── changes_numbers_rule.snapshot.txt
    │   │   ├── changes_rule.snapshot.txt
    │   │   ├── full.snapshot.txt
    │   │   ├── grid.snapshot.txt
    │   │   ├── grid_header.snapshot.txt
    │   │   ├── grid_header_numbers.snapshot.txt
    │   │   ├── grid_header_numbers_rule.snapshot.txt
    │   │   ├── grid_header_rule.snapshot.txt
    │   │   ├── grid_numbers.snapshot.txt
    │   │   ├── grid_numbers_rule.snapshot.txt
    │   │   ├── grid_rule.snapshot.txt
    │   │   ├── header.snapshot.txt
    │   │   ├── header_numbers.snapshot.txt
    │   │   ├── header_numbers_rule.snapshot.txt
    │   │   ├── header_rule.snapshot.txt
    │   │   ├── numbers.snapshot.txt
    │   │   ├── numbers_rule.snapshot.txt
    │   │   ├── plain.snapshot.txt
    │   │   └── rule.snapshot.txt
    │   ├── sample.modified.rs
    │   └── sample.rs
    ├── syntax-tests/
    │   ├── BatTestCustomAssets.sublime-syntax
    │   ├── compare_highlighted_versions.py
    │   ├── create_highlighted_versions.py
    │   ├── highlighted/
    │   │   ├── ARM Assembly/
    │   │   │   └── test.S
    │   │   ├── ASP/
    │   │   │   └── test.asp
    │   │   ├── AWK/
    │   │   │   └── quicksort.awk
    │   │   ├── ActionScript/
    │   │   │   └── test.as
    │   │   ├── Ada/
    │   │   │   ├── click.adb
    │   │   │   ├── click.ads
    │   │   │   └── click.gpr
    │   │   ├── Apache/
    │   │   │   └── httpd.conf
    │   │   ├── AppleScript/
    │   │   │   └── test.applescript
    │   │   ├── AsciiDoc/
    │   │   │   └── test.adoc
    │   │   ├── Assembly (x86_64)/
    │   │   │   └── test.nasm
    │   │   ├── Bash/
    │   │   │   ├── batgrep.sh
    │   │   │   ├── korn_shell.wrong_ext
    │   │   │   └── simple.sh
    │   │   ├── BatTestCustomAssets/
    │   │   │   └── NoColorsUnlessCustomAssetsAreUsed.battestcustomassets
    │   │   ├── Batch/
    │   │   │   └── build.bat
    │   │   ├── BibTeX/
    │   │   │   └── test.bib
    │   │   ├── C/
    │   │   │   └── test.c
    │   │   ├── C-Sharp/
    │   │   │   └── Stack.cs
    │   │   ├── CFML/
    │   │   │   └── test.cfml
    │   │   ├── CMake/
    │   │   │   └── CMakeLists.txt
    │   │   ├── COBOL/
    │   │   │   ├── payroll.cbl
    │   │   │   └── test.cbl
    │   │   ├── CSS/
    │   │   │   └── style.css
    │   │   ├── CSV/
    │   │   │   ├── comma-delimited.csv
    │   │   │   ├── comma_in_quotes.csv
    │   │   │   ├── decimals_comma_decimal_point_pipe_delimited.csv
    │   │   │   ├── decimals_comma_decimal_point_semicolon_delimited.csv
    │   │   │   └── simple.tsv
    │   │   ├── Cabal/
    │   │   │   └── semantic.cabal
    │   │   ├── Clojure/
    │   │   │   └── test.clj
    │   │   ├── CoffeeScript/
    │   │   │   └── coffeescript.coffee
    │   │   ├── Cpp/
    │   │   │   └── test.cpp
    │   │   ├── CpuInfo/
    │   │   │   └── test.cpuinfo
    │   │   ├── Crontab/
    │   │   │   └── crontab.tab
    │   │   ├── Crystal/
    │   │   │   └── test.cr
    │   │   ├── D/
    │   │   │   └── test.d
    │   │   ├── Dart/
    │   │   │   ├── inner_comment.dart
    │   │   │   └── test.dart
    │   │   ├── Diff/
    │   │   │   └── 82e7786e747b1fcfac1f963ae6415a22ec9caae1.diff
    │   │   ├── Dockerfile/
    │   │   │   └── Dockerfile
    │   │   ├── Elixir/
    │   │   │   └── command.ex
    │   │   ├── Elm/
    │   │   │   └── test.elm
    │   │   ├── Email/
    │   │   │   └── test.eml
    │   │   ├── Erlang/
    │   │   │   └── bat_erlang.erl
    │   │   ├── EtcGroup/
    │   │   │   └── test.group
    │   │   ├── F#/
    │   │   │   └── string.fs
    │   │   ├── Fish/
    │   │   │   └── test.fish
    │   │   ├── Fortran (Fixed Form)/
    │   │   │   └── quicksort_real_F77.F
    │   │   ├── Fortran (Modern)/
    │   │   │   └── test_savetxt.f90
    │   │   ├── Fortran Namelist/
    │   │   │   └── test.namelist
    │   │   ├── Fstab/
    │   │   │   └── fstab
    │   │   ├── GDScript/
    │   │   │   └── test.gd
    │   │   ├── GLSL/
    │   │   │   └── test.glsl
    │   │   ├── Git Attributes/
    │   │   │   └── example.gitattributes
    │   │   ├── Git Config/
    │   │   │   └── text.gitconfig
    │   │   ├── Git Ignore/
    │   │   │   └── test.gitignore
    │   │   ├── Go/
    │   │   │   ├── go.mod
    │   │   │   ├── go.sum
    │   │   │   └── main.go
    │   │   ├── GraphQL/
    │   │   │   └── test.graphql
    │   │   ├── Graphviz DOT/
    │   │   │   ├── test_digraph.dot
    │   │   │   └── test_graph.dot
    │   │   ├── Groff/
    │   │   │   └── rustdoc.1
    │   │   ├── Groovy/
    │   │   │   └── test.groovy
    │   │   ├── HTML/
    │   │   │   └── test.html
    │   │   ├── Haskell/
    │   │   │   └── test.hs
    │   │   ├── Hosts/
    │   │   │   └── hosts
    │   │   ├── INI/
    │   │   │   ├── test.inf
    │   │   │   └── test.ini
    │   │   ├── Idris2/
    │   │   │   └── test.idr
    │   │   ├── Ignored suffixes/
    │   │   │   ├── test.rs.bak
    │   │   │   ├── test.rs.dpkg-dist
    │   │   │   ├── test.rs.dpkg-old
    │   │   │   ├── test.rs.in
    │   │   │   ├── test.rs.in.in
    │   │   │   ├── test.rs.old
    │   │   │   ├── test.rs.orig
    │   │   │   ├── test.rs.orig~
    │   │   │   ├── test.rs.rpmnew
    │   │   │   ├── test.rs.rpmorig
    │   │   │   ├── test.rs.rpmsave
    │   │   │   ├── test.rs.ucf-dist
    │   │   │   ├── test.rs.ucf-new
    │   │   │   ├── test.rs.ucf-old
    │   │   │   ├── test.rs~
    │   │   │   └── test.unknown~
    │   │   ├── JQ/
    │   │   │   └── sample.jq
    │   │   ├── JSON/
    │   │   │   ├── example.ndjson
    │   │   │   └── test.json
    │   │   ├── Java/
    │   │   │   └── test.java
    │   │   ├── Java Server Page (JSP)/
    │   │   │   └── sessionDetail.jsp
    │   │   ├── JavaScript/
    │   │   │   └── test.js
    │   │   ├── Jinja2/
    │   │   │   └── template.jinja2
    │   │   ├── Julia/
    │   │   │   └── test.jl
    │   │   ├── Kotlin/
    │   │   │   └── test.kt
    │   │   ├── LLVM/
    │   │   │   └── test.ll
    │   │   ├── Lean/
    │   │   │   └── test.lean
    │   │   ├── Less/
    │   │   │   └── example.less
    │   │   ├── Lisp/
    │   │   │   └── utils.lisp
    │   │   ├── Literate Haskell/
    │   │   │   └── Main.lhs
    │   │   ├── LiveScript/
    │   │   │   └── livescript-demo.ls
    │   │   ├── Log/
    │   │   │   └── example.log
    │   │   ├── Lua/
    │   │   │   └── test.lua
    │   │   ├── MATLAB/
    │   │   │   └── test.matlab
    │   │   ├── Makefile/
    │   │   │   └── Makefile
    │   │   ├── Manpage/
    │   │   │   ├── bat-0.16.man
    │   │   │   ├── fzf-0.33.0.man
    │   │   │   ├── select-2.man
    │   │   │   ├── sway.5.man
    │   │   │   └── uwsm-0.26.3.man
    │   │   ├── Markdown/
    │   │   │   ├── example.md
    │   │   │   └── typescript.md
    │   │   ├── MediaWiki/
    │   │   │   └── test.mediawiki
    │   │   ├── MemInfo/
    │   │   │   └── test.meminfo
    │   │   ├── NAnt Build File/
    │   │   │   └── Default.build
    │   │   ├── NSE/
    │   │   │   └── test.nse
    │   │   ├── NSIS/
    │   │   │   └── test.nsi
    │   │   ├── Ninja/
    │   │   │   └── test.ninja
    │   │   ├── OCaml/
    │   │   │   └── syntax-test.ml
    │   │   ├── Objective-C/
    │   │   │   └── test.m
    │   │   ├── Objective-C++/
    │   │   │   └── test.mm
    │   │   ├── Odin/
    │   │   │   └── test.odin
    │   │   ├── PHP/
    │   │   │   └── test.php
    │   │   ├── Pascal/
    │   │   │   └── test.pas
    │   │   ├── Passwd/
    │   │   │   └── passwd
    │   │   ├── Perl/
    │   │   │   └── test.pl
    │   │   ├── Plaintext/
    │   │   │   └── plaintext.txt
    │   │   ├── PowerShell/
    │   │   │   └── test.ps1
    │   │   ├── Protocol Buffer/
    │   │   │   └── vyconf.proto
    │   │   ├── Puppet/
    │   │   │   └── manifest_large_exported_classes_node.pp
    │   │   ├── PureScript/
    │   │   │   └── test.purs
    │   │   ├── Python/
    │   │   │   └── battest.py
    │   │   ├── QML/
    │   │   │   └── BatSyntaxTest.qml
    │   │   ├── R/
    │   │   │   └── test.r
    │   │   ├── Racket/
    │   │   │   └── test.rkt
    │   │   ├── Rego/
    │   │   │   └── src_test.rego
    │   │   ├── Regular Expression/
    │   │   │   └── test.re
    │   │   ├── Requirements.txt/
    │   │   │   └── requirements.txt
    │   │   ├── Robot Framework/
    │   │   │   └── recipe141_aws_simple_storage_service.robot
    │   │   ├── Ruby/
    │   │   │   └── output.rb
    │   │   ├── Ruby Haml/
    │   │   │   └── test.html.haml
    │   │   ├── Ruby On Rails/
    │   │   │   └── test.rb
    │   │   ├── Rust/
    │   │   │   └── output.rs
    │   │   ├── SCSS/
    │   │   │   └── example.scss
    │   │   ├── SLS/
    │   │   │   └── test.sls
    │   │   ├── SML/
    │   │   │   └── sample.sml
    │   │   ├── SQL/
    │   │   │   └── ims.sql
    │   │   ├── SSH Config/
    │   │   │   └── ssh_config
    │   │   ├── SSHD Config/
    │   │   │   └── sshd_config
    │   │   ├── Sass/
    │   │   │   └── example.sass
    │   │   ├── Scala/
    │   │   │   └── ConcurrentEffectLaws.scala
    │   │   ├── Slim/
    │   │   │   └── test.slim
    │   │   ├── Solidity/
    │   │   │   └── ERC721.sol
    │   │   ├── Strace/
    │   │   │   └── ls.strace
    │   │   ├── Stylus/
    │   │   │   └── gradients.styl
    │   │   ├── Svelte/
    │   │   │   └── App.svelte
    │   │   ├── Swift/
    │   │   │   └── test.swift
    │   │   ├── Syslog/
    │   │   │   └── example.syslog
    │   │   ├── SystemVerilog/
    │   │   │   └── output.sv
    │   │   ├── TOML/
    │   │   │   └── Cargo.toml
    │   │   ├── Tcl/
    │   │   │   └── test.tcl
    │   │   ├── TeX/
    │   │   │   └── main.tex
    │   │   ├── Terraform/
    │   │   │   └── main.tf
    │   │   ├── Textile/
    │   │   │   └── test.textile
    │   │   ├── Todo.txt/
    │   │   │   └── todo.txt
    │   │   ├── TypeScript/
    │   │   │   ├── example.cts
    │   │   │   └── example.ts
    │   │   ├── TypeScriptReact/
    │   │   │   └── app.tsx
    │   │   ├── Typst/
    │   │   │   └── test.typ
    │   │   ├── VHDL/
    │   │   │   └── test.vhdl
    │   │   ├── Verilog/
    │   │   │   └── div_pipelined.v
    │   │   ├── VimHelp/
    │   │   │   └── helphelp.txt
    │   │   ├── VimL/
    │   │   │   └── source.vim
    │   │   ├── Vue/
    │   │   │   └── example.vue
    │   │   ├── Vyper/
    │   │   │   └── crowdsale.vy
    │   │   ├── WGSL/
    │   │   │   └── test.wgsl
    │   │   ├── XAML/
    │   │   │   └── ItemPage.xaml
    │   │   ├── XML/
    │   │   │   ├── Directory.Build.props
    │   │   │   ├── console.csproj
    │   │   │   ├── example.xml
    │   │   │   └── projectname.targets
    │   │   ├── YAML/
    │   │   │   └── example.yaml
    │   │   ├── Zig/
    │   │   │   └── example.zig
    │   │   ├── cmd-help/
    │   │   │   └── test.cmd-help
    │   │   ├── dash/
    │   │   │   └── shfm
    │   │   ├── debsources/
    │   │   │   └── sources.list
    │   │   ├── fish_history/
    │   │   │   └── fish_history
    │   │   ├── gnuplot/
    │   │   │   └── test.gp
    │   │   ├── http-request-response/
    │   │   │   └── example.http
    │   │   ├── jsonnet/
    │   │   │   └── stdlib.jsonnet
    │   │   ├── nginx/
    │   │   │   └── nginx.conf
    │   │   ├── nim/
    │   │   │   ├── main.nim
    │   │   │   └── test.nimble
    │   │   ├── nix/
    │   │   │   └── test.nix
    │   │   ├── orgmode/
    │   │   │   └── test.org
    │   │   ├── reStructuredText/
    │   │   │   └── reference.rst
    │   │   ├── resolv.conf/
    │   │   │   └── resolv.conf
    │   │   └── varlink/
    │   │       └── org.varlink.certification.varlink
    │   ├── regression_test.sh
    │   ├── source/
    │   │   ├── ARM Assembly/
    │   │   │   └── test.S
    │   │   ├── ASP/
    │   │   │   └── test.asp
    │   │   ├── AWK/
    │   │   │   └── quicksort.awk
    │   │   ├── ActionScript/
    │   │   │   └── test.as
    │   │   ├── Ada/
    │   │   │   ├── LICENSE.md
    │   │   │   ├── click.adb
    │   │   │   ├── click.ads
    │   │   │   └── click.gpr
    │   │   ├── Apache/
    │   │   │   └── httpd.conf
    │   │   ├── AppleScript/
    │   │   │   └── test.applescript
    │   │   ├── AsciiDoc/
    │   │   │   └── test.adoc
    │   │   ├── Assembly (x86_64)/
    │   │   │   └── test.nasm
    │   │   ├── Bash/
    │   │   │   ├── batgrep.sh
    │   │   │   ├── korn_shell.wrong_ext
    │   │   │   └── simple.sh
    │   │   ├── BatTestCustomAssets/
    │   │   │   └── NoColorsUnlessCustomAssetsAreUsed.battestcustomassets
    │   │   ├── Batch/
    │   │   │   ├── LICENSE.md
    │   │   │   └── build.bat
    │   │   ├── BibTeX/
    │   │   │   └── test.bib
    │   │   ├── C/
    │   │   │   └── test.c
    │   │   ├── C-Sharp/
    │   │   │   └── Stack.cs
    │   │   ├── CFML/
    │   │   │   └── test.cfml
    │   │   ├── CMake/
    │   │   │   └── CMakeLists.txt
    │   │   ├── COBOL/
    │   │   │   ├── payroll.cbl
    │   │   │   └── test.cbl
    │   │   ├── CSS/
    │   │   │   └── style.css
    │   │   ├── CSV/
    │   │   │   ├── LICENSE.md
    │   │   │   ├── comma-delimited.csv
    │   │   │   ├── comma_in_quotes.csv
    │   │   │   ├── decimals_comma_decimal_point_pipe_delimited.csv
    │   │   │   ├── decimals_comma_decimal_point_semicolon_delimited.csv
    │   │   │   └── simple.tsv
    │   │   ├── Cabal/
    │   │   │   ├── LICENSE.md
    │   │   │   └── semantic.cabal
    │   │   ├── Clojure/
    │   │   │   └── test.clj
    │   │   ├── CoffeeScript/
    │   │   │   ├── LICENSE.md
    │   │   │   └── coffeescript.coffee
    │   │   ├── Cpp/
    │   │   │   └── test.cpp
    │   │   ├── CpuInfo/
    │   │   │   └── test.cpuinfo
    │   │   ├── Crontab/
    │   │   │   └── crontab.tab
    │   │   ├── Crystal/
    │   │   │   └── test.cr
    │   │   ├── D/
    │   │   │   └── test.d
    │   │   ├── Dart/
    │   │   │   ├── inner_comment.dart
    │   │   │   └── test.dart
    │   │   ├── Diff/
    │   │   │   └── 82e7786e747b1fcfac1f963ae6415a22ec9caae1.diff
    │   │   ├── Dockerfile/
    │   │   │   └── Dockerfile
    │   │   ├── DotENV/
    │   │   │   └── LICENSE.md
    │   │   ├── Elixir/
    │   │   │   ├── LICENSE.md
    │   │   │   └── command.ex
    │   │   ├── Elm/
    │   │   │   ├── LICENSE.md
    │   │   │   └── test.elm
    │   │   ├── Email/
    │   │   │   └── test.eml
    │   │   ├── Erlang/
    │   │   │   └── bat_erlang.erl
    │   │   ├── EtcGroup/
    │   │   │   └── test.group
    │   │   ├── F#/
    │   │   │   ├── LICENSE.md
    │   │   │   └── string.fs
    │   │   ├── Fish/
    │   │   │   └── test.fish
    │   │   ├── Fortran (Fixed Form)/
    │   │   │   ├── LICENSE.md
    │   │   │   └── quicksort_real_F77.F
    │   │   ├── Fortran (Modern)/
    │   │   │   ├── LICENSE.md
    │   │   │   └── test_savetxt.f90
    │   │   ├── Fortran Namelist/
    │   │   │   └── test.namelist
    │   │   ├── Fstab/
    │   │   │   └── fstab
    │   │   ├── GDScript/
    │   │   │   └── test.gd
    │   │   ├── GLSL/
    │   │   │   └── test.glsl
    │   │   ├── Git Attributes/
    │   │   │   └── example.gitattributes
    │   │   ├── Git Config/
    │   │   │   ├── LICENSE.md
    │   │   │   └── text.gitconfig
    │   │   ├── Git Ignore/
    │   │   │   ├── LICENSE.md
    │   │   │   └── test.gitignore
    │   │   ├── Go/
    │   │   │   ├── LICENSE.md
    │   │   │   ├── go.mod
    │   │   │   ├── go.sum
    │   │   │   └── main.go
    │   │   ├── GraphQL/
    │   │   │   └── test.graphql
    │   │   ├── Graphviz DOT/
    │   │   │   ├── LICENSE.md
    │   │   │   ├── test_digraph.dot
    │   │   │   └── test_graph.dot
    │   │   ├── Groff/
    │   │   │   ├── LICENSE.md
    │   │   │   └── rustdoc.1
    │   │   ├── Groovy/
    │   │   │   └── test.groovy
    │   │   ├── HTML/
    │   │   │   └── test.html
    │   │   ├── Haskell/
    │   │   │   └── test.hs
    │   │   ├── Hosts/
    │   │   │   └── hosts
    │   │   ├── INI/
    │   │   │   ├── test.inf
    │   │   │   └── test.ini
    │   │   ├── Idris2/
    │   │   │   ├── LICENSE.md
    │   │   │   └── test.idr
    │   │   ├── Ignored suffixes/
    │   │   │   ├── test.rs.bak
    │   │   │   ├── test.rs.dpkg-dist
    │   │   │   ├── test.rs.dpkg-old
    │   │   │   ├── test.rs.in
    │   │   │   ├── test.rs.in.in
    │   │   │   ├── test.rs.old
    │   │   │   ├── test.rs.orig
    │   │   │   ├── test.rs.orig~
    │   │   │   ├── test.rs.rpmnew
    │   │   │   ├── test.rs.rpmorig
    │   │   │   ├── test.rs.rpmsave
    │   │   │   ├── test.rs.ucf-dist
    │   │   │   ├── test.rs.ucf-new
    │   │   │   ├── test.rs.ucf-old
    │   │   │   ├── test.rs~
    │   │   │   └── test.unknown~
    │   │   ├── JQ/
    │   │   │   ├── LICENSE.md
    │   │   │   └── sample.jq
    │   │   ├── JSON/
    │   │   │   ├── example.ndjson
    │   │   │   └── test.json
    │   │   ├── Java/
    │   │   │   └── test.java
    │   │   ├── Java Server Page (JSP)/
    │   │   │   ├── LICENSE.md
    │   │   │   ├── NOTICE
    │   │   │   └── sessionDetail.jsp
    │   │   ├── JavaScript/
    │   │   │   └── test.js
    │   │   ├── Jinja2/
    │   │   │   └── template.jinja2
    │   │   ├── Julia/
    │   │   │   └── test.jl
    │   │   ├── Kotlin/
    │   │   │   └── test.kt
    │   │   ├── LLVM/
    │   │   │   └── test.ll
    │   │   ├── Lean/
    │   │   │   ├── LICENSE.md
    │   │   │   └── test.lean
    │   │   ├── Less/
    │   │   │   └── example.less
    │   │   ├── Lisp/
    │   │   │   ├── LICENSE.md
    │   │   │   └── utils.lisp
    │   │   ├── Literate Haskell/
    │   │   │   └── Main.lhs
    │   │   ├── LiveScript/
    │   │   │   ├── LICENSE.md
    │   │   │   └── livescript-demo.ls
    │   │   ├── Log/
    │   │   │   └── example.log
    │   │   ├── Lua/
    │   │   │   └── test.lua
    │   │   ├── MATLAB/
    │   │   │   ├── LICENSE.md
    │   │   │   └── test.matlab
    │   │   ├── Makefile/
    │   │   │   ├── LICENSE.md
    │   │   │   └── Makefile
    │   │   ├── Manpage/
    │   │   │   ├── bat-0.16.man
    │   │   │   ├── fzf-0.33.0.man
    │   │   │   ├── select-2.man
    │   │   │   ├── sway.5.man
    │   │   │   └── uwsm-0.26.3.man
    │   │   ├── Markdown/
    │   │   │   ├── example.md
    │   │   │   └── typescript.md
    │   │   ├── MediaWiki/
    │   │   │   └── test.mediawiki
    │   │   ├── MemInfo/
    │   │   │   └── test.meminfo
    │   │   ├── NAnt Build File/
    │   │   │   ├── Default.build
    │   │   │   └── LICENSE.md
    │   │   ├── NSE/
    │   │   │   └── test.nse
    │   │   ├── NSIS/
    │   │   │   └── test.nsi
    │   │   ├── Ninja/
    │   │   │   ├── LICENSE.md
    │   │   │   └── test.ninja
    │   │   ├── OCaml/
    │   │   │   └── syntax-test.ml
    │   │   ├── Objective-C/
    │   │   │   └── test.m
    │   │   ├── Objective-C++/
    │   │   │   └── test.mm
    │   │   ├── Odin/
    │   │   │   └── test.odin
    │   │   ├── PHP/
    │   │   │   └── test.php
    │   │   ├── Pascal/
    │   │   │   └── test.pas
    │   │   ├── Passwd/
    │   │   │   └── passwd
    │   │   ├── Perl/
    │   │   │   └── test.pl
    │   │   ├── Plaintext/
    │   │   │   ├── README.md
    │   │   │   ├── bat_options
    │   │   │   └── plaintext.txt
    │   │   ├── PowerShell/
    │   │   │   └── test.ps1
    │   │   ├── Protocol Buffer/
    │   │   │   └── vyconf.proto
    │   │   ├── Puppet/
    │   │   │   ├── LICENSE.md
    │   │   │   └── manifest_large_exported_classes_node.pp
    │   │   ├── PureScript/
    │   │   │   └── test.purs
    │   │   ├── Python/
    │   │   │   └── battest.py
    │   │   ├── QML/
    │   │   │   └── BatSyntaxTest.qml
    │   │   ├── R/
    │   │   │   └── test.r
    │   │   ├── Racket/
    │   │   │   └── test.rkt
    │   │   ├── Rego/
    │   │   │   ├── LICENSE.md
    │   │   │   └── src_test.rego
    │   │   ├── Regular Expression/
    │   │   │   └── test.re
    │   │   ├── Requirements.txt/
    │   │   │   └── requirements.txt
    │   │   ├── Robot Framework/
    │   │   │   ├── LICENSE.md
    │   │   │   └── recipe141_aws_simple_storage_service.robot
    │   │   ├── Ruby/
    │   │   │   └── output.rb
    │   │   ├── Ruby Haml/
    │   │   │   └── test.html.haml
    │   │   ├── Ruby On Rails/
    │   │   │   └── test.rb
    │   │   ├── Rust/
    │   │   │   └── output.rs
    │   │   ├── SCSS/
    │   │   │   └── example.scss
    │   │   ├── SLS/
    │   │   │   └── test.sls
    │   │   ├── SML/
    │   │   │   └── sample.sml
    │   │   ├── SQL/
    │   │   │   └── ims.sql
    │   │   ├── SSH Config/
    │   │   │   └── ssh_config
    │   │   ├── SSHD Config/
    │   │   │   └── sshd_config
    │   │   ├── Sass/
    │   │   │   └── example.sass
    │   │   ├── Scala/
    │   │   │   ├── ConcurrentEffectLaws.scala
    │   │   │   └── LICENSE.md
    │   │   ├── Slim/
    │   │   │   └── test.slim
    │   │   ├── Solidity/
    │   │   │   ├── ERC721.sol
    │   │   │   └── LICENSE.md
    │   │   ├── Strace/
    │   │   │   └── ls.strace
    │   │   ├── Stylus/
    │   │   │   ├── LICENSE.md
    │   │   │   └── gradients.styl
    │   │   ├── Svelte/
    │   │   │   ├── App.svelte
    │   │   │   └── LICENSE.md
    │   │   ├── Swift/
    │   │   │   └── test.swift
    │   │   ├── Syslog/
    │   │   │   └── example.syslog
    │   │   ├── SystemVerilog/
    │   │   │   └── output.sv
    │   │   ├── TOML/
    │   │   │   └── Cargo.toml
    │   │   ├── Tcl/
    │   │   │   └── test.tcl
    │   │   ├── TeX/
    │   │   │   └── main.tex
    │   │   ├── Terraform/
    │   │   │   └── main.tf
    │   │   ├── Textile/
    │   │   │   └── test.textile
    │   │   ├── Todo.txt/
    │   │   │   └── todo.txt
    │   │   ├── TypeScript/
    │   │   │   ├── LICENSE.md
    │   │   │   ├── example.cts
    │   │   │   └── example.ts
    │   │   ├── TypeScriptReact/
    │   │   │   ├── LICENSE.md
    │   │   │   └── app.tsx
    │   │   ├── Typst/
    │   │   │   └── test.typ
    │   │   ├── VHDL/
    │   │   │   └── test.vhdl
    │   │   ├── Verilog/
    │   │   │   ├── LICENSE.md
    │   │   │   └── div_pipelined.v
    │   │   ├── VimHelp/
    │   │   │   └── helphelp.txt
    │   │   ├── VimL/
    │   │   │   └── source.vim
    │   │   ├── Vue/
    │   │   │   └── example.vue
    │   │   ├── Vyper/
    │   │   │   ├── LICENSE.md
    │   │   │   └── crowdsale.vy
    │   │   ├── WGSL/
    │   │   │   ├── LICENSE.md
    │   │   │   └── test.wgsl
    │   │   ├── XAML/
    │   │   │   ├── ItemPage.xaml
    │   │   │   └── LICENSE.md
    │   │   ├── XML/
    │   │   │   ├── Directory.Build.props
    │   │   │   ├── console.csproj
    │   │   │   ├── example.xml
    │   │   │   └── projectname.targets
    │   │   ├── YAML/
    │   │   │   └── example.yaml
    │   │   ├── Zig/
    │   │   │   └── example.zig
    │   │   ├── cmd-help/
    │   │   │   └── test.cmd-help
    │   │   ├── dash/
    │   │   │   ├── LICENSE.md
    │   │   │   └── shfm
    │   │   ├── debsources/
    │   │   │   └── sources.list
    │   │   ├── fish_history/
    │   │   │   └── fish_history
    │   │   ├── gnuplot/
    │   │   │   └── test.gp
    │   │   ├── http-request-response/
    │   │   │   └── example.http
    │   │   ├── jsonnet/
    │   │   │   ├── LICENSE.md
    │   │   │   └── stdlib.jsonnet
    │   │   ├── nginx/
    │   │   │   └── nginx.conf
    │   │   ├── nim/
    │   │   │   ├── main.nim
    │   │   │   └── test.nimble
    │   │   ├── nix/
    │   │   │   └── test.nix
    │   │   ├── orgmode/
    │   │   │   └── test.org
    │   │   ├── reStructuredText/
    │   │   │   └── reference.rst
    │   │   ├── resolv.conf/
    │   │   │   └── resolv.conf
    │   │   └── varlink/
    │   │       ├── LICENSE.md
    │   │       └── org.varlink.certification.varlink
    │   ├── test_custom_assets.sh
    │   └── update.sh
    ├── system_wide_config.rs
    ├── test_pretty_printer.rs
    ├── tester/
    │   └── mod.rs
    └── utils/
        ├── command.rs
        ├── mocked_pagers.rs
        └── mod.rs

================================================
FILE CONTENTS
================================================

================================================
FILE: .cargo/audit.toml
================================================
[advisories]
ignore = ["RUSTSEC-2024-0320", "RUSTSEC-2024-0421"]


================================================
FILE: .envrc
================================================
use flake


================================================
FILE: .github/.codecov.yml
================================================
comment: false


================================================
FILE: .github/FUNDING.yml
================================================
github: [sharkdp, keith-hall, Enselic]


================================================
FILE: .github/ISSUE_TEMPLATE/bug_report.md
================================================
---
name: Bug Report
about: Report a bug.
title: ""
labels: bug
assignees: ''

---

<!--

Hey there, thank you for reporting a bug!

Please note that the following bugs have already been reported:

* dpkg: error processing archive /some/path/some-program.deb (--unpack):
  trying to overwrite '/usr/.crates2.json'

  See https://github.com/sharkdp/bat/issues/938

-->

**What steps will reproduce the bug?**

1. step 1
2. step 2
3. ...

**What happens?**

...

**What did you expect to happen instead?**

...


**How did you install `bat`?**

<!-- apt-get, homebrew, GitHub release, etc. -->

---

**bat version and environment**

<!--
In order to reproduce your issue, please add some information about the environment
in which you're running bat. To do this, run the full `bat` command that demonstrates
the bug, and attach the `--diagnostic` option:

    bat [other options and arguments…] --diagnostic

Finally, paste the Markdown output here. Please make sure that it does not reveal any
personal information.


If you are running bat 0.17.1 or older (where --diagnostic is not available), please
run the script at

    https://github.com/sharkdp/bat/blob/master/diagnostics/info.sh

(click "Raw" to get the actual source code) and paste the Markdown output here. If you
are on Windows, please let us know your bat version and your Windows version.
-->


================================================
FILE: .github/ISSUE_TEMPLATE/config.yml
================================================
blank_issues_enabled: true


================================================
FILE: .github/ISSUE_TEMPLATE/feature_request.md
================================================
---
name: Feature Request
about: Suggest an idea for this project.
title: ''
labels: feature-request
assignees: ''

---



================================================
FILE: .github/ISSUE_TEMPLATE/question.md
================================================
---
name: Question
about: Ask a question about 'bat'.
title: ''
labels: question
assignees: ''

---

<!-- Using a normal ticket is still fine, but feel free to ask your
questions about bat on https://github.com/sharkdp/bat/discussions instead. -->


================================================
FILE: .github/ISSUE_TEMPLATE/syntax_request.md
================================================
---
name: Syntax Request
about: Request adding a new syntax to bat.
title: ""
labels: syntax-request
assignees: ''

---

<!--
BEFORE YOU MAKE A REQUEST:

Are you looking to add a new syntax to use on one of your devices?
Bat supports locally-installed language definitions. See the link below:

https://github.com/sharkdp/bat#adding-new-syntaxes--language-definitions

If you think adding this syntax would help others as well, please make sure that it meets our
guidelines for adding new syntaxes:

 - 10,000 downloads on packagecontrol.io
-->


**Syntax:**
[Name or description of the syntax/language here]

**Guideline Criteria:**
[packagecontrol.io link here]


================================================
FILE: .github/dependabot.yml
================================================
version: 2
updates:
- package-ecosystem: cargo
  directory: "/"
  schedule:
    interval: monthly
    time: "04:00"
    timezone: Europe/Berlin
  ignore:
  - dependency-name: git2
    versions:
    - 0.13.17
- package-ecosystem: gitsubmodule
  directory: "/"
  schedule:
    interval: monthly
    time: "04:00"
    timezone: Europe/Berlin
- package-ecosystem: "github-actions"
  directory: "/"
  schedule:
    interval: monthly
    time: "04:00"
    timezone: Europe/Berlin


================================================
FILE: .github/workflows/CICD.yml
================================================
name: CICD

env:
  CICD_INTERMEDIATES_DIR: "_cicd-intermediates"
  MSRV_FEATURES: --no-default-features --features minimal-application,bugreport,build-assets

on:
  workflow_dispatch:
  pull_request:
  push:
    branches:
      - master
    tags:
      - '*'

jobs:
  all-jobs:
    if: always() # Otherwise this job is skipped if the matrix job fails
    name: all-jobs
    runs-on: ubuntu-latest
    needs:
      - crate_metadata
      - lint
      - min_version
      - license_checks
      - test_with_new_syntaxes_and_themes
      - test_with_system_config
      - documentation
      - cargo-audit
      - build
    steps:
      - run: jq --exit-status 'all(.result == "success")' <<< '${{ toJson(needs) }}'

  crate_metadata:
    name: Extract crate metadata
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v6
    - name: Extract crate information
      id: crate_metadata
      run: |
        cargo metadata --no-deps --format-version 1 | jq -r '"name=" + .packages[0].name' | tee -a $GITHUB_OUTPUT
        cargo metadata --no-deps --format-version 1 | jq -r '"version=" + .packages[0].version' | tee -a $GITHUB_OUTPUT
        cargo metadata --no-deps --format-version 1 | jq -r '"maintainer=" + .packages[0].authors[0]' | tee -a $GITHUB_OUTPUT
        cargo metadata --no-deps --format-version 1 | jq -r '"homepage=" + .packages[0].homepage' | tee -a $GITHUB_OUTPUT
        cargo metadata --no-deps --format-version 1 | jq -r '"msrv=" + .packages[0].rust_version' | tee -a $GITHUB_OUTPUT
    outputs:
      name: ${{ steps.crate_metadata.outputs.name }}
      version: ${{ steps.crate_metadata.outputs.version }}
      maintainer: ${{ steps.crate_metadata.outputs.maintainer }}
      homepage: ${{ steps.crate_metadata.outputs.homepage }}
      msrv: ${{ steps.crate_metadata.outputs.msrv }}

  lint:
    name: Ensure code quality
    runs-on: ubuntu-latest
    steps:
    - uses: dtolnay/rust-toolchain@stable
      with:
        components: rustfmt,clippy
    - uses: actions/checkout@v6
    - run: cargo fmt -- --check
    - run: cargo clippy --locked --all-targets --all-features -- -D warnings

  min_version:
    name: Minimum supported rust version
    runs-on: ubuntu-latest
    needs: crate_metadata
    steps:
    - name: Checkout source code
      uses: actions/checkout@v6
    - name: Install rust toolchain (v${{ needs.crate_metadata.outputs.msrv }})
      uses: dtolnay/rust-toolchain@master
      with:
        toolchain: ${{ needs.crate_metadata.outputs.msrv }}
    - name: Run tests
      run: cargo test --locked ${{ env.MSRV_FEATURES }}

  license_checks:
    name: License checks
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v6
      with:
        submodules: true # we especially want to perform license checks on submodules
    - run: tests/scripts/license-checks.sh

  test_with_new_syntaxes_and_themes:
    name: Run tests with updated syntaxes and themes
    runs-on: ubuntu-latest
    steps:
    - name: Git checkout
      uses: actions/checkout@v6
      with:
        submodules: true # we need all syntax and theme submodules
    - name: Install Rust toolchain
      uses: dtolnay/rust-toolchain@stable
    - name: Build and install bat
      run: cargo install --locked --path .
    - name: Rebuild binary assets (syntaxes and themes)
      run: bash assets/create.sh
    - name: Build and install bat with updated assets
      run: cargo install --locked --path .
    - name: Run unit tests with new syntaxes and themes
      run: cargo test --locked --release
    - name: Run ignored-by-default unit tests with new syntaxes and themes
      run: cargo test --locked --release --test assets -- --ignored
    - name: Syntax highlighting regression test
      run: tests/syntax-tests/regression_test.sh
    - name: List of languages
      run: bat --list-languages
    - name: List of themes
      run: bat --list-themes
    - name: Test custom assets
      run: tests/syntax-tests/test_custom_assets.sh

  test_with_system_config:
    name: Run tests with system wide configuration
    runs-on: ubuntu-latest
    steps:
    - name: Git checkout
      uses: actions/checkout@v6
    - name: Prepare environment variables
      run: |
        echo "BAT_SYSTEM_CONFIG_PREFIX=$GITHUB_WORKSPACE/tests/examples/system_config" >> $GITHUB_ENV
    - name: Install Rust toolchain
      uses: dtolnay/rust-toolchain@stable
    - name: Build and install bat
      run: cargo install --locked --path .
    - name: Run unit tests
      run: cargo test --locked --test system_wide_config -- --ignored

  documentation:
    name: Documentation
    runs-on: ubuntu-latest
    steps:
    - name: Git checkout
      uses: actions/checkout@v6
    - name: Install Rust toolchain
      uses: dtolnay/rust-toolchain@stable
    - name: Check documentation
      env:
        RUSTDOCFLAGS: -D warnings
      run: cargo doc --locked --no-deps --document-private-items --all-features
    - name: Show man page
      run: man $(find . -name bat.1)

  cargo-audit:
    name: cargo audit
    runs-on: ubuntu-latest
    steps:
      - run: cargo install cargo-audit --locked
      - uses: actions/checkout@v6
      - run: cargo audit

  build:
    name: ${{ matrix.job.target }} (${{ matrix.job.os }})
    runs-on: ${{ matrix.job.os }}
    needs: crate_metadata
    strategy:
      fail-fast: false
      matrix:
        job:
          - { target: aarch64-unknown-linux-musl  , os: ubuntu-latest , dpkg_arch: arm64,            use-cross: true }
          - { target: aarch64-unknown-linux-gnu   , os: ubuntu-latest , dpkg_arch: arm64,            use-cross: true }
          - { target: arm-unknown-linux-gnueabihf , os: ubuntu-latest , dpkg_arch: armhf,            use-cross: true }
          - { target: arm-unknown-linux-musleabihf, os: ubuntu-latest , dpkg_arch: musl-linux-armhf, use-cross: true }
          - { target: i686-pc-windows-msvc        , os: windows-2025  ,                                              }
          - { target: i686-unknown-linux-gnu      , os: ubuntu-latest , dpkg_arch: i686,             use-cross: true }
          - { target: i686-unknown-linux-musl     , os: ubuntu-latest , dpkg_arch: musl-linux-i686,  use-cross: true }
          - { target: x86_64-apple-darwin         , os: macos-15-intel,                                              }
          - { target: aarch64-apple-darwin        , os: macos-latest  ,                                              }
          - { target: x86_64-pc-windows-msvc      , os: windows-2025  ,                                              }
          - { target: aarch64-pc-windows-msvc     , os: windows-11-arm,                                              }
          - { target: x86_64-unknown-linux-gnu    , os: ubuntu-latest , dpkg_arch: amd64,            use-cross: true }
          - { target: x86_64-unknown-linux-musl   , os: ubuntu-latest , dpkg_arch: musl-linux-amd64, use-cross: true }
    env:
      BUILD_CMD: cargo
    steps:
    - name: Checkout source code
      uses: actions/checkout@v6

    - name: Install prerequisites
      shell: bash
      run: |
        case ${{ matrix.job.target }} in
          arm-unknown-linux-*) sudo apt-get -y update ; sudo apt-get -y install gcc-arm-linux-gnueabihf ;;
          aarch64-unknown-linux-gnu) sudo apt-get -y update ; sudo apt-get -y install gcc-aarch64-linux-gnu ;;
        esac

    - name: Install Rust toolchain
      uses: dtolnay/rust-toolchain@stable
      with:
        targets: ${{ matrix.job.target }}

    - name: Install cross
      if: matrix.job.use-cross
      uses: taiki-e/install-action@v2
      with:
        tool: cross

    - name: Overwrite build command env variable
      if: matrix.job.use-cross
      shell: bash
      run: echo "BUILD_CMD=cross" >> $GITHUB_ENV

    - name: Show version information (Rust, cargo, GCC)
      shell: bash
      run: |
        gcc --version || true
        rustup -V
        rustup toolchain list
        rustup default
        cargo -V
        rustc -V

    - name: Build
      shell: bash
      run: $BUILD_CMD build --locked --release --target=${{ matrix.job.target }}

    - name: Set binary name & path
      id: bin
      shell: bash
      run: |
        # Figure out suffix of binary
        EXE_suffix=""
        case ${{ matrix.job.target }} in
          *-pc-windows-*) EXE_suffix=".exe" ;;
        esac;

        # Setup paths
        BIN_NAME="${{ needs.crate_metadata.outputs.name }}${EXE_suffix}"
        BIN_PATH="target/${{ matrix.job.target }}/release/${BIN_NAME}"

        # Let subsequent steps know where to find the binary
        echo "BIN_PATH=${BIN_PATH}" >> $GITHUB_OUTPUT
        echo "BIN_NAME=${BIN_NAME}" >> $GITHUB_OUTPUT

    - name: Set testing options
      id: test-options
      shell: bash
      run: |
        # test only library unit tests and binary for arm-type targets
        unset CARGO_TEST_OPTIONS
        unset CARGO_TEST_OPTIONS ; case ${{ matrix.job.target }} in arm-* | aarch64-*) CARGO_TEST_OPTIONS="--lib --bin ${{ needs.crate_metadata.outputs.name }}" ;; esac;
        echo "CARGO_TEST_OPTIONS=${CARGO_TEST_OPTIONS}" >> $GITHUB_OUTPUT

    - name: Run tests
      shell: bash
      run: |
        if [[ ${{ matrix.job.os }} = windows-* ]]
        then
          powershell.exe -command "$BUILD_CMD test --locked --target=${{ matrix.job.target }} ${{ steps.test-options.outputs.CARGO_TEST_OPTIONS}}"
        else
          $BUILD_CMD test --locked --target=${{ matrix.job.target }} ${{ steps.test-options.outputs.CARGO_TEST_OPTIONS}}
        fi

    - name: Run bat
      shell: bash
      run: $BUILD_CMD run --locked --target=${{ matrix.job.target }} -- --paging=never --color=always --theme=ansi Cargo.toml src/config.rs

    - name: Show diagnostics (bat --diagnostic)
      shell: bash
      run: $BUILD_CMD run --locked --target=${{ matrix.job.target }} -- --paging=never --color=always --theme=ansi Cargo.toml src/config.rs --diagnostic

    - name: "Feature check: regex-onig"
      shell: bash
      run: $BUILD_CMD check --locked --target=${{ matrix.job.target }} --verbose --lib --no-default-features --features regex-onig

    - name: "Feature check: regex-onig,git"
      shell: bash
      run: $BUILD_CMD check --locked --target=${{ matrix.job.target }} --verbose --lib --no-default-features --features regex-onig,git

    - name: "Feature check: regex-onig,paging"
      shell: bash
      run: $BUILD_CMD check --locked --target=${{ matrix.job.target }} --verbose --lib --no-default-features --features regex-onig,paging

    - name: "Feature check: regex-onig,git,paging"
      shell: bash
      run: $BUILD_CMD check --locked --target=${{ matrix.job.target }} --verbose --lib --no-default-features --features regex-onig,git,paging

    - name: "Feature check: minimal-application"
      shell: bash
      run: $BUILD_CMD check --locked --target=${{ matrix.job.target }} --verbose --no-default-features --features minimal-application

    - name: Create tarball
      id: package
      shell: bash
      run: |
        PKG_suffix=".tar.gz" ; case ${{ matrix.job.target }} in *-pc-windows-*) PKG_suffix=".zip" ;; esac;
        PKG_BASENAME=${{ needs.crate_metadata.outputs.name }}-v${{ needs.crate_metadata.outputs.version }}-${{ matrix.job.target }}
        PKG_NAME=${PKG_BASENAME}${PKG_suffix}
        echo "PKG_NAME=${PKG_NAME}" >> $GITHUB_OUTPUT

        PKG_STAGING="${{ env.CICD_INTERMEDIATES_DIR }}/package"
        ARCHIVE_DIR="${PKG_STAGING}/${PKG_BASENAME}/"
        mkdir -p "${ARCHIVE_DIR}"
        mkdir -p "${ARCHIVE_DIR}/autocomplete"

        # Binary
        cp "${{ steps.bin.outputs.BIN_PATH }}" "$ARCHIVE_DIR"

        # README, LICENSE and CHANGELOG files
        cp "README.md" "LICENSE-MIT" "LICENSE-APACHE" "CHANGELOG.md" "$ARCHIVE_DIR"

        # Man page
        cp 'target/${{ matrix.job.target }}/release/build/${{ needs.crate_metadata.outputs.name }}'-*/out/assets/manual/bat.1 "$ARCHIVE_DIR"

        # Autocompletion files
        cp 'target/${{ matrix.job.target }}/release/build/${{ needs.crate_metadata.outputs.name }}'-*/out/assets/completions/bat.bash "$ARCHIVE_DIR/autocomplete/${{ needs.crate_metadata.outputs.name }}.bash"
        cp 'target/${{ matrix.job.target }}/release/build/${{ needs.crate_metadata.outputs.name }}'-*/out/assets/completions/bat.fish "$ARCHIVE_DIR/autocomplete/${{ needs.crate_metadata.outputs.name }}.fish"
        cp 'target/${{ matrix.job.target }}/release/build/${{ needs.crate_metadata.outputs.name }}'-*/out/assets/completions/_bat.ps1 "$ARCHIVE_DIR/autocomplete/_${{ needs.crate_metadata.outputs.name }}.ps1"
        cp 'target/${{ matrix.job.target }}/release/build/${{ needs.crate_metadata.outputs.name }}'-*/out/assets/completions/bat.zsh "$ARCHIVE_DIR/autocomplete/${{ needs.crate_metadata.outputs.name }}.zsh"

        # base compressed package
        pushd "${PKG_STAGING}/" >/dev/null
        case ${{ matrix.job.target }} in
          *-pc-windows-*) 7z -y a "${PKG_NAME}" "${PKG_BASENAME}"/* | tail -2 ;;
          *) tar czf "${PKG_NAME}" "${PKG_BASENAME}"/* ;;
        esac;
        popd >/dev/null

        # Let subsequent steps know where to find the compressed package
        echo "PKG_PATH=${PKG_STAGING}/${PKG_NAME}" >> $GITHUB_OUTPUT

    - name: Create Debian package
      id: debian-package
      shell: bash
      if: startsWith(matrix.job.os, 'ubuntu')
      run: |
        COPYRIGHT_YEARS="2018 - "$(date "+%Y")
        DPKG_STAGING="${{ env.CICD_INTERMEDIATES_DIR }}/debian-package"
        DPKG_DIR="${DPKG_STAGING}/dpkg"
        mkdir -p "${DPKG_DIR}"

        DPKG_BASENAME=${{ needs.crate_metadata.outputs.name }}
        DPKG_CONFLICTS=${{ needs.crate_metadata.outputs.name }}-musl
        case ${{ matrix.job.target }} in *-musl) DPKG_BASENAME=${{ needs.crate_metadata.outputs.name }}-musl ; DPKG_CONFLICTS=${{ needs.crate_metadata.outputs.name }} ;; esac;
        DPKG_VERSION=${{ needs.crate_metadata.outputs.version }}
        DPKG_ARCH="${{ matrix.job.dpkg_arch }}"
        DPKG_NAME="${DPKG_BASENAME}_${DPKG_VERSION}_${DPKG_ARCH}.deb"
        echo "DPKG_NAME=${DPKG_NAME}" >> $GITHUB_OUTPUT

        # Binary
        install -Dm755 "${{ steps.bin.outputs.BIN_PATH }}" "${DPKG_DIR}/usr/bin/${{ steps.bin.outputs.BIN_NAME }}"

        # Man page
        install -Dm644 'target/${{ matrix.job.target }}/release/build/${{ needs.crate_metadata.outputs.name }}'-*/out/assets/manual/bat.1 "${DPKG_DIR}/usr/share/man/man1/${{ needs.crate_metadata.outputs.name }}.1"
        gzip -n --best "${DPKG_DIR}/usr/share/man/man1/${{ needs.crate_metadata.outputs.name }}.1"

        # Autocompletion files
        install -Dm644 'target/${{ matrix.job.target }}/release/build/${{ needs.crate_metadata.outputs.name }}'-*/out/assets/completions/bat.bash "${DPKG_DIR}/usr/share/bash-completion/completions/${{ needs.crate_metadata.outputs.name }}"
        install -Dm644 'target/${{ matrix.job.target }}/release/build/${{ needs.crate_metadata.outputs.name }}'-*/out/assets/completions/bat.fish "${DPKG_DIR}/usr/share/fish/vendor_completions.d/${{ needs.crate_metadata.outputs.name }}.fish"
        install -Dm644 'target/${{ matrix.job.target }}/release/build/${{ needs.crate_metadata.outputs.name }}'-*/out/assets/completions/bat.zsh "${DPKG_DIR}/usr/share/zsh/vendor-completions/_${{ needs.crate_metadata.outputs.name }}"

        # README and LICENSE
        install -Dm644 "README.md" "${DPKG_DIR}/usr/share/doc/${DPKG_BASENAME}/README.md"
        install -Dm644 "LICENSE-MIT" "${DPKG_DIR}/usr/share/doc/${DPKG_BASENAME}/LICENSE-MIT"
        install -Dm644 "LICENSE-APACHE" "${DPKG_DIR}/usr/share/doc/${DPKG_BASENAME}/LICENSE-APACHE"
        install -Dm644 "CHANGELOG.md" "${DPKG_DIR}/usr/share/doc/${DPKG_BASENAME}/changelog"
        gzip -n --best "${DPKG_DIR}/usr/share/doc/${DPKG_BASENAME}/changelog"

        cat > "${DPKG_DIR}/usr/share/doc/${DPKG_BASENAME}/copyright" <<EOF
        Format: http://www.debian.org/doc/packaging-manuals/copyright-format/1.0/
        Upstream-Name: ${{ needs.crate_metadata.outputs.name }}
        Source: ${{ needs.crate_metadata.outputs.homepage }}

        Files: *
        Copyright: ${{ needs.crate_metadata.outputs.maintainer }}
        Copyright: $COPYRIGHT_YEARS ${{ needs.crate_metadata.outputs.maintainer }}
        License: Apache-2.0 or MIT

        License: Apache-2.0
          On Debian systems, the complete text of the Apache-2.0 can be found in the
          file /usr/share/common-licenses/Apache-2.0.

        License: MIT
          Permission is hereby granted, free of charge, to any
          person obtaining a copy of this software and associated
          documentation files (the "Software"), to deal in the
          Software without restriction, including without
          limitation the rights to use, copy, modify, merge,
          publish, distribute, sublicense, and/or sell copies of
          the Software, and to permit persons to whom the Software
          is furnished to do so, subject to the following
          conditions:
          .
          The above copyright notice and this permission notice
          shall be included in all copies or substantial portions
          of the Software.
          .
          THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF
          ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
          TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
          PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT
          SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
          CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
          OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR
          IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
          DEALINGS IN THE SOFTWARE.
        EOF
          chmod 644 "${DPKG_DIR}/usr/share/doc/${DPKG_BASENAME}/copyright"

          # control file
          mkdir -p "${DPKG_DIR}/DEBIAN"
          cat > "${DPKG_DIR}/DEBIAN/control" <<EOF
        Package: ${DPKG_BASENAME}
        Version: ${DPKG_VERSION}
        Section: utils
        Priority: optional
        Maintainer: ${{ needs.crate_metadata.outputs.maintainer }}
        Homepage: ${{ needs.crate_metadata.outputs.homepage }}
        Architecture: ${DPKG_ARCH}
        Provides: ${{ needs.crate_metadata.outputs.name }}
        Conflicts: ${DPKG_CONFLICTS}
        Description: cat(1) clone with wings.
          A cat(1) clone with syntax highlighting and Git integration.
        EOF

        DPKG_PATH="${DPKG_STAGING}/${DPKG_NAME}"
        echo "DPKG_PATH=${DPKG_PATH}" >> $GITHUB_OUTPUT

        # build dpkg
        fakeroot dpkg-deb --build "${DPKG_DIR}" "${DPKG_PATH}"

    - name: "Artifact upload: tarball"
      uses: actions/upload-artifact@master
      with:
        name: ${{ steps.package.outputs.PKG_NAME }}
        path: ${{ steps.package.outputs.PKG_PATH }}

    - name: "Artifact upload: Debian package"
      uses: actions/upload-artifact@master
      if: steps.debian-package.outputs.DPKG_NAME
      with:
        name: ${{ steps.debian-package.outputs.DPKG_NAME }}
        path: ${{ steps.debian-package.outputs.DPKG_PATH }}

    - name: Check for release
      id: is-release
      shell: bash
      run: |
        unset IS_RELEASE ; if [[ $GITHUB_REF =~ ^refs/tags/v[0-9].* ]]; then IS_RELEASE='true' ; fi
        echo "IS_RELEASE=${IS_RELEASE}" >> $GITHUB_OUTPUT

    - name: Publish archives and packages
      uses: softprops/action-gh-release@v2
      if: steps.is-release.outputs.IS_RELEASE
      with:
        files: |
          ${{ steps.package.outputs.PKG_PATH }}
          ${{ steps.debian-package.outputs.DPKG_PATH }}
      env:
        GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

  winget:
    name: Publish to Winget
    runs-on: ubuntu-latest
    needs: build
    if: startsWith(github.ref, 'refs/tags/v')
    steps:
      - uses: vedantmgoyal9/winget-releaser@19e706d4c9121098010096f9c495a70a7518b30f
        with:
          identifier: sharkdp.bat
          installers-regex: '-pc-windows-msvc\.zip$'
          token: ${{ secrets.WINGET_TOKEN }}


================================================
FILE: .github/workflows/require-changelog-for-PRs.yml
================================================
name: Changelog

on:
  pull_request:

jobs:
  check-changelog:
    name: Check for changelog entry
    runs-on: ubuntu-latest
    # dependabot PRs are automerged if CI passes; we shouldn't block these
    if: github.actor != 'dependabot[bot]'
    env:
      PR_NUMBER: ${{ github.event.number }}
      PR_BASE: ${{ github.base_ref }}
    steps:
      - uses: actions/checkout@v6
      - name: Fetch PR base
        run: git fetch --no-tags --prune --depth=1 origin

      # cannot use `github.actor`: the triggering commit may be authored by a maintainer
      - name: Get PR submitter
        id: get-submitter
        run: curl -sSfL https://api.github.com/repos/sharkdp/bat/pulls/${PR_NUMBER} | jq -r '"submitter=" + .user.login' | tee -a $GITHUB_OUTPUT

      - name: Search for added line in changelog
        env:
          PR_SUBMITTER: ${{ steps.get-submitter.outputs.submitter }}
        run: |
          ADDED=$(git diff -U0 "origin/${PR_BASE}" HEAD -- CHANGELOG.md | grep -P '^\+[^\+].+$')
          echo "Added lines in CHANGELOG.md:"
          echo "$ADDED"
          echo "Grepping for PR info (see CONTRIBUTING.md):"
          grep "#${PR_NUMBER}\\b.*${PR_SUBMITTER}\\b" <<< "$ADDED"


================================================
FILE: .gitignore
================================================
.direnv/
/target/
**/*.rs.bk

# Editors
.idea/
.vscode/

# Generated files
/assets/completions/_bat.ps1
/assets/completions/bat.bash
/assets/completions/bat.fish
/assets/completions/bat.zsh
/assets/manual/bat.1
/assets/metadata.yaml




================================================
FILE: .gitmodules
================================================
[submodule "assets/syntaxes/Elixir"]
	path = assets/syntaxes/02_Extra/Elixir
	url = https://github.com/princemaple/elixir-sublime-syntax/
[submodule "assets/syntaxes/Packages"]
	path = assets/syntaxes/01_Packages
	url = https://github.com/sublimehq/Packages/
[submodule "assets/syntaxes/TOML"]
	path = assets/syntaxes/02_Extra/TOML
	url = https://github.com/jasonwilliams/sublime_toml_highlighting
[submodule "assets/syntaxes/Julia"]
	path = assets/syntaxes/02_Extra/Julia
	url = https://github.com/JuliaEditorSupport/Julia-sublime
[submodule "assets/themes/sublime-monokai-extended"]
	path = assets/themes/sublime-monokai-extended
	url = https://github.com/jonschlinkert/sublime-monokai-extended
[submodule "assets/syntaxes/Docker"]
	path = assets/syntaxes/02_Extra/Docker
	url = https://github.com/asbjornenge/Docker.tmbundle
[submodule "assets/syntaxes/VimL"]
	path = assets/syntaxes/02_Extra/VimL
	url = https://github.com/SalGnt/Sublime-VimL
[submodule "assets/syntaxes/INI"]
	path = assets/syntaxes/02_Extra/INI
	url = https://github.com/clintberry/sublime-text-2-ini
[submodule "assets/syntaxes/CMake"]
	path = assets/syntaxes/02_Extra/CMake
	url = https://github.com/zyxar/Sublime-CMakeLists
[submodule "assets/syntaxes/LESS"]
	path = assets/syntaxes/02_Extra/LESS
	url = https://github.com/danro/LESS-sublime
[submodule "assets/themes/DarkNeon"]
	path = assets/themes/DarkNeon
	url = https://github.com/RainyDayMedia/DarkNeon
[submodule "assets/themes/github-sublime-theme"]
	path = assets/themes/github-sublime-theme
	url = https://github.com/AlexanderEkdahl/github-sublime-theme
[submodule "assets/themes/1337-Scheme"]
	path = assets/themes/1337-Scheme
	url = https://github.com/MarkMichos/1337-Scheme
[submodule "assets/themes/TwoDark"]
	path = assets/themes/TwoDark
	url = https://github.com/erremauro/TwoDark
[submodule "assets/syntaxes/AWK"]
	path = assets/syntaxes/02_Extra/AWK
	url = https://github.com/JohnNilsson/awk-sublime
[submodule "assets/syntaxes/Nix"]
	path = assets/syntaxes/02_Extra/Nix
	url = https://github.com/wmertens/sublime-nix
[submodule "assets/themes/zenburn"]
	path = assets/themes/zenburn
	url = https://github.com/colinta/zenburn.git
[submodule "assets/syntaxes/Kotlin"]
	path = assets/syntaxes/02_Extra/Kotlin
	url = https://github.com/vkostyukov/kotlin-sublime-package
[submodule "assets/syntaxes/Elm"]
	path = assets/syntaxes/02_Extra/Elm
	url = https://github.com/elm-community/SublimeElmLanguageSupport
[submodule "assets/syntaxes/TypeScript"]
	path = assets/syntaxes/02_Extra/TypeScript
	url = https://github.com/Microsoft/TypeScript-Sublime-Plugin
[submodule "assets/syntaxes/Puppet"]
	path = assets/syntaxes/02_Extra/Puppet
	url = https://github.com/russCloak/SublimePuppet
[submodule "assets/themes/onehalf"]
	path = assets/themes/onehalf
	url = https://github.com/sonph/onehalf
[submodule "assets/syntaxes/JavaScript (Babel)"]
	path = assets/syntaxes/02_Extra/JavaScript_(Babel)
	url = https://github.com/babel/babel-sublime
[submodule "assets/syntaxes/FSharp"]
	path = assets/syntaxes/02_Extra/FSharp
	url = https://github.com/hoest/sublimetext-fsharp
[submodule "assets/syntaxes/PureScript"]
	path = assets/syntaxes/02_Extra/PureScript
	url = https://github.com/tellnobody1/sublime-purescript-syntax
[submodule "assets/syntaxes/Swift"]
	path = assets/syntaxes/02_Extra/Swift
	url = https://github.com/quiqueg/Swift-Sublime-Package
[submodule "assets/syntaxes/Crystal"]
	path = assets/syntaxes/02_Extra/Crystal
	url = https://github.com/crystal-lang-tools/sublime-crystal.git
[submodule "assets/syntaxes/PowerShell"]
	path = assets/syntaxes/02_Extra/PowerShell
	url = https://github.com/PowerShell/EditorSyntax
[submodule "assets/syntaxes/Robot"]
	path = assets/syntaxes/02_Extra/Robot
	url = https://github.com/andriyko/sublime-robot-framework-assistant.git
[submodule "assets/themes/sublime-snazzy"]
	path = assets/themes/sublime-snazzy
	url = https://github.com/greggb/sublime-snazzy
[submodule "assets/syntaxes/Assembly (ARM)"]
	path = assets/syntaxes/02_Extra/Assembly_(ARM)
	url = https://github.com/tvi/Sublime-ARM-Assembly
[submodule "assets/syntaxes/protobuf-syntax-highlighting"]
	path = assets/syntaxes/02_Extra/Protobuf
	url = https://github.com/VcamX/protobuf-syntax-highlighting.git
	branch = master
[submodule "assets/syntaxes/Terraform"]
	path = assets/syntaxes/02_Extra/Terraform
	url = https://github.com/alexlouden/Terraform.tmLanguage.git
[submodule "assets/syntaxes/Jsonnet"]
	path = assets/syntaxes/02_Extra/Jsonnet
	url = https://github.com/gburiola/sublime-jsonnet-syntax.git
[submodule "assets/syntaxes/varlink"]
	path = assets/syntaxes/02_Extra/varlink
	url = https://github.com/varlink/syntax-highlight-varlink.git
[submodule "assets/syntaxes/sublime-fish"]
	path = assets/syntaxes/02_Extra/Fish
	url = https://github.com/Phidica/sublime-fish.git
[submodule "assets/syntaxes/Org mode"]
	path = assets/syntaxes/02_Extra/Org_mode
	url = https://github.com/jezcope/Org.tmbundle.git
[submodule "assets/syntaxes/DotENV"]
	path = assets/syntaxes/02_Extra/DotENV
	url = https://github.com/zaynali53/DotENV
[submodule "assets/syntaxes/ssh-config"]
	path = assets/syntaxes/02_Extra/ssh-config
	url = https://github.com/robballou/sublimetext-sshconfig.git
[submodule "assets/syntaxes/GraphQL"]
	path = assets/syntaxes/02_Extra/GraphQL
	url = https://github.com/dncrews/GraphQL-SublimeText3.git
[submodule "assets/syntaxes/Verilog"]
	path = assets/syntaxes/02_Extra/Verilog
	url = https://github.com/pro711/sublime-verilog
[submodule "assets/syntaxes/SCSS_Sass"]
	path = assets/syntaxes/02_Extra/SCSS_Sass
	url = https://github.com/braver/SublimeSass
[submodule "assets/syntaxes/Strace"]
	path = assets/syntaxes/02_Extra/Strace
	url = https://github.com/djuretic/SublimeStrace
[submodule "assets/syntaxes/Jinja2"]
	path = assets/syntaxes/02_Extra/Jinja2
	url = https://github.com/ltrzesniewski/sublime-jinja2.git
[submodule "assets/syntaxes/SLS"]
	path = assets/syntaxes/02_Extra/SLS
	url = https://github.com/saltstack/sublime-text
	branch = master
[submodule "assets/themes/dracula-sublime"]
	path = assets/themes/dracula-sublime
	url = https://github.com/dracula/sublime.git
[submodule "assets/syntaxes/HTML (Twig)"]
	path = assets/syntaxes/02_Extra/HTML_(Twig)
	url = https://github.com/Anomareh/PHP-Twig.tmbundle.git
[submodule "assets/themes/Nord-sublime"]
	path = assets/themes/Nord-sublime
	url = https://github.com/crabique/Nord-plist.git
[submodule "assets/syntaxes/Vue"]
	path = assets/syntaxes/02_Extra/Vue
	url = https://github.com/vuejs/vue-syntax-highlight.git
	branch = new
[submodule "assets/syntaxes/CoffeeScript"]
	path = assets/syntaxes/02_Extra/CoffeeScript
	url = https://github.com/sustained/CoffeeScript-Sublime-Plugin
[submodule "assets/syntaxes/02_Extra/Stylus"]
	path = assets/syntaxes/02_Extra/Stylus
	url = https://github.com/billymoon/Stylus
[submodule "assets/themes/Solarized"]
	path = assets/themes/Solarized
	url = https://github.com/braver/Solarized
[submodule "assets/syntaxes/02_Extra/Fortran"]
	path = assets/syntaxes/02_Extra/Fortran
	url = https://github.com/315234/SublimeFortran
[submodule "assets/syntaxes/02_Extra/Email"]
	path = assets/syntaxes/02_Extra/Email
	url = https://github.com/mariozaizar/email.sublime-syntax.git
[submodule "assets/syntaxes/02_Extra/QML"]
	path = assets/syntaxes/02_Extra/QML
	url = https://github.com/skozlovf/Sublime-QML
[submodule "assets/syntaxes/02_Extra/AsciiDoc"]
	path = assets/syntaxes/02_Extra/AsciiDoc
	url = https://github.com/asciidoctor/sublimetext-asciidoc.git
[submodule "assets/syntaxes/02_Extra/GLSL"]
	path = assets/syntaxes/02_Extra/GLSL
	url = https://github.com/euler0/sublime-glsl
[submodule "assets/syntaxes/02_Extra/Nginx"]
	path = assets/syntaxes/02_Extra/Nginx
	url = https://github.com/SublimeText/nginx
[submodule "assets/syntaxes/02_Extra/Apache"]
	path = assets/syntaxes/02_Extra/Apache
	url = https://github.com/colinta/ApacheConf.tmLanguage
[submodule "assets/syntaxes/02_Extra/Ninja"]
	path = assets/syntaxes/02_Extra/Ninja
	url = https://github.com/pope/SublimeNinja.git
[submodule "assets/syntaxes/02_Extra/Svelte"]
	path = assets/syntaxes/02_Extra/Svelte
	url = https://github.com/corneliusio/svelte-sublime
[submodule "assets/themes/Coldark"]
	path = assets/themes/Coldark
	url = https://github.com/ArmandPhilippot/coldark-bat.git
[submodule "assets/themes/gruvbox"]
	path = assets/themes/gruvbox
	url = https://github.com/subnut/gruvbox-tmTheme.git
	branch = bat-source
[submodule "assets/syntaxes/02_Extra/Lean"]
	path = assets/syntaxes/02_Extra/Lean
	url = https://github.com/leanprover/vscode-lean4.git
[submodule "assets/syntaxes/02_Extra/Zig"]
	path = assets/syntaxes/02_Extra/Zig
	url = https://codeberg.org/ziglang/sublime-zig-language.git
[submodule "assets/syntaxes/02_Extra/gnuplot"]
	path = assets/syntaxes/02_Extra/gnuplot
	url = https://github.com/hesstobi/sublime_gnuplot
[submodule "assets/syntaxes/02_Extra/SystemVerilog"]
	path = assets/syntaxes/02_Extra/SystemVerilog
	url = https://github.com/TheClams/SystemVerilog.git
[submodule "assets/syntaxes/02_Extra/SublimeEthereum"]
	path = assets/syntaxes/02_Extra/SublimeEthereum
	url = https://github.com/davidhq/SublimeEthereum.git
[submodule "assets/syntaxes/02_Extra/Groff"]
	path = assets/syntaxes/02_Extra/Groff
	url = https://github.com/carsonoid/sublime_man_page_support
[submodule "assets/syntaxes/02_Extra/http-request-response"]
	path = assets/syntaxes/02_Extra/http-request-response
	url = https://github.com/keith-hall/http-request-response-syntax.git
[submodule "assets/syntaxes/02_Extra/LLVM"]
	path = assets/syntaxes/02_Extra/LLVM
	url = https://github.com/ioncodes/LLVM.tmBundle
[submodule "assets/syntaxes/02_Extra/Slim"]
	path = assets/syntaxes/02_Extra/Slim
	url = https://github.com/slim-template/ruby-slim.tmbundle.git
[submodule "assets/syntaxes/02_Extra/Racket"]
	path = assets/syntaxes/02_Extra/Racket
	url = https://github.com/follesoe/sublime-racket.git
[submodule "assets/syntaxes/02_Extra/MediaWiki"]
	path = assets/syntaxes/02_Extra/MediaWiki
	url = https://github.com/tosher/Mediawiker.git
[submodule "assets/syntaxes/02_Extra/Dart"]
	path = assets/syntaxes/02_Extra/Dart
	url = https://github.com/elMuso/Dartlight.git
[submodule "assets/syntaxes/02_Extra/SublimeJQ"]
	path = assets/syntaxes/02_Extra/SublimeJQ
	url = https://github.com/zogwarg/SublimeJQ.git
[submodule "assets/syntaxes/02_Extra/cmd-help"]
	path = assets/syntaxes/02_Extra/cmd-help
	url = https://github.com/victor-gp/cmd-help-sublime-syntax.git
	branch = main
	shallow = true
[submodule "assets/syntaxes/02_Extra/TodoTxt"]
	path = assets/syntaxes/02_Extra/TodoTxt
	url = https://github.com/dertuxmalwieder/SublimeTodoTxt
[submodule "assets/syntaxes/02_Extra/Ada"]
	path = assets/syntaxes/02_Extra/Ada
	url = https://github.com/AldanTanneo/ada-sublime-syntax
  
[submodule "assets/syntaxes/02_Extra/Crontab"]
	path = assets/syntaxes/02_Extra/Crontab
	url = https://github.com/michaelblyons/SublimeSyntax-Crontab
[submodule "assets/syntaxes/02_Extra/NSIS"]
	path = assets/syntaxes/02_Extra/NSIS
	url = https://github.com/SublimeText/NSIS
[submodule "assets/syntaxes/02_Extra/vscode-wgsl"]
	path = assets/syntaxes/02_Extra/vscode-wgsl
	url = https://github.com/PolyMeilex/vscode-wgsl.git
[submodule "assets/syntaxes/02_Extra/CFML"]
	path = assets/syntaxes/02_Extra/CFML
	url = https://github.com/jcberquist/sublimetext-cfml.git
[submodule "assets/syntaxes/02_Extra/Idris2"]
	path = assets/syntaxes/02_Extra/Idris2
	url = https://github.com/buzden/sublime-syntax-idris2
[submodule "assets/syntaxes/02_Extra/GDScript-sublime"]
	path = assets/syntaxes/02_Extra/GDScript-sublime
	url = https://github.com/beefsack/GDScript-sublime
[submodule "assets/syntaxes/02_Extra/sublime-odin"]
	path = assets/syntaxes/02_Extra/sublime-odin
	url = https://github.com/odin-lang/sublime-odin
[submodule "assets/syntaxes/02_Extra/typst-syntax-highlight"]
	path = assets/syntaxes/02_Extra/typst-syntax-highlight
	url = https://github.com/hyrious/typst-syntax-highlight
[submodule "assets/themes/Catppuccin"]
	path = assets/themes/Catppuccin
	url = https://github.com/SchweGELBin/catppuccin-bat-sub.git
[submodule "assets/syntaxes/02_Extra/SmartVHDL"]
	path = assets/syntaxes/02_Extra/SmartVHDL
	url = https://github.com/TheClams/SmartVHDL
[submodule "assets/syntaxes/02_Extra/hosts"]
	path = assets/syntaxes/02_Extra/hosts
	url = https://github.com/tijn/hosts.tmLanguage
[submodule "assets/syntaxes/02_Extra/Gomod"]
	path = assets/syntaxes/02_Extra/Gomod
	url = https://github.com/mitranim/sublime-gomod
[submodule "assets/syntaxes/02_Extra/COBOL"]
	path = assets/syntaxes/02_Extra/COBOL
	url = https://github.com/adukhan99/sublime_cobol.git


================================================
FILE: CHANGELOG.md
================================================
# unreleased

- Fixed bug caused by using `--plain` and `--terminal-width=N` flags simultaneously, see #3529 (@H4k1l)
- Fixed syntax tests path, see #3610 (@foxfromworld)

## Features

- Added support for `hidden_file_extensions` from `.sublime-syntax` files, see #3613 (@Matei02355)
- Add word wrapping mode via `--wrap=word`, see #3597 (@veeceey)
- Implement `--unbuffered` mode for streaming input, allowing partial lines to display immediately (e.g. `tail -f | bat -u`). Closes #3555, see #3583 (@mainnebula)
- Added an initial `flake.nix` for a ready made development environment; see #3578 (@vorburger)
- Add `--quiet-empty` (`-E`) flag to suppress output when input is empty. Closes #1936, see #3563 (@NORMAL-EX)
- Improve native man pages and command help syntax highlighting by stripping overstriking, see #3517 (@akirk)
- Add `--fallback-syntax`/`--fallback-language` to apply syntax highlighting only when auto-detection fails, see #1341 (@Xavrir)

## Bugfixes
- Fix `BAT_CONFIG_DIR` pointing at system config directory causing duplicate flag errors. Closes #3589, see #3620 (@Xavrir)
- Fix syntax highlighting for symlinked files when the symlink name has no extension but the target does. Closes #1001, see #3621 (@Xavrir)
- Report error when pager is missing instead of silently falling back, see #3588 (@IMaloney)
- Fix `--wrap=never` and `-S` flags being ignored when piping to pager, see #3592 (@IMaloney)
- Fix crash with BusyBox `less` on Windows, see #3527 (@Anchal-T)
- Fix `bat cache --help` failing with 'unexpected argument' error, see #3580 and #3560 (@NORMAL-EX)
- `--help` now correctly honors `--pager=builtin`. See #3516 (@keith-hall)
- `--help` now correctly honors custom themes. See #3524 (@keith-hall)
- Fixed test compatibility with future Cargo build directory changes, see #3550 (@nmacl)

## Other

- Bump MSRV to 1.88, update `time` crate to 0.3.47 to fix RUSTSEC-2026-0009, see #3581 (@NORMAL-EX)

## Syntaxes

- Change the URL of Zig submodule from GitHub to Codeberg, see #3519 (@sorairolake)
- Don't color strings inside CSV files, to make it easier to tell which column they belong to, see #3521 (@keith-hall)
- Add syntax highlighting support for COBOL, see #3584 (@adukhan99)
- Fixed manpage syntax so that ANSI escape codes don't get incorrectly highlighted and thus broken, see #3586 (@BlueElectivire)
- Map several Google Cloud CLI config files to their appropriate syntax #3635 (@victor-gp)
- Map all ignore dotfiles to Git Ignore syntax #3636 (@victor-gp)

## Themes

- Remove the Visual Studio Dark+ theme, see #3552 (@CosmicHorrorDev)

## `bat` as a library

# v0.26.1

## Features

- Add paging to '-h' and '--help' see PR #3478 (@MuntasirSZN)

## Bugfixes

- Fix hang when using `--list-themes` with an explicit pager, see #3457 (@abhinavcool42)
- Fix negative values of N not being parsed in <N:M> line ranges without `=` flag value separator, see #3442 (@lmmx)
- Fix broken Docker syntax preventing use of custom assets, see #3476 (@keith-hall)
- Fix decorations being applied unexpectedly when piping. Now only line numbers explicitly required on the command line should be applied in auto decorations mode for `cat` compatibility. See #3496 (@keith-hall)
- Fix diagnostics attempting to find the version of an executable named builtin when builtin pager is used. See #3498 (@keith-hall)
- `--help` now correctly reads the config file for theme information etc. See #3507 (@keith-hall)

## Other
- Improve README documentation on pager options passed to less, see #3443 (@injust)
- Make PowerShell completions compatible with PowerShell v5.1, see #3495 (@keith-hall)
- Use more robust approach to escaping in Bash completions, see #3448 (@akinomyoga)

## Syntaxes

- Update quadlet syntax mapping to include *.{build,pod} files #3484 (@cyqsimon)
- Fix inconsistencies in Ada syntax, see #3481 (@AldanTanneo)
- Add syntax mapping for podman's `artifact` quadlet files, see #3497 (@xduugu)
- Highlight Korn Shell scripts (i.e. with a shebang of ...`ksh`) using Bash syntax, see #3509 (@keith-hall)

## Themes

## `bat` as a library

# v0.26.0

## Features
- Add build for windows/ARM64 platform. #3190 (@alcroito)
- Add paging to `--list-themes`, see PR #3239 (@einfachIrgendwer0815)
- Support negative relative line ranges, e.g. `bat -r :-10` / `bat -r='-10:'`, see #3068 (@ajesipow)
- Support context in line ranges, e.g. `bat -r 30::5` /  `bat -r 30:40:5`, see #3345 (@cavanaug)
- Add built-in 'minus' pager, e.g. `bat --pager=builtin` see PR #3402 (@academician)

## Bugfixes

- Fix UTF-8 BOM not being stripped for syntax detection, see #3314 (@krikera)
- Fix `BAT_THEME_DARK` and `BAT_THEME_LIGHT` being ignored, see issue #3171 and PR #3168 (@bash)
- Prevent `--list-themes` from outputting default theme info to stdout when it is piped, see #3189 (@einfachIrgendwer0815)
- Rename some submodules to fix Dependabot submodule updates, see issue #3198 and PR #3201 (@victor-gp)
- Make highlight tests fail when new syntaxes don't have fixtures PR #3255 (@dan-hipschman)
- Fix crash for multibyte characters in file path, see issue #3230 and PR #3245 (@HSM95)
- Add missing mappings for various bash/zsh files, see PR #3262 (@AdamGaskins)
- Send all bat errors to stderr by default, see #3336 (@JerryImMouse)
- Make --map-syntax target case insensitive to match --language, see #3206 (@keith-hall)
- Correctly determine the end of the line in UTF16LE/BE input #3369 (@keith-hall)
- `--style=changes` no longer prints a two-space indent when the file is unmodified, see issue #2710 and PR #3406 (@jyn514)
- Add missing shell completions, see #3411 (@keith-hall)
- Execute help/version/diagnostic commands even with invalid config/arguments present, see #3414 (@keith-hall)
- Fixed line numbers (`-n`) and style components not printing when piping output, see issue #2935 and PR #3438 (@lmmx)

## Other

- Update base16 README links to community driven base16 work #2871 (@JamyGolden)
- Work around build failures when building `bat` from vendored sources #3179 (@dtolnay)
- CICD: Stop building for x86_64-pc-windows-gnu which fails #3261 (Enselic)
- CICD: replace windows-2019 runners with windows-2025 #3339 (@cyqsimon)
- Build script: replace string-based codegen with quote-based codegen #3340 (@cyqsimon)
- Improve code coverage of `--list-languages` parameter #2942 (@sblondon)
- Only start offload worker thread when there's more than 1 core #2956 (@cyqsimon)
- Update terminal-colorsaurus (the library used for dark/light detection) to 1.0, see #3347 (@bash)
- Update console dependency to 0.16, see #3351 (@musicinmybrain)
- Fixed some typos #3244 (@ssbarnea)
- Update onig_sys dependency to 69.9.1 to fix a gcc build failure #3400 (@CosmicHorrorDev)
- Add a cargo feature (`vendored-libgit2`) to build with vendored libgit2 version without depending on the system's one #3426 (@0x61nas)
- Update syntect dependency to v5.3.0 to fix a few minor bugs, see #3410 (@keith-hall)

## Syntaxes

- Add syntax mapping for `paru` configuration files #3182 (@cyqsimon)
- Add support for [Idris 2 programming language](https://www.idris-lang.org/) #3150 (@buzden)
- Add syntax mapping for `nix`'s '`flake.lock` lockfiles #3196 (@odilf)
- Improvements to CSV/TSV highlighting, with autodetection of delimiter and support for TSV files, see #3186 (@keith-
- Improve (Sys)log error highlighting, see #3205 (@keith-hall)
- Map `ndjson` extension to JSON syntax, see #3209 (@keith-hall)
- Map files with `csproj`, `vbproj`, `props` and `targets` extensions to XML syntax, see #3213 (@keith-hall)
- Add debsources syntax to highlight `/etc/apt/sources.list` files, see #3215 (@keith-hall)
- Add syntax definition and test file for GDScript highlighting, see #3236 (@chetanjangir0)
- Add syntax test file for Odin highlighting, see #3241 (@chetanjangir0)
- Update quadlet syntax mapping rules to cover quadlets in subdirectories #3299 (@cyqsimon)
- Add syntax Typst #3300 (@cskeeters)
- Map `.mill` files to Scala syntax for Mill build tool configuration files #3311 (@krikera)
- Add syntax highlighting for VHDL, see #3337 (@JerryImMouse)
- Add syntax mapping for certbot certificate configuration #3338 (@cyqsimon)
- Update Lean syntax from Lean 3 to Lean 4 #3322 (@YDX-2147483647)
- Map `.flatpakref` and `.flatpakrepo` files to INI syntax #3353 (@Ferenc-)
- Update hosts syntax #3368 (@keith-hall)
- Map `.kshrc` files to Bash syntax #3364 (@ritoban23)
- Map `/var/log/dmesg` files to Syslog syntax #3412 (@keith-hall)
- Add syntax definition and test file for Go modules(`go.mod` and `go.sum`) highlighting, see #3424 (@DarkMatter-999)
- Syntax highlighting for typescript code blocks within Markdown files, see #3435 (@MuntasirSZN)

## Themes

- Add Catppuccin, see #3317 (@SchweGELBin)
- Updated Catppuccin, see #3333 (@SchweGELBin)
- Updated gruvbox, see #3372 (@Nicholas42)
- Updated GitHub theme, see #3382 (@CosmicHorrorDev)
- Updated ANSI theme to highlight JSON object keys differently from values, see #3413 (@keith-hall)

# v0.25.0

## Features

- Set terminal title to file names when Paging is not Paging::Never #2807 (@Oliver-Looney)
- `bat --squeeze-blank`/`bat -s` will now squeeze consecutive empty lines, see #1441 (@eth-p) and #2665 (@einfachIrgendwer0815)
- `bat --squeeze-limit` to set the maximum number of empty consecutive when using `--squeeze-blank`, see #1441 (@eth-p) and #2665 (@einfachIrgendwer0815)
- `PrettyPrinter::squeeze_empty_lines` to support line squeezing for bat as a library, see #1441 (@eth-p) and #2665 (@einfachIrgendwer0815)
- Syntax highlighting for JavaScript files that start with `#!/usr/bin/env bun` #2913 (@sharunkumar)
- `bat --strip-ansi={never,always,auto}` to remove ANSI escape sequences from bat's input, see #2999 (@eth-p)
- Add or remove individual style components without replacing all styles #2929 (@eth-p)
- Automatically choose theme based on the terminal's color scheme, see #2896 (@bash)
- Add option `--binary=as-text` for printing binary content, see issue #2974 and PR #2976 (@einfachIrgendwer0815)
- Make shell completions available via `--completion <shell>`, see issue #2057 and PR #3126 (@einfachIrgendwer0815)
- Syntax highlighting for puppet code blocks within Markdown files, see #3152 (@liliwilson)

## Bugfixes

- Fix long file name wrapping in header, see #2835 (@FilipRazek)
- Fix `NO_COLOR` support, see #2767 (@acuteenvy)
- Fix handling of inputs with OSC ANSI escape sequences, see #2541 and #2544 (@eth-p)
- Fix handling of inputs with combined ANSI color and attribute sequences, see #2185 and #2856 (@eth-p)
- Fix panel width when line 10000 wraps, see #2854 (@eth-p)
- Fix compile issue of `time` dependency caused by standard library regression #3045 (@cyqsimon)
- Fix override behavior of --plain and --paging, see issue #2731 and PR #3108 (@einfachIrgendwer0815)
- Fix bugs in `$LESSOPEN` support, see #2805 (@Anomalocaridid)

## Other

- Upgrade to Rust 2021 edition #2748 (@cyqsimon)
- Refactor and cleanup build script #2756 (@cyqsimon)
- Checks changelog has been written to for PRs in CI #2766 (@cyqsimon)
  - Use GitHub API to get correct PR submitter #2791 (@cyqsimon)
- Minor benchmark script improvements #2768 (@cyqsimon)
- Update Arch Linux package URL in README files #2779 (@brunobell)
- Update and improve `zsh` completion, see #2772 (@okapia)
- More extensible syntax mapping mechanism #2755 (@cyqsimon)
- Use proper Architecture for Debian packages built for musl, see #2811 (@Enselic)
- Pull in fix for unsafe-libyaml security advisory, see #2812 (@dtolnay)
- Update git-version dependency to use Syn v2, see #2816 (@dtolnay)
- Update git2 dependency to v0.18.2, see #2852 (@eth-p)
- Improve performance when color output disabled, see #2397 and #2857 (@eth-p)
- Relax syntax mapping rule restrictions to allow brace expansion #2865 (@cyqsimon)
- Apply clippy fixes #2864 (@cyqsimon)
- Faster startup by offloading glob matcher building to a worker thread #2868 (@cyqsimon)
- Display which theme is the default one in basic output (no colors), see #2937 (@sblondon)
- Display which theme is the default one in colored output, see #2838 (@sblondon)
- Add aarch64-apple-darwin ("Apple Silicon") binary tarballs to releases, see #2967 (@someposer)
- Update the Lisp syntax, see #2970 (@ccqpein)
- Use bat's ANSI iterator during tab expansion, see #2998 (@eth-p)
- Support 'statically linked binary' for aarch64 in 'Release' page, see #2992 (@tzq0301)
- Update options in shell completions and the man page of `bat`, see #2995 (@akinomyoga)
- Update nix dev-dependency to v0.29.0, see #3112 (@decathorpe)
- Bump MSRV to [1.74](https://blog.rust-lang.org/2023/11/16/Rust-1.74.0.html), see #3154 (@keith-hall)
- Update clircle dependency to remove winapi transitive dependency, see #3113 (@niklasmohrin)

## Syntaxes

- `cmd-help`: scope subcommands followed by other terms, and other misc improvements, see #2819 (@victor-gp)
- Upgrade JQ syntax, see #2820 (@dependabot[bot])
- Add syntax mapping for quadman quadlets #2866 (@cyqsimon)
- Map containers .conf files to TOML syntax #2867 (@cyqsimon)
- Associate `.xsh` files with `xonsh` syntax that is Python, see #2840 (@anki-code)
- Associate JSON with Comments `.jsonc` with `json` syntax, see #2795 (@mxaddict)
- Associate JSON-LD `.jsonld` files with `json` syntax, see #3037 (@vorburger)
- Associate `.textproto` files with `ProtoBuf` syntax, see #3038 (@vorburger)
- Associate GeoJSON `.geojson` files with `json` syntax, see #3084 (@mvaaltola)
- Associate `.aws/{config,credentials}`, see #2795 (@mxaddict)
- Associate Wireguard config `/etc/wireguard/*.conf`, see #2874 (@cyqsimon)
- Add support for [CFML](https://www.adobe.com/products/coldfusion-family.html), see #3031 (@brenton-at-pieces)
- Map `*.mkd` files to `Markdown` syntax, see issue #3060 and PR #3061 (@einfachIrgendwer0815)
- Add syntax mapping for CITATION.cff, see #3103 (@Ugzuzg)
- Add syntax mapping for kubernetes config files #3049 (@cyqsimon)
- Adds support for pipe delimiter for CSV #3115 (@pratik-m)
- Add syntax mapping for `/etc/pacman.conf` #2961 (@cyqsimon)
- Associate `uv.lock` with `TOML` syntax, see #3132 (@fepegar)

## Themes

- Patched/improved themes for better Manpage syntax highlighting support, see #2994 (@keith-hall).

## `bat` as a library

- Changes to `syntax_mapping::SyntaxMapping` #2755 (@cyqsimon)
  - `SyntaxMapping::get_syntax_for` is now correctly public
  - [BREAKING] `SyntaxMapping::{empty,builtin}` are removed; use `SyntaxMapping::new` instead
  - [BREAKING] `SyntaxMapping::mappings` is replaced by `SyntaxMapping::{builtin,custom,all}_mappings`
- Make `Controller::run_with_error_handler`'s error handler `FnMut`, see #2831 (@rhysd)
- Improve compile time by 20%, see #2815 (@dtolnay)
- 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

## Features

- Add environment variable `BAT_PAGING`, see #2629 (@einfachIrgendwer0815)
- Add opt-in (`--features lessopen`) support for `LESSOPEN` and `LESSCLOSE`. See #1597, #1739, #2444, #2602, and #2662 (@Anomalocaridid)

## Bugfixes

- Fix `more` not being found on Windows when provided via `BAT_PAGER`, see #2570, #2580, and #2651 (@mataha)
- Switched default behavior of `--map-syntax` to be case insensitive #2520
- Updated version of `serde_yaml` to `0.9`. See #2627 (@Raghav-Bell)
- Fix arithmetic overflow in `LineRange::from` and `LineRange::parse_range`, see #2674, #2698 (@skoriop)
- Fix paging not happening when stdout is interactive but stdin is not, see #2574 (@Nigecat)
- Make `-pp` override `--paging` and vice versa when passed as a later argument, see #2660 (@J-Kappes)

## Other

- Output directory for generated assets (completion, manual) can be customized, see #2515 (@tranzystorek-io)
- Use the `is-terminal` crate instead of `atty`, see #2530 (@nickelc)
- Add Winget Releaser workflow, see #2519 (@sitiom)
- Bump MSRV to 1.70, see #2651 (@mataha)

## Syntaxes

- Associate `os-release` with `bash` syntax, see #2587 (@cyqsimon)
- Associate `Containerfile` with `Dockerfile` syntax, see #2606 (@einfachIrgendwer0815)
- Replaced quotes with double quotes so fzf integration example script works on windows and linux. see #2095 (@johnmatthiggins)
- Associate `ksh` files with `bash` syntax, see #2633 (@johnmatthiggins)
- Associate `sarif` files with `JSON` syntax, see #2695 (@rhysd)
- Associate `ron` files with `rust` syntax, see #2427 (@YeungOnion)
- Add support for [WebGPU Shader Language](https://www.w3.org/TR/WGSL/), see #2692 (@rhysd)
- Add `.dpkg-new` and `.dpkg-tmp` to ignored suffixe, see #2595 (@scop)
- fix: Add syntax mapping `*.jsonl` => `json`, see #2539 (@WinterCore)
- Update `Julia` syntax, see #2553 (@dependabot)
- add `NSIS` support, see #2577 (@idleberg)
- Update `ssh-config`, see #2697 (@mrmeszaros)
- Add syntax mapping `*.debdiff` => `diff`, see #2947 (@jacg)

## `bat` as a library

- Add optional output_buffer arg to `Controller::run()` and `Controller::run_with_error_handler()`, see #2618 (@Piturnah)


# v0.23.0

## Features

- Implemented `-S` and `--chop-long-lines` flags as aliases for `--wrap=never`. See #2309 (@johnmatthiggins)
- Breaking change: Environment variables can now override config file settings (but command-line arguments still have the highest precedence), see #1152, #1281, and #2381 (@aaronkollasch)
- Implemented `--nonprintable-notation=caret` to support showing non-printable characters using caret notation. See #2429 (@einfachIrgendwer0815)

## Bugfixes

- Fix `bat cache --clear` not clearing the `--target` dir if specified. See #2393 (@miles170)

## Other

- Various bash completion improvements, see #2310 (@scop)
- Disable completion of `cache` subcommand, see #2399 (@cyqsimon)
- Signifigantly improve startup performance on macOS, see #2442 (@BlackHoleFox)
- Bump MSRV to 1.62, see #2496 (@Enselic)

## Syntaxes

- Added support for Ada, see #1300 and #2316 (@dkm)
- Added `todo.txt` syntax, see #2375 (@BANOnotIT)
- Improve Manpage.sublime-syntax. See #2364 (@Freed-Wu) and #2461 (@keith-hall)
- Added a new `requirements.txt` syntax, see #2361 (@Freed-Wu)
- Added a new VimHelp syntax, see #2366 (@Freed-Wu)
- Associate `pdm.lock` with `TOML` syntax, see #2410
- `Todo.txt`: Fix highlighting of contexts and projects at beginning of done.txt, see #2411
- `cmd-help`: overhaul scope names (colors) to improve theme support; misc syntax improvements. See #2419 (@victor-gp)
- Added support for Crontab, see #2509 (@keith-hall)

## Themes

## `bat` as a library

- `PrettyPrinter::header` correctly displays a header with the filename, see #2378 and #2406 (@cstyles)


# v0.22.1

## Bugfixes

- Bring back pre-processing of ANSI escape characters to so that some common `bat` use cases starts working again. See #2308 (@Enselic)

# v0.22.0

## Features

- Make the default macOS theme depend on Dark Mode. See #2197, #1746 (@Enselic)
- Support for separate system and user config files. See #668 (@patrickpichler)

## Bugfixes

- Prevent fork nightmare with `PAGER=batcat`. See #2235 (@johnmatthiggins)
- Make `--no-paging`/`-P` override `--paging=...` if passed as a later arg, see #2201 (@themkat)
- `--map-syntax` and `--ignored-suffix` now works together, see #2093 (@czzrr)
- Strips byte order mark from output when in non-loop-through mode. See #1922 (@dag-h)

## Other

- Relaxed glibc requirements on amd64, see #2106 and #2194 (@sharkdp)
- Improved fish completions. See #2275 (@zgracem)
- Stop pre-processing ANSI escape characters. Syntax highlighting on ANSI escaped input is not supported. See #2185 and #2189 (@Enselic)

## Syntaxes

- NSE (Nmap Scripting Engine) is mapped to Lua, see #2151 (@Cre3per)
- Correctly color `fstab` dump and pass fields, see #2246 (@yuvalmo)
- Update `Command Help` syntax, see #2255
- `Julia`: Fix syntax highlighting for function name starting with `struct`, see #2230
- Minor update to `LiveScript`, see #2291
- Associate `.mts` and `.cts` files with the `TypeScript` syntax. See #2236 (@kidonng)
- Fish history is mapped to YAML. See #2237 (@kidonng)

## `bat` as a library

- Make `bat::PrettyPrinter::syntaxes()` iterate over new `bat::Syntax` struct instead of `&syntect::parsing::SyntaxReference`. See #2222 (@Enselic)
- Clear highlights after printing, see #1919 and #1920 (@rhysd)


# v0.21.0

## Features

- Correctly render tab stops in `--show-all`, see #2038 (@Synthetica9)
- Add a `--style=default` option and make it the default. It is less verbose than `full`, see #2061 (@IsaacHorvath)
- Enable BusyBox `less` as pager, see #2162 (@nfisher1226)
- File extensions are now matched case-insensitively. See #1854, #2181 (@Enselic)

## Bugfixes

- Bump `regex` dependency from 1.5.4 to 1.5.5 to fix [CVE-2022-24713](https://blog.rust-lang.org/2022/03/08/cve-2022-24713.html), see #2145, #2139 (@Enselic)
- `bat` no longer crashes when encountering files that references missing syntaxes. See #915, #2181 (@Enselic)

## Performance

- Skip syntax highlighting on long lines (> 16384 chars) to help improve performance. See #2165 (@keith-hall)
- Vastly improve startup time by lazy-loading syntaxes via syntect 5.0.0. This makes bat display small files ~75% faster than before. See #951, #2181 (@Enselic)

## Other

- Include info about custom assets in `--diagnostics` if used. See #2107, #2144 (@Enselic)

## Syntaxes

- Mapped clang-format config file (.clang-format) to YAML syntax (@TruncatedDinosour)
- log syntax: improved handling of escape characters in double quoted strings. See #2123 (@keith-hall)
- Associate `/var/spool/mail/*` and `/var/mail/*` with the `Email` syntax. See #2156 (@cyqsimon)
- Added cmd-help syntax to scope --help messages. See #2148 (@victor-gp)
- Slightly adjust Zig syntax. See #2136 (@Enselic)
- Associate `.inf` files with the `INI` syntax. See #2190 (@Enselic)

## `bat` as a library

- Allow configuration of `show_nonprintable` with `PrettyPrinter`, see #2142
- The binary format of syntaxes.bin has been changed due to syntaxes now being lazy-loaded via syntect 5.0.0. See #2181 (@Enselic)
- Mark `bat::error::Error` enum as `#[non_exhaustive]` to allow adding new variants without future semver breakage. See #2181 (@Enselic)
- Change `Error::SyntectError(syntect::LoadingError)` to `Error::SyntectError(syntect::Error)`. See #2181 (@Enselic)
- Add `Error::SyntectLoadingError(syntect::LoadingError)` enum variant. See #2181 (@Enselic)


# v0.20.0

## Features

- New style component `header-filesize` to show size of the displayed file in the header. See #1988 (@mdibaiee)
- Use underline for line highlighting on ANSI, see #1730 (@mdibaiee)

## Bugfixes

- Fix bash completion on bash 3.x and bash-completion 1.x. See #2066 (@joshpencheon)

## Syntaxes

- `GraphQL`: Add support for interfaces implementing interfaces and consider ampersand an operator. See #2000
- Associate `_vimrc` and `_gvimrc` files with the `VimL` syntax. See #2002
- Associate `poetry.lock` files with the `TOML` syntax. See #2049
- Associate `.mesh`, `.task`, `.rgen`, `.rint`, `.rahit`, `.rchit`, `.rmiss`, and `.rcall` with the `GLSL` syntax. See #2050
- Added support for `JQ` syntax, see #2072
- Properly associate global git config files rooted in `$XDG_CONFIG_HOME/git/` or `$HOME/.config/git/`. See #2067 (@cyqsimon)

## `bat` as a library

- Exposed `get_syntax_set` and `get_theme` methods on `HighlightingAssets`. See #2030 (@dandavison)
- Added `HeaderFilename` and `HeaderFilesize` to `StyleComponent` enum, and mark it `#[non_exhaustive]`. See #1988 (@mdibaiee)


# v0.19.0

## Performance

- Reduce startup time in loop-through mode (e.g. when redirecting output) by 90%. See #1747 (@Enselic)
- Load themes lazily to make bat start 25% faster when disregarding syntax load time. See #1969 (@Enselic)
- Python syntax highlighting no longer suffers from abysmal performance in specific scenarios. See #1688 (@keith-hall)
- Fix for poor performance when ANSI escape sequences are piped to `bat`, see #1596 (@eth-p)
- Fix for incorrect handling of ANSI escape sequences when using `--wrap=never`, see #1596 (@eth-p)
- Load custom assets as fast as integrated assets, see #1753 (@Enselic)

## Features

- Support for `x:-delta` (minus) syntax in line ranges (e.g. `20:-10`). See  #1901 (@bojan88)
- Support for `--ignored-suffix` argument. See #1892 (@bojan88)
- `$BAT_CONFIG_DIR` is now a recognized environment variable. It has precedence over `$XDG_CONFIG_HOME`, see #1727 (@billrisher)
- Support for `x:+delta` syntax in line ranges (e.g. `20:+10`). See  #1810 (@bojan88)
- Add new `--acknowledgements` option that gives credit to theme and syntax definition authors. See #1971 (@Enselic)
- Include git hash in `bat -V` and `bat --version` output if present. See #1921 (@Enselic)

## Bugfixes

- First line not shown in diff context. See #1891 (@divagant-martian)
- Do not ignore syntaxes that handle file names with a `*.conf` extension. See #1703 (@cbolgiano)

## Other

- Add PowerShell completion, see #1826 (@rashil2000)
- Minimum supported Rust version (MSRV) bumped to 1.51, see #1994 (@mdibaiee)

## Syntaxes

- Groff, see #1685 (@scop)
- HTTP Requests and Responses, see #1748 (@keith-hall)
- LLVM, see #1777 (@ioncodes)
- Highlight for `vimrc` and `gvimrc` files, see #1763 (@SuperSandro2000)
- Syslog highlighting improvements, see #1793 (@scop)
- Added support for `slim` syntax, see #1693 (@mfinelli)
- Racket, see #1884 (@jubnzv)
- LiveScript, see #1915 (@Enselic)
- MediaWiki, see #1925 (@sorairolake)
- The `requirements.txt` syntax has been removed due to incompatible license requirements.
- Dart, new highlighter, see #1959 (@Ersikan)
- SCSS and Sass syntaxes updated, see #1766 (@Enselic)
- PowerShell syntax updated, see #1935 (@Enselic)
- TypeScript syntax updated, see #1834 (@Enselic)

## `bat` as a library

- Deprecate `HighlightingAssets::syntaxes()` and `HighlightingAssets::syntax_for_file_name()`. Use `HighlightingAssets::get_syntaxes()` and `HighlightingAssets::get_syntax_for_path()` instead. They return a `Result` which is needed for upcoming lazy-loading work to improve startup performance. They also return which `SyntaxSet` the returned `SyntaxReference` belongs to. See #1747, #1755, #1776, #1862 (@Enselic)
- Remove `HighlightingAssets::from_files` and `HighlightingAssets::save_to_cache`. Instead of calling the former and then the latter you now make a single call to `bat::assets::build`. See #1802, #1971 (@Enselic)
- Replace  the `error::Error(error::ErrorKind, _)` struct and enum with an `error::Error` enum. `Error(ErrorKind::UnknownSyntax, _)` becomes `Error::UnknownSyntax`, etc. Also remove the `error::ResultExt` trait. These changes stem from replacing `error-chain` with `thiserror`. See #1820 (@Enselic)
- Add new `MappingTarget` enum variant `MapExtensionToUnknown`. Refer to its documentation for more information. Also mark `MappingTarget` as `#[non_exhaustive]` since more enum variants might be added in the future. See #1703 (@cbolgiano), #2012 (@Enselic)


# v0.18.3

## Bugfixes

- Bump `git2` dependency to fix build with Rust 1.54, see #1761


# v0.18.2

## Features

- Ignore known backup/template filename suffixes when selecting the syntax, see #1687 (@scop)

## Bugfixes

- Fix for a security vulnerability on Windows. Prior to this release, `bat` would execute programs called `less`/`less.exe` from the current working directory (instead of the one from `PATH`) with priority. An attacker might be able to use this by placing a malicious program in a shared directory where the user would execute `bat`. `bat` users on Windows are advised to upgrade to this version. See #1724 and #1472 (@Ry0taK).

## Other

- Add bash completion, see #1678 (@scop)
- Fix Clippy lints, see #1661 (@mohamed-abdelnour)
- Add syntax highlighting test files, see #1213 and #1668 (@mohamed-abdelnour)

## Syntaxes

- Upgraded Julia syntax to fix a highlighting bug, see #1692
- Added support for `dash` syntax, see #1654 (@mohamed-abdelnour)
- Added support for `XAML` syntax, see #1590 and #1655 (@mohamed-abdelnour)
- Apply `DotENV` syntax also for `.env.default` and `.env.defaults` files, see #1669


# v0.18.1

## Bugfixes

- Mouse support and screen clearing broken for `less` versions with minor version number (581.2), see #1629 and #1639 (@aswild)

## Other

- `Input::ordinary_file` and `Input::with_name` now accept `Path` rather than `OsStr` see #1571 (@matklad)
- The `LESS` environment variable is now included in `bat --diagnostic`, see #1589 (@Enselic)
- Increased min. required Rust version to 1.45

## Syntaxes

- Improved the Syslog syntax highlighting, see #1606 (@keith-hall)
- Replaced "Advanced CSV" with a custom CSV syntax definition written especially for `bat`; see #1574 (@keith-hall)
- Added SystemVerilog file syntax, see #1580 (@SeanMcLoughlin)
- Added Solidity and Vyper syntax, see #1602 (@Ersikan)

## New themes

- Dark+ VS Code theme, see #1588 and #1598 (@PatriotRossii)



# v0.18.0

## Features

- Use a pager when `bat --list-languages` is called, see #1394 (@stku1985)

## Bugfixes

- If the last line doesn't end with a newline character, don't add it if `--style=plain`, see #1438 (@Enselic)
- Only print themes hint in interactive mode (`bat --list-themes`), see #1439 (@rsteube)
- Make ./tests/syntax-tests/regression_test.sh work on recent versions of macOS, see #1443 (@Enselic)
- VimL syntax highlighting fix, see #1450 (@esensar)
- Print an 'Invalid syntax theme settings' error message if a custom theme is broken, see #614 (@Enselic)
- If plain mode is set and wrap is not explicitly opted in, long lines will no be truncated, see #1426
- If `PAGER` (but not `BAT_PAGER` or `--pager`) is `more` or `most`, silently use `less` instead to ensure support for colors, see #1063 (@Enselic)
- If `PAGER` is `bat`, silently use `less` to prevent recursion. For `BAT_PAGER` or `--pager`, exit with error, see #1413 (@Enselic)
- Manpage highlighting fix, see #1511 (@keith-hall)
- `BAT_CONFIG_PATH` ignored by `bat` if non-existent, see #1550 (@sharkdp)

## Other

- Performance improvements, see #1421 (@LovecraftianHorror)
- Added a new `--diagnostic` option to collect information for bug reports, see #1459 (@sharkdp)
- Modified default theme colors to differentiate between a JSON key and a string value, see #1400 (@keith-hall)
- Upped min required Rust version to 1.42

## Syntaxes

- Added Zig syntax, see #1470 (@paulsmith)
- Added Lean syntax, see #1446 (@Julian)
- Added `.resource` extension for Robot Framework files, see #1386
- Added `gnuplot` syntax, see #1431 (@sharkdp)
- Highlight *.pac (Proxy auto-config) files as JavaScript, see #1515 (@sharkdp)

## New themes

- `ansi` replaces `ansi-dark` and `ansi-light`, see #1104 and #1412 (@mk12). **Breaking change:** users that were previously using one of the `ansi-*` themes should switch to `ansi`.
- The Gruvbox theme has been updated, see #1291 (@j0hnmeow). **Breaking change:** users that were previously using `gruvbox` or `gruvbox-white` should update and use `gruvbox-dark`/`gruvbox-light` instead.

## `bat` as a library

- The following `PrettyPrinter` methods have been removed (they were previously deprecated):
   - `input_stdin_with_name`
   - `input_from_bytes_with_name`
   - `input_from_reader_with_name`
   - `vcs_modification_markers` (if the `git` feature is not enabled)


# v0.17.1

## Bugfixes

- Running `bat` without arguments fails ("output file is also an input"), see #1396


# v0.17.0

## Features

- Added a new `--style` value, `rule`, which adds a simple horizontal ruled line between files, see #1276 (@tommilligan)
- Pass `-S` ("chop long lines") to `less` if `--wrap=never` is set in `bat`, see #1255 (@gahag)

## Bugfixes

- Detect infinite loop when input and output are the same, see #1193 and #1197 (@niklasmohrin)
- Throw an error when `bat` is being used as `pager`, see #1343 (@adrian-rivera)
- Bash syntax highlighting not selected for `*.ebuild` and `*.eclass` files, see #1292 (@sharkdp)
- Fix `zsh` completion when using `-p`, see #1320 (@xzfc)

## Other

- Add note to refer to see detailed help with `--help` (and vice versa with `-h`), see #1215 (@henil)
- Add a `Contributors` section to `README`, see #1348 (@adrian-rivera)

## Syntaxes

- Manpage syntax highlighting has been improved, see #1315 (@keith-hall)
- Add Svelte file syntax, see #1285 (@kjmph)

## New themes

- Coldark, see #1329 (@armandphilippot)


# v0.16.0

## Features

- Added support for the `NO_COLOR` environment variable, see #1021 and #1031 (@eth-p)
- Added `-P` short flag to disable paging, see #1075 and #1082 (@LordFlashmeow)
- Added `--force-colorization`/`-f` flag to provide an alias for forced color and decoration output, see #1141 (@alexanderkarlis)

## Bugfixes

- Fixed non-printable characters display for redirected output, see #1061 (@gsomix)
- Handle file extension conflicts in `--list-languages`, see #1076 and #1135 (@Kienyew)

## Other

- Switched to "·" (U+00B7) Middle Dot from "•" (U+2022) Bullet for non-printing spaces, see #1056 and #1100 (@LordFlashmeow)
- Added zsh shell completion script, see #1136 (@Kienyew)
- Improved `--help` text (@sharkdp)
- Added custom languages/themes sections to manpage (@eth-p)

## Syntaxes

- Update AsciiDoc syntax, see #1034 (@rxt1077)
- GLSL (@caioalonso)
- Add Nginx and Apache config file syntax, see #1137 (@kjmph, @niklasmohrin)
- Use `fstab` syntax for `crypttab` files, see #1073 (@sharkdp)
- Support syntax highlighting for files in `$XDG_CONFIG_HOME/git/`, see #1191 (@ahmedelgabri)

## New themes

- Gruvbox, see #1069 (@kyleondy)
- base16-256 for [base16-shell](https://github.com/chriskempson/base16-shell) users, see #1111 (@mk12)

## `bat` as a library

- Add APIs to provide `Input` descriptions with `InputDescription` (@eth-p)
- Add function to directly provide `Input`s to `PrettyPrinter` (@eth-p)
- **Breaking:** `Input::theme_preview_file` is no longer available. (@eth-p)

## Packaging

- Removed build dependency on `liquid` (@sharkdp).

# v0.15.4

## Bugfixes

- Added missing Solarized themes, see #1027
- Fixed highlighting bug in Haskell source files, see #1026

# v0.15.3

## Bugfixes

- Cannot run `bat` with relative paths, see #1022
- bat mishighlights Users that start with digits in SSH config, see #984

## New syntaxes

- SML, see #1005 (@kopecs)

## Other

- Some syntaxes and themes have been updated to the latest version

# v0.15.2

## Bugfixes

- Fix syntax detection for files called 'rails', see #1008
- Fix potential errors with syntax detection for symlinked files, see #1001
- `--map-syntax` doesn't work with names provided through `--file-name` (@eth-p)

## Other

- Add padding above headers when not using a grid, see #968 and #981 (@pt2121)
- bat now prints an error if an invalid syntax is specified via `-l` or `--map-syntax`, see #1004 (@eth-p)

## `bat` as a library

- `PrettyPrinter::vcs_modification_markers` has been marked deprecated when building without the `git` feature, see #997 and #1020 (@eth-p, @sharkdp)

## Packaging

- Compilation problems with `onig_sys` on various platforms have been resolved by upgrading to `syntect 4.2`, which includes a new `onig` version that allows to build `onig_sys` without the `bindgen` dependency. This removes the need for `libclang(-dev)` to be installed to compile `bat`. Package maintainers might want to remove `clang` as a build dependency. See #650 for more details.

# v0.15.1

## Bugfixes

- Fix highlighting of Markdown files, see #963 and #977
- Fix `base16` theme (was broken since in v0.14), see #972, #934 and #979 (@mk12).
  Users suffering from #865 ("no color for bat in ssh from a Windows client") can use the `ansi-dark` and `ansi-light` themes from now on.

## New syntaxes

- Fortran, see #957
- Email (@mariozaizar)
- QML, see #962 (@pylipp)

# v0.15.0

## Features

- Add a new `--diff`/`-d` option that can be used to only show lines surrounding
  Git changes, i.e. added, removed or modified lines. The amount of additional
  context can be controlled with `--diff-context=N`. See #23 and #940

## Bugfixes

- Error message printed in the middle of the output for another file, see #946
- Performance improvements when using custom caches (via `bat cache --build`): the `bat` startup time should now be twice as fast (@lzutao).

## Themes

- Updated version of the Solarized dark/light themes, see #941

## `bat` as a library

- There are a few changes in the "low level" API (the `Config` struct has changed and
  the error handler needs a new `&mut dyn Write` argument). The high-level API is not
  affected.

# v0.14.0

## Features

- Added a new `--file-name <name>…` option to overwrite the displayed filename(s)
  in the header. This is useful when piping input into `bat`. See #654 and #892 (@neuronull).
- Added a new `--generate-config-file` option to create an initial configuration file
  at the right place. See #870 (@jmick414)

## Bugfixes

- Performance problems with C# source code have been fixed, see #677 (@keith-hall)
- Performance problems with Makefiles have been fixed, see #750 (@keith-hall)
- Fix bug when highlighting Ruby files with unindented heredocs, see #914 (@keith-hall)
- A highlighting problem with Rust source code has been fixed, see #924 (@keith-hall)
- Windows: short files that do not require paging are displayed and then lost, see #887
- `--highlight-line` did not work correctly in combination with `--tabs=0` and `--wrap=never`,
  see #937

## Other

- When saving/reading user-provided syntaxes or themes, `bat` will now maintain a
  `metadata.yaml` file which includes information about the `bat` version which was
  used to create the cached files. When loading cached files, we now print an error
  if they have been created with an incompatible version. See #882
- Updated `liquid` dependency to 0.20, see #880 (@ignatenkobrain)

## `bat` as a library

- A completely new "high level" API has been added that is much more convenient
  to use. See the `examples` folder for the updated code. The older "low level"
  API is still available (basically everything that is not in the root `bat`
  module), but has been refactored quite a bit. It is recommended to only use
  the new "high level" API, if possible. This will be much easier to keep stable.
  Note that this should still be considered a "beta" release of `bat`-as-a-library.
  For more details and some screenshots of the example programs, see #936.
- Stripped out a lot of binary-only dependencies, see #895 and #899 (@dtolnay)

  This introduces a `features = ["application"]` which is enabled by default and pulls in
  everything required by `bat` the application. When depending on bat as a library, downstream
  `Cargo.toml` should disable this feature to cut out inapplicable heavy dependencies:
  ``` toml
  [dependencies]
  bat = { version = "0.14", default-features = false }
  ```
  Other optional functionality has also been put behind features: `paging` and `git` support.
- Allow using the library with older syntect, see #896 and #898 (@dtolnay)

## New syntaxes

- Rego, see #872 (@patrick-east)
- Stylo, see #917


# v0.13.0

## `bat` as a library

Beginning with this release, `bat` can be used as a library (#423).

This was a huge effort and I want to thank all people who made this possible: @DrSensor, @mitsuhiko, @mre, @eth-p!

- Initial attempt in #469 (@mitsuhiko)
- Second attempt, complete restructuring of the `bat` crate, see #679 (@DrSensor)
- Updates to example, public API, error handling, further refactoring: #693 #873 #875 (@sharkdp)

I want to stress that this is the very first release of the library. Things are very likely to change. A lot of things are still missing (including the documentation).

That being said, you can start using it! See the example programs in [`examples/`](https://github.com/sharkdp/bat/tree/master/examples).

You can see the API documentation here: https://docs.rs/bat/

## Features

- (**Breaking change**) Glob-based syntax mapping, see #877 and #592. With this change,
  users need to update their bat config files (`bat --config-file`), if they have any `--map-syntax` settings
  present.

  The option now works like this:
  ```bash
  --map-syntax <glob-pattern>:<syntax-name>
  ```

  For more information, see the `--help` text, the man page or the README.

  This new feature allows us to properly highlight files like:
  * `/etc/profile`
  * `~/.ssh/config`

- `--highlight-line` now accepts line ranges, see #809 (@lkalir)
- Proper wrapping support for output with wide Unicode characters, see #811 #787 and #815 (@Kogia-sima)
- A lot of updates to existing syntaxes via #644 (@benwaffle, @keith-hall)
- `BAT_CACHE_PATH` can be used to place cached `bat` assets in a non-standard path, see #829 (@neuronull)
- Support combination of multiple styles at the same time, see #857 (@aslpavel)

## Bugfixes

- Do not pass '--no-init' on newer less versions, see #749 and #786 (@sharkdp)
- 'bat cache' still takes precedence over existing files, see #666 (@sharkdp)
- `.sc` files should be treated as scala files, see #443 (@benwaffle)
- Allow underscores and dashes in page names, see #670 (@LunarLambda)
- Keep empty lines empty, see #601 (@mbarbar)
- Wrapping does not work when piping, see #758 (@fusillicode, @allevo, @gildo)
- Allow for non-unicode filenames, see #225 (@sharkdp)
- Empty file without header produces incomplete grid, see #798 (@eth-p)
- Files named `build` don't respect shebang lines, see #685 (@sharkdp)

## Other

- Parametrizable names for man page and shell completion files, see #659 #673 #656 (@eth-p)
- Enabled LTO, making `bat` about 10% faster, see #719 (@bolinfest, @sharkdp)
- Suggestions non how to configure `bat` for MacOS dark mode, see README (@jerguslejko)
- Extended ["Integration with other tools"](https://github.com/sharkdp/bat#integration-with-other-tools) section (@eth-p)
- Updated [instrutions on how to use `bat` as a `man`-pager](https://github.com/sharkdp/bat#man), see #652, see #667 (@sharkdp)
- Add section concerning file encodings, see #688 and #568 (@sharkdp)
- Updated sort order of command-line options in `--help` text and manpage, see #653 and #700 (@hrlmartins)
- Updates to the man page syntax, see #718 (@sharkdp)
- Japanese documentation updates, see #863 (@k-ta-yamada, @sorairolake and @wt-l00)
- Accept "default" as a theme, see #757 (@fvictorio)
- Updated Windows installation instructions, see #852 (@sorenbug)
- Updated man page, see #573 (@sharkdp)

## New syntaxes

- Jinja2, see #648 (@Martin819)
- SaltStack SLS, see #658 (@Martin819)
- `/etc/fstab`, see #696 (@flopp and @eth-p)
- `/etc/group` and `/etc/passwd`, see #698 (@argentite)
- `/proc/cpuinfo` and `/proc/meminfo`, see #593 (@sharkdp)
- Nim, see #542 (@sharkdp)
- Vue, see #826 (@chaaaaarlotte)
- CoffeScript, see #833 (@sharkdp)

## New themes

- Dracula, see #687 (@clarfon)
- Nord, see #760 (@crabique)
- Solarized light and dark, see #768 (@hakamadare)

## Packaging

- `bat` is now in the official Ubuntu and Debian repositories, see #323 and #705 (@MarcoFalke)
- `bat` can now be installed via MacPorts, see #675 (@bn3t)
- Install fish completions into 'vendor_completions.d', see #651 (@sharkdp)

## Thanks

- To @eth-p for joining me as a maintainer! I'm very grateful for all the work you put into
  managing and responding to issues, improving our deployment, adding PR/issue templates (#837) as
  well as fixing bugs and implementing new features.

# v0.12.1

## Bugfixes

- Fixes a bug for older Windows versions (*"The procedure entry point `CreateFile2` could not be located"*), see #643 (@rivy)

# v0.12.0

## Features

- Binary file content can now be viewed with `bat -A`, see #623, #640 (@pjsier and @sharkdp)
- `bat` can now be used as a man pager. Take a look at the README and #523 for more details.
- Add new style component to separate multiple `--line-range`s, see #570 (@eth-p)
- Added `-L` as an alias for `--list-languages`

## Bugfixes

- Output looks unbalanced when using '--style=grid,numbers' without 'header', see #571 (@eth-p)
- issues with filenames starting with "cache", see #584
- Can't build cache with new theme without creating cache dir, see #576 (@frm)
- `--terminal-width -10` is parsed incorrectly, see #611

## Other

- Added fish completions to DEB package, see #554

## New syntaxes

- Emacs Org mode, see #36 (@bricewge)
- `requirements.txt`
- DotENV `.env`
- SSH config syntax (`-l ssh_config`), see #582 (@issmirnov)
- `/etc/hosts`, see #583 (@issmirnov)
- GraphQL, see #625 (@dandavison)
- Verilog, see #616
- SCSS and Sass, see #637
- `strace` syntax, see #599

## Packaging

- `bat` is now in the official Gentoo repositories, see #588 (@toku-sa-n)
- `bat` is now in the official Alpine Linux repositories, see #586 (@5paceToast)
- `bat` is in the official Fedora repositories, see #610 (@ignatenkobrain)

# v0.11.0

## Features

- Three new special color themes are available: `ansi-light`, `ansi-dark` and `base16`. These
  are useful for people that often switch from dark to light themes in their terminal emulator
  or for people that want the colors to match their terminal theme colors. For more details,
  see #543 and #490 (@mk12, implementation idea by @trishume)
- Hand-written auto completion script for Fish shell, see #524 and #555 (@ev-dev and @eth-p)
- The `-p`/`--plain` option can now be used twice (typically `-pp`). The first `-p` switches the
  `--style` to "plain". The second `-p` disables the pager. See #560 and #552 (@eth-p)

## Bugfixes

- Do not replace arguments to `less` when using `--pager`, see #509
- Binary files will now be indicated by a warning in interactive mode, see #530 #466 #550 (@maxfilov)
- Empty files are (once again) printed with a single header line, see #504 and #566 (@reidwagner
  and @sharkdp)
- `--terminal-width=0` is now disallowed, see #559 (@eth-p)
- Accidental printing of files named `cache`, see #557

## Other

- New integration tests, see #500 and #502 (@reidwagner and @sharkdp)
- New ["Integration with other tools"](https://github.com/sharkdp/bat#integration-with-other-tools) section in the README.
- Migrated to Rust 2018 (@expobrain)

## New syntaxes

- F# syntax has been updated, see #531 (@stroborobo)
- Fish shell, see #548 (@sanga)

## Packaging

- `bat` is now available on Chocolatey, see #541 (@rasmuskriest)

# v0.10.0

## Features

- Added new `--highlight-line <N>` option, see #453, #346 and #175 (@tskinn and @sharkdp)

## Changes

- **Change the default configuration directory on macOS** to `~/.config/bat`, see #442 (@lavifb). If you are on macOS, you need to copy your configuration directory from the previous place (`~/Library/Preferences/bat`) to the new place (`~/.config/bat`).
- Completely disabled the generation of shell completion files, see #372
- Properly set arguments to `less` if `PAGER` environment variable contains something like `less -F` (which is missing the `-R` option), see #430 (@majecty)
- Report the name of missing files, see #444 (@ufuji1984)
- Don't start pager if file doesn't exist, see #387
- Rename `bat cache --init` to `bat cache --build`, see #498
- Move the `--config-dir` and `--cache-dir` options from `bat cache` to `bat` and hide them from the help text.

## Bugfixes

- Blank line at the end of output when using `--style=plain`, see #379
- EOF must be sent twice on stdin if no other input is sent, see #477 (@reidwagner)

## New syntaxes

- Twig (@ahmedelgabri)
- `.desktop` files (@jleclanche)
- AsciiDoc (@markusthoemmes)
- Assembly (x86_64 and ARM)
- Log files (@caos21)
- Protobuf and ProtobufText (@caos21)
- Terraform (@caos21)
- Jsonnet (@hfm)
- Varlink (@haraldh)

## Other

- Added Japanese version of README (@sh-tech and @object1037)
- Code improvements (@barskern)

# v0.9.0

## Features

- A new `-A`/`--show-all` option has been added to show and highlight non-printable characters (in analogy to GNU `cat`s option):

  ![](https://camo.githubusercontent.com/c3e769482ef3184f6be6adaa34bdc8d19c378254/68747470733a2f2f692e696d6775722e636f6d2f324b54486859542e706e67)

  see #395 and #381 for more details.

- Added `--pager` option (to configure the pager from the configuration file), see #362 (@majecty)

- Added `BAT_CONFIG_PATH` environment variable to set a non-default path for `bat`s configuration file, see #375 (@deg4uss3r)

- Allow for multiple occurrences of `--style` to allow for the configuration
  of styles from the config file, see #367 (@sindreij)

- Allow for multiple `--line-range` arguments, see #23

- The `--terminal-width` option can now also accept offsets, see #376

## Changes

- Use of italics is now *disabled by default* (see #389 for details). They can be
  re-enabled by adding `--italic-text=always` to your configuration file.

- The default tab-width has been set to 4.

- Added new "Sublime Snazzy" theme.

- Shell completions are currently *not* shipped anymore, see #372 for details.

## Bugfixes

- Avoid endless recursion when `PAGER="bat"`, see #383 (@rodorgas)

## Other

- `bat` is now available on openSUSE, see #405 (@dmarcoux)

- Added section about the new configuration file in the README (@deg4uss3r)

- Chinese translation of README (@chinanf-boy)

- Re-written tests for `--tabs` (@choznerol)

- Speed up integration tests, see #394

# v0.8.0

## Features

- Support for a configuration file with the following simple format:

  ```bash
  --tabs=4
  --theme="Sublime Snazzy"

  # A line-comment
  --map-syntax .ignore:.gitignore
  --map-syntax PKGBUILD:bash
  --map-syntax Podfile:ruby

  # Flags and options can also be on a single line:
  --wrap=never --paging=never
  ```

  The configuration file path can be accessed via `bat --config-file`. On Linux,
  it is stored in `~/.config/bat/config`.

- Support for the `BAT_OPTS` environment variable with the same format as specified
  above (in a single line). This takes precedence over the configuration file.

  See also #310.

- Support for custom syntax mappings via the `-m`/`--max-syntax` option.

  This allows users to (re)map certain file extensions or file names to an existing syntax:

  ``` bash
  bat --map-syntax .config:json ...
  ```

  The option can be use multiple times. Note that you can easily make these mappings permanent by using bats new configuration file.

  See #169

- Support pager command-line arguments in `PAGER` and `BAT_PAGER`, see #352 (@Foxboron)

- Add support for wildcards in Windows CMD, see #309 (@zxey)

- First-line syntax detection for all input types, see #205

- Encoding support for UTF-16LE and UTF-16BE, see #285

- New syntaxes: Robot framework (@sanga)

## Changes

- Binary files are now detected and not displayed when the output goes to an interactive terminal, see #205

## Bugfixes

- JavaDoc comments break syntax highlighting in .java files, see #81

- Bat Panics on Haskell Source Code, see #314

## Other

- Better `-h` and `--help` texts.

- Updated documentation on how to configure `bat`s pager

- Updated documentation for light backgrounds, see #328 (@russtaylor)

- Generate shell completions during build, see #115 (@davideGiovannini)

- A lot of new tests have been written

- `bat` is now available via [Termux](https://termux.com/), see #341 (@fornwall)

- `bat` is now available via [nix](https://nixos.org/nix), see #344 (@mgttlinger)

- `bat` is now available via [Docker](https://hub.docker.com/r/danlynn/bat/), see #331 (@danlynn)

# v0.7.1

## Features

- Use the `ansi_colours` package by @mina86 for better true-color approximation on 8 bit color terminals, see #319 and #202.

## Bugfixes

- Bat Panics on Haskell Source Code, see #314
- Disable wrapping when `--style=plain`/`-p` is used, see #289

## Other

- Added Ansible install instructions (@aeimer)
- Added section about Cygwin to the README (@eth-p)

# v0.7.0

## Features

- Tabs are now (optionally) expanded to spaces. This can be controlled with the new
  `--tabs` command-line option or the `BAT_TABS` environment variable. The
  new feature also closes two bugs #166 and #184. For more information, see #302 (@eth-p).

- Added support for the `BAT_STYLE` environment variable, see #208 (@ms2300)

- Added `OneHalf` theme for terminals with a light-gray background, see #256

- Added new syntaxes for CSV, JSX in JavaScript and TypeScript, Cabal, Dart,
  F#, PureScript, Swift, Crystal, PowerShell (Many Thanks to @tobenna and @mimadrid)

## Changes

- Query `git diff` only when needed, see #303 (@ShikChen)

- Disable wrapping when `--plain` is used, see #289 (@eth-p)

## Bugfixes

- Can read files named `cache`, see #275 (@BK1603)

- A lot of bugfixes for Windows, see #252, #264

- Detect `less` reliably and in a portable way, see #271 and #290 (@Aankhen)

- last decoration line is not formatted properly with `--wrap never`, see #299 (@Rogach)

- Do not show file header for directories, see #292

## Other

- Enabled a new `aarch64` build target, see #258 (@rachitchokshi)

- Provide Debian packages for `armhf`, see #280 (@rachitchokshi)

- Added README section about "`bat` on Windows" (@Aankhen)

- Windows installation via scoop (@meltinglava)

# v0.6.1

## Bugfixes

- Fixed panic when running `bat --list-languages | head`, see #232 (@mchlrhw)
- Respect `--color` settings for `--list-themes` and `--list-languages`, see #233
- Git modifications now work on Windows

## Other

- There will be auto-generated Windows releases, starting with this version (@anykao)

# v0.6.0

## Features

- The `--list-themes` option now shows a preview for each highlighting theme (@ms2300)
- Added `-p`/`--plain` as an alias for `--style=plain`, see #212 (@ms2300)
- Major refactorings, enabling some progress on #150. In non-interactive mode, `bat` will now copy input bytes 1:1.
- New languages: Elm, Kotlin, Puppet, TypeScript, see #215 #216 #217 #218
- New syntax highlighting theme: zenburn (@colindean)

## Changes

- New themes in `$BAT_CONFIG_DIR/themes` are now loaded *in addition* to
  the default themes (they may also override), see #172
- The `Default.tmTheme` symlink is not necessary anymore.

## Bugfixes

* Using `bat cache --init` leads to duplicated syntaxes, see #206

## Other

* Extended and cleaned-up `--help` text.
* Added initial version of a man page, see #52
* New README sections: *Development* and *Troubleshooting*, see #220

# v0.5.0

## Features

- Added `--line-range n:m` option to print a range of lines, see #159 (@tskinn)
- The syntax highlighting theme can now be controlled by the `BAT_THEME` environment variable, see [README](https://github.com/sharkdp/bat#highlighting-theme) and #177 (@mandx)
- The `PAGER` and `BAT_PAGER` environment variables can be used to control the pager that `bat` uses, see #158 and the [new README section](https://github.com/sharkdp/bat#using-a-different-pager)
- Added syntax highlighting for Nix, see #180
- Added syntax highlighting for AWK (Gert Hulselmans)

## Changes

- The customization of syntax sets and theme sets is now separated. Syntax definitions are now loaded *in addition* to the ones that are stored in the `bat` binary by default. Please refer to these new sections in the README: [Adding new syntaxes](https://github.com/sharkdp/bat#adding-new-syntaxes--language-definitions), [Adding new themes](https://github.com/sharkdp/bat#adding-new-themes), also see #172
- The color for the filename is now the default foreground color. The colors for the grid and the line numbers is now determined from the syntax highlighting theme, which now also works for light backgrounds, see #178.

## Bugfixes

- Escape Sequences get partially stripped, see #182 (@eth-p)
- Use separate Git repository for snapshot testing, see #165 and #161
- Markdown breaking on JavaScript, see #183

## Other

- Binaries for armv7 are now provided, see #196
- `bat` is now in the official [Arch package repositories](https://www.archlinux.org/packages/community/x86_64/bat/).
- Optimizations in the RGB => 8-bit conversion (@mina86)

# v0.4.1

(this is just a small bugfix release, see 0.4.0 for all features and changes)

## Bugfixes

- Fix problem with `cargo test` when `bat` is not checked out in a Git repository, see #161

# v0.4.0

## Features

* Support for line-wrapping, see #54 and #102 (@eth-p)
* New and updated `--style` parameter, see #74 and README (@pitkley)
* Added `--theme` and `--list-themes` options, see #89 (@rleungx)
* Added syntax highlighting for: Julia (@iamed2), Dockerfiles, VimL, CMake, INI, Less
* Added a few popular Sublime Text highlighting themes, see #133
* Support for bold, italic and underline font styles, see #96
* Support for 32bit systems is now available, see #84
* Added `-u` and `-n` options, see #134
* ANSI color support on Windows 10

## Changes

* The customization folder for own syntaxes has been renamed from `syntax` to `syntaxes`, see README.
* Changed Markdown syntax to the default Sublime Text syntax, see #157
* Sorted language listing (@rleungx)
* Command line arguments like `--theme` or `--color` can now override themselves.
* Improved `--help` text.

## Bugfixes

- Fixed crash for (really) small terminal sizes, see #117 (@eth-p)
- Syntax detection for `.bashrc`, `CMakeLists.txt` etc., see #100
- Properly handle lines with invalid UTF-8, see #7 (@BrainMaestro)
- Better error handling, see #17 (@rleungx and @sharkdp)
- Proper handling of UTF-8 characters in `less`, see #98 (@ghuls)
- Build fix on nightly, see #148 (@tathanhdinh)

## Other

- [Comparison with alternative projects](https://github.com/sharkdp/bat/blob/master/doc/alternatives.md).
- New "bat" logo in the README, see #119 (@jraulhernandezi)
- Output test cases (@BrainMaestro)
- Lots of great refactoring work (@BrainMaestro)

# v0.3.0

## Features

* Automatic paging by integrating with `less`, see #29 (@BrainMaestro)
* Added support for reading from standard input, see #2
* Added support for writing to non-interactive terminals (pipes, files, ..); new
  `--color=auto/always/never` option, see #26 (@BrainMaestro)
* Added `--list-languages` option to print all available syntaxes, see #69 (@connorkuehl)
* New option to specify the syntax via `-l`/`--language`, see #19 (@BrainMaestro)
* New option to control the output style (`--style`), see #5 (@nakulcg)
* Added syntax highlighting support for TOML files, see #37

## Changes

* The `init-cache` sub-command has been removed. The cache can now be controlled via
  `bat cache`. See `bat cache -h` for all available commands.

## Bug fixes

* Get git repository from file path instead of current directory, see #22 (@nakulcg)
* Process substitution can now be used with bat (`bat <(echo a) <(echo b)`), see #80

## Thanks

I'd like to say a big THANK YOU to all contributors and everyone that has given us
some form of feedback.

Special thanks go to @BrainMaestro for his huge support with new features, bug reports
and code reviews!

# v0.2.3

- Added a new statically linked version of bat (`..-musl-..`)

# v0.2.2

- Remove openssl dependency completely, see #30.

# v0.2.1

- Added Elixir syntax, see #25.
- Use libcurl-openssl instead of libcurl-gnutls, see #30.

# v0.2.0

- Support for custom syntaxes, add 'Markdown extended' theme
- Bugfix: Git modifications not shown from child folder

# v0.1.0

Initial release


================================================
FILE: CONTRIBUTING.md
================================================
# Contributing

Thank you for considering to contribute to `bat`!



## Add an entry to the changelog

Keeping the [`CHANGELOG.md`](CHANGELOG.md) file up-to-date makes the release
process much easier and therefore helps to get your changes into a new `bat`
release faster. However, not every change to the repository requires a
changelog entry. Below are a few examples of that.

Please update the changelog if your contribution contains changes regarding
any of the following:
  - the behavior of `bat`
  - syntax mappings
  - syntax definitions
  - themes
  - the build system, linting, or CI workflows

A changelog entry is not necessary when:
  - updating documentation
  - fixing typos

>[!NOTE]
> For PRs, a CI workflow verifies that a suitable changelog entry is
> added. If such an entry is missing, the workflow will fail. If your
> changes do not need an entry to the changelog (see above), that
> workflow failure can be disregarded.


### Changelog entry format

The top of the `CHANGELOG` contains a *"unreleased"* section with a few
subsections (Features, Bugfixes, …). Please add your entry to the subsection
that best describes your change.

Entries must follow this format:
```
- Short description of what has been changed, see #123 (@user)
```
Please replace `#123` with the number of your pull request (not issue) and
`@user` by your GitHub username.


## Development

Please check out the [Development](https://github.com/sharkdp/bat#development)
section in the README.


## Adding a new feature

Please consider opening a
[feature request ticket](https://github.com/sharkdp/bat/issues/new?assignees=&labels=feature-request&template=feature_request.md)
first in order to give us a chance to discuss the details and specifics of the potential new feature before you go and build it.


## Adding new syntaxes/languages or themes

Before you make a pull request that adds a new syntax or theme, please read
the [Customization](https://github.com/sharkdp/bat#customization) section
in the README first.

If you really think that a particular syntax should be added for all
users, please read the corresponding
[documentation](https://github.com/sharkdp/bat/blob/master/doc/assets.md)
first.

To map a file name pattern to an existing syntax, read [the documentation here](https://github.com/sharkdp/bat/blob/master/src/syntax_mapping/builtins/README.md).

Note: We are currently not accepting new default themes.


## Regression tests

You are **strongly encouraged** to add regression tests. Regression tests are great,
not least because they:

* ensure that your contribution will never completely stop working.

* makes code reviews easier, because it becomes very clear what the code is
  supposed to do.

For functional changes, you most likely want to add a test to
[`tests/integration_tests.rs`](https://github.com/sharkdp/bat/blob/master/tests/integration_tests.rs).
Look at existing tests to know how to write a new test. In short, you will
invoke the `bat` binary with a certain set of arguments, and then assert on
stdout/stderr.

To learn how to write regression tests for theme and syntax changes, read the
[Syntax
tests](https://github.com/sharkdp/bat/blob/master/doc/assets.md#syntax-tests)
section in `assets.md`.

### Ensuring bat is available for Syntax tests

The syntax test script (`tests/syntax-tests/update.sh`) calls `bat` from your PATH and regenerates the highlighted output files under
`tests/syntax-tests/highlighted/`. These files are used to verify that syntax highlighting works as expected.

- If you only built the binaries with:
  ```bash
  cargo build --bins
  ```

  you need to add the debug build to your PATH from the bat project root before running the tests.
  See also step 5 in [Syntax
tests](https://github.com/sharkdp/bat/blob/master/doc/assets.md#syntax-tests) for related instructions.
  ```bash
  export PATH="$PATH:$(pwd)/target/debug"
  ```
  Otherwise, you will see:
  ```bash
  Error: Could not execute 'bat'. Please make sure that the executable is available on the PATH.
  ```
- If you installed bat with:
  ```bash
  cargo install --path . --locked
  ```
  then bat will be available in ~/.cargo/bin (usually already in PATH), and the tests will run without issues.

================================================
FILE: Cargo.toml
================================================
[package]
authors = ["David Peter <mail@david-peter.de>"]
categories = ["command-line-utilities"]
description = "A cat(1) clone with wings."
homepage = "https://github.com/sharkdp/bat"
license = "MIT OR Apache-2.0"
name = "bat"
repository = "https://github.com/sharkdp/bat"
version = "0.26.1"
exclude = ["assets/syntaxes/*", "assets/themes/*"]
build = "build/main.rs"
edition = '2021'
# You are free to bump MSRV as soon as a reason for bumping emerges.
rust-version = "1.88"

[features]
default = ["application", "git"]
# Feature required for bat the application. Should be disabled when depending on
# bat as a library.
application = [
    "bugreport",
    "build-assets",
    "minimal-application",
]
# Mainly for developers that want to iterate quickly
# Be aware that the included features might change in the future
minimal-application = [
    "clap",
    "etcetera",
    "paging",
    "regex-onig",
    "wild",
]
git = ["git2"] # Support indicating git modifications
vendored-libgit2 = ["git2/vendored-libgit2"]
paging = [ "shell-words", "grep-cli", "minus"] # Support applying a pager on the output
lessopen = ["execute"] # Support $LESSOPEN preprocessor
build-assets = ["syntect/yaml-load", "syntect/plist-load", "regex", "walkdir"]

# You need to use one of these if you depend on bat as a library:
regex-onig = ["syntect/regex-onig"] # Use the "oniguruma" regex engine
regex-fancy = ["syntect/regex-fancy"] # Use the rust-only "fancy-regex" engine

[dependencies]
nu-ansi-term = "0.50.3"
ansi_colours = "^1.2"
bincode = "1.0"
console = "0.16.2"
flate2 = "1.1"
once_cell = "1.20"
thiserror = "2.0"
wild = { version = "2.2", optional = true }
content_inspector = "0.2.4"
shell-words = { version = "1.1.1", optional = true }
minus = { version = "5.6", optional = true, features = [
  "dynamic_output",
  "search",
] }
unicode-width = "0.2.1"
globset = "0.4"
serde = "1.0"
serde_derive = "1.0"
serde_yaml = "0.9.28"
semver = "1.0"
path_abs = { version = "0.5", default-features = false }
clircle = { version = "0.6.1", default-features = false }
bugreport = { version = "0.5.0", optional = true }
etcetera = { version = "0.11.0", optional = true }
grep-cli = { version = "0.1.12", optional = true }
regex = { version = "1.12.2", optional = true }
walkdir = { version = "2.5", optional = true }
bytesize = { version = "2.3.1" }
encoding_rs = "0.8.35"
execute = { version = "0.2.15", optional = true }
terminal-colorsaurus = "1.0"
unicode-segmentation = "1.12.0"
itertools = "0.14.0"

[dependencies.git2]
version = "0.20"
optional = true
default-features = false

[dependencies.syntect]
version = "5.3.0"
default-features = false
features = ["parsing"]

[dependencies.clap]
version = "4.5.60"
optional = true
features = ["wrap_help", "cargo"]

[target.'cfg(target_os = "macos")'.dependencies]
plist = "1.7.0"

[dev-dependencies]
assert_cmd = "2.0.16"
expect-test = "1.5.0"
serial_test = { version = "2.0.0", default-features = false }
predicates = "3.1.3"
wait-timeout = "0.2.1"
tempfile = "3.23.0"
serde = { version = "1.0", features = ["derive"] }

[target.'cfg(unix)'.dev-dependencies]
nix = { version = "0.31", default-features = false, features = ["term"] }

[build-dependencies]
anyhow = "1.0.97"
indexmap = { version = "2.13.0", features = ["serde"] }
itertools = "0.14.0"
once_cell = "1.20"
prettyplease = "0.2.37"
proc-macro2 = "1.0.106"
quote = "1.0.40"
regex = "1.12.2"
serde = "1.0"
serde_derive = "1.0"
serde_with = { version = "3.17.0", default-features = false, features = ["macros"] }
syn = { version = "2.0.104", features = ["full"] }
toml = { version = "0.9.8", features = ["preserve_order"] }
walkdir = "2.5"

[build-dependencies.clap]
version = "4.5.60"
optional = true
features = ["wrap_help", "cargo"]

[profile.release]
lto = true
strip = true
codegen-units = 1


================================================
FILE: LICENSE-APACHE
================================================
                                 Apache License
                           Version 2.0, January 2004
                        http://www.apache.org/licenses/

   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION

   1. Definitions.

      "License" shall mean the terms and conditions for use, reproduction,
      and distribution as defined by Sections 1 through 9 of this document.

      "Licensor" shall mean the copyright owner or entity authorized by
      the copyright owner that is granting the License.

      "Legal Entity" shall mean the union of the acting entity and all
      other entities that control, are controlled by, or are under common
      control with that entity. For the purposes of this definition,
      "control" means (i) the power, direct or indirect, to cause the
      direction or management of such entity, whether by contract or
      otherwise, or (ii) ownership of fifty percent (50%) or more of the
      outstanding shares, or (iii) beneficial ownership of such entity.

      "You" (or "Your") shall mean an individual or Legal Entity
      exercising permissions granted by this License.

      "Source" form shall mean the preferred form for making modifications,
      including but not limited to software source code, documentation
      source, and configuration files.

      "Object" form shall mean any form resulting from mechanical
      transformation or translation of a Source form, including but
      not limited to compiled object code, generated documentation,
      and conversions to other media types.

      "Work" shall mean the work of authorship, whether in Source or
      Object form, made available under the License, as indicated by a
      copyright notice that is included in or attached to the work
      (an example is provided in the Appendix below).

      "Derivative Works" shall mean any work, whether in Source or Object
      form, that is based on (or derived from) the Work and for which the
      editorial revisions, annotations, elaborations, or other modifications
      represent, as a whole, an original work of authorship. For the purposes
      of this License, Derivative Works shall not include works that remain
      separable from, or merely link (or bind by name) to the interfaces of,
      the Work and Derivative Works thereof.

      "Contribution" shall mean any work of authorship, including
      the original version of the Work and any modifications or additions
      to that Work or Derivative Works thereof, that is intentionally
      submitted to Licensor for inclusion in the Work by the copyright owner
      or by an individual or Legal Entity authorized to submit on behalf of
      the copyright owner. For the purposes of this definition, "submitted"
      means any form of electronic, verbal, or written communication sent
      to the Licensor or its representatives, including but not limited to
      communication on electronic mailing lists, source code control systems,
      and issue tracking systems that are managed by, or on behalf of, the
      Licensor for the purpose of discussing and improving the Work, but
      excluding communication that is conspicuously marked or otherwise
      designated in writing by the copyright owner as "Not a Contribution."

      "Contributor" shall mean Licensor and any individual or Legal Entity
      on behalf of whom a Contribution has been received by Licensor and
      subsequently incorporated within the Work.

   2. Grant of Copyright License. Subject to the terms and conditions of
      this License, each Contributor hereby grants to You a perpetual,
      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
      copyright license to reproduce, prepare Derivative Works of,
      publicly display, publicly perform, sublicense, and distribute the
      Work and such Derivative Works in Source or Object form.

   3. Grant of Patent License. Subject to the terms and conditions of
      this License, each Contributor hereby grants to You a perpetual,
      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
      (except as stated in this section) patent license to make, have made,
      use, offer to sell, sell, import, and otherwise transfer the Work,
      where such license applies only to those patent claims licensable
      by such Contributor that are necessarily infringed by their
      Contribution(s) alone or by combination of their Contribution(s)
      with the Work to which such Contribution(s) was submitted. If You
      institute patent litigation against any entity (including a
      cross-claim or counterclaim in a lawsuit) alleging that the Work
      or a Contribution incorporated within the Work constitutes direct
      or contributory patent infringement, then any patent licenses
      granted to You under this License for that Work shall terminate
      as of the date such litigation is filed.

   4. Redistribution. You may reproduce and distribute copies of the
      Work or Derivative Works thereof in any medium, with or without
      modifications, and in Source or Object form, provided that You
      meet the following conditions:

      (a) You must give any other recipients of the Work or
          Derivative Works a copy of this License; and

      (b) You must cause any modified files to carry prominent notices
          stating that You changed the files; and

      (c) You must retain, in the Source form of any Derivative Works
          that You distribute, all copyright, patent, trademark, and
          attribution notices from the Source form of the Work,
          excluding those notices that do not pertain to any part of
          the Derivative Works; and

      (d) If the Work includes a "NOTICE" text file as part of its
          distribution, then any Derivative Works that You distribute must
          include a readable copy of the attribution notices contained
          within such NOTICE file, excluding those notices that do not
          pertain to any part of the Derivative Works, in at least one
          of the following places: within a NOTICE text file distributed
          as part of the Derivative Works; within the Source form or
          documentation, if provided along with the Derivative Works; or,
          within a display generated by the Derivative Works, if and
          wherever such third-party notices normally appear. The contents
          of the NOTICE file are for informational purposes only and
          do not modify the License. You may add Your own attribution
          notices within Derivative Works that You distribute, alongside
          or as an addendum to the NOTICE text from the Work, provided
          that such additional attribution notices cannot be construed
          as modifying the License.

      You may add Your own copyright statement to Your modifications and
      may provide additional or different license terms and conditions
      for use, reproduction, or distribution of Your modifications, or
      for any such Derivative Works as a whole, provided Your use,
      reproduction, and distribution of the Work otherwise complies with
      the conditions stated in this License.

   5. Submission of Contributions. Unless You explicitly state otherwise,
      any Contribution intentionally submitted for inclusion in the Work
      by You to the Licensor shall be under the terms and conditions of
      this License, without any additional terms or conditions.
      Notwithstanding the above, nothing herein shall supersede or modify
      the terms of any separate license agreement you may have executed
      with Licensor regarding such Contributions.

   6. Trademarks. This License does not grant permission to use the trade
      names, trademarks, service marks, or product names of the Licensor,
      except as required for reasonable and customary use in describing the
      origin of the Work and reproducing the content of the NOTICE file.

   7. Disclaimer of Warranty. Unless required by applicable law or
      agreed to in writing, Licensor provides the Work (and each
      Contributor provides its Contributions) on an "AS IS" BASIS,
      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
      implied, including, without limitation, any warranties or conditions
      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
      PARTICULAR PURPOSE. You are solely responsible for determining the
      appropriateness of using or redistributing the Work and assume any
      risks associated with Your exercise of permissions under this License.

   8. Limitation of Liability. In no event and under no legal theory,
      whether in tort (including negligence), contract, or otherwise,
      unless required by applicable law (such as deliberate and grossly
      negligent acts) or agreed to in writing, shall any Contributor be
      liable to You for damages, including any direct, indirect, special,
      incidental, or consequential damages of any character arising as a
      result of this License or out of the use or inability to use the
      Work (including but not limited to damages for loss of goodwill,
      work stoppage, computer failure or malfunction, or any and all
      other commercial damages or losses), even if such Contributor
      has been advised of the possibility of such damages.

   9. Accepting Warranty or Additional Liability. While redistributing
      the Work or Derivative Works thereof, You may choose to offer,
      and charge a fee for, acceptance of support, warranty, indemnity,
      or other liability obligations and/or rights consistent with this
      License. However, in accepting such obligations, You may act only
      on Your own behalf and on Your sole responsibility, not on behalf
      of any other Contributor, and only if You agree to indemnify,
      defend, and hold each Contributor harmless for any liability
      incurred by, or claims asserted against, such Contributor by reason
      of your accepting any such warranty or additional liability.

   END OF TERMS AND CONDITIONS

   APPENDIX: How to apply the Apache License to your work.

      To apply the Apache License to your work, attach the following
      boilerplate notice, with the fields enclosed by brackets "[]"
      replaced with your own identifying information. (Don't include
      the brackets!)  The text should be enclosed in the appropriate
      comment syntax for the file format. We also recommend that a
      file or class name and description of purpose be included on the
      same "printed page" as the copyright notice for easier
      identification within third-party archives.

   Copyright [yyyy] [name of copyright owner]

   Licensed under the Apache License, Version 2.0 (the "License");
   you may not use this file except in compliance with the License.
   You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.


================================================
FILE: LICENSE-MIT
================================================
Copyright (c) 2018-2023 bat-developers (https://github.com/sharkdp/bat).

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.


================================================
FILE: NOTICE
================================================
Copyright (c) 2018-2021 bat-developers (https://github.com/sharkdp/bat).

bat is made available under the terms of either the MIT License or the Apache
License 2.0, at your option.

See the LICENSE-APACHE and LICENSE-MIT files for license details.


================================================
FILE: README.md
================================================
<p align="center">
  <img src="doc/logo-header.svg" alt="bat - a cat clone with wings"><br>
  <a href="https://github.com/sharkdp/bat/actions?query=workflow%3ACICD"><img src="https://github.com/sharkdp/bat/workflows/CICD/badge.svg" alt="Build Status"></a>
  <img src="https://img.shields.io/crates/l/bat.svg" alt="license">
  <a href="https://crates.io/crates/bat"><img src="https://img.shields.io/crates/v/bat.svg?colorB=319e8c" alt="Version info"></a><br>
  A <i>cat(1)</i> clone with syntax highlighting and Git integration.
</p>

<p align="center">
  <a href="#syntax-highlighting">Key Features</a> •
  <a href="#how-to-use">How To Use</a> •
  <a href="#installation">Installation</a> •
  <a href="#customization">Customization</a> •
  <a href="#project-goals-and-alternatives">Project goals, alternatives</a><br>
  [English]
  [<a href="doc/README-zh.md">中文</a>]
  [<a href="doc/README-ja.md">日本語</a>]
  [<a href="doc/README-ko.md">한국어</a>]
  [<a href="doc/README-ru.md">Русский</a>]
</p>

### Sponsors

A special *thank you* goes to our biggest <a href="doc/sponsors.md">sponsors</a>:<br>

<p>
<a href="https://www.warp.dev/bat">
  <img src="doc/sponsors/warp-logo.png" width="200" alt="Warp">
  <br>
  <strong>Warp, the intelligent terminal</strong>
  <br>
  <sub>Available on MacOS, Linux, Windows</sub>
</a>
</p>

### Syntax highlighting

`bat` supports syntax highlighting for a large number of programming and markup
languages:

![Syntax highlighting example](https://imgur.com/rGsdnDe.png)

### Git integration

`bat` communicates with `git` to show modifications with respect to the index
(see left sidebar):

![Git integration example](https://i.imgur.com/2lSW4RE.png)

### Show non-printable characters

You can use the `-A`/`--show-all` option to show and highlight non-printable
characters:

![Non-printable character example](https://i.imgur.com/WndGp9H.png)

### Automatic paging

By default, `bat` pipes its own output to a pager (e.g. `less`) if the output is too large for one screen.
If you would rather `bat` work like `cat` all the time (never page output), you can set `--paging=never` as an option, either on the command line or in your configuration file.
If you intend to alias `cat` to `bat` in your shell configuration, you can use `alias cat='bat --paging=never'` to preserve the default behavior.

#### File concatenation

Even with a pager set, you can still use `bat` to concatenate files :wink:.
Whenever `bat` detects a non-interactive terminal (i.e. when you pipe into another process or into a file), `bat` will act as a drop-in replacement for `cat` and fall back to printing the plain file contents, regardless of the `--pager` option's value.

## How to use

Display a single file on the terminal

```bash
bat README.md
```

Display multiple files at once

```bash
bat src/*.rs
```

Read from stdin, determine the syntax automatically (note, highlighting will
only work if the syntax can be determined from the first line of the file,
usually through a shebang such as `#!/bin/sh`)

```bash
curl -s https://sh.rustup.rs | bat
```

Read from stdin, specify the language explicitly

```bash
yaml2json .travis.yml | json_pp | bat -l json
```

Show and highlight non-printable characters:
```bash
bat -A /etc/hosts
```

Use it as a `cat` replacement:

```bash
bat > note.md  # quickly create a new file

bat header.md content.md footer.md > document.md

bat -n main.rs  # show line numbers (only)

bat f - g  # output 'f', then stdin, then 'g'.
```

### Integration with other tools

#### `fzf`

You can use `bat` as a previewer for [`fzf`](https://github.com/junegunn/fzf). To do this,
use `bat`'s `--color=always` option to force colorized output. You can also use `--line-range`
option to restrict the load times for long files:

```bash
fzf --preview "bat --color=always --style=numbers --line-range=:500 {}"
```

For more information, see [`fzf`'s `README`](https://github.com/junegunn/fzf#preview-window).

#### `find` or `fd`

You can use the `-exec` option of `find` to preview all search results with `bat`:

```bash
find … -exec bat {} +
```

If you happen to use [`fd`](https://github.com/sharkdp/fd), you can use the `-X`/`--exec-batch` option to do the same:

```bash
fd … -X bat
```

#### `ripgrep`

With [`batgrep`](https://github.com/eth-p/bat-extras/blob/master/doc/batgrep.md), `bat` can be used as the printer for [`ripgrep`](https://github.com/BurntSushi/ripgrep) search results.

```bash
batgrep needle src/
```

#### `tail -f`

`bat` can be combined with `tail -f` to continuously monitor a given file with syntax highlighting.

```bash
tail -f /var/log/pacman.log | bat --paging=never -l log
```

Note that we have to switch off paging in order for this to work. We have also specified the syntax
explicitly (`-l log`), as it can not be auto-detected in this case.

#### `git`

You can combine `bat` with `git show` to view an older version of a given file with proper syntax
highlighting:

```bash
git show v0.6.0:src/main.rs | bat -l rs
```

#### `git diff`

You can combine `bat` with `git diff` to view lines around code changes with proper syntax
highlighting:
```bash
batdiff() {
    git diff --name-only --relative --diff-filter=d -z | xargs -0 bat --diff
}
```
If you prefer to use this as a separate tool, check out `batdiff` in [`bat-extras`](https://github.com/eth-p/bat-extras).

If you are looking for more support for git and diff operations, check out [`delta`](https://github.com/dandavison/delta).

#### `xclip`

The line numbers and Git modification markers in the output of `bat` can make it hard to copy
the contents of a file. To prevent this, you can call `bat` with the `-p`/`--plain` option or
simply pipe the output into `xclip`:
```bash
bat main.cpp | xclip
```
`bat` will detect that the output is being redirected and print the plain file contents.

#### `man`

`bat` can be used as a colorizing pager for `man`, by setting the
`MANPAGER` environment variable:

```bash
export MANPAGER="bat -plman"
man 2 select
```
(on some older Debian or Ubuntu releases, the executable is named `batcat` instead of `bat`)

If you prefer to have this bundled in a new command, you can also use [`batman`](https://github.com/eth-p/bat-extras/blob/master/doc/batman.md).

Note that the [Manpage syntax](assets/syntaxes/02_Extra/Manpage.sublime-syntax) is developed in this repository and still needs some work.

#### `prettier` / `shfmt` / `rustfmt`

The [`prettybat`](https://github.com/eth-p/bat-extras/blob/master/doc/prettybat.md) script is a wrapper that will format code and print it with `bat`.

#### `Warp`

<a href="https://app.warp.dev/drive/folder/-Bat-Warp-Pack-lxhe7HrEwgwpG17mvrFSz1">
  <img src="doc/sponsors/warp-pack-header.png" alt="Warp">
</a>

#### Highlighting `--help` messages

You can use `bat` to colorize help text: `$ cp --help | bat -plhelp`

You can also use a wrapper around this:

```bash
# in your .bashrc/.zshrc/*rc
alias bathelp='bat --plain --language=help'
help() {
    "$@" --help 2>&1 | bathelp
}
```

Then you can do `$ help cp` or `$ help git commit`.

When you are using `zsh`, you can also use global aliases to override `-h` and `--help` entirely:

```bash
alias -g -- -h='-h 2>&1 | bat --language=help --style=plain'
alias -g -- --help='--help 2>&1 | bat --language=help --style=plain'
```

For `fish`, you can use abbreviations:

```fish
abbr -a --position anywhere -- --help '--help | bat -plhelp'
abbr -a --position anywhere -- -h '-h | bat -plhelp'
```

This way, you can keep on using `cp --help`, but get colorized help pages.

Be aware that in some cases, `-h` may not be a shorthand of `--help` (for example with `ls`). In cases where you need to use `-h` 
as a command argument you can prepend `\` to the argument (eg. `ls \-h`) to escape the aliasing defined above. 

Please report any issues with the help syntax in [this repository](https://github.com/victor-gp/cmd-help-sublime-syntax).


## Installation

<!--

Installation instructions need to:
* be for widely used systems
* be non-obvious
* be from somewhat official sources

-->

[![Packaging status](https://repology.org/badge/vertical-allrepos/bat-cat.svg?columns=3&exclude_unsupported=1)](https://repology.org/project/bat-cat/versions)

### On Ubuntu (using `apt`)
*... and other Debian-based Linux distributions.*

`bat` is available on [Ubuntu since 20.04 ("Focal")](https://packages.ubuntu.com/search?keywords=bat&exact=1) and [Debian since August 2021 (Debian 11 - "Bullseye")](https://packages.debian.org/bullseye/bat).

If your Ubuntu/Debian installation is new enough you can simply run:

```bash
sudo apt install bat
```

**Important**: On some older Ubuntu/Debian releases, the executable is installed as `batcat` instead of `bat` (due to [a name
clash with another package](https://github.com/sharkdp/bat/issues/982)). On newer releases, the executable is available as `bat`. If `bat --version` does not work after installation, try `batcat --version` instead. You can set up a `bat -> batcat` symlink or alias to prevent any issues that may come up because of this and to be consistent with other distributions:
``` bash
mkdir -p ~/.local/bin
ln -s /usr/bin/batcat ~/.local/bin/bat
```

an example alias for `batcat` as `bat`:
```bash
alias bat="batcat"
```

### On Ubuntu (using most recent `.deb` packages)
*... and other Debian-based Linux distributions.*

If the package has not yet been promoted to your Ubuntu/Debian installation, or you want
the most recent release of `bat`, download the latest `.deb` package from the
[release page](https://github.com/sharkdp/bat/releases) and install it via:

```bash
sudo dpkg -i bat_0.18.3_amd64.deb  # adapt version number and architecture
```

### On Alpine Linux

You can install [the `bat` package](https://pkgs.alpinelinux.org/packages?name=bat)
from the official sources, provided you have the appropriate repository enabled:

```bash
apk add bat
```

### On Arch Linux

You can install [the `bat` package](https://www.archlinux.org/packages/extra/x86_64/bat/)
from the official sources:

```bash
pacman -S bat
```

### On Fedora

You can install [the `bat` package](https://koji.fedoraproject.org/koji/packageinfo?packageID=27506) from the official [Fedora Modular](https://docs.fedoraproject.org/en-US/modularity/using-modules/) repository.

```bash
dnf install bat
```

### On Gentoo Linux

You can install [the `bat` package](https://packages.gentoo.org/packages/sys-apps/bat)
from the official sources:

```bash
emerge sys-apps/bat
```

### On FreeBSD

You can install a precompiled [`bat` package](https://www.freshports.org/textproc/bat) with pkg:

```bash
pkg install bat
```

or build it on your own from the FreeBSD ports:

```bash
cd /usr/ports/textproc/bat
make install
```

### On OpenBSD

You can install `bat` package using [`pkg_add(1)`](https://man.openbsd.org/pkg_add.1):

```bash
pkg_add bat
```

### Via nix

You can install `bat` using the [nix package manager](https://nixos.org/nix):

```bash
nix-env -i bat
```

### On openSUSE

You can install `bat` with zypper:

```bash
zypper install bat
```

### Via snap package

There is currently no recommended snap package available.
Existing packages may be available, but are not officially supported and may contain [issues](https://github.com/sharkdp/bat/issues/1519).

### On macOS (or Linux) via Homebrew

You can install `bat` with [Homebrew](https://formulae.brew.sh/formula/bat):

```bash
brew install bat
```

### On macOS via MacPorts

Or install `bat` with [MacPorts](https://ports.macports.org/port/bat/summary):

```bash
port install bat
```

### On Windows

There are a few options to install `bat` on Windows. Once you have installed `bat`,
take a look at the ["Using `bat` on Windows"](#using-bat-on-windows) section.

#### Prerequisites

You will need to install the [Visual C++ Redistributable](https://learn.microsoft.com/en-us/cpp/windows/latest-supported-vc-redist#latest-microsoft-visual-c-redistributable-version)

#### With WinGet

You can install `bat` via [WinGet](https://learn.microsoft.com/en-us/windows/package-manager/winget):

```bash
winget install sharkdp.bat
```

#### With Chocolatey

You can install `bat` via [Chocolatey](https://chocolatey.org/packages/Bat):
```bash
choco install bat
```

#### With Scoop

You can install `bat` via [scoop](https://scoop.sh/):
```bash
scoop install bat
```

#### From prebuilt binaries:

You can download prebuilt binaries from the [Release page](https://github.com/sharkdp/bat/releases),

You will need to install the [Visual C++ Redistributable](https://support.microsoft.com/en-us/help/2977003/the-latest-supported-visual-c-downloads) package.

### From binaries

Check out the [Release page](https://github.com/sharkdp/bat/releases) for
prebuilt versions of `bat` for many different architectures. Statically-linked
binaries are also available: look for archives with `musl` in the file name.

### From source

If you want to build `bat` from source, you need Rust 1.79.0 or
higher. You can then use `cargo` to build everything:

#### From local source
```bash
cargo install --path . --locked
```
> [!NOTE]
> The `--path .` above specifies the directory of the source code and NOT where `bat` will be installed.
> For more information see the docs for [`cargo install`](https://doc.rust-lang.org/cargo/commands/cargo-install.html).

#### From `crates.io`
```bash
cargo install --locked bat
```

Note that additional files like the man page or shell completion
files can not be installed automatically in both these ways.
If installing from a local source, they will be generated by `cargo`
and should be available in the cargo target folder under `build`.

Furthermore, shell completions are also available by running:
```bash
bat --completion <shell>
# see --help for supported shells
```

## Customization

### Highlighting theme

Use `bat --list-themes` to get a list of all available themes for syntax
highlighting. By default, `bat` uses `Monokai Extended` or `Monokai Extended Light`
for dark and light themes respectively. To select the `TwoDark` theme, call `bat`
with the `--theme=TwoDark` option or set the `BAT_THEME` environment variable to
`TwoDark`. Use `export BAT_THEME="TwoDark"` in your shell's startup file to
make the change permanent. Alternatively, use `bat`'s
[configuration file](#configuration-file).

If you want to preview the different themes on a custom file, you can use
the following command (you need [`fzf`](https://github.com/junegunn/fzf) for this):
```bash
bat --list-themes | fzf --preview="bat --theme={} --color=always /path/to/file"
```

`bat` automatically picks a fitting theme depending on your terminal's background color.
You can use the `--theme-dark` / `--theme-light` options or the `BAT_THEME_DARK` / `BAT_THEME_LIGHT` environment variables
to customize the themes used. This is especially useful if you frequently switch between dark and light mode.

You can also use a custom theme by following the
['Adding new themes' section below](#adding-new-themes).

### 8-bit themes

`bat` has three themes that always use [8-bit colors](https://en.wikipedia.org/wiki/ANSI_escape_code#Colors),
even when truecolor support is available:

- `ansi` looks decent on any terminal. It uses 3-bit colors: black, red, green,
  yellow, blue, magenta, cyan, and white.
- `base16` is designed for [base16](https://github.com/tinted-theming/home) terminal themes. It uses
  4-bit colors (3-bit colors plus bright variants) in accordance with the
  [base16 styling guidelines](https://github.com/tinted-theming/home/blob/main/styling.md).
- `base16-256` is designed for [tinted-shell](https://github.com/tinted-theming/tinted-shell).
  It replaces certain bright colors with 8-bit colors from 16 to 21. **Do not** use this simply
  because you have a 256-color terminal but are not using tinted-shell.

Although these themes are more restricted, they have three advantages over truecolor themes. They:

- Enjoy maximum compatibility. Some terminal utilities do not support more than 3-bit colors.
- Adapt to terminal theme changes. Even for already printed output.
- Visually harmonize better with other terminal software.

### Output style

You can use the `--style` option to control the appearance of `bat`'s output.
You can use `--style=numbers,changes`, for example, to show only Git changes
and line numbers but no grid and no file header. Set the `BAT_STYLE` environment
variable to make these changes permanent or use `bat`'s
[configuration file](#configuration-file).

>[!tip]
> If you specify a default style in `bat`'s config file, you can change which components
> are displayed during a single run of `bat` using the `--style` command-line argument.
> By prefixing a component with `+` or `-`, it can be added or removed from the current style.
>
> For example, if your config contains `--style=full,-snip`, you can run bat with
> `--style=-grid,+snip` to remove the grid and add back the `snip` component.
> Or, if you want to override the styles completely, you use `--style=numbers` to
> only show the line numbers.

### Decorations

By default, `bat` only shows decorations (such as line numbers, file headers, grid borders, etc.) when outputting to an interactive terminal. You can control this behavior with the `--decorations` option. Use `--decorations=always` to show decorations even when piping output to another command, or `--decorations=never` to disable them entirely. Possible values are `auto` (default), `never`, and `always`.

There is also the `--force-colorization` option, which is an alias for `--decorations=always --color=always`. This is useful if you want to keep colorization and decorations when piping `bat`'s output to another program.

### Adding new syntaxes / language definitions

Should you find that a particular syntax is not available within `bat`, you can follow these
instructions to easily add new syntaxes to your current `bat` installation.

`bat` uses the excellent [`syntect`](https://github.com/trishume/syntect/)
library for syntax highlighting. `syntect` can read any
[Sublime Text `.sublime-syntax` file](https://www.sublimetext.com/docs/3/syntax.html)
and theme.

A good resource for finding Sublime Syntax packages is [Package Control](https://packagecontrol.io/). Once you found a
syntax:

1. Create a folder with syntax definition files:

   ```bash
   mkdir -p "$(bat --config-dir)/syntaxes"
   cd "$(bat --config-dir)/syntaxes"

   # Put new '.sublime-syntax' language definition files
   # in this folder (or its subdirectories), for example:
   git clone https://github.com/tellnobody1/sublime-purescript-syntax
   ```

2. Now use the following command to parse these files into a binary cache:

   ```bash
   bat cache --build
   ```

3. Finally, use `bat --list-languages` to check if the new languages are available.

   If you ever want to go back to the default settings, call:

   ```bash
   bat cache --clear
   ```

4. If you think that a specific syntax should be included in `bat` by default, please
   consider opening a "syntax request" ticket after reading the policies and
   instructions [here](doc/assets.md): [Open Syntax Request](https://github.com/sharkdp/bat/issues/new?labels=syntax-request&template=syntax_request.md).

### Adding new themes

This works very similar to how we add new syntax definitions.
> [!NOTE]
> Custom themes must be stored in [`.tmTheme` files](https://www.sublimetext.com/docs/color_schemes_tmtheme.html).
> Newer `.sublime-color-scheme` files are currently not supported.

First, create a folder with the new syntax highlighting themes:
```bash
mkdir -p "$(bat --config-dir)/themes"
cd "$(bat --config-dir)/themes"

# Download a theme in '.tmTheme' format, for example:
git clone https://github.com/greggb/sublime-snazzy

# Update the binary cache
bat cache --build
```

Finally, use `bat --list-themes` to check if the new themes are available.
> [!NOTE]
> `bat` uses the name of the `.tmTheme` file for the theme's name. 

### Adding or changing file type associations

You can add new (or change existing) file name patterns using the `--map-syntax`
command line option. The option takes an argument of the form `pattern:syntax` where
`pattern` is a glob pattern that is matched against the file name and
the absolute file path. The `syntax` part is the full name of a supported language
(use `bat --list-languages` for an overview).

**Note:** You probably want to use this option as [an entry in `bat`'s configuration file](#configuration-file)
for persistence instead of passing it on the command line as a one-off. Generally
you'd just use `-l` if you want to manually specify a language for a file.

Example: To use "INI" syntax highlighting for all files with a `.conf` file extension, use
```bash
--map-syntax='*.conf:INI'
```

Example: To open all files called `.ignore` (exact match) with the "Git Ignore" syntax, use:
```bash
--map-syntax='.ignore:Git Ignore'
```

Example: To open all `.conf` files in subfolders of `/etc/apache2` with the "Apache Conf"
syntax, use (this mapping is already built in):
```bash
--map-syntax='/etc/apache2/**/*.conf:Apache Conf'
```

### Using a different pager

`bat` uses the pager that is specified in the `PAGER` environment variable. If this variable is not
set, `less` is used by default. You can also use bat's built-in pager with `--pager=builtin` or
by setting the `BAT_PAGER` environment variable to "builtin".

If you want to use a different pager, you can either modify the `PAGER` variable or set the
`BAT_PAGER` environment variable to override what is specified in `PAGER`.

>[!NOTE]
> If `PAGER` is `more` or `most`, `bat` will silently use `less` instead to ensure support for colors.

If you want to pass command-line arguments to the pager, you can also set them via the
`PAGER`/`BAT_PAGER` variables:

```bash
export BAT_PAGER="less -RFK"
```

Instead of using environment variables, you can also use `bat`'s [configuration file](#configuration-file) to configure the pager (`--pager` option).


### Using `less` as a pager

When using `less` as a pager, `bat` will automatically pass extra options along to `less`
to improve the experience. Specifically, `-R`/`--RAW-CONTROL-CHARS`, `-F`/`--quit-if-one-screen`,
`-K`/`--quit-on-intr` and under certain conditions, `-X`/`--no-init` and/or `-S`/`--chop-long-lines`.

>[!IMPORTANT]
> These options will not be added if:
> - The pager is not named `less`.
> - The `--pager` argument contains any command-line arguments (e.g. `--pager="less -R"`).
> - The `BAT_PAGER` environment variable contains any command-line arguments (e.g. `export BAT_PAGER="less -R"`)
>
> The `--quit-if-one-screen` option will not be added when:
> - The `--paging=always` argument is used.
> - The `BAT_PAGING` environment is set to `always`.

The `-R`/`--RAW-CONTROL-CHARS` option is needed to interpret ANSI colors correctly.

The `-F`/`--quit-if-one-screen` option instructs `less` to exit immediately if the output size is smaller than
the vertical size of the terminal. This is convenient for small files because you do not
have to press `q` to quit the pager.

The `-K`/`--quit-on-intr` option instructs `less` to exit immediately when an interrupt signal is received.
This is useful to ensure that `less` quits together with `bat` on SIGINT.

The `-X`/`--no-init` option is added to versions of `less` older than version 530 (older than 558 on Windows) to
fix a bug with the `-F`/`--quit-if-one-screen` feature. Unfortunately, it also breaks mouse-wheel support in `less`.
If you want to enable mouse-wheel scrolling on older versions of `less` and do not mind losing
the quit-if-one-screen feature, you can set the pager (via `--pager` or `BAT_PAGER`) to `less -R`.
For `less` 530 or newer, it should work out of the box.

The `-S`/`--chop-long-lines` option is added when `bat`'s `-S`/`--chop-long-lines` option is used. This tells `less`
to truncate any lines larger than the terminal width.

### Indentation

`bat` expands tabs to 4 spaces by itself, not relying on the pager. To change this, simply add the
`--tabs` argument with the number of spaces you want to be displayed.

**Note**: Defining tab stops for the pager (via the `--pager` argument by `bat`, or via the `LESS`
environment variable for `less`) won't be taken into account because the pager will already get
expanded spaces instead of tabs. This behaviour is added to avoid indentation issues caused by the
sidebar. Calling `bat` with `--tabs=0` will override it and let tabs be consumed by the pager.

### Dark mode

If you make use of the dark mode feature in **macOS**, you might want to configure `bat` to use a different
theme based on the OS theme. The following snippet uses the `default` theme when in the _dark mode_
and the `GitHub` theme when in the _light mode_.

```bash
alias cat="bat --theme auto:system --theme-dark default --theme-light GitHub"
```

The same dark mode feature is now available in **GNOME** and affects the `org.gnome.desktop.interface color-scheme` setting. The following code converts the above to use said setting.

```bash
# .bashrc
sys_color_scheme_is_dark() {
    condition=$(gsettings get org.gnome.desktop.interface color-scheme)
    condition=$(echo "$condition" | tr -d "[:space:]'")
    if [ $condition == "prefer-dark" ]; then
        return 0
    else
        return 1
    fi
}

bat_alias_wrapper() {
    #get color scheme
    sys_color_scheme_is_dark
    if [[ $? -eq 0 ]]; then
        # bat command with dark color scheme
        bat --theme=default "$@"
    else
        # bat command with light color scheme
        bat --theme=GitHub "$@"
    fi
}
alias cat='bat_alias_wrapper'
```


## Configuration file

`bat` can also be customized with a configuration file. The location of the file is dependent
on your operating system. To get the default path for your system, call
```bash
bat --config-file
```

Alternatively, you can use `BAT_CONFIG_PATH` or `BAT_CONFIG_DIR` environment variables to point `bat`
to a non-default location of the configuration file or the configuration directory respectively:
```bash
export BAT_CONFIG_PATH="/path/to/bat/bat.conf"
export BAT_CONFIG_DIR="/path/to/bat"
```

A default configuration file can be created with the `--generate-config-file` option.
```bash
bat --generate-config-file
```

There is also now a systemwide configuration file, which is located under `/etc/bat/config` on
Linux and Mac OS and `C:\ProgramData\bat\config` on windows. If the system wide configuration
file is present, the content of the user configuration will simply be appended to it.

### Format

The configuration file is a simple list of command line arguments. Use `bat --help` to see a full list of possible options and values. In addition, you can add comments by prepending a line with the `#` character.

Example configuration file:
```bash
# Set the theme to "TwoDark"
--theme="TwoDark"

# Show line numbers, Git modifications and file header (but no grid)
--style="numbers,changes,header"

# Use italic text on the terminal (not supported on all terminals)
--italic-text=always

# Use C++ syntax for Arduino .ino files
--map-syntax "*.ino:C++"
```

## Using `bat` on Windows

`bat` mostly works out-of-the-box on Windows, but a few features may need extra configuration.

### Prerequisites

You will need to install the [Visual C++ Redistributable](https://support.microsoft.com/en-us/help/2977003/the-latest-supported-visual-c-downloads) package.

### Paging

Windows only includes a very limited pager in the form of `more`. You can download a Windows binary
for `less` [from its homepage](http://www.greenwoodsoftware.com/less/download.html) or [through
Chocolatey](https://chocolatey.org/packages/Less). To use it, place the binary in a directory in
your `PATH` or [define an environment variable](#using-a-different-pager). The [Chocolatey package](#on-windows) installs `less` automatically.

### Colors

Windows 10 natively supports colors in both `conhost.exe` (Command Prompt) and PowerShell since
[v1511](https://en.wikipedia.org/wiki/Windows_10_version_history#Version_1511_(November_Update)), as
well as in newer versions of bash. On earlier versions of Windows, you can use
[Cmder](http://cmder.app/), which includes [ConEmu](https://conemu.github.io/).

**Note:** Old versions of `less` do not correctly interpret colors on Windows. To fix this, you can add the optional Unix tools to your PATH when installing Git. If you don’t have any other pagers installed, you can disable paging entirely by passing `--paging=never` or by setting `BAT_PAGER` to an empty string.

### Cygwin

`bat` on Windows does not natively support Cygwin's unix-style paths (`/cygdrive/*`). When passed an absolute cygwin path as an argument, `bat` will encounter the following error: `The system cannot find the path specified. (os error 3)`

This can be solved by creating a wrapper or adding the following function to your `.bash_profile` file:

```bash
bat() {
    local index
    local args=("$@")
    for index in $(seq 0 ${#args[@]}) ; do
        case "${args[index]}" in
        -*) continue;;
        *)  [ -e "${args[index]}" ] && args[index]="$(cygpath --windows "${args[index]}")";;
        esac
    done
    command bat "${args[@]}"
}
```

## Troubleshooting

### Garbled output

If an input file contains color codes or other ANSI escape sequences or control characters, `bat` will have problems
performing syntax highlighting and text wrapping, and thus the output can become garbled.

If your version of `bat` supports the `--strip-ansi=auto` option, it can be used to remove such sequences
before syntax highlighting. Alternatively, you may disable both syntax highlighting and wrapping by
passing the `--color=never --wrap=never` options to `bat`.

> [!NOTE]
> The `auto` option of `--strip-ansi` avoids removing escape sequences when the syntax is plain text.

### Terminals & colors

`bat` handles terminals *with* and *without* truecolor support. However, the colors in most syntax
highlighting themes are not optimized for 8-bit colors. It is therefore strongly recommended
that you use a terminal with 24-bit truecolor support (`terminator`, `konsole`, `iTerm2`, ...),
or use one of the basic [8-bit themes](#8-bit-themes) designed for a restricted set of colors.
See [this article](https://gist.github.com/XVilka/8346728) for more details and a full list of
terminals with truecolor support.

Make sure that your truecolor terminal sets the `COLORTERM` variable to either `truecolor` or
`24bit`. Otherwise, `bat` will not be able to determine whether or not 24-bit escape sequences
are supported (and fall back to 8-bit colors).

### Line numbers and grid are hardly visible

Please try a different theme (see `bat --list-themes` for a list). The `OneHalfDark` and
`OneHalfLight` themes provide grid and line colors that are brighter.

### File encodings

`bat` natively supports UTF-8 as well as UTF-16. For every other file encoding, you may need to
convert to UTF-8 first because the encodings can typically not be auto-detected. You can `iconv`
to do so.
Example: if you have a PHP file in Latin-1 (ISO-8859-1) encoding, you can call:
``` bash
iconv -f ISO-8859-1 -t UTF-8 my-file.php | bat
```
Note: you might have to use the `-l`/`--language` option if the syntax can not be auto-detected
by `bat`.

## Development

```bash
# Recursive clone to retrieve all submodules
git clone --recursive https://github.com/sharkdp/bat

# Build (debug version)
cd bat
cargo build --bins

# Run unit tests and integration tests
cargo test

# Install (release version)
cargo install --path . --locked

# Build a bat binary with modified syntaxes and themes
bash assets/create.sh
cargo install --path . --locked --force
```

If you want to build an application that uses `bat`'s pretty-printing
features as a library, check out the [the API documentation](https://docs.rs/bat/).
Note that you have to use either `regex-onig` or `regex-fancy` as a feature
when you depend on `bat` as a library.

## Contributing

Take a look at the [`CONTRIBUTING.md`](CONTRIBUTING.md) guide.

## Maintainers

- [sharkdp](https://github.com/sharkdp)
- [eth-p](https://github.com/eth-p)
- [keith-hall](https://github.com/keith-hall)
- [Enselic](https://github.com/Enselic)

## Security vulnerabilities

See [`SECURITY.md`](SECURITY.md).

## Project goals and alternatives

`bat` tries to achieve the following goals:

- Provide beautiful, advanced syntax highlighting
- Integrate with Git to show file modifications
- Be a drop-in replacement for (POSIX) `cat`
- Offer a user-friendly command-line interface

There are a lot of alternatives, if you are looking for similar programs. See
[this document](doc/alternatives.md) for a comparison.

## License
Copyright (c) 2018-2025 [bat-developers](https://github.com/sharkdp/bat).

`bat` is made available under the terms of either the MIT License or the Apache License 2.0, at your option.

See the [LICENSE-APACHE](LICENSE-APACHE) and [LICENSE-MIT](LICENSE-MIT) files for license details.


================================================
FILE: SECURITY.md
================================================
# Security Vulnerabilities

To report a security vulnerability, please contact [David Peter](https://david-peter.de/) via email.


================================================
FILE: assets/.gitattributes
================================================
* linguist-vendored


================================================
FILE: assets/.ignore
================================================
syntaxes/*
themes/*


================================================
FILE: assets/completions/_bat.ps1.in
================================================

using namespace System.Management.Automation
using namespace System.Management.Automation.Language

Register-ArgumentCompleter -Native -CommandName '{{PROJECT_EXECUTABLE}}' -ScriptBlock {
    param($wordToComplete, $commandAst, $cursorPosition)

    $ArrayStyle      = @('default', 'auto', 'full', 'plain', 'changes', 'header', 'header-filename', 'header-filesize', 'grid', 'rule', 'numbers', 'snip')
    $ArrayCompletion = @('bash', 'fish', 'zsh', 'ps1')
    $ArrayWhen       = @('auto', 'never', 'always')
    $ArrayYesNo      = @('never', 'always')
    $ArrayWrap       = @('always', 'never', 'character', 'word')
    $ArrayBinary     = @('no-printing', 'as-text')
    $ArrayPrint      = @('unicode', 'caret')

    function Get-MyThemes(){
        $themes = {{PROJECT_EXECUTABLE}} --list-themes | ForEach-Object {$_  -replace "^(.*)$", '''$1'''} | select-object
        return $themes
    }

    function Get-MyLanguages(){
        $themes = {{PROJECT_EXECUTABLE}} --list-languages | ForEach-Object{[pscustomobject]@{MyParameter=$_.Substring(0,$_.IndexOf(":")).Trim();MyDescription=$_.Substring($_.IndexOf(":")+1)}} | select-object
        return $themes
    }

    $commandElements = $commandAst.CommandElements
    $command = @(
        '{{PROJECT_EXECUTABLE}}'
        for ($i = 1; $i -lt $commandElements.Count; $i++) {
            $element = $commandElements[$i]
            if ($element -isnot [StringConstantExpressionAst] -or
                $element.StringConstantType -ne [StringConstantType]::BareWord -or
                #$element.Value.StartsWith('-') -or
                $element.Value -eq $wordToComplete) {
                break
        }
        $element.Value
    }) -join ';'

    $completions = @(switch -Wildcard ($command) {
        '*;--help' {
            break
        }
        '*;--version' {
            break
        }
        '*;--acknowledgements' {
            break
        }
        '*;--language' {
            Get-MyLanguages |
            ForEach-Object {
                $desc = if ($null -eq $_.MyDescription) { '_no value_' } else { $_.MyDescription }
                [CompletionResult]::new(($_.MyParameter -replace "^(.*)$", '''$1'''), $_.MyParameter, [CompletionResultType]::ParameterName, $desc)
            }
            break
        }
        '*;--theme' {
            Get-MyThemes |
            ForEach-Object {[System.Management.Automation.CompletionResult]::new($_, $_, [CompletionResultType]::ParameterName, $_)}
            break
        }
        '*;--binary' {
            $ArrayBinary |
            ForEach-Object {[System.Management.Automation.CompletionResult]::new($_, $_, [CompletionResultType]::ParameterValue, $_)}
            break
        }
        '*;--style' {
            $ArrayStyle |
            ForEach-Object {[System.Management.Automation.CompletionResult]::new($_, $_, [CompletionResultType]::ParameterValue, $_)}
            break
        }
        '*;--wrap' {
            $ArrayWrap |
            ForEach-Object {[System.Management.Automation.CompletionResult]::new($_, $_, [CompletionResultType]::ParameterValue, $_)}
            break
        }
        '*;--color' {
            $ArrayWhen |
            ForEach-Object {[System.Management.Automation.CompletionResult]::new($_, $_, [CompletionResultType]::ParameterValue, $_)}
            break
        }
        '*;--italic-text' {
            $ArrayYesNo |
            ForEach-Object {[System.Management.Automation.CompletionResult]::new($_, $_, [CompletionResultType]::ParameterValue, $_)}
            break
        }
        '*;--paging' {
            $ArrayWhen |
            ForEach-Object {[System.Management.Automation.CompletionResult]::new($_, $_, [CompletionResultType]::ParameterValue, $_)}
            break
        }
        '*;--decorations' {
            $ArrayWhen |
            ForEach-Object {[System.Management.Automation.CompletionResult]::new($_, $_, [CompletionResultType]::ParameterValue, $_)}
            break
        }
        '*;--completion' {
            $ArrayCompletion |
            ForEach-Object {[System.Management.Automation.CompletionResult]::new($_, $_, [CompletionResultType]::ParameterValue, $_)}
            break
        }
        '*;--strip-ansi' {
            $ArrayWhen |
            ForEach-Object {[System.Management.Automation.CompletionResult]::new($_, $_, [CompletionResultType]::ParameterValue, $_)}
            break
        }
        '*;--nonprintable-notation' {
            $ArrayPrint |
            ForEach-Object {[System.Management.Automation.CompletionResult]::new($_, $_, [CompletionResultType]::ParameterValue, $_)}
            break
        }
        '*;--generate-config-file' {
            break
        }
        '{{PROJECT_EXECUTABLE}};cache' {
            [CompletionResult]::new('--source'                , 'source'                , [CompletionResultType]::ParameterName, 'Use a different directory to load syntaxes and themes from.')
            [CompletionResult]::new('--target'                , 'target'                , [CompletionResultType]::ParameterName, 'Use a different directory to store the cached syntax and theme set.')
        #   [CompletionResult]::new('-b'                      , 'b'                     , [CompletionResultType]::ParameterName, 'Initialize (or update) the syntax/theme cache.')
            [CompletionResult]::new('--build'                 , 'build'                 , [CompletionResultType]::ParameterName, 'Initialize (or update) the syntax/theme cache.')
        #   [CompletionResult]::new('-c'                      , 'c'                     , [CompletionResultType]::ParameterName, 'Remove the cached syntax definitions and themes.')
            [CompletionResult]::new('--clear'                 , 'clear'                 , [CompletionResultType]::ParameterName, 'Remove the cached syntax definitions and themes.')
            [CompletionResult]::new('--blank'                 , 'blank'                 , [CompletionResultType]::ParameterName, 'Create completely new syntax and theme sets (instead of appending to the default sets).')
        #   [CompletionResult]::new('-h'                      , 'h'                     , [CompletionResultType]::ParameterName, 'Prints help information')
            [CompletionResult]::new('--help'                  , 'help'                  , [CompletionResultType]::ParameterName, 'Prints help information')
        #   [CompletionResult]::new('-V'                      , 'V'                     , [CompletionResultType]::ParameterName, 'Prints version information')
        #   [CompletionResult]::new('--version'               , 'version'               , [CompletionResultType]::ParameterName, 'Prints version information')
            break
        }
        default {
        #   [CompletionResult]::new('-l'                      , 'l'                     , [CompletionResultType]::ParameterName, 'Set the language for syntax highlighting.')
            [CompletionResult]::new('--language'              , 'language'              , [CompletionResultType]::ParameterName, 'Set the language for syntax highlighting.')
        #   [CompletionResult]::new('-H'                      , 'H'                     , [CompletionResultType]::ParameterName, 'Highlight lines N through M.')
            [CompletionResult]::new('--highlight-line'        , 'highlight-line'        , [CompletionResultType]::ParameterName, 'Highlight lines N through M.')
            [CompletionResult]::new('--file-name'             , 'file-name'             , [CompletionResultType]::ParameterName, 'Specify the name to display for a file.')
            [CompletionResult]::new('--diff-context'          , 'diff-context'          , [CompletionResultType]::ParameterName, 'diff-context')
            [CompletionResult]::new('--tabs'                  , 'tabs'                  , [CompletionResultType]::ParameterName, 'Set the tab width to T spaces.')
            [CompletionResult]::new('--wrap'                  , 'wrap'                  , [CompletionResultType]::ParameterName, 'Specify the text-wrapping mode (*auto*, never, character, word).')
            [CompletionResult]::new('--terminal-width'        , 'terminal-width'        , [CompletionResultType]::ParameterName, 'Explicitly set the width of the terminal instead of determining it automatically. If prefixed with ''+'' or ''-'', the value will be treated as an offset to the actual terminal width. See also: ''--wrap''.')
            [CompletionResult]::new('--color'                 , 'color'                 , [CompletionResultType]::ParameterName, 'When to use colors (*auto*, never, always).')
            [CompletionResult]::new('--italic-text'           , 'italic-text'           , [CompletionResultType]::ParameterName, 'Use italics in output (always, *never*)')
            [CompletionResult]::new('--decorations'           , 'decorations'           , [CompletionResultType]::ParameterName, 'When to show the decorations (*auto*, never, always).')
            [CompletionResult]::new('--paging'                , 'paging'                , [CompletionResultType]::ParameterName, 'Specify when to use the pager, or use ''-P'' to disable (*auto*, never, always).')
            [CompletionResult]::new('--pager'                 , 'pager'                 , [CompletionResultType]::ParameterName, 'Determine which pager to use.')
        #   [CompletionResult]::new('-m'                      , 'm'                     , [CompletionResultType]::ParameterName, 'Use the specified syntax for files matching the glob pattern (''*.cpp:C++'').')
            [CompletionResult]::new('--map-syntax'            , 'map-syntax'            , [CompletionResultType]::ParameterName, 'Use the specified syntax for files matching the glob pattern (''*.cpp:C++'').')
            [CompletionResult]::new('--theme'                 , 'theme'                 , [CompletionResultType]::ParameterName, 'Set the color theme for syntax highlighting.')
            [CompletionResult]::new('--theme-dark'            , 'themedark'             , [CompletionResultType]::ParameterName, 'Set the color theme for syntax highlighting for dark backgrounds.')
            [CompletionResult]::new('--theme-light'           , 'themelight'            , [CompletionResultType]::ParameterName, 'Set the color theme for syntax highlighting for light backgrounds.')
            [CompletionResult]::new('--style'                 , 'style'                 , [CompletionResultType]::ParameterName, 'Comma-separated list of style elements to display (*default*, auto, full, plain, changes, header, header-filename, header-filesize, grid, rule, numbers, snip).')
        #   [CompletionResult]::new('-r'                      , 'r'                     , [CompletionResultType]::ParameterName, 'Only print the lines from N to M.')
            [CompletionResult]::new('--line-range'            , 'line-range'            , [CompletionResultType]::ParameterName, 'Only print the lines from N to M.')
        #   [CompletionResult]::new('-A'                      , 'A'                     , [CompletionResultType]::ParameterName, 'Show non-printable characters (space, tab, newline, ..).')
            [CompletionResult]::new('--show-all'              , 'show-all'              , [CompletionResultType]::ParameterName, 'Show non-printable characters (space, tab, newline, ..).')
            [CompletionResult]::new('--nonprintable-notation' , 'nonprintable-notation' , [CompletionResultType]::ParameterName, 'Set notation for non-printable characters. (unicode, caret)')
            [CompletionResult]::new('--chop-long-lines'       , 'chop-long-lines'       , [CompletionResultType]::ParameterName, 'Truncate all lines longer than screen width. Alias for ''--wrap=never''.')
            [CompletionResult]::new('--binary'                , 'binary'                , [CompletionResultType]::ParameterName, 'How to treat binary content. (*no-printing*, as-text)')
            [CompletionResult]::new('--ignored-suffix'        , 'ignored-suffix'        , [CompletionResultType]::ParameterName, 'Ignore extension. For example: ''bat --ignored-suffix ".dev" my_file.json.dev'' will use JSON syntax, and ignore ''.dev''')
            [CompletionResult]::new('--squeeze-blank'         , 'squeeze-blank'         , [CompletionResultType]::ParameterName, 'Squeeze consecutive empty lines into a single empty line.')
            [CompletionResult]::new('--squeeze-limit'         , 'squeeze-limit'         , [CompletionResultType]::ParameterName, 'Set the maximum number of consecutive empty lines to be printed.')
            [CompletionResult]::new('--strip-ansi'            , 'strip-ansi'            , [CompletionResultType]::ParameterName, 'Specify when to strip ANSI escape sequences from the input. The automatic mode will remove escape sequences unless the syntax highlighting language is plain text. (auto, always, *never*).')
        #   [CompletionResult]::new('-p'                      , 'p'                     , [CompletionResultType]::ParameterName, 'Show plain style (alias for ''--style=plain'').')
            [CompletionResult]::new('--plain'                 , 'plain'                 , [CompletionResultType]::ParameterName, 'Show plain style (alias for ''--style=plain'').')
        #   [CompletionResult]::new('-d'                      , 'd'                     , [CompletionResultType]::ParameterName, 'Only show lines that have been added/removed/modified.')
            [CompletionResult]::new('--diff'                  , 'diff'                  , [CompletionResultType]::ParameterName, 'Only show lines that have been added/removed/modified.')
        #   [CompletionResult]::new('-n'                      , 'n'                     , [CompletionResultType]::ParameterName, 'Show line numbers (alias for ''--style=numbers'').')
            [CompletionResult]::new('--number'                , 'number'                , [CompletionResultType]::ParameterName, 'Show line numbers (alias for ''--style=numbers'').')
        #   [CompletionResult]::new('-f'                      , 'f'                     , [CompletionResultType]::ParameterName, 'f')
            [CompletionResult]::new('--force-colorization'    , 'force-colorization'    , [CompletionResultType]::ParameterName, 'force-colorization')
        #   [CompletionResult]::new('-P'                      , 'P'                     , [CompletionResultType]::ParameterName, 'Alias for ''--paging=never''')
            [CompletionResult]::new('--no-paging'             , 'no-paging'             , [CompletionResultType]::ParameterName, 'Alias for ''--paging=never''')
            [CompletionResult]::new('--list-themes'           , 'list-themes'           , [CompletionResultType]::ParameterName, 'Display all supported highlighting themes.')
        #   [CompletionResult]::new('-L'                      , 'L'                     , [CompletionResultType]::ParameterName, 'Display all supported languages.')
            [CompletionResult]::new('--list-languages'        , 'list-languages'        , [CompletionResultType]::ParameterName, 'Display all supported languages.')
        #   [CompletionResult]::new('-u'                      , 'u'                     , [CompletionResultType]::ParameterName, 'u')
            [CompletionResult]::new('--unbuffered'            , 'unbuffered'            , [CompletionResultType]::ParameterName, 'Enable unbuffered input reading for streaming use cases')
            [CompletionResult]::new('--completion'            , 'completion'            , [CompletionResultType]::ParameterName, 'Show shell completion for a certain shell. [possible values: bash, fish, zsh, ps1]')
            [CompletionResult]::new('--no-config'             , 'no-config'             , [CompletionResultType]::ParameterName, 'Do not use the configuration file')
            [CompletionResult]::new('--no-custom-assets'      , 'no-custom-assets'      , [CompletionResultType]::ParameterName, 'Do not load custom assets')
            [CompletionResult]::new('--lessopen'              , 'lessopen'              , [CompletionResultType]::ParameterName, 'Enable the $LESSOPEN preprocessor')
            [CompletionResult]::new('--no-lessopen'           , 'no-lessopen'           , [CompletionResultType]::ParameterName, 'Disable the $LESSOPEN preprocessor if enabled (overrides --lessopen)')
            [CompletionResult]::new('--config-file'           , 'config-file'           , [CompletionResultType]::ParameterName, 'Show path to the configuration file.')
            [CompletionResult]::new('--generate-config-file'  , 'generate-config-file'  , [CompletionResultType]::ParameterName, 'Generates a default configuration file.')
            [CompletionResult]::new('--config-dir'            , 'config-dir'            , [CompletionResultType]::ParameterName, 'Show bat''s configuration directory.')
            [CompletionResult]::new('--cache-dir'             , 'cache-dir'             , [CompletionResultType]::ParameterName, 'Show bat''s cache directory.')
            [CompletionResult]::new('--acknowledgements'      , 'acknowledgements'      , [CompletionResultType]::ParameterName, 'Show acknowledgements.')
            [CompletionResult]::new('--set-terminal-title'    , 'set-terminal-title'    , [CompletionResultType]::ParameterName, 'Sets terminal title to filenames when using a pager.')
            [CompletionResult]::new('--diagnostic'            , 'diagnostic'            , [CompletionResultType]::ParameterName, 'Show diagnostic information for bug reports.')
            [CompletionResult]::new('--quiet-empty'           , 'quiet-empty'           , [CompletionResultType]::ParameterName, 'Do not produce any output when the input is empty.')
        #   [CompletionResult]::new('-h'                      , 'h'                     , [CompletionResultType]::ParameterName, 'Print this help message.')
            [CompletionResult]::new('--help'                  , 'help'                  , [CompletionResultType]::ParameterName, 'Print this help message.')
        #   [CompletionResult]::new('-V'                      , 'V'                     , [CompletionResultType]::ParameterName, 'Show version information.')
            [CompletionResult]::new('--version'               , 'version'               , [CompletionResultType]::ParameterName, 'Show version information.')
            break
        }
    })

    $completions.Where{ $_.CompletionText -like "$wordToComplete*" } |
        Sort-Object -Property CompletionText
}


================================================
FILE: assets/completions/bat.bash.in
================================================
# shellcheck disable=SC2207

# Requires https://github.com/scop/bash-completion

# Macs have bash3 for which the bash-completion package doesn't include
# _init_completion. This is a minimal version of that function.
__bat_init_completion()
{
	COMPREPLY=()
	_get_comp_words_by_ref "$@" cur prev words cword
}

__bat_escape_completions()
{
	# Do not escape if completing a quoted value.
	[[ $cur == [\"\']* ]] && return 0
	if ((
		BASH_VERSINFO[0] > 5 || \
		BASH_VERSINFO[0] == 5 && BASH_VERSINFO[1] >= 3
	)); then
		# bash >= 5.3 has "compopt -o fullquote", which exactly does
		# what this function tries to do.
		compopt -o fullquote
	elif ((
		BASH_VERSINFO[0] > 4 || \
		BASH_VERSINFO[0] == 4 && BASH_VERSINFO[1] > 0
	)); then
		# printf -v to an array index is available in bash >= 4.1.
		# Use it if available, as -o filenames is semantically
		# incorrect if we are not actually completing filenames, and it
		# has side effects (e.g. adds trailing slash to candidates
		# matching present dirs).
		local i
		for i in ${!COMPREPLY[*]}; do
			printf -v "COMPREPLY[i]" %q "${COMPREPLY[i]}"
		done

		# We can use "compopt -o noquote" available in bash >= 4.3 to
		# prevent further quoting by the shell, which would be
		# unexpectedly applied when a quoted result matches a filename.
		if ((
			BASH_VERSINFO[0] > 4 || \
			BASH_VERSINFO[0] == 4 && BASH_VERSINFO[1] >= 3
		)); then
			compopt -o noquote
		fi
	else
		compopt -o filenames
	fi
}

_bat() {
	local cur prev words split=false
	if declare -F _init_completion >/dev/null 2>&1; then
		_init_completion -s || return 0
	else
		__bat_init_completion -n "=" || return 0
		_split_longopt && split=true
	fi

	if [[ ${words[1]-} == cache ]]; then
		case $prev in
		--source | --target)
			_filedir -d
			return 0
			;;
		esac
		COMPREPLY=($(compgen -W "
			--build
			--clear
			--source
			--target
			--blank
			--help
		" -- "$cur"))
		return 0
	fi

	case $prev in
	-l | --language)
		local IFS=$'\n'
		COMPREPLY=($(compgen -W "$(
			"$1" --list-languages | while IFS=: read -r lang _; do
				printf "%s\n" "$lang"
			done
		)" -- "$cur"))
		__bat_escape_completions
		return 0
		;;
	-H | --highlight-line | \
	--diff-context | \
	--tabs | \
	--terminal-width | \
	-m | --map-syntax | \
	--ignored-suffix | \
	--list-themes | \
	--squeeze-limit | \
	--line-range | \
	-L | --list-languages | \
	--lessopen | \
	--no-paging | \
	--diagnostic | \
	--quiet-empty | \
	--acknowledgements | \
	-h | --help | \
	-V | --version | \
	--cache-dir | \
	--config-dir | \
	--config-file | \
	--generate-config-file)
		# argument required but no completion available, or option
		# causes an exit
		return 0
		;;
	--file-name)
		_filedir
		return 0
		;;
	--wrap)
		COMPREPLY=($(compgen -W "auto never character word" -- "$cur"))
		return 0
		;;
	--binary)
		COMPREPLY=($(compgen -W "no-printing as-text" -- "$cur"))
		return 0
		;;
	--nonprintable-notation)
		COMPREPLY=($(compgen -W "unicode caret" -- "$cur"))
		return 0
		;;
	--strip-ansi)
		COMPREPLY=($(compgen -W "auto never always" -- "$cur"))
		return 0
		;;
	--completion)
		COMPREPLY=($(compgen -W "bash fish zsh ps1" -- "$cur"))
		return 0
		;;
	--color | --decorations | --paging)
		COMPREPLY=($(compgen -W "auto never always" -- "$cur"))
		return 0
		;;
	--italic-text)
		COMPREPLY=($(compgen -W "always never" -- "$cur"))
		return 0
		;;
	--pager)
		COMPREPLY=($(compgen -c -- "$cur"))
		return 0
		;;
	--theme)
		local IFS=$'\n'
		COMPREPLY=($(compgen -W "auto${IFS}auto:always${IFS}auto:system${IFS}dark${IFS}light${IFS}$("$1" --list-themes)" -- "$cur"))
		__bat_escape_completions
		return 0
		;;
	--theme-dark | \
	--theme-light)
		local IFS=$'\n'
		COMPREPLY=($(compgen -W "$("$1" --list-themes)" -- "$cur"))
		__bat_escape_completions
		return 0
		;;
	--style)
		# shellcheck disable=SC2034
		local -a styles=(
			default
			full
			auto
			plain
			changes
			header
			header-filename
			header-filesize
			grid
			rule
			numbers
			snip
		)
		# shellcheck disable=SC2016
		if declare -F _comp_delimited >/dev/null 2>&1; then
			# bash-completion > 2.11
			_comp_delimited , -W '"${styles[@]}"'
		else
			COMPREPLY=($(compgen -W '${styles[@]}' -- "$cur"))
		fi
		return 0
	esac

	$split && return 0

	if [[ $cur == -* ]]; then
		COMPREPLY=($(compgen -W "
			--unbuffered
			--show-all
			--nonprintable-notation
			--binary
			--plain
			--language
			--highlight-line
			--file-name
			--diff
			--diff-context
			--tabs
			--wrap
			--chop-long-lines
			--terminal-width
			--number
			--color
			--italic-text
			--decorations
			--force-colorization
			--paging
			--no-paging
			--pager
			--map-syntax
			--ignored-suffix
			--theme
			--theme-dark
			--theme-light
			--list-themes
			--squeeze-blank
			--squeeze-limit
			--strip-ansi
			--style
			--line-range
			--list-languages
			--lessopen
			--completion
			--diagnostic
			--quiet-empty
			--acknowledgements
			--set-terminal-title
			--help
			--version
			--cache-dir
			--config-dir
			--config-file
			--generate-config-file
			--no-config
			--no-custom-assets
			--no-lessopen
		" -- "$cur"))
		return 0
	fi

	_filedir
	
	## Completion of the 'cache' command itself is removed for better UX
	## See https://github.com/sharkdp/bat/issues/2085#issuecomment-1271646802
} && complete -F _bat {{PROJECT_EXECUTABLE}}


================================================
FILE: assets/completions/bat.fish.in
================================================
# Fish Shell Completions
# Copy or symlink to $XDG_CONFIG_HOME/fish/completions/{{PROJECT_EXECUTABLE}}.fish
# ($XDG_CONFIG_HOME is usually set to ~/.config)

# `bat` is `batcat` on Debian and Ubuntu
set bat {{PROJECT_EXECUTABLE}}

# Helper functions:

function __bat_complete_files -a token
    # Cheat to complete files by calling `complete -C` on a fake command name,
    # like `__fish_complete_directories` does.
    set -l fake_command aaabccccdeeeeefffffffffgghhhhhhiiiii
    complete -C"$fake_command $token"
end

function __bat_complete_one_language -a comp
    command $bat --list-languages | string split -f1 : | string match -e "$comp"
end

function __bat_complete_list_languages
    for spec in (command $bat --list-languages)
        set -l name (string split -f1 : $spec)
        for ext in (string split -f2 : $spec | string split ,)
            test -n "$ext"; or continue
            string match -rq '[/*]' $ext; and continue
            printf "%s\t%s\n" $ext $name
        end
        printf "%s\t\n" $name
    end
end

function __bat_complete_map_syntax
    set -l token (commandline -ct)

    if string match -qr '(?<glob>.+):(?<syntax>.*)' -- $token
        # If token ends with a colon, complete with the list of language names.
        set -f comps $glob:(__bat_complete_one_language $syntax)
    else if string match -qr '\*' -- $token
        # If token contains a globbing character (`*`), complete only possible
        # globs in the current directory
        set -f comps (__bat_complete_files $token | string match -er '[*]'):
    else
        # Complete files (and globs).
        set -f comps (__bat_complete_files $token | string match -erv '/$'):
    end

    if set -q comps[1]
        printf "%s\t\n" $comps
    end
end

function __bat_cache_subcommand
    __fish_seen_subcommand_from cache
end

# Returns true if no exclusive arguments seen.
function __bat_no_excl_args
    not __bat_cache_subcommand; and not __fish_seen_argument \
        -s h -l help \
        -s V -l version \
        -l acknowledgements \
        -l config-dir -l config-file \
        -l diagnostic -l quiet-empty \
        -l list-languages -l list-themes
end

# Returns true if the 'cache' subcommand is seen without any exclusive arguments.
function __bat_cache_no_excl
    __bat_cache_subcommand; and not __fish_seen_argument \
        -s h -l help \
        -l acknowledgements -l build -l clear
end

function __bat_style_opts
    set -l style_opts \
        "default,recommended components" \
        "auto,same as 'default' unless piped" \
        "full,all components" \
        "plain,no components" \
        "changes,Git change markers" \
        "header,alias for header-filename" \
        "header-filename,filename above content" \
        "header-filesize,filesize above content" \
        "grid,lines b/w sidebar/header/content" \
        "numbers,line numbers in sidebar" \
        "rule,separate files" \
        "snip,separate ranges"

    string replace , \t $style_opts
end

# Use option argument descriptions to indicate which is the default, saving
# horizontal space and making sure the option description isn't truncated.
set -l color_opts '
    auto\tdefault
    never\t
    always\t
'
set -l decorations_opts $color_opts
set -l paging_opts $color_opts

# Include some examples so we can indicate the default.
set -l pager_opts '
    less\tdefault
    less\ -FR\t
    more\t
    vimpager\t
    builtin\t
'

set -l italic_text_opts '
    always\t
    never\tdefault
'

set -l wrap_opts '
    auto\tdefault
    never\t
    character\t
    word\t
'

# While --tabs theoretically takes any number, most people should be OK with these.
# Specifying a list lets us explain what 0 does.
set -l tabs_opts '
    0\tpass\ tabs\ through\ directly
    1\t
    2\t
    4\t
    8\t
'

set -l special_themes '
    auto\tdefault,\ Choose\ a\ theme\ based\ on\ dark\ or\ light\ mode
    auto:always\tChoose\ a\ theme\ based\ on\ dark\ or\ light\ mode
    auto:system\tChoose\ a\ theme\ based\ on\ dark\ or\ light\ mode
    dark\tUse\ the\ theme\ specified\ by\ --theme-dark
    light\tUse\ the\ theme\ specified\ by\ --theme-light
'

# Completions:

complete -c $bat -l acknowledgements -d "Print acknowledgements" -n __fish_is_first_arg

complete -c $bat -l binary -x -a "no-printing as-text" -d "How to treat binary content" -n __bat_no_excl_args

complete -c $bat -l cache-dir -f -d "Show bat's cache directory" -n __fish_is_first_arg

complete -c $bat -s c -l chop-long-lines -d "Truncate all lines longer than screen width" -n __bat_no_excl_args

complete -c $bat -l color -x -a "$color_opts" -d "When to use colored output" -n __bat_no_excl_args

complete -c $bat -l completion -x -a "bash fish zsh ps1" -d "Show shell completion for a certain shell" -n __fish_is_first_arg

complete -c $bat -l config-dir -f -d "Display location of configuration directory" -n __fish_is_first_arg

complete -c $bat -l config-file -f -d "Display location of configuration file" -n __fish_is_first_arg

complete -c $bat -l decorations -x -a "$decorations_opts" -d "When to use --style decorations" -n __bat_no_excl_args

complete -c $bat -l diagnostic -d "Print diagnostic info for bug reports" -n __fish_is_first_arg
complete -c $bat -l quiet-empty -d "Do not produce any output when the input is empty" -n __fish_is_first_arg

complete -c $bat -s d -l diff -d "Only show lines with Git changes" -n __bat_no_excl_args

complete -c $bat -l diff-context -x -d "Show N context lines around Git changes" -n "__fish_seen_argument -s d -l diff"

complete -c $bat -l generate-config-file -f -d "Generates a default configuration file" -n __fish_is_first_arg

complete -c $bat -l file-name -x -d "Specify the display name" -n __bat_no_excl_args

complete -c $bat -s f -l force-colorization -d "Force color and decorations" -n __bat_no_excl_args

complete -c $bat -s h -d "Print a concise overview" -n __fish_is_first_arg

complete -c $bat -l help -f -d "Print all help information" -n __fish_is_first_arg

complete -c $bat -s H -l highlight-line -x -d "Highlight line(s) N[:M]" -n __bat_no_excl_args

complete -c $bat -l ignored-suffix -x -d "Ignore extension" -n __bat_no_excl_args

complete -c $bat -l italic-text -x -a "$italic_text_opts" -d "When to use italic text in the output" -n __bat_no_excl_args

complete -c $bat -s l -l language -x -k -a "(__bat_complete_list_languages)" -d "Set the syntax highlighting language" -n __bat_no_excl_args

complete -c $bat -l lessopen -d "Enable the $LESSOPEN preprocessor" -n __fish_is_first_arg

complete -c $bat -s r -l line-range -x -d "Only print lines [M]:[N] (either optional)" -n __bat_no_excl_args

complete -c $bat -l list-languages -f -d "List syntax highlighting languages" -n __fish_is_first_arg

complete -c $bat -l list-themes -f -d "List syntax highlighting themes" -n __fish_is_first_arg

complete -c $bat -s m -l map-syntax -x -a "(__bat_complete_map_syntax)" -d "Map <glob pattern>:<language syntax>" -n __bat_no_excl_args

complete -c $bat -l no-config -d "Do not use the configuration file"

complete -c $bat -l no-custom-assets -d "Do not load custom assets"

complete -c $bat -l no-lessopen -d "Disable the $LESSOPEN preprocessor if enabled (overrides --lessopen)"

complete -c $bat -l nonprintable-notation -x -a "unicode caret" -d "Set notation for non-printable characters" -n __bat_no_excl_args

complete -c $bat -s n -l number -d "Only show line numbers, no other decorations" -n __bat_no_excl_args

complete -c $bat -l no-paging -d "Alias for --paging=never" -n __bat_no_excl_args

complete -c $bat -l pager -x -a "$pager_opts" -d "Which pager to use" -n __bat_no_excl_args

complete -c $bat -l paging -x -a "$paging_opts" -d "When to use the pager" -n __bat_no_excl_args

complete -c $bat -s p -l plain -d "Show plain style" -n __bat_no_excl_args

complete -c $bat -l set-terminal-title -d "Sets terminal title to filenames when using a pager" -n __bat_no_excl_args

complete -c $bat -s A -l show-all -d "Show non-printable characters" -n __bat_no_excl_args

complete -c $bat -s s -l squeeze-blank -d "Squeeze consecutive empty lines into a single empty line" -n __bat_no_excl_args

complete -c $bat -l squeeze-limit -x -d "Set the maximum number of consecutive empty lines to be printed" -n __bat_no_excl_args

complete -c $bat -l strip-ansi -x -a "auto never always" -d "Specify when to strip ANSI escape sequences from the input" -n __bat_no_excl_args

complete -c $bat -s p -l plain -d "Disable decorations" -n __bat_no_excl_args

complete -c $bat -o pp -d "Disable decorations and paging" -n __bat_no_excl_args

complete -c $bat -s P -d "Disable paging" -n __bat_no_excl_args

complete -c $bat -l style -x -k -a "(__fish_complete_list , __bat_style_opts)" -d "Specify which non-content elements to display" -n __bat_no_excl_args

complete -c $bat -l tabs -x -a "$tabs_opts" -d "Set tab width" -n __bat_no_excl_args

complete -c $bat -l terminal-width -x -d "Set terminal <width>, +<offset>, or -<offset>" -n __bat_no_excl_args

complete -c $bat -l theme -x -a "$special_themes(command $bat --list-themes | command cat)" -d "Set the syntax highlighting theme" -n __bat_no_excl_args

complete -c $bat -l theme-dark -x -a "(command $bat --list-themes | command cat)" -d "Set the syntax highlighting theme for dark backgrounds" -n __bat_no_excl_args

complete -c $bat -l theme-light -x -a "(command $bat --list-themes | command cat)" -d "Set the syntax highlighting theme for light backgrounds" -n __bat_no_excl_args

complete -c $bat -s u -l unbuffered -d "Enable unbuffered input reading for streaming use cases" -n __bat_no_excl_args

complete -c $bat -s V -l version -f -d "Show version information" -n __fish_is_first_arg

complete -c $bat -l wrap -x -a "$wrap_opts" -d "Text-wrapping mode" -n __bat_no_excl_args

# Sub-command 'cache' completions
## Completion of the 'cache' command itself is removed for better UX
## See https://github.com/sharkdp/bat/issues/2085#issuecomment-1271646802

complete -c $bat -l build -f -d "Parse new definitions into cache" -n __bat_cache_no_excl

complete -c $bat -l clear -f -d "Reset definitions to defaults" -n __bat_cache_no_excl

complete -c $bat -l blank -f -d "Create new data instead of appending" -n "__bat_cache_subcommand; and not __fish_seen_argument -l clear"

complete -c $bat -l source -x -a "(__fish_complete_directories)" -d "Load syntaxes and themes from DIR" -n "__bat_cache_subcommand; and not __fish_seen_argument -l clear"

complete -c $bat -l target -x -a "(__fish_complete_directories)" -d "Store cache in DIR" -n __bat_cache_subcommand

complete -c $bat -l acknowledgements -d "Build acknowledgements.bin" -n __bat_cache_no_excl

complete -c $bat -s h -d "Print a concise overview of $bat-cache help" -n __bat_cache_no_excl

complete -c $bat -l help -f -d "Print all $bat-cache help" -n __bat_cache_no_excl

# vim:ft=fish


================================================
FILE: assets/completions/bat.zsh.in
================================================
#compdef {{PROJECT_EXECUTABLE}}

local curcontext="$curcontext" ret=1
local -a state state_descr line
typeset -A opt_args

(( $+functions[_{{PROJECT_EXECUTABLE}}_cache_subcommand] )) ||
_{{PROJECT_EXECUTABLE}}_cache_subcommand() {
    local -a args
    args=(
        '(-b --build -c --clear)'{-b,--build}'[initialize or update the syntax/theme cache]'
        '(-b --build -c --clear)'{-c,--clear}'[remove the cached syntax definitions and themes]'
        --source='[specify directory to load syntaxes and themes from]:directory:_files -/'
        --target='[specify directory to store the cached syntax and theme set in]:directory:_files -/'
        --blank'[create completely new syntax and theme sets]'
        --acknowledgements'[build acknowledgements.bin]'
        '(: -)'{-h,--help}'[show help information]'
    )

    _arguments -S -s $args
}

(( $+functions[_{{PROJECT_EXECUTABLE}}_main] )) ||
_{{PROJECT_EXECUTABLE}}_main() {
    local -a args
    args=(
        '(-A --show-all)'{-A,--show-all}'[show non-printable characters (space, tab, newline, ..)]'
        --nonprintable-notation='[specify how to display non-printable characters when using --show-all]:notation:(caret unicode)'
        --binary='[specify how to treat binary content]:behavior:(no-printing as-text)'
        \*{-p,--plain}'[show plain style (alias for `--style=plain`), repeat twice to disable automatic paging (alias for `--paging=never`)]'
        '(-l --language)'{-l+,--language=}'[set the language for syntax highlighting]:language:->languages'
        \*{-H+,--highlight-line=}'[highlight specified block of lines]:start\:end'
        \*--file-name='[specify the name to display for a file]:name:_files'
        '(-d --diff)'--diff'[only show lines that have been added/removed/modified]'
        --diff-context='[specify lines of context around added/removed/modified lines when using `--diff`]:lines'
        --tabs='[set the tab width]:tab width [4]'
        --wrap='[specify the text-wrapping mode]:mode [auto]:(auto never character word)'
        '!(--wrap)'{-S,--chop-long-lines}
        --terminal-width='[explicitly set the width of the terminal instead of determining it automatically]:width'
        '(-n --number --diff --diff-context)'{-n,--number}'[show line numbers]'
        --color='[specify when to use colors]:when:(auto never always)'
        --italic-text='[use italics in output]:when:(always never)'
        --decorations='[specify when to show the decorations]:when:(auto never always)'
        '(-f --force-colorization)'--force-colorization'[force colorization and decorations]'
        --paging='[specify when to use the pager]:when:(auto never always)'
        '(-P --no-paging)'--no-paging'[alias for --paging=never]'
        --pager='[determine which pager to use]:command:'
        '(-m --map-syntax)'{-m+,--map-syntax=}'[map a glob pattern to an existing syntax name]: :->syntax-maps'
        --ignored-suffix='[ignore extension]:suffix:'
        '(--theme)'--theme='[set the color theme for syntax highlighting]:theme:->theme_preferences'
        '(--theme-dark)'--theme-dark='[set the color theme for syntax highlighting for dark backgrounds]:theme:->themes'
        '(--theme-light)'--theme-light='[set the color theme for syntax highlighting for light backgrounds]:theme:->themes'
        '(: --list-themes --list-languages -L)'--list-themes'[show all supported highlighting themes]'
        --squeeze-blank'[squeeze consecutive empty lines into a single empty line]'
        --squeeze-limit='[set the maximum number of consecutive empty lines]:limit:'
        --strip-ansi='[specify when to strip ANSI escape sequences]:when:(auto never always)'
        --style='[comma-separated list of style elements to display]: : _values "style [default]"
            default auto full plain changes header header-filename header-filesize grid rule numbers snip'
        \*{-r+,--line-range=}'[only print the specified line range]:start\:end'
        '(* -)'{-L,--list-languages}'[display all supported languages]'
        '(-u --unbuffered)'--unbuffered'[enable unbuffered input reading for streaming use cases]'
        --completion='[show shell completion for a certain shell]:shell:(bash fish zsh ps1)'
        --set-terminal-title'[sets terminal title to filenames when using a pager]'
        --diagnostic'[show diagnostic information for bug reports]'
        --quiet-empty'[do not produce any output when the input is empty]'
        -P'[disable paging]'
        "--no-config[don't use the configuration file]"
        "--no-custom-assets[don't load custom assets]"
        '(--no-lessopen)'--lessopen'[enable the $LESSOPEN preprocessor]'
        '(--lessopen)'--no-lessopen'[disable the $LESSOPEN preprocessor if enabled (overrides --lessopen)]'
        '(* -)'--config-dir"[show bat's configuration directory]"
        '(* -)'--config-file'[show path to the configuration file]'
        '(* -)'--generate-config-file'[generate a default configuration file]'
        '(* -)'--cache-dir"[show bat's cache directory]"
        '(* -)'{-h,--help}'[show help information]'
        '(* -)'{-V,--version}'[show version information]'
        '*: :{ _files || compadd cache }'
    )

    _arguments -S -s $args && ret=0

    case "$state" in
        syntax-maps)
          if ! compset -P '*:'; then
            _message -e patterns 'glob pattern:language'
            return
          fi
        ;& # fall-through

        languages)
            local IFS=$'\n'
            local -a languages
            languages=( $({{PROJECT_EXECUTABLE}} --list-languages | awk -F':|,' '{ for (i = 1; i <= NF; ++i) printf("%s:%s\n", $i, $1) }') )

            _describe 'language' languages && ret=0
        ;;

        themes)
            local -a themes expl
            themes=(${(f)"$(_call_program themes {{PROJECT_EXECUTABLE}} --list-themes)"} )

            _wanted themes expl 'theme' compadd -a themes && ret=0
        ;;
        theme_preferences)
            local -a themes expl
            themes=(auto dark light auto:always auto:system ${(f)"$(_call_program themes {{PROJECT_EXECUTABLE}} --list-themes)"} )

            _wanted themes expl 'theme' compadd -a themes && ret=0
        ;;
    esac

    return ret
}

case $words[2] in
    cache)
        ## Completion of the 'cache' command itself is removed for better UX
        ## See https://github.com/sharkdp/bat/issues/2085#issuecomment-1271646802
        shift words
        (( CURRENT-- ))
        curcontext="${curcontext%:*}-${words[1]}:"
        _{{PROJECT_EXECUTABLE}}_cache_subcommand
    ;;

    *)
        _{{PROJECT_EXECUTABLE}}_main
    ;;
esac


================================================
FILE: assets/create.sh
================================================
#!/usr/bin/env bash
set -euo pipefail

ASSET_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
REPO_DIR="$ASSET_DIR/.."

# Ensure submodules are initialized.
update_submodules() {
	local submodule
	local submodule_prompt=unspecified
	local submodule_path

	{
		while { read -r submodule && read -r submodule_path; } <&3; do
			if ! [[ -d "${REPO_DIR}/.git/modules/${submodule}" ]] && [[ -d "${REPO_DIR}/${submodule_path}" ]]; then
				if [[ "$submodule_prompt" = "unspecified" ]]; then
					echo "One or more submodules were found to be uninitialized."
					printf "Initialize and update them? [Y/n] "
					read -r submodule_prompt
				fi

				case "$submodule_prompt" in
					y|yes|'') {
						git -C "$REPO_DIR" submodule update --init "$submodule_path"
					};;
					n|no) {
						return
					};;
					*) {
						echo "Unknown answer. Not updating submodules."
					};;
				esac
			fi
		done
	} 3< <(git config --file "${REPO_DIR}/.gitmodules" --null --get-regexp path | xargs -0 printf "%s\n" | sed 's/^submodule.//;s/.path$//')
}

if [ -t 0 ]; then
	update_submodules
fi

# Always remove the local cache to avoid any confusion
bat cache --clear

# TODO:
# - Remove the JavaDoc patch once https://github.com/trishume/syntect/issues/222 has been fixed
# - Remove the C# patch once https://github.com/sublimehq/Packages/pull/2331 has been merged

# Apply patches
(
    cd "$ASSET_DIR"
    for patch in patches/*.patch; do
        patch --strip=0 < "$patch"
    done
)

reverse_patches() {
    (
        cd "$ASSET_DIR"
        for patch in patches/*.patch; do
            patch --strip=0 --reverse <"$patch"
        done
    )
}

# Make sure to always reverse patches, even if the `bat cache` command fails or aborts
trap reverse_patches EXIT

bat cache --build --blank --acknowledgements --source="$ASSET_DIR" --target="$ASSET_DIR"


================================================
FILE: assets/manual/bat.1.in
================================================
.TH {{PROJECT_EXECUTABLE_UPPERCASE}} "1"
.SH NAME
{{PROJECT_EXECUTABLE}} \- a cat(1) clone with syntax highlighting and Git integration.
.SH "USAGE"
.IP "{{PROJECT_EXECUTABLE}} [OPTIONS] [FILE]..."
.IP "{{PROJECT_EXECUTABLE}} cache [CACHE-OPTIONS] [--build|--clear]
.SH DESCRIPTION
{{PROJECT_EXECUTABLE}} prints the syntax-highlighted content of a collection of FILEs to the
terminal. If no FILE is specified, or when FILE is '-', it reads from standard input.

{{PROJECT_EXECUTABLE}} supports a large number of programming and markup languages.
It also communicates with git(1) to show modifications with respect to the git index.
{{PROJECT_EXECUTABLE}} automatically pipes its output through a pager (by default: less).

Whenever the output of {{PROJECT_EXECUTABLE}} goes to a non-interactive terminal, i.e. when the
output is piped into another process or into a file, {{PROJECT_EXECUTABLE}} will act as a drop-in
replacement for cat(1) and fall back to printing the plain file contents,
unless an explicit style is requested.

.SH "OPTIONS"
General remarks: Command-line options like '-l'/'--language' that take values can be specified as
either '--language value', '--language=value', '-l value' or '-lvalue'.
.HP
\fB\-A\fR, \fB\-\-show\-all\fR
.IP
Show non\-printable characters like space, tab or newline. Use '\-\-tabs' to
control the width of the tab\-placeholders.
.HP
\fB\-\-nonprintable\-notation\fR <notation>
.IP
Specify how to display non-printable characters when using \-\-show\-all.

Possible values:
.RS
.IP "caret"
Use character sequences like ^G, ^J, ^@, .. to identify non-printable characters
.IP "unicode"
Use special Unicode code points to identify non-printable characters
.RE
.HP
\fB\-\-binary\fR <behavior>
.IP
How to treat binary content.

Possible values:
.RS
.IP "no\-printing"
Do not print any binary content (default)
.IP "as\-text"
Treat binary content as normal text
.RE
.HP
\fB\-\-completion\fR <SHELL>
.IP
Show shell completion for a certain shell.
Possible values: bash, fish, zsh, ps1
.HP
\fB\-p\fR, \fB\-\-plain\fR
.IP
Only show plain style, no decorations. This is an alias for
\&'\-\-style=plain'. When '\-p' is used twice ('\-pp'), it also disables
automatic paging (alias for '\-\-style=plain \fB\-\-paging\fR=\fI\,never\/\fR').
.HP
\fB\-l\fR, \fB\-\-language\fR <language>
.IP
Explicitly set the language for syntax highlighting. The language can be
specified as a name (like 'C++' or 'LaTeX') or possible file extension
(like 'cpp', 'hpp' or 'md'). Use '\-\-list\-languages' to show all supported
language names and file extensions.
.HP
\fB\-H\fR, \fB\-\-highlight\-line\fR <N:M>...
.IP
Highlight the spe
Download .txt
gitextract_65sk4665/

├── .cargo/
│   └── audit.toml
├── .envrc
├── .github/
│   ├── .codecov.yml
│   ├── FUNDING.yml
│   ├── ISSUE_TEMPLATE/
│   │   ├── bug_report.md
│   │   ├── config.yml
│   │   ├── feature_request.md
│   │   ├── question.md
│   │   └── syntax_request.md
│   ├── dependabot.yml
│   └── workflows/
│       ├── CICD.yml
│       └── require-changelog-for-PRs.yml
├── .gitignore
├── .gitmodules
├── CHANGELOG.md
├── CONTRIBUTING.md
├── Cargo.toml
├── LICENSE-APACHE
├── LICENSE-MIT
├── NOTICE
├── README.md
├── SECURITY.md
├── assets/
│   ├── .gitattributes
│   ├── .ignore
│   ├── completions/
│   │   ├── _bat.ps1.in
│   │   ├── bat.bash.in
│   │   ├── bat.fish.in
│   │   └── bat.zsh.in
│   ├── create.sh
│   ├── manual/
│   │   └── bat.1.in
│   ├── patches/
│   │   ├── 1337.tmTheme.patch
│   │   ├── C#.sublime-syntax.patch
│   │   ├── Groff.sublime-syntax.patch
│   │   ├── JavaDoc.sublime-syntax.patch
│   │   ├── JavaScript.sublime-syntax.patch
│   │   ├── Lisp.sublime-syntax.patch
│   │   ├── Makefile.sublime-syntax.patch
│   │   ├── Markdown.sublime-syntax.patch
│   │   ├── MediaWiki.sublime-syntax.patch
│   │   ├── Monokai-Extended.tmTheme.patch
│   │   ├── OneHalfDark.tmTheme.patch
│   │   ├── Python.sublime-syntax.patch
│   │   ├── Rust.sublime-syntax.patch
│   │   ├── ShellScript.sublime-syntax.patch
│   │   ├── TodoTxt.sublime-syntax.patch
│   │   ├── TwoDark.tmTheme.patch
│   │   └── XML.sublime-syntax.patch
│   ├── syntaxes/
│   │   └── 02_Extra/
│   │       ├── Apache.sublime-syntax
│   │       ├── AsciiDoc.sublime-syntax
│   │       ├── Assembly (ARM).sublime-syntax
│   │       ├── Assembly (x86_64).sublime-syntax
│   │       ├── CSV/
│   │       │   ├── CSV-comma.sublime-syntax
│   │       │   ├── CSV-pipe.sublime-syntax
│   │       │   ├── CSV-semi-colon.sublime-syntax
│   │       │   ├── CSV.sublime-syntax
│   │       │   └── TSV.sublime-syntax
│   │       ├── Cabal.sublime-syntax
│   │       ├── CoffeeScript.sublime-syntax
│   │       ├── CpuInfo.sublime-syntax
│   │       ├── Crystal.sublime-syntax
│   │       ├── Dart.sublime-syntax
│   │       ├── DotENV.sublime-syntax
│   │       ├── Fstab.sublime-syntax
│   │       ├── Group.sublime-syntax
│   │       ├── HTML (Twig).sublime-syntax
│   │       ├── INI.sublime-syntax
│   │       ├── JavaScript (Babel).sublime-syntax
│   │       ├── Kotlin.sublime-syntax
│   │       ├── Lean.sublime-syntax
│   │       ├── LiveScript.sublime-syntax
│   │       ├── Manpage.sublime-syntax
│   │       ├── MemInfo.sublime-syntax
│   │       ├── Nim.sublime-syntax
│   │       ├── Ninja.sublime-syntax
│   │       ├── Nix.sublime-syntax
│   │       ├── Org mode.sublime-syntax
│   │       ├── Passwd.sublime-syntax
│   │       ├── PowerShell.sublime-syntax
│   │       ├── QML.sublime-syntax
│   │       ├── Racket.sublime-syntax
│   │       ├── Rego.sublime-syntax
│   │       ├── Requirementstxt.sublime-syntax
│   │       ├── Resolv.sublime-syntax
│   │       ├── Robot.sublime-syntax
│   │       ├── SML.sublime-syntax
│   │       ├── Slim.sublime-syntax
│   │       ├── Stylus.sublime-syntax
│   │       ├── Swift.sublime-syntax
│   │       ├── TypeScript.sublime-syntax
│   │       ├── TypsecriptReact.sublime-syntax
│   │       ├── Verilog.sublime-syntax
│   │       ├── VimHelp.sublime-syntax
│   │       ├── apt-source-list.sublime-syntax
│   │       ├── gnuplot.sublime-syntax
│   │       ├── log.sublime-syntax
│   │       ├── show-nonprintable.sublime-syntax
│   │       ├── syntax_test_csv.csv
│   │       ├── syntax_test_helphelp.txt
│   │       ├── syntax_test_man.man
│   │       ├── syntax_test_requirements.txt
│   │       ├── syntax_test_tsv.tsv
│   │       ├── syslog.sublime-syntax
│   │       └── wgsl.sublime-syntax
│   ├── theme_preview.rs
│   └── themes/
│       ├── ansi.tmTheme
│       ├── base16-256.tmTheme
│       └── base16.tmTheme
├── build/
│   ├── application.rs
│   ├── main.rs
│   ├── syntax_mapping.rs
│   └── util.rs
├── diagnostics/
│   ├── .gitattributes
│   └── info.sh
├── doc/
│   ├── README-ja.md
│   ├── README-ko.md
│   ├── README-ru.md
│   ├── README-zh.md
│   ├── alternatives.md
│   ├── assets.md
│   ├── long-help.txt
│   ├── release-checklist.md
│   ├── short-help.txt
│   └── sponsors.md
├── examples/
│   ├── advanced.rs
│   ├── buffer.rs
│   ├── cat.rs
│   ├── inputs.rs
│   ├── list_syntaxes_and_themes.rs
│   ├── simple.rs
│   └── yaml.rs
├── flake.nix
├── rustfmt.toml
├── src/
│   ├── assets/
│   │   ├── assets_metadata.rs
│   │   ├── build_assets/
│   │   │   └── acknowledgements.rs
│   │   ├── build_assets.rs
│   │   ├── lazy_theme_set.rs
│   │   └── serialized_syntax_set.rs
│   ├── assets.rs
│   ├── bin/
│   │   └── bat/
│   │       ├── app.rs
│   │       ├── assets.rs
│   │       ├── clap_app.rs
│   │       ├── completions.rs
│   │       ├── config.rs
│   │       ├── directories.rs
│   │       ├── input.rs
│   │       └── main.rs
│   ├── config.rs
│   ├── controller.rs
│   ├── decorations.rs
│   ├── diff.rs
│   ├── error.rs
│   ├── input.rs
│   ├── less.rs
│   ├── lessopen.rs
│   ├── lib.rs
│   ├── line_range.rs
│   ├── macros.rs
│   ├── nonprintable_notation.rs
│   ├── output.rs
│   ├── pager.rs
│   ├── paging.rs
│   ├── preprocessor.rs
│   ├── pretty_printer.rs
│   ├── printer.rs
│   ├── style.rs
│   ├── syntax_mapping/
│   │   ├── builtin.rs
│   │   ├── builtins/
│   │   │   ├── README.md
│   │   │   ├── bsd-family/
│   │   │   │   ├── .gitkeep
│   │   │   │   └── 50-os-release.toml
│   │   │   ├── common/
│   │   │   │   ├── .gitkeep
│   │   │   │   ├── 50-apache.toml
│   │   │   │   ├── 50-aws-credentials.toml
│   │   │   │   ├── 50-bat.toml
│   │   │   │   ├── 50-citation.toml
│   │   │   │   ├── 50-container.toml
│   │   │   │   ├── 50-cpp.toml
│   │   │   │   ├── 50-diff.toml
│   │   │   │   ├── 50-dotnet-xml.toml
│   │   │   │   ├── 50-f-sharp.toml
│   │   │   │   ├── 50-gcloud-cli-config.toml
│   │   │   │   ├── 50-git.toml
│   │   │   │   ├── 50-json.toml
│   │   │   │   ├── 50-markdown.toml
│   │   │   │   ├── 50-mill.toml
│   │   │   │   ├── 50-nginx.toml
│   │   │   │   ├── 50-nix.toml
│   │   │   │   ├── 50-nmap.toml
│   │   │   │   ├── 50-proxy-auto-config.toml
│   │   │   │   ├── 50-ron.toml
│   │   │   │   ├── 50-sarif.toml
│   │   │   │   ├── 50-ssh.toml
│   │   │   │   ├── 90-ignore-files.toml
│   │   │   │   ├── 99-unset-ambiguous-extensions.toml
│   │   │   │   ├── 99-unset-ambiguous-filenames.toml
│   │   │   │   └── xonsh.toml
│   │   │   ├── linux/
│   │   │   │   ├── .gitkeep
│   │   │   │   ├── 50-containers.toml
│   │   │   │   ├── 50-flatpak.toml
│   │   │   │   ├── 50-kubernetes.toml
│   │   │   │   ├── 50-os-release.toml
│   │   │   │   ├── 50-pacman.toml
│   │   │   │   ├── 50-paru.toml
│   │   │   │   ├── 50-podman-quadlet.toml
│   │   │   │   └── 50-systemd.toml
│   │   │   ├── macos/
│   │   │   │   └── .gitkeep
│   │   │   ├── unix-family/
│   │   │   │   ├── .gitkeep
│   │   │   │   ├── 50-apache.toml
│   │   │   │   ├── 50-certbot.toml
│   │   │   │   ├── 50-fish-shell.toml
│   │   │   │   ├── 50-korn-shell.toml
│   │   │   │   ├── 50-mail-spool.toml
│   │   │   │   ├── 50-nginx.toml
│   │   │   │   ├── 50-shell.toml
│   │   │   │   ├── 50-syslog.toml
│   │   │   │   └── 50-wireguard.toml
│   │   │   └── windows/
│   │   │       └── .gitkeep
│   │   └── ignored_suffixes.rs
│   ├── syntax_mapping.rs
│   ├── terminal.rs
│   ├── theme.rs
│   ├── vscreen.rs
│   └── wrapping.rs
└── tests/
    ├── .gitattributes
    ├── assets.rs
    ├── benchmarks/
    │   ├── .gitignore
    │   ├── .ignore
    │   ├── highlighting-speed-src/
    │   │   ├── grep-output-ansi-sequences.txt
    │   │   ├── jquery.js
    │   │   ├── miniz.c
    │   │   └── numpy_test_multiarray.py
    │   ├── many-small-files/
    │   │   ├── small-file-0.txt
    │   │   ├── small-file-1.txt
    │   │   ├── small-file-10.txt
    │   │   ├── small-file-100.txt
    │   │   ├── small-file-11.txt
    │   │   ├── small-file-12.txt
    │   │   ├── small-file-13.txt
    │   │   ├── small-file-14.txt
    │   │   ├── small-file-15.txt
    │   │   ├── small-file-16.txt
    │   │   ├── small-file-17.txt
    │   │   ├── small-file-18.txt
    │   │   ├── small-file-19.txt
    │   │   ├── small-file-2.txt
    │   │   ├── small-file-20.txt
    │   │   ├── small-file-21.txt
    │   │   ├── small-file-22.txt
    │   │   ├── small-file-23.txt
    │   │   ├── small-file-24.txt
    │   │   ├── small-file-25.txt
    │   │   ├── small-file-26.txt
    │   │   ├── small-file-27.txt
    │   │   ├── small-file-28.txt
    │   │   ├── small-file-29.txt
    │   │   ├── small-file-3.txt
    │   │   ├── small-file-30.txt
    │   │   ├── small-file-31.txt
    │   │   ├── small-file-32.txt
    │   │   ├── small-file-33.txt
    │   │   ├── small-file-34.txt
    │   │   ├── small-file-35.txt
    │   │   ├── small-file-36.txt
    │   │   ├── small-file-37.txt
    │   │   ├── small-file-38.txt
    │   │   ├── small-file-39.txt
    │   │   ├── small-file-4.txt
    │   │   ├── small-file-40.txt
    │   │   ├── small-file-41.txt
    │   │   ├── small-file-42.txt
    │   │   ├── small-file-43.txt
    │   │   ├── small-file-44.txt
    │   │   ├── small-file-45.txt
    │   │   ├── small-file-46.txt
    │   │   ├── small-file-47.txt
    │   │   ├── small-file-48.txt
    │   │   ├── small-file-49.txt
    │   │   ├── small-file-5.txt
    │   │   ├── small-file-50.txt
    │   │   ├── small-file-51.txt
    │   │   ├── small-file-52.txt
    │   │   ├── small-file-53.txt
    │   │   ├── small-file-54.txt
    │   │   ├── small-file-55.txt
    │   │   ├── small-file-56.txt
    │   │   ├── small-file-57.txt
    │   │   ├── small-file-58.txt
    │   │   ├── small-file-59.txt
    │   │   ├── small-file-6.txt
    │   │   ├── small-file-60.txt
    │   │   ├── small-file-61.txt
    │   │   ├── small-file-62.txt
    │   │   ├── small-file-63.txt
    │   │   ├── small-file-64.txt
    │   │   ├── small-file-65.txt
    │   │   ├── small-file-66.txt
    │   │   ├── small-file-67.txt
    │   │   ├── small-file-68.txt
    │   │   ├── small-file-69.txt
    │   │   ├── small-file-7.txt
    │   │   ├── small-file-70.txt
    │   │   ├── small-file-71.txt
    │   │   ├── small-file-72.txt
    │   │   ├── small-file-73.txt
    │   │   ├── small-file-74.txt
    │   │   ├── small-file-75.txt
    │   │   ├── small-file-76.txt
    │   │   ├── small-file-77.txt
    │   │   ├── small-file-78.txt
    │   │   ├── small-file-79.txt
    │   │   ├── small-file-8.txt
    │   │   ├── small-file-80.txt
    │   │   ├── small-file-81.txt
    │   │   ├── small-file-82.txt
    │   │   ├── small-file-83.txt
    │   │   ├── small-file-84.txt
    │   │   ├── small-file-85.txt
    │   │   ├── small-file-86.txt
    │   │   ├── small-file-87.txt
    │   │   ├── small-file-88.txt
    │   │   ├── small-file-89.txt
    │   │   ├── small-file-9.txt
    │   │   ├── small-file-90.txt
    │   │   ├── small-file-91.txt
    │   │   ├── small-file-92.txt
    │   │   ├── small-file-93.txt
    │   │   ├── small-file-94.txt
    │   │   ├── small-file-95.txt
    │   │   ├── small-file-96.txt
    │   │   ├── small-file-97.txt
    │   │   ├── small-file-98.txt
    │   │   └── small-file-99.txt
    │   ├── run-benchmarks.sh
    │   └── startup-time-src/
    │       ├── Containerfile
    │       ├── mystery-file
    │       ├── small-CpuInfo-file.cpuinfo
    │       └── small-Markdown-file.md
    ├── examples/
    │   ├── bat-tabs.conf
    │   ├── bat-theme.conf
    │   ├── bat-windows.conf
    │   ├── bat.conf
    │   ├── cache
    │   ├── cache.c
    │   ├── cache_source/
    │   │   ├── syntaxes/
    │   │   │   └── c.sublime-syntax
    │   │   └── themes/
    │   │       └── example.tmTheme
    │   ├── control_characters.txt
    │   ├── empty.txt
    │   ├── empty_lines.txt
    │   ├── git/
    │   │   ├── .config/
    │   │   │   └── git/
    │   │   │       └── config
    │   │   └── .gitconfig
    │   ├── git-commit.man
    │   ├── long-single-line.txt
    │   ├── longline.json
    │   ├── map-syntax_case.Config
    │   ├── multiline.txt
    │   ├── nonprintable.txt
    │   ├── overstrike.txt
    │   ├── regression_tests/
    │   │   ├── first_line_fallback.invalid-syntax
    │   │   ├── issue_190.md
    │   │   ├── issue_2541.txt
    │   │   ├── issue_28.md
    │   │   ├── issue_314.hs
    │   │   ├── issue_914.rb
    │   │   ├── issue_915.vue
    │   │   └── issue_985.js
    │   ├── single-line.txt
    │   ├── sub_directory/
    │   │   └── dummy.txt
    │   ├── system_config/
    │   │   └── bat/
    │   │       └── config
    │   ├── tabs.txt
    │   ├── test.A—B가
    │   ├── test.binary
    │   ├── test.demo.foo.suffix
    │   ├── test.demo.suffix
    │   ├── test.json.suffix
    │   ├── test.json~
    │   ├── test.txt
    │   ├── test_BOM.txt
    │   ├── test_UTF-16BE-complicated.txt
    │   ├── test_UTF-16BE.txt
    │   ├── test_UTF-16LE-complicated.txt
    │   ├── test_UTF-16LE.txt
    │   ├── this-file-path-is-really-long-and-would-have-broken-the-layout-of-the-header.txt
    │   ├── unicode-wrap.txt
    │   └── word-wrap.txt
    ├── github-actions.rs
    ├── integration_tests.rs
    ├── mocked-pagers/
    │   ├── echo.bat
    │   ├── more
    │   ├── more.bat
    │   ├── most
    │   └── most.bat
    ├── no_duplicate_extensions.rs
    ├── scripts/
    │   ├── find-slow-to-highlight-files.py
    │   └── license-checks.sh
    ├── snapshot_tests.rs
    ├── snapshots/
    │   ├── generate_snapshots.py
    │   ├── output/
    │   │   ├── changes.snapshot.txt
    │   │   ├── changes_grid.snapshot.txt
    │   │   ├── changes_grid_header.snapshot.txt
    │   │   ├── changes_grid_header_numbers.snapshot.txt
    │   │   ├── changes_grid_header_numbers_rule.snapshot.txt
    │   │   ├── changes_grid_header_rule.snapshot.txt
    │   │   ├── changes_grid_numbers.snapshot.txt
    │   │   ├── changes_grid_numbers_rule.snapshot.txt
    │   │   ├── changes_grid_rule.snapshot.txt
    │   │   ├── changes_header.snapshot.txt
    │   │   ├── changes_header_numbers.snapshot.txt
    │   │   ├── changes_header_numbers_rule.snapshot.txt
    │   │   ├── changes_header_rule.snapshot.txt
    │   │   ├── changes_numbers.snapshot.txt
    │   │   ├── changes_numbers_rule.snapshot.txt
    │   │   ├── changes_rule.snapshot.txt
    │   │   ├── full.snapshot.txt
    │   │   ├── grid.snapshot.txt
    │   │   ├── grid_header.snapshot.txt
    │   │   ├── grid_header_numbers.snapshot.txt
    │   │   ├── grid_header_numbers_rule.snapshot.txt
    │   │   ├── grid_header_rule.snapshot.txt
    │   │   ├── grid_numbers.snapshot.txt
    │   │   ├── grid_numbers_rule.snapshot.txt
    │   │   ├── grid_rule.snapshot.txt
    │   │   ├── header.snapshot.txt
    │   │   ├── header_numbers.snapshot.txt
    │   │   ├── header_numbers_rule.snapshot.txt
    │   │   ├── header_rule.snapshot.txt
    │   │   ├── numbers.snapshot.txt
    │   │   ├── numbers_rule.snapshot.txt
    │   │   ├── plain.snapshot.txt
    │   │   └── rule.snapshot.txt
    │   ├── sample.modified.rs
    │   └── sample.rs
    ├── syntax-tests/
    │   ├── BatTestCustomAssets.sublime-syntax
    │   ├── compare_highlighted_versions.py
    │   ├── create_highlighted_versions.py
    │   ├── highlighted/
    │   │   ├── ARM Assembly/
    │   │   │   └── test.S
    │   │   ├── ASP/
    │   │   │   └── test.asp
    │   │   ├── AWK/
    │   │   │   └── quicksort.awk
    │   │   ├── ActionScript/
    │   │   │   └── test.as
    │   │   ├── Ada/
    │   │   │   ├── click.adb
    │   │   │   ├── click.ads
    │   │   │   └── click.gpr
    │   │   ├── Apache/
    │   │   │   └── httpd.conf
    │   │   ├── AppleScript/
    │   │   │   └── test.applescript
    │   │   ├── AsciiDoc/
    │   │   │   └── test.adoc
    │   │   ├── Assembly (x86_64)/
    │   │   │   └── test.nasm
    │   │   ├── Bash/
    │   │   │   ├── batgrep.sh
    │   │   │   ├── korn_shell.wrong_ext
    │   │   │   └── simple.sh
    │   │   ├── BatTestCustomAssets/
    │   │   │   └── NoColorsUnlessCustomAssetsAreUsed.battestcustomassets
    │   │   ├── Batch/
    │   │   │   └── build.bat
    │   │   ├── BibTeX/
    │   │   │   └── test.bib
    │   │   ├── C/
    │   │   │   └── test.c
    │   │   ├── C-Sharp/
    │   │   │   └── Stack.cs
    │   │   ├── CFML/
    │   │   │   └── test.cfml
    │   │   ├── CMake/
    │   │   │   └── CMakeLists.txt
    │   │   ├── COBOL/
    │   │   │   ├── payroll.cbl
    │   │   │   └── test.cbl
    │   │   ├── CSS/
    │   │   │   └── style.css
    │   │   ├── CSV/
    │   │   │   ├── comma-delimited.csv
    │   │   │   ├── comma_in_quotes.csv
    │   │   │   ├── decimals_comma_decimal_point_pipe_delimited.csv
    │   │   │   ├── decimals_comma_decimal_point_semicolon_delimited.csv
    │   │   │   └── simple.tsv
    │   │   ├── Cabal/
    │   │   │   └── semantic.cabal
    │   │   ├── Clojure/
    │   │   │   └── test.clj
    │   │   ├── CoffeeScript/
    │   │   │   └── coffeescript.coffee
    │   │   ├── Cpp/
    │   │   │   └── test.cpp
    │   │   ├── CpuInfo/
    │   │   │   └── test.cpuinfo
    │   │   ├── Crontab/
    │   │   │   └── crontab.tab
    │   │   ├── Crystal/
    │   │   │   └── test.cr
    │   │   ├── D/
    │   │   │   └── test.d
    │   │   ├── Dart/
    │   │   │   ├── inner_comment.dart
    │   │   │   └── test.dart
    │   │   ├── Diff/
    │   │   │   └── 82e7786e747b1fcfac1f963ae6415a22ec9caae1.diff
    │   │   ├── Dockerfile/
    │   │   │   └── Dockerfile
    │   │   ├── Elixir/
    │   │   │   └── command.ex
    │   │   ├── Elm/
    │   │   │   └── test.elm
    │   │   ├── Email/
    │   │   │   └── test.eml
    │   │   ├── Erlang/
    │   │   │   └── bat_erlang.erl
    │   │   ├── EtcGroup/
    │   │   │   └── test.group
    │   │   ├── F#/
    │   │   │   └── string.fs
    │   │   ├── Fish/
    │   │   │   └── test.fish
    │   │   ├── Fortran (Fixed Form)/
    │   │   │   └── quicksort_real_F77.F
    │   │   ├── Fortran (Modern)/
    │   │   │   └── test_savetxt.f90
    │   │   ├── Fortran Namelist/
    │   │   │   └── test.namelist
    │   │   ├── Fstab/
    │   │   │   └── fstab
    │   │   ├── GDScript/
    │   │   │   └── test.gd
    │   │   ├── GLSL/
    │   │   │   └── test.glsl
    │   │   ├── Git Attributes/
    │   │   │   └── example.gitattributes
    │   │   ├── Git Config/
    │   │   │   └── text.gitconfig
    │   │   ├── Git Ignore/
    │   │   │   └── test.gitignore
    │   │   ├── Go/
    │   │   │   ├── go.mod
    │   │   │   ├── go.sum
    │   │   │   └── main.go
    │   │   ├── GraphQL/
    │   │   │   └── test.graphql
    │   │   ├── Graphviz DOT/
    │   │   │   ├── test_digraph.dot
    │   │   │   └── test_graph.dot
    │   │   ├── Groff/
    │   │   │   └── rustdoc.1
    │   │   ├── Groovy/
    │   │   │   └── test.groovy
    │   │   ├── HTML/
    │   │   │   └── test.html
    │   │   ├── Haskell/
    │   │   │   └── test.hs
    │   │   ├── Hosts/
    │   │   │   └── hosts
    │   │   ├── INI/
    │   │   │   ├── test.inf
    │   │   │   └── test.ini
    │   │   ├── Idris2/
    │   │   │   └── test.idr
    │   │   ├── Ignored suffixes/
    │   │   │   ├── test.rs.bak
    │   │   │   ├── test.rs.dpkg-dist
    │   │   │   ├── test.rs.dpkg-old
    │   │   │   ├── test.rs.in
    │   │   │   ├── test.rs.in.in
    │   │   │   ├── test.rs.old
    │   │   │   ├── test.rs.orig
    │   │   │   ├── test.rs.orig~
    │   │   │   ├── test.rs.rpmnew
    │   │   │   ├── test.rs.rpmorig
    │   │   │   ├── test.rs.rpmsave
    │   │   │   ├── test.rs.ucf-dist
    │   │   │   ├── test.rs.ucf-new
    │   │   │   ├── test.rs.ucf-old
    │   │   │   ├── test.rs~
    │   │   │   └── test.unknown~
    │   │   ├── JQ/
    │   │   │   └── sample.jq
    │   │   ├── JSON/
    │   │   │   ├── example.ndjson
    │   │   │   └── test.json
    │   │   ├── Java/
    │   │   │   └── test.java
    │   │   ├── Java Server Page (JSP)/
    │   │   │   └── sessionDetail.jsp
    │   │   ├── JavaScript/
    │   │   │   └── test.js
    │   │   ├── Jinja2/
    │   │   │   └── template.jinja2
    │   │   ├── Julia/
    │   │   │   └── test.jl
    │   │   ├── Kotlin/
    │   │   │   └── test.kt
    │   │   ├── LLVM/
    │   │   │   └── test.ll
    │   │   ├── Lean/
    │   │   │   └── test.lean
    │   │   ├── Less/
    │   │   │   └── example.less
    │   │   ├── Lisp/
    │   │   │   └── utils.lisp
    │   │   ├── Literate Haskell/
    │   │   │   └── Main.lhs
    │   │   ├── LiveScript/
    │   │   │   └── livescript-demo.ls
    │   │   ├── Log/
    │   │   │   └── example.log
    │   │   ├── Lua/
    │   │   │   └── test.lua
    │   │   ├── MATLAB/
    │   │   │   └── test.matlab
    │   │   ├── Makefile/
    │   │   │   └── Makefile
    │   │   ├── Manpage/
    │   │   │   ├── bat-0.16.man
    │   │   │   ├── fzf-0.33.0.man
    │   │   │   ├── select-2.man
    │   │   │   ├── sway.5.man
    │   │   │   └── uwsm-0.26.3.man
    │   │   ├── Markdown/
    │   │   │   ├── example.md
    │   │   │   └── typescript.md
    │   │   ├── MediaWiki/
    │   │   │   └── test.mediawiki
    │   │   ├── MemInfo/
    │   │   │   └── test.meminfo
    │   │   ├── NAnt Build File/
    │   │   │   └── Default.build
    │   │   ├── NSE/
    │   │   │   └── test.nse
    │   │   ├── NSIS/
    │   │   │   └── test.nsi
    │   │   ├── Ninja/
    │   │   │   └── test.ninja
    │   │   ├── OCaml/
    │   │   │   └── syntax-test.ml
    │   │   ├── Objective-C/
    │   │   │   └── test.m
    │   │   ├── Objective-C++/
    │   │   │   └── test.mm
    │   │   ├── Odin/
    │   │   │   └── test.odin
    │   │   ├── PHP/
    │   │   │   └── test.php
    │   │   ├── Pascal/
    │   │   │   └── test.pas
    │   │   ├── Passwd/
    │   │   │   └── passwd
    │   │   ├── Perl/
    │   │   │   └── test.pl
    │   │   ├── Plaintext/
    │   │   │   └── plaintext.txt
    │   │   ├── PowerShell/
    │   │   │   └── test.ps1
    │   │   ├── Protocol Buffer/
    │   │   │   └── vyconf.proto
    │   │   ├── Puppet/
    │   │   │   └── manifest_large_exported_classes_node.pp
    │   │   ├── PureScript/
    │   │   │   └── test.purs
    │   │   ├── Python/
    │   │   │   └── battest.py
    │   │   ├── QML/
    │   │   │   └── BatSyntaxTest.qml
    │   │   ├── R/
    │   │   │   └── test.r
    │   │   ├── Racket/
    │   │   │   └── test.rkt
    │   │   ├── Rego/
    │   │   │   └── src_test.rego
    │   │   ├── Regular Expression/
    │   │   │   └── test.re
    │   │   ├── Requirements.txt/
    │   │   │   └── requirements.txt
    │   │   ├── Robot Framework/
    │   │   │   └── recipe141_aws_simple_storage_service.robot
    │   │   ├── Ruby/
    │   │   │   └── output.rb
    │   │   ├── Ruby Haml/
    │   │   │   └── test.html.haml
    │   │   ├── Ruby On Rails/
    │   │   │   └── test.rb
    │   │   ├── Rust/
    │   │   │   └── output.rs
    │   │   ├── SCSS/
    │   │   │   └── example.scss
    │   │   ├── SLS/
    │   │   │   └── test.sls
    │   │   ├── SML/
    │   │   │   └── sample.sml
    │   │   ├── SQL/
    │   │   │   └── ims.sql
    │   │   ├── SSH Config/
    │   │   │   └── ssh_config
    │   │   ├── SSHD Config/
    │   │   │   └── sshd_config
    │   │   ├── Sass/
    │   │   │   └── example.sass
    │   │   ├── Scala/
    │   │   │   └── ConcurrentEffectLaws.scala
    │   │   ├── Slim/
    │   │   │   └── test.slim
    │   │   ├── Solidity/
    │   │   │   └── ERC721.sol
    │   │   ├── Strace/
    │   │   │   └── ls.strace
    │   │   ├── Stylus/
    │   │   │   └── gradients.styl
    │   │   ├── Svelte/
    │   │   │   └── App.svelte
    │   │   ├── Swift/
    │   │   │   └── test.swift
    │   │   ├── Syslog/
    │   │   │   └── example.syslog
    │   │   ├── SystemVerilog/
    │   │   │   └── output.sv
    │   │   ├── TOML/
    │   │   │   └── Cargo.toml
    │   │   ├── Tcl/
    │   │   │   └── test.tcl
    │   │   ├── TeX/
    │   │   │   └── main.tex
    │   │   ├── Terraform/
    │   │   │   └── main.tf
    │   │   ├── Textile/
    │   │   │   └── test.textile
    │   │   ├── Todo.txt/
    │   │   │   └── todo.txt
    │   │   ├── TypeScript/
    │   │   │   ├── example.cts
    │   │   │   └── example.ts
    │   │   ├── TypeScriptReact/
    │   │   │   └── app.tsx
    │   │   ├── Typst/
    │   │   │   └── test.typ
    │   │   ├── VHDL/
    │   │   │   └── test.vhdl
    │   │   ├── Verilog/
    │   │   │   └── div_pipelined.v
    │   │   ├── VimHelp/
    │   │   │   └── helphelp.txt
    │   │   ├── VimL/
    │   │   │   └── source.vim
    │   │   ├── Vue/
    │   │   │   └── example.vue
    │   │   ├── Vyper/
    │   │   │   └── crowdsale.vy
    │   │   ├── WGSL/
    │   │   │   └── test.wgsl
    │   │   ├── XAML/
    │   │   │   └── ItemPage.xaml
    │   │   ├── XML/
    │   │   │   ├── Directory.Build.props
    │   │   │   ├── console.csproj
    │   │   │   ├── example.xml
    │   │   │   └── projectname.targets
    │   │   ├── YAML/
    │   │   │   └── example.yaml
    │   │   ├── Zig/
    │   │   │   └── example.zig
    │   │   ├── cmd-help/
    │   │   │   └── test.cmd-help
    │   │   ├── dash/
    │   │   │   └── shfm
    │   │   ├── debsources/
    │   │   │   └── sources.list
    │   │   ├── fish_history/
    │   │   │   └── fish_history
    │   │   ├── gnuplot/
    │   │   │   └── test.gp
    │   │   ├── http-request-response/
    │   │   │   └── example.http
    │   │   ├── jsonnet/
    │   │   │   └── stdlib.jsonnet
    │   │   ├── nginx/
    │   │   │   └── nginx.conf
    │   │   ├── nim/
    │   │   │   ├── main.nim
    │   │   │   └── test.nimble
    │   │   ├── nix/
    │   │   │   └── test.nix
    │   │   ├── orgmode/
    │   │   │   └── test.org
    │   │   ├── reStructuredText/
    │   │   │   └── reference.rst
    │   │   ├── resolv.conf/
    │   │   │   └── resolv.conf
    │   │   └── varlink/
    │   │       └── org.varlink.certification.varlink
    │   ├── regression_test.sh
    │   ├── source/
    │   │   ├── ARM Assembly/
    │   │   │   └── test.S
    │   │   ├── ASP/
    │   │   │   └── test.asp
    │   │   ├── AWK/
    │   │   │   └── quicksort.awk
    │   │   ├── ActionScript/
    │   │   │   └── test.as
    │   │   ├── Ada/
    │   │   │   ├── LICENSE.md
    │   │   │   ├── click.adb
    │   │   │   ├── click.ads
    │   │   │   └── click.gpr
    │   │   ├── Apache/
    │   │   │   └── httpd.conf
    │   │   ├── AppleScript/
    │   │   │   └── test.applescript
    │   │   ├── AsciiDoc/
    │   │   │   └── test.adoc
    │   │   ├── Assembly (x86_64)/
    │   │   │   └── test.nasm
    │   │   ├── Bash/
    │   │   │   ├── batgrep.sh
    │   │   │   ├── korn_shell.wrong_ext
    │   │   │   └── simple.sh
    │   │   ├── BatTestCustomAssets/
    │   │   │   └── NoColorsUnlessCustomAssetsAreUsed.battestcustomassets
    │   │   ├── Batch/
    │   │   │   ├── LICENSE.md
    │   │   │   └── build.bat
    │   │   ├── BibTeX/
    │   │   │   └── test.bib
    │   │   ├── C/
    │   │   │   └── test.c
    │   │   ├── C-Sharp/
    │   │   │   └── Stack.cs
    │   │   ├── CFML/
    │   │   │   └── test.cfml
    │   │   ├── CMake/
    │   │   │   └── CMakeLists.txt
    │   │   ├── COBOL/
    │   │   │   ├── payroll.cbl
    │   │   │   └── test.cbl
    │   │   ├── CSS/
    │   │   │   └── style.css
    │   │   ├── CSV/
    │   │   │   ├── LICENSE.md
    │   │   │   ├── comma-delimited.csv
    │   │   │   ├── comma_in_quotes.csv
    │   │   │   ├── decimals_comma_decimal_point_pipe_delimited.csv
    │   │   │   ├── decimals_comma_decimal_point_semicolon_delimited.csv
    │   │   │   └── simple.tsv
    │   │   ├── Cabal/
    │   │   │   ├── LICENSE.md
    │   │   │   └── semantic.cabal
    │   │   ├── Clojure/
    │   │   │   └── test.clj
    │   │   ├── CoffeeScript/
    │   │   │   ├── LICENSE.md
    │   │   │   └── coffeescript.coffee
    │   │   ├── Cpp/
    │   │   │   └── test.cpp
    │   │   ├── CpuInfo/
    │   │   │   └── test.cpuinfo
    │   │   ├── Crontab/
    │   │   │   └── crontab.tab
    │   │   ├── Crystal/
    │   │   │   └── test.cr
    │   │   ├── D/
    │   │   │   └── test.d
    │   │   ├── Dart/
    │   │   │   ├── inner_comment.dart
    │   │   │   └── test.dart
    │   │   ├── Diff/
    │   │   │   └── 82e7786e747b1fcfac1f963ae6415a22ec9caae1.diff
    │   │   ├── Dockerfile/
    │   │   │   └── Dockerfile
    │   │   ├── DotENV/
    │   │   │   └── LICENSE.md
    │   │   ├── Elixir/
    │   │   │   ├── LICENSE.md
    │   │   │   └── command.ex
    │   │   ├── Elm/
    │   │   │   ├── LICENSE.md
    │   │   │   └── test.elm
    │   │   ├── Email/
    │   │   │   └── test.eml
    │   │   ├── Erlang/
    │   │   │   └── bat_erlang.erl
    │   │   ├── EtcGroup/
    │   │   │   └── test.group
    │   │   ├── F#/
    │   │   │   ├── LICENSE.md
    │   │   │   └── string.fs
    │   │   ├── Fish/
    │   │   │   └── test.fish
    │   │   ├── Fortran (Fixed Form)/
    │   │   │   ├── LICENSE.md
    │   │   │   └── quicksort_real_F77.F
    │   │   ├── Fortran (Modern)/
    │   │   │   ├── LICENSE.md
    │   │   │   └── test_savetxt.f90
    │   │   ├── Fortran Namelist/
    │   │   │   └── test.namelist
    │   │   ├── Fstab/
    │   │   │   └── fstab
    │   │   ├── GDScript/
    │   │   │   └── test.gd
    │   │   ├── GLSL/
    │   │   │   └── test.glsl
    │   │   ├── Git Attributes/
    │   │   │   └── example.gitattributes
    │   │   ├── Git Config/
    │   │   │   ├── LICENSE.md
    │   │   │   └── text.gitconfig
    │   │   ├── Git Ignore/
    │   │   │   ├── LICENSE.md
    │   │   │   └── test.gitignore
    │   │   ├── Go/
    │   │   │   ├── LICENSE.md
    │   │   │   ├── go.mod
    │   │   │   ├── go.sum
    │   │   │   └── main.go
    │   │   ├── GraphQL/
    │   │   │   └── test.graphql
    │   │   ├── Graphviz DOT/
    │   │   │   ├── LICENSE.md
    │   │   │   ├── test_digraph.dot
    │   │   │   └── test_graph.dot
    │   │   ├── Groff/
    │   │   │   ├── LICENSE.md
    │   │   │   └── rustdoc.1
    │   │   ├── Groovy/
    │   │   │   └── test.groovy
    │   │   ├── HTML/
    │   │   │   └── test.html
    │   │   ├── Haskell/
    │   │   │   └── test.hs
    │   │   ├── Hosts/
    │   │   │   └── hosts
    │   │   ├── INI/
    │   │   │   ├── test.inf
    │   │   │   └── test.ini
    │   │   ├── Idris2/
    │   │   │   ├── LICENSE.md
    │   │   │   └── test.idr
    │   │   ├── Ignored suffixes/
    │   │   │   ├── test.rs.bak
    │   │   │   ├── test.rs.dpkg-dist
    │   │   │   ├── test.rs.dpkg-old
    │   │   │   ├── test.rs.in
    │   │   │   ├── test.rs.in.in
    │   │   │   ├── test.rs.old
    │   │   │   ├── test.rs.orig
    │   │   │   ├── test.rs.orig~
    │   │   │   ├── test.rs.rpmnew
    │   │   │   ├── test.rs.rpmorig
    │   │   │   ├── test.rs.rpmsave
    │   │   │   ├── test.rs.ucf-dist
    │   │   │   ├── test.rs.ucf-new
    │   │   │   ├── test.rs.ucf-old
    │   │   │   ├── test.rs~
    │   │   │   └── test.unknown~
    │   │   ├── JQ/
    │   │   │   ├── LICENSE.md
    │   │   │   └── sample.jq
    │   │   ├── JSON/
    │   │   │   ├── example.ndjson
    │   │   │   └── test.json
    │   │   ├── Java/
    │   │   │   └── test.java
    │   │   ├── Java Server Page (JSP)/
    │   │   │   ├── LICENSE.md
    │   │   │   ├── NOTICE
    │   │   │   └── sessionDetail.jsp
    │   │   ├── JavaScript/
    │   │   │   └── test.js
    │   │   ├── Jinja2/
    │   │   │   └── template.jinja2
    │   │   ├── Julia/
    │   │   │   └── test.jl
    │   │   ├── Kotlin/
    │   │   │   └── test.kt
    │   │   ├── LLVM/
    │   │   │   └── test.ll
    │   │   ├── Lean/
    │   │   │   ├── LICENSE.md
    │   │   │   └── test.lean
    │   │   ├── Less/
    │   │   │   └── example.less
    │   │   ├── Lisp/
    │   │   │   ├── LICENSE.md
    │   │   │   └── utils.lisp
    │   │   ├── Literate Haskell/
    │   │   │   └── Main.lhs
    │   │   ├── LiveScript/
    │   │   │   ├── LICENSE.md
    │   │   │   └── livescript-demo.ls
    │   │   ├── Log/
    │   │   │   └── example.log
    │   │   ├── Lua/
    │   │   │   └── test.lua
    │   │   ├── MATLAB/
    │   │   │   ├── LICENSE.md
    │   │   │   └── test.matlab
    │   │   ├── Makefile/
    │   │   │   ├── LICENSE.md
    │   │   │   └── Makefile
    │   │   ├── Manpage/
    │   │   │   ├── bat-0.16.man
    │   │   │   ├── fzf-0.33.0.man
    │   │   │   ├── select-2.man
    │   │   │   ├── sway.5.man
    │   │   │   └── uwsm-0.26.3.man
    │   │   ├── Markdown/
    │   │   │   ├── example.md
    │   │   │   └── typescript.md
    │   │   ├── MediaWiki/
    │   │   │   └── test.mediawiki
    │   │   ├── MemInfo/
    │   │   │   └── test.meminfo
    │   │   ├── NAnt Build File/
    │   │   │   ├── Default.build
    │   │   │   └── LICENSE.md
    │   │   ├── NSE/
    │   │   │   └── test.nse
    │   │   ├── NSIS/
    │   │   │   └── test.nsi
    │   │   ├── Ninja/
    │   │   │   ├── LICENSE.md
    │   │   │   └── test.ninja
    │   │   ├── OCaml/
    │   │   │   └── syntax-test.ml
    │   │   ├── Objective-C/
    │   │   │   └── test.m
    │   │   ├── Objective-C++/
    │   │   │   └── test.mm
    │   │   ├── Odin/
    │   │   │   └── test.odin
    │   │   ├── PHP/
    │   │   │   └── test.php
    │   │   ├── Pascal/
    │   │   │   └── test.pas
    │   │   ├── Passwd/
    │   │   │   └── passwd
    │   │   ├── Perl/
    │   │   │   └── test.pl
    │   │   ├── Plaintext/
    │   │   │   ├── README.md
    │   │   │   ├── bat_options
    │   │   │   └── plaintext.txt
    │   │   ├── PowerShell/
    │   │   │   └── test.ps1
    │   │   ├── Protocol Buffer/
    │   │   │   └── vyconf.proto
    │   │   ├── Puppet/
    │   │   │   ├── LICENSE.md
    │   │   │   └── manifest_large_exported_classes_node.pp
    │   │   ├── PureScript/
    │   │   │   └── test.purs
    │   │   ├── Python/
    │   │   │   └── battest.py
    │   │   ├── QML/
    │   │   │   └── BatSyntaxTest.qml
    │   │   ├── R/
    │   │   │   └── test.r
    │   │   ├── Racket/
    │   │   │   └── test.rkt
    │   │   ├── Rego/
    │   │   │   ├── LICENSE.md
    │   │   │   └── src_test.rego
    │   │   ├── Regular Expression/
    │   │   │   └── test.re
    │   │   ├── Requirements.txt/
    │   │   │   └── requirements.txt
    │   │   ├── Robot Framework/
    │   │   │   ├── LICENSE.md
    │   │   │   └── recipe141_aws_simple_storage_service.robot
    │   │   ├── Ruby/
    │   │   │   └── output.rb
    │   │   ├── Ruby Haml/
    │   │   │   └── test.html.haml
    │   │   ├── Ruby On Rails/
    │   │   │   └── test.rb
    │   │   ├── Rust/
    │   │   │   └── output.rs
    │   │   ├── SCSS/
    │   │   │   └── example.scss
    │   │   ├── SLS/
    │   │   │   └── test.sls
    │   │   ├── SML/
    │   │   │   └── sample.sml
    │   │   ├── SQL/
    │   │   │   └── ims.sql
    │   │   ├── SSH Config/
    │   │   │   └── ssh_config
    │   │   ├── SSHD Config/
    │   │   │   └── sshd_config
    │   │   ├── Sass/
    │   │   │   └── example.sass
    │   │   ├── Scala/
    │   │   │   ├── ConcurrentEffectLaws.scala
    │   │   │   └── LICENSE.md
    │   │   ├── Slim/
    │   │   │   └── test.slim
    │   │   ├── Solidity/
    │   │   │   ├── ERC721.sol
    │   │   │   └── LICENSE.md
    │   │   ├── Strace/
    │   │   │   └── ls.strace
    │   │   ├── Stylus/
    │   │   │   ├── LICENSE.md
    │   │   │   └── gradients.styl
    │   │   ├── Svelte/
    │   │   │   ├── App.svelte
    │   │   │   └── LICENSE.md
    │   │   ├── Swift/
    │   │   │   └── test.swift
    │   │   ├── Syslog/
    │   │   │   └── example.syslog
    │   │   ├── SystemVerilog/
    │   │   │   └── output.sv
    │   │   ├── TOML/
    │   │   │   └── Cargo.toml
    │   │   ├── Tcl/
    │   │   │   └── test.tcl
    │   │   ├── TeX/
    │   │   │   └── main.tex
    │   │   ├── Terraform/
    │   │   │   └── main.tf
    │   │   ├── Textile/
    │   │   │   └── test.textile
    │   │   ├── Todo.txt/
    │   │   │   └── todo.txt
    │   │   ├── TypeScript/
    │   │   │   ├── LICENSE.md
    │   │   │   ├── example.cts
    │   │   │   └── example.ts
    │   │   ├── TypeScriptReact/
    │   │   │   ├── LICENSE.md
    │   │   │   └── app.tsx
    │   │   ├── Typst/
    │   │   │   └── test.typ
    │   │   ├── VHDL/
    │   │   │   └── test.vhdl
    │   │   ├── Verilog/
    │   │   │   ├── LICENSE.md
    │   │   │   └── div_pipelined.v
    │   │   ├── VimHelp/
    │   │   │   └── helphelp.txt
    │   │   ├── VimL/
    │   │   │   └── source.vim
    │   │   ├── Vue/
    │   │   │   └── example.vue
    │   │   ├── Vyper/
    │   │   │   ├── LICENSE.md
    │   │   │   └── crowdsale.vy
    │   │   ├── WGSL/
    │   │   │   ├── LICENSE.md
    │   │   │   └── test.wgsl
    │   │   ├── XAML/
    │   │   │   ├── ItemPage.xaml
    │   │   │   └── LICENSE.md
    │   │   ├── XML/
    │   │   │   ├── Directory.Build.props
    │   │   │   ├── console.csproj
    │   │   │   ├── example.xml
    │   │   │   └── projectname.targets
    │   │   ├── YAML/
    │   │   │   └── example.yaml
    │   │   ├── Zig/
    │   │   │   └── example.zig
    │   │   ├── cmd-help/
    │   │   │   └── test.cmd-help
    │   │   ├── dash/
    │   │   │   ├── LICENSE.md
    │   │   │   └── shfm
    │   │   ├── debsources/
    │   │   │   └── sources.list
    │   │   ├── fish_history/
    │   │   │   └── fish_history
    │   │   ├── gnuplot/
    │   │   │   └── test.gp
    │   │   ├── http-request-response/
    │   │   │   └── example.http
    │   │   ├── jsonnet/
    │   │   │   ├── LICENSE.md
    │   │   │   └── stdlib.jsonnet
    │   │   ├── nginx/
    │   │   │   └── nginx.conf
    │   │   ├── nim/
    │   │   │   ├── main.nim
    │   │   │   └── test.nimble
    │   │   ├── nix/
    │   │   │   └── test.nix
    │   │   ├── orgmode/
    │   │   │   └── test.org
    │   │   ├── reStructuredText/
    │   │   │   └── reference.rst
    │   │   ├── resolv.conf/
    │   │   │   └── resolv.conf
    │   │   └── varlink/
    │   │       ├── LICENSE.md
    │   │       └── org.varlink.certification.varlink
    │   ├── test_custom_assets.sh
    │   └── update.sh
    ├── system_wide_config.rs
    ├── test_pretty_printer.rs
    ├── tester/
    │   └── mod.rs
    └── utils/
        ├── command.rs
        ├── mocked_pagers.rs
        └── mod.rs
Download .txt
SYMBOL INDEX (1774 symbols across 85 files)

FILE: assets/theme_preview.rs
  function print_square (line 2) | fn print_square(num: f64) {

FILE: build/application.rs
  function gen_man_and_comp (line 6) | pub fn gen_man_and_comp() -> anyhow::Result<()> {

FILE: build/main.rs
  function main (line 6) | fn main() -> anyhow::Result<()> {

FILE: build/syntax_mapping.rs
  type MappingTarget (line 24) | pub enum MappingTarget {
  type Err (line 30) | type Err = Infallible;
  method from_str (line 31) | fn from_str(s: &str) -> Result<Self, Self::Err> {
  method to_tokens (line 40) | fn to_tokens(&self, tokens: &mut TokenStream) {
  type Matcher (line 54) | struct Matcher(Vec<MatcherSegment>);
  type Err (line 70) | type Err = anyhow::Error;
  method from_str (line 71) | fn from_str(s: &str) -> Result<Self, Self::Err> {
  method to_tokens (line 123) | fn to_tokens(&self, tokens: &mut TokenStream) {
  type MatcherSegment (line 140) | enum MatcherSegment {
    method is_text (line 155) | fn is_text(&self) -> bool {
    method is_env (line 158) | fn is_env(&self) -> bool {
    method text (line 161) | fn text(&self) -> Option<&str> {
    method env (line 167) | fn env(&self) -> Option<&str> {
  method to_tokens (line 145) | fn to_tokens(&self, tokens: &mut TokenStream) {
  type MappingDefModel (line 177) | struct MappingDefModel {
    method into_mapping_list (line 181) | fn into_mapping_list(self) -> MappingList {
  type MappingList (line 197) | struct MappingList(Vec<(Matcher, MappingTarget)>);
  method to_tokens (line 199) | fn to_tokens(&self, tokens: &mut TokenStream) {
  function get_def_paths (line 216) | fn get_def_paths() -> anyhow::Result<Vec<PathBuf>> {
  function read_all_mappings (line 265) | fn read_all_mappings() -> anyhow::Result<MappingList> {
  function build_static_mappings (line 287) | pub fn build_static_mappings() -> anyhow::Result<()> {

FILE: build/util.rs
  function render_template (line 6) | pub fn render_template(

FILE: examples/advanced.rs
  function main (line 4) | fn main() {

FILE: examples/buffer.rs
  function main (line 5) | fn main() {

FILE: examples/cat.rs
  function main (line 5) | fn main() {

FILE: examples/inputs.rs
  function main (line 5) | fn main() {

FILE: examples/list_syntaxes_and_themes.rs
  function main (line 4) | fn main() {

FILE: examples/simple.rs
  function main (line 4) | fn main() {

FILE: examples/yaml.rs
  type Person (line 6) | struct Person {
  function main (line 13) | fn main() {

FILE: src/assets.rs
  type HighlightingAssets (line 33) | pub struct HighlightingAssets {
    method new (line 64) | fn new(serialized_syntax_set: SerializedSyntaxSet, theme_set: LazyThem...
    method from_cache (line 73) | pub fn from_cache(cache_path: &Path) -> Result<Self> {
    method from_binary (line 80) | pub fn from_binary() -> Self {
    method set_fallback_theme (line 87) | pub fn set_fallback_theme(&mut self, theme: &'static str) {
    method get_syntax_set (line 92) | pub fn get_syntax_set(&self) -> Result<&SyntaxSet> {
    method syntaxes (line 99) | pub fn syntaxes(&self) -> &[SyntaxReference] {
    method get_syntaxes (line 105) | pub fn get_syntaxes(&self) -> Result<&[SyntaxReference]> {
    method get_theme_set (line 109) | fn get_theme_set(&self) -> &LazyThemeSet {
    method themes (line 113) | pub fn themes(&self) -> impl Iterator<Item = &str> {
    method syntax_for_file_name (line 119) | pub fn syntax_for_file_name(
    method get_syntax_for_path (line 151) | pub fn get_syntax_for_path(
    method get_theme (line 189) | pub fn get_theme(&self, theme: &str) -> &Theme {
    method get_syntax (line 210) | pub(crate) fn get_syntax(
    method find_syntax_by_name (line 274) | pub(crate) fn find_syntax_by_name(
    method find_syntax_by_extension (line 284) | fn find_syntax_by_extension(
    method find_syntax_by_hidden_file_name (line 295) | fn find_syntax_by_hidden_file_name(
    method find_syntax_by_token (line 313) | fn find_syntax_by_token(&self, token: &str) -> Result<Option<SyntaxRef...
    method get_syntax_for_file_name (line 320) | fn get_syntax_for_file_name(
    method get_syntax_for_file_extension (line 339) | fn get_syntax_for_file_extension(
    method get_first_line_syntax (line 355) | fn get_first_line_syntax(
  type SyntaxReferenceInSet (line 42) | pub struct SyntaxReferenceInSet<'a> {
  constant COMPRESS_SYNTAXES (line 49) | pub(crate) const COMPRESS_SYNTAXES: bool = false;
  constant COMPRESS_THEMES (line 54) | pub(crate) const COMPRESS_THEMES: bool = false;
  constant COMPRESS_LAZY_THEMES (line 58) | pub(crate) const COMPRESS_LAZY_THEMES: bool = true;
  constant COMPRESS_ACKNOWLEDGEMENTS (line 61) | pub(crate) const COMPRESS_ACKNOWLEDGEMENTS: bool = true;
  function get_serialized_integrated_syntaxset (line 371) | pub(crate) fn get_serialized_integrated_syntaxset() -> &'static [u8] {
  function get_integrated_themeset (line 375) | pub(crate) fn get_integrated_themeset() -> LazyThemeSet {
  function get_acknowledgements (line 379) | pub fn get_acknowledgements() -> String {
  function from_binary (line 386) | pub(crate) fn from_binary<T: serde::de::DeserializeOwned>(v: &[u8], comp...
  function asset_from_contents (line 391) | fn asset_from_contents<T: serde::de::DeserializeOwned>(
  function asset_from_cache (line 404) | fn asset_from_cache<T: serde::de::DeserializeOwned>(
  type SyntaxDetectionTest (line 431) | struct SyntaxDetectionTest<'a> {
  function new (line 438) | fn new() -> Self {
  function get_syntax_name (line 446) | fn get_syntax_name(
  function syntax_for_real_file_with_content_os (line 459) | fn syntax_for_real_file_with_content_os(
  function syntax_for_file_with_content_os (line 477) | fn syntax_for_file_with_content_os(&self, file_name: &OsStr, first_line:...
  function syntax_for_file_os (line 488) | fn syntax_for_file_os(&self, file_name: &OsStr) -> String {
  function syntax_for_file_with_content (line 492) | fn syntax_for_file_with_content(&self, file_name: &str, first_line: &str...
  function syntax_for_file (line 496) | fn syntax_for_file(&self, file_name: &str) -> String {
  function syntax_for_stdin_with_content (line 500) | fn syntax_for_stdin_with_content(&self, file_name: &str, content: &[u8])...
  function syntax_is_same_for_inputkinds (line 507) | fn syntax_is_same_for_inputkinds(&self, file_name: &str, content: &str) ...
  function syntax_detection_basic (line 524) | fn syntax_detection_basic() {
  function syntax_detection_invalid_utf8 (line 540) | fn syntax_detection_invalid_utf8() {
  function syntax_detection_same_for_inputkinds (line 552) | fn syntax_detection_same_for_inputkinds() {
  function syntax_detection_well_defined_mapping_for_duplicate_extensions (line 573) | fn syntax_detection_well_defined_mapping_for_duplicate_extensions() {
  function syntax_detection_first_line (line 584) | fn syntax_detection_first_line() {
  function syntax_detection_first_line_with_utf8_bom (line 602) | fn syntax_detection_first_line_with_utf8_bom() {
  function syntax_detection_with_custom_mapping (line 637) | fn syntax_detection_with_custom_mapping() {
  function syntax_detection_with_extension_mapping_to_unknown (line 648) | fn syntax_detection_with_extension_mapping_to_unknown() {
  function syntax_detection_is_case_insensitive (line 684) | fn syntax_detection_is_case_insensitive() {
  function syntax_detection_stdin_filename (line 704) | fn syntax_detection_stdin_filename() {
  function syntax_detection_hidden_file_extensions (line 718) | fn syntax_detection_hidden_file_extensions() {
  function syntax_detection_for_symlinked_file (line 767) | fn syntax_detection_for_symlinked_file() {
  function syntax_detection_for_symlinked_file_by_target_extension (line 793) | fn syntax_detection_for_symlinked_file_by_target_extension() {

FILE: src/assets/assets_metadata.rs
  type AssetsMetadata (line 11) | pub struct AssetsMetadata {
    method new (line 20) | pub(crate) fn new(current_version: &str) -> AssetsMetadata {
    method save_to_folder (line 28) | pub(crate) fn save_to_folder(&self, path: &Path) -> Result<()> {
    method try_load_from_folder (line 35) | fn try_load_from_folder(path: &Path) -> Result<Self> {
    method load_from_folder (line 52) | pub fn load_from_folder(path: &Path) -> Result<Option<Self>> {
    method is_compatible_with (line 67) | pub fn is_compatible_with(&self, current_version: &str) -> bool {
  constant FILENAME (line 16) | const FILENAME: &str = "metadata.yaml";

FILE: src/assets/build_assets.rs
  function build (line 12) | pub fn build(
  function build_theme_set (line 38) | fn build_theme_set(source_dir: &Path, include_integrated_assets: bool) -...
  function build_syntax_set_builder (line 64) | fn build_syntax_set_builder(
  function print_unlinked_contexts (line 90) | fn print_unlinked_contexts(syntax_set: &SyntaxSet) {
  function write_assets (line 100) | fn write_assets(
  function asset_to_contents (line 140) | pub(crate) fn asset_to_contents<T: serde::Serialize>(
  function asset_to_cache (line 158) | fn asset_to_cache<T: serde::Serialize>(

FILE: src/assets/build_assets/acknowledgements.rs
  type PathAndStem (line 9) | struct PathAndStem {
  function build_acknowledgements (line 18) | pub fn build_acknowledgements(
  function to_path_and_stem (line 47) | fn to_path_and_stem(source_dir: &Path, entry: DirEntry) -> Option<PathAn...
  function handle_file (line 60) | fn handle_file(path_and_stem: &PathAndStem) -> Result<Option<String>> {
  function handle_notice (line 70) | fn handle_notice(path: &Path) -> Result<Option<String>> {
  function handle_license (line 75) | fn handle_license(path: &Path) -> Result<Option<String>> {
  function include_license_in_acknowledgments (line 87) | fn include_license_in_acknowledgments(license_text: &str) -> bool {
  function license_not_needed_in_acknowledgements (line 106) | fn license_not_needed_in_acknowledgements(license_text: &str) -> bool {
  function license_contains_marker (line 121) | fn license_contains_marker(license_text: &str, markers: &[&str]) -> bool {
  function append_to_acknowledgements (line 126) | fn append_to_acknowledgements(
  function normalize_license_text (line 150) | fn normalize_license_text(license_text: &str) -> String {
  function test_normalize_license_text (line 166) | fn test_normalize_license_text() {
  function test_normalize_license_text_with_windows_line_endings (line 178) | fn test_normalize_license_text_with_windows_line_endings() {
  function test_append_to_acknowledgements_adds_newline_if_missing (line 190) | fn test_append_to_acknowledgements_adds_newline_if_missing() {

FILE: src/assets/lazy_theme_set.rs
  type LazyThemeSet (line 15) | pub struct LazyThemeSet {
    method get (line 32) | pub fn get(&self, name: &str) -> Option<&Theme> {
    method themes (line 42) | pub fn themes(&self) -> impl Iterator<Item = &str> {
    type Error (line 77) | type Error = Error;
    method try_from (line 83) | fn try_from(theme_set: ThemeSet) -> Result<Self> {
  type LazyTheme (line 23) | struct LazyTheme {
    method deserialize (line 48) | fn deserialize(&self) -> Result<Theme> {
  type Error (line 58) | type Error = Error;
  method try_from (line 64) | fn try_from(lazy_theme_set: LazyThemeSet) -> Result<Self> {

FILE: src/assets/serialized_syntax_set.rs
  type SerializedSyntaxSet (line 10) | pub enum SerializedSyntaxSet {
    method deserialize (line 19) | pub fn deserialize(&self) -> Result<SyntaxSet> {

FILE: src/bin/bat/app.rs
  function is_truecolor_terminal (line 31) | fn is_truecolor_terminal() -> bool {
  function env_no_color (line 37) | pub fn env_no_color() -> bool {
  type HelpType (line 41) | enum HelpType {
  type App (line 46) | pub struct App {
    method new (line 56) | pub fn new() -> Result<Self> {
    method display_help (line 136) | fn display_help(
    method build_args_without_config (line 191) | fn build_args_without_config() -> Vec<std::ffi::OsString> {
    method matches (line 204) | fn matches(interactive_output: bool) -> Result<ArgMatches> {
    method config (line 275) | pub fn config(&self, inputs: &[Input]) -> Result<Config<'_>> {
    method inputs (line 527) | pub fn inputs(&self) -> Result<Vec<Input<'_>>> {
    method forced_style_components (line 573) | fn forced_style_components(&self) -> Option<StyleComponents> {
    method style_components (line 600) | fn style_components(&self) -> Result<StyleComponents> {
    method theme_options (line 638) | fn theme_options(&self) -> ThemeOptions {
    method theme_options_from_matches (line 642) | fn theme_options_from_matches(matches: &ArgMatches) -> ThemeOptions {

FILE: src/bin/bat/assets.rs
  function clear_assets (line 12) | pub fn clear_assets(cache_dir: &Path) {
  function assets_from_cache_or_binary (line 18) | pub fn assets_from_cache_or_binary(
  function clear_asset (line 46) | fn clear_asset(path: PathBuf, description: &str) {

FILE: src/bin/bat/clap_app.rs
  function build_app (line 21) | pub fn build_app(interactive_output: bool) -> Command {
  function verify_app (line 779) | fn verify_app() {

FILE: src/bin/bat/completions.rs
  constant BASH_COMPLETION (line 3) | pub const BASH_COMPLETION: &str = include_str!(env!("BAT_GENERATED_COMPL...
  constant FISH_COMPLETION (line 4) | pub const FISH_COMPLETION: &str = include_str!(env!("BAT_GENERATED_COMPL...
  constant PS1_COMPLETION (line 5) | pub const PS1_COMPLETION: &str = include_str!(env!("BAT_GENERATED_COMPLE...
  constant ZSH_COMPLETION (line 6) | pub const ZSH_COMPLETION: &str = include_str!(env!("BAT_GENERATED_COMPLE...

FILE: src/bin/bat/config.rs
  constant DEFAULT_SYSTEM_CONFIG_PREFIX (line 10) | const DEFAULT_SYSTEM_CONFIG_PREFIX: &str = "/etc";
  constant DEFAULT_SYSTEM_CONFIG_PREFIX (line 13) | const DEFAULT_SYSTEM_CONFIG_PREFIX: &str = "C:\\ProgramData";
  function system_config_file (line 15) | pub fn system_config_file() -> PathBuf {
  function config_file (line 25) | pub fn config_file() -> PathBuf {
  function generate_config_file (line 32) | pub fn generate_config_file() -> bat::error::Result<()> {
  function get_args_from_config_file (line 104) | pub fn get_args_from_config_file() -> Result<Vec<OsString>, shell_words:...
  function same_file (line 126) | fn same_file(a: &Path, b: &Path) -> bool {
  function get_args_from_env_opts_var (line 133) | pub fn get_args_from_env_opts_var() -> Option<Result<Vec<OsString>, shel...
  function get_args_from_str (line 137) | fn get_args_from_str(content: &str) -> Result<Vec<OsString>, shell_words...
  function get_args_from_env_vars (line 153) | pub fn get_args_from_env_vars() -> Vec<OsString> {
  function empty (line 174) | fn empty() {
  function single (line 180) | fn single() {
  function multiple (line 185) | fn multiple() {
  function quotes (line 193) | fn quotes() {
  function multi_line (line 201) | fn multi_line() {
  function comments (line 215) | fn comments() {
  function same_file_identical_paths (line 233) | fn same_file_identical_paths() {
  function same_file_different_paths (line 241) | fn same_file_different_paths() {
  function same_file_nonexistent (line 251) | fn same_file_nonexistent() {
  function same_file_via_symlink (line 260) | fn same_file_via_symlink() {

FILE: src/bin/bat/directories.rs
  type BatProjectDirs (line 9) | pub struct BatProjectDirs {
    method new (line 15) | fn new() -> Option<BatProjectDirs> {
    method cache_dir (line 41) | pub fn cache_dir(&self) -> &Path {
    method config_dir (line 45) | pub fn config_dir(&self) -> &Path {

FILE: src/bin/bat/input.rs
  function new_file_input (line 4) | pub fn new_file_input<'a>(file: &'a Path, name: Option<&'a Path>) -> Inp...
  function new_stdin_input (line 8) | pub fn new_stdin_input(name: Option<&Path>) -> Input<'_> {
  function named (line 12) | fn named<'a>(input: Input<'a>, name: Option<&Path>) -> Input<'a> {

FILE: src/bin/bat/main.rs
  constant THEME_PREVIEW_DATA (line 46) | const THEME_PREVIEW_DATA: &[u8] = include_bytes!("../../../assets/theme_...
  function build_assets (line 49) | fn build_assets(matches: &clap::ArgMatches, config_dir: &Path, cache_dir...
  function run_cache_subcommand (line 64) | fn run_cache_subcommand(
  function get_syntax_mapping_to_paths (line 86) | fn get_syntax_mapping_to_paths<'r, 't, I>(mappings: I) -> HashMap<&'t st...
  function get_languages (line 101) | pub fn get_languages(config: &Config, cache_dir: &Path) -> Result<String> {
  function theme_preview_file (line 192) | fn theme_preview_file<'a>() -> Input<'a> {
  function list_themes (line 196) | pub fn list_themes(
  function set_terminal_title_to (line 259) | fn set_terminal_title_to(new_terminal_title: String) {
  function get_new_terminal_title (line 266) | fn get_new_terminal_title(inputs: &Vec<Input>) -> String {
  function run_controller (line 277) | fn run_controller(inputs: Vec<Input>, config: &Config, cache_dir: &Path)...
  function invoke_bugreport (line 287) | fn invoke_bugreport(app: &App, cache_dir: &Path) {
  function run (line 345) | fn run() -> Result<bool> {
  function main (line 428) | fn main() {

FILE: src/config.rs
  type VisibleLines (line 11) | pub enum VisibleLines {
    method diff_mode (line 21) | pub fn diff_mode(&self) -> bool {
  method default (line 31) | fn default() -> Self {
  type Config (line 37) | pub struct Config<'a> {
  function get_pager_executable (line 122) | pub fn get_pager_executable(config_pager: Option<&str>) -> Option<String> {
  function default_config_should_include_all_lines (line 136) | fn default_config_should_include_all_lines() {
  function default_config_should_highlight_no_lines (line 147) | fn default_config_should_highlight_no_lines() {
  function get_pager_executable_with_config_pager_less (line 162) | fn get_pager_executable_with_config_pager_less() {
  function get_pager_executable_with_config_pager_builtin (line 169) | fn get_pager_executable_with_config_pager_builtin() {
  function get_pager_executable_with_config_pager_more (line 176) | fn get_pager_executable_with_config_pager_more() {
  function get_pager_executable_with_bat_pager (line 183) | fn get_pager_executable_with_bat_pager() {
  function get_pager_executable_with_pager_more_switches_to_less (line 192) | fn get_pager_executable_with_pager_more_switches_to_less() {
  function get_pager_executable_default (line 201) | fn get_pager_executable_default() {
  function get_pager_executable_name_ignoring_arguments (line 211) | fn get_pager_executable_name_ignoring_arguments() {
  function get_pager_executable_name_ignoring_path (line 218) | fn get_pager_executable_name_ignoring_path() {
  function get_pager_executable_invalid_command (line 225) | fn get_pager_executable_invalid_command() {
  function get_pager_executable_empty_config (line 232) | fn get_pager_executable_empty_config() {

FILE: src/controller.rs
  type Controller (line 22) | pub struct Controller<'a> {
  function new (line 30) | pub fn new<'a>(config: &'a Config, assets: &'a HighlightingAssets) -> Co...
  function run (line 39) | pub fn run(
  function run_with_error_handler (line 47) | pub fn run_with_error_handler(
  function print_input (line 141) | fn print_input<R: BufRead>(
  function print_file (line 214) | fn print_file(
  function print_file_ranges (line 252) | fn print_file_ranges(

FILE: src/decorations.rs
  type DecorationText (line 7) | pub(crate) struct DecorationText {
  type Decoration (line 12) | pub(crate) trait Decoration {
    method generate (line 13) | fn generate(
    method width (line 19) | fn width(&self) -> usize;
    method generate (line 42) | fn generate(
    method width (line 67) | fn width(&self) -> usize {
    method generate (line 104) | fn generate(
    method width (line 125) | fn width(&self) -> usize {
    method generate (line 146) | fn generate(
    method width (line 155) | fn width(&self) -> usize {
  type LineNumberDecoration (line 22) | pub(crate) struct LineNumberDecoration {
    method new (line 29) | pub(crate) fn new(colors: &Colors) -> Self {
  type LineChangesDecoration (line 73) | pub(crate) struct LineChangesDecoration {
    method generate_cached (line 84) | fn generate_cached(style: Style, text: &str) -> DecorationText {
    method new (line 91) | pub(crate) fn new(colors: &Colors) -> Self {
  type GridBorderDecoration (line 130) | pub(crate) struct GridBorderDecoration {
    method new (line 135) | pub(crate) fn new(colors: &Colors) -> Self {

FILE: src/diff.rs
  type LineChange (line 10) | pub enum LineChange {
  type LineChanges (line 17) | pub type LineChanges = HashMap<u32, LineChange>;
  function get_git_diff (line 19) | pub fn get_git_diff(filename: &Path) -> Option<LineChanges> {

FILE: src/error.rs
  type Error (line 6) | pub enum Error {
    method from (line 43) | fn from(s: &'static str) -> Self {
    method from (line 49) | fn from(s: String) -> Self {
  type Result (line 54) | pub type Result<T> = std::result::Result<T, Error>;
  function default_error_handler (line 56) | pub fn default_error_handler(error: &Error, output: &mut dyn Write) {

FILE: src/input.rs
  type InputDescription (line 15) | pub struct InputDescription {
    method new (line 32) | pub fn new(name: impl Into<String>) -> Self {
    method set_kind (line 41) | pub fn set_kind(&mut self, kind: Option<String>) {
    method set_summary (line 45) | pub fn set_summary(&mut self, summary: Option<String>) {
    method set_title (line 49) | pub fn set_title(&mut self, title: Option<String>) {
    method title (line 53) | pub fn title(&self) -> &String {
    method kind (line 60) | pub fn kind(&self) -> Option<&String> {
    method summary (line 64) | pub fn summary(&self) -> String {
  type InputKind (line 72) | pub(crate) enum InputKind<'a> {
  function description (line 79) | pub fn description(&self) -> InputDescription {
  type InputMetadata (line 89) | pub(crate) struct InputMetadata {
  type Input (line 94) | pub struct Input<'a> {
  type OpenedInputKind (line 100) | pub(crate) enum OpenedInputKind {
  type OpenedInput (line 106) | pub(crate) struct OpenedInput<'a> {
  function path (line 117) | pub(crate) fn path(&self) -> Option<&PathBuf> {
  function ordinary_file (line 129) | pub fn ordinary_file(path: impl AsRef<Path>) -> Self {
  function _ordinary_file (line 133) | fn _ordinary_file(path: &Path) -> Self {
  function stdin (line 147) | pub fn stdin() -> Self {
  function from_reader (line 156) | pub fn from_reader(reader: Box<dyn Read + 'a>) -> Self {
  function is_stdin (line 165) | pub fn is_stdin(&self) -> bool {
  function with_name (line 169) | pub fn with_name(self, provided_name: Option<impl AsRef<Path>>) -> Self {
  function _with_name (line 173) | fn _with_name(mut self, provided_name: Option<&Path>) -> Self {
  function description (line 182) | pub fn description(&self) -> &InputDescription {
  function description_mut (line 186) | pub fn description_mut(&mut self) -> &mut InputDescription {
  function open (line 190) | pub(crate) fn open<R: BufRead + 'a>(
  type InputReader (line 252) | pub(crate) struct InputReader<'a> {
  function new (line 260) | pub(crate) fn new<R: BufRead + 'a>(mut reader: R) -> InputReader<'a> {
  function read_line (line 284) | pub(crate) fn read_line(&mut self, buf: &mut Vec<u8>) -> io::Result<bool> {
  function read_line_unbuffered (line 305) | fn read_line_unbuffered(&mut self, buf: &mut Vec<u8>) -> io::Result<bool> {
  function read_utf16_line (line 322) | fn read_utf16_line<R: BufRead>(
  function basic (line 349) | fn basic() {
  function utf16le (line 378) | fn utf16le() {
  function unbuffered_returns_partial_data (line 407) | fn unbuffered_returns_partial_data() {
  function unbuffered_returns_complete_lines (line 437) | fn unbuffered_returns_complete_lines() {
  function unbuffered_eof_handling (line 467) | fn unbuffered_eof_handling() {
  function utf16le_issue3367 (line 490) | fn utf16le_issue3367() {

FILE: src/less.rs
  type LessVersion (line 7) | pub enum LessVersion {
  function retrieve_less_version (line 12) | pub fn retrieve_less_version(less_path: &dyn AsRef<OsStr>) -> Option<Les...
  function parse_less_version (line 23) | fn parse_less_version(output: &[u8]) -> Option<LessVersion> {
  function parse_less_version_busybox (line 33) | fn parse_less_version_busybox(output: &[u8]) -> Option<LessVersion> {
  function test_parse_less_version_487 (line 41) | fn test_parse_less_version_487() {
  function test_parse_less_version_529 (line 54) | fn test_parse_less_version_529() {
  function test_parse_less_version_551 (line 67) | fn test_parse_less_version_551() {
  function test_parse_less_version_581_2 (line 80) | fn test_parse_less_version_581_2() {
  function test_parse_less_version_wrong_program (line 93) | fn test_parse_less_version_wrong_program() {
  function test_parse_less_version_busybox (line 101) | fn test_parse_less_version_busybox() {
  function test_parse_less_version_invalid_utf_8 (line 126) | fn test_parse_less_version_invalid_utf_8() {

FILE: src/lessopen.rs
  type LessOpenPreprocessor (line 18) | pub(crate) struct LessOpenPreprocessor {
    method new (line 35) | pub(crate) fn new() -> Result<LessOpenPreprocessor> {
    method open (line 77) | pub(crate) fn open<'a, R: BufRead + 'a>(
    method fall_back_to_original_file (line 201) | fn fall_back_to_original_file(&self, lessopen_stdout: &[u8], exit_code...
    method mock_new (line 209) | fn mock_new(lessopen: Option<&str>, lessclose: Option<&str>) -> Result...
  type LessOpenKind (line 26) | enum LessOpenKind {
  type PreprocessedKind (line 226) | enum PreprocessedKind {
  method read (line 232) | fn read(&mut self, buf: &mut [u8]) -> std::result::Result<usize, std::io...
  type Preprocessed (line 240) | pub struct Preprocessed {
  method read (line 246) | fn read(&mut self, buf: &mut [u8]) -> std::result::Result<usize, std::io...
  method drop (line 252) | fn drop(&mut self) {
  function reset_env_vars (line 280) | fn reset_env_vars() {
  function test_just_lessopen (line 287) | fn test_just_lessopen() -> Result<()> {
  function test_just_lessclose (line 300) | fn test_just_lessclose() -> Result<()> {
  function test_both_lessopen_and_lessclose (line 312) | fn test_both_lessopen_and_lessclose() -> Result<()> {
  function test_lessopen_prefixes (line 326) | fn test_lessopen_prefixes() -> Result<()> {
  function replace_part_of_argument (line 376) | fn replace_part_of_argument() -> Result<()> {

FILE: src/line_range.rs
  type LineRange (line 5) | pub struct LineRange {
    method new (line 29) | pub fn new(from: usize, to: usize) -> Self {
    method from (line 36) | pub fn from(range_raw: &str) -> Result<LineRange> {
    method parse_range (line 40) | fn parse_range(range_raw: &str) -> Result<LineRange> {
    method is_inside (line 136) | pub(crate) fn is_inside(
  type RangeBound (line 12) | pub(crate) enum RangeBound {
  method default (line 20) | fn default() -> LineRange {
  function test_parse_full (line 195) | fn test_parse_full() {
  function test_parse_partial_min (line 202) | fn test_parse_partial_min() {
  function test_parse_partial_relative_negative_from_back (line 209) | fn test_parse_partial_relative_negative_from_back() {
  function test_parse_relative_negative_from_back_partial (line 216) | fn test_parse_relative_negative_from_back_partial() {
  function test_parse_partial_max (line 223) | fn test_parse_partial_max() {
  function test_parse_single (line 230) | fn test_parse_single() {
  function test_parse_fail (line 237) | fn test_parse_fail() {
  function test_parse_plus (line 252) | fn test_parse_plus() {
  function test_parse_plus_overflow (line 259) | fn test_parse_plus_overflow() {
  function test_parse_plus_fail (line 266) | fn test_parse_plus_fail() {
  function test_parse_minus_success (line 276) | fn test_parse_minus_success() {
  function test_parse_minus_edge_cases_success (line 283) | fn test_parse_minus_edge_cases_success() {
  function test_parse_minus_fail (line 296) | fn test_parse_minus_fail() {
  function test_parse_context_single_line (line 306) | fn test_parse_context_single_line() {
  function test_parse_context_range (line 313) | fn test_parse_context_range() {
  function test_parse_context_edge_cases (line 325) | fn test_parse_context_edge_cases() {
  function test_parse_context_fail (line 343) | fn test_parse_context_fail() {
  type RangeCheckResult (line 357) | pub enum RangeCheckResult {
  type MaxBufferedLineNumber (line 370) | pub(crate) enum MaxBufferedLineNumber {
  type LineRanges (line 378) | pub struct LineRanges {
    method none (line 389) | pub fn none() -> LineRanges {
    method all (line 393) | pub fn all() -> LineRanges {
    method from (line 397) | pub fn from(ranges: Vec<LineRange>) -> LineRanges {
    method check (line 430) | pub(crate) fn check(
    method largest_offset_from_end (line 451) | pub(crate) fn largest_offset_from_end(&self) -> usize {
  method default (line 457) | fn default() -> Self {
  type HighlightedLineRanges (line 463) | pub struct HighlightedLineRanges(pub LineRanges);
  method default (line 466) | fn default() -> Self {
  function ranges (line 472) | fn ranges(rs: &[&str]) -> LineRanges {
  function test_ranges_simple (line 477) | fn test_ranges_simple() {
  function test_ranges_advanced (line 495) | fn test_ranges_advanced() {
  function test_ranges_open_low (line 529) | fn test_ranges_open_low() {
  function test_ranges_open_high (line 551) | fn test_ranges_open_high() {
  function test_ranges_open_up_to_3_from_end (line 589) | fn test_ranges_open_up_to_3_from_end() {
  function test_ranges_multiple_negative_from_back (line 630) | fn test_ranges_multiple_negative_from_back() {
  function test_ranges_3_from_back_up_to_end (line 667) | fn test_ranges_3_from_back_up_to_end() {
  function test_ranges_multiple_negative_offsets_to_end (line 705) | fn test_ranges_multiple_negative_offsets_to_end() {
  function test_ranges_absolute_bound_and_offset (line 726) | fn test_ranges_absolute_bound_and_offset() {
  function test_ranges_all (line 751) | fn test_ranges_all() {
  function test_ranges_none (line 761) | fn test_ranges_none() {

FILE: src/nonprintable_notation.rs
  type NonprintableNotation (line 5) | pub enum NonprintableNotation {
  type BinaryBehavior (line 17) | pub enum BinaryBehavior {

FILE: src/output.rs
  type BuiltinPager (line 17) | pub struct BuiltinPager {
    method new (line 24) | fn new() -> Self {
    method fmt (line 38) | fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
  type SingleScreenAction (line 48) | enum SingleScreenAction {
  type OutputType (line 54) | pub enum OutputType {
    method from_mode (line 64) | pub fn from_mode(
    method try_pager (line 81) | fn try_pager(
    method stdout (line 190) | pub(crate) fn stdout() -> Self {
    method is_pager (line 195) | pub(crate) fn is_pager(&self) -> bool {
    method is_pager (line 200) | pub(crate) fn is_pager(&self) -> bool {
    method handle (line 204) | pub fn handle<'a>(&'a mut self) -> Result<OutputHandle<'a>> {
  method drop (line 222) | fn drop(&mut self) {
  type OutputHandle (line 237) | pub enum OutputHandle<'a> {
  function write_fmt (line 243) | pub fn write_fmt(&mut self, args: fmt::Arguments<'_>) -> Result<()> {
  function flush (line 250) | pub fn flush(&mut self) -> Result<()> {

FILE: src/pager.rs
  type PagerSource (line 6) | pub(crate) enum PagerSource {
  type PagerKind (line 22) | pub(crate) enum PagerKind {
    method from_bin (line 43) | fn from_bin(bin: &str) -> PagerKind {
  type Pager (line 74) | pub(crate) struct Pager {
    method new (line 89) | fn new(bin: &str, args: &[String], kind: PagerKind, source: PagerSourc...
  function get_pager (line 100) | pub(crate) fn get_pager(config_pager: Option<&str>) -> Result<Option<Pag...

FILE: src/paging.rs
  type PagingMode (line 2) | pub enum PagingMode {

FILE: src/preprocessor.rs
  function expand_tabs (line 9) | pub fn expand_tabs(line: &str, width: usize, cursor: &mut usize) -> Stri...
  function try_parse_utf8_char (line 45) | fn try_parse_utf8_char(input: &[u8]) -> Option<(char, usize)> {
  function replace_nonprintable (line 59) | pub fn replace_nonprintable(
  function strip_ansi (line 140) | pub fn strip_ansi(line: &str) -> String {
  function strip_overstrike (line 160) | pub fn strip_overstrike(line: &str, first_backspace: usize) -> String {
  type StripAnsiMode (line 182) | pub enum StripAnsiMode {
  function test_try_parse_utf8_char (line 190) | fn test_try_parse_utf8_char() {
  function test_strip_ansi (line 234) | fn test_strip_ansi() {
  function test_strip_overstrike (line 245) | fn test_strip_overstrike() {

FILE: src/pretty_printer.rs
  type ActiveStyleComponents (line 22) | struct ActiveStyleComponents {
  type Syntax (line 33) | pub struct Syntax {
  type PrettyPrinter (line 38) | pub struct PrettyPrinter<'a> {
  function new (line 49) | pub fn new() -> Self {
  function input (line 68) | pub fn input(&mut self, input: Input<'a>) -> &mut Self {
  function inputs (line 74) | pub fn inputs(&mut self, inputs: impl IntoIterator<Item = Input<'a>>) ->...
  function input_file (line 82) | pub fn input_file(&mut self, path: impl AsRef<Path>) -> &mut Self {
  function input_files (line 87) | pub fn input_files<I, P>(&mut self, paths: I) -> &mut Self
  function input_stdin (line 96) | pub fn input_stdin(&mut self) -> &mut Self {
  function input_from_bytes (line 102) | pub fn input_from_bytes(&mut self, content: &'a [u8]) -> &mut Self {
  function input_from_reader (line 107) | pub fn input_from_reader<R: Read + 'a>(&mut self, reader: R) -> &mut Self {
  function language (line 113) | pub fn language(&mut self, language: &'a str) -> &mut Self {
  function term_width (line 119) | pub fn term_width(&mut self, width: usize) -> &mut Self {
  function tab_width (line 125) | pub fn tab_width(&mut self, tab_width: Option<usize>) -> &mut Self {
  function colored_output (line 131) | pub fn colored_output(&mut self, yes: bool) -> &mut Self {
  function true_color (line 137) | pub fn true_color(&mut self, yes: bool) -> &mut Self {
  function header (line 143) | pub fn header(&mut self, yes: bool) -> &mut Self {
  function line_numbers (line 149) | pub fn line_numbers(&mut self, yes: bool) -> &mut Self {
  function grid (line 155) | pub fn grid(&mut self, yes: bool) -> &mut Self {
  function rule (line 161) | pub fn rule(&mut self, yes: bool) -> &mut Self {
  function vcs_modification_markers (line 169) | pub fn vcs_modification_markers(&mut self, yes: bool) -> &mut Self {
  function show_nonprintable (line 175) | pub fn show_nonprintable(&mut self, yes: bool) -> &mut Self {
  function snip (line 181) | pub fn snip(&mut self, yes: bool) -> &mut Self {
  function strip_ansi (line 190) | pub fn strip_ansi(&mut self, mode: StripAnsiMode) -> &mut Self {
  function wrapping_mode (line 196) | pub fn wrapping_mode(&mut self, mode: WrappingMode) -> &mut Self {
  function use_italics (line 202) | pub fn use_italics(&mut self, yes: bool) -> &mut Self {
  function paging_mode (line 209) | pub fn paging_mode(&mut self, mode: PagingMode) -> &mut Self {
  function pager (line 216) | pub fn pager(&mut self, cmd: &'a str) -> &mut Self {
  function line_ranges (line 222) | pub fn line_ranges(&mut self, ranges: LineRanges) -> &mut Self {
  function highlight (line 230) | pub fn highlight(&mut self, line: usize) -> &mut Self {
  function highlight_range (line 238) | pub fn highlight_range(&mut self, from: usize, to: usize) -> &mut Self {
  function squeeze_empty_lines (line 244) | pub fn squeeze_empty_lines(&mut self, maximum: Option<usize>) -> &mut Se...
  function theme (line 252) | pub fn theme(&mut self, theme: impl AsRef<str>) -> &mut Self {
  function syntax_mapping (line 258) | pub fn syntax_mapping(&mut self, mapping: SyntaxMapping<'a>) -> &mut Self {
  function themes (line 263) | pub fn themes(&self) -> impl Iterator<Item = &str> {
  function syntaxes (line 267) | pub fn syntaxes(&self) -> impl Iterator<Item = Syntax> + '_ {
  function print (line 284) | pub fn print(&mut self) -> Result<bool> {
  function print_with_writer (line 289) | pub fn print_with_writer<W: std::fmt::Write>(&mut self, writer: Option<W...
  method default (line 340) | fn default() -> Self {
  type Input (line 346) | pub struct Input<'a> {
  function from_reader (line 352) | pub fn from_reader<R: Read + 'a>(reader: R) -> Self {
  function from_file (line 357) | pub fn from_file(path: impl AsRef<Path>) -> Self {
  function from_bytes (line 362) | pub fn from_bytes(bytes: &'a [u8]) -> Self {
  function from_stdin (line 367) | pub fn from_stdin() -> Self {
  function name (line 373) | pub fn name(mut self, name: impl AsRef<Path>) -> Self {
  function kind (line 379) | pub fn kind(mut self, kind: impl Into<String>) -> Self {
  function title (line 389) | pub fn title(mut self, title: impl Into<String>) -> Self {
  function from (line 396) | fn from(input: input::Input<'a>) -> Self {
  function from (line 402) | fn from(Input { input }: Input<'a>) -> Self {

FILE: src/printer.rs
  constant ANSI_UNDERLINE_ENABLE (line 40) | const ANSI_UNDERLINE_ENABLE: EscapeSequence = EscapeSequence::CSI {
  constant ANSI_UNDERLINE_DISABLE (line 47) | const ANSI_UNDERLINE_DISABLE: EscapeSequence = EscapeSequence::CSI {
  constant EMPTY_SYNTECT_STYLE (line 54) | const EMPTY_SYNTECT_STYLE: syntect::highlighting::Style = syntect::highl...
  type Printer (line 70) | pub(crate) trait Printer {
    method print_header (line 71) | fn print_header(
    method print_footer (line 77) | fn print_footer(&mut self, handle: &mut OutputHandle, input: &OpenedIn...
    method print_snip (line 79) | fn print_snip(&mut self, handle: &mut OutputHandle) -> Result<()>;
    method print_line (line 81) | fn print_line(
    method print_header (line 106) | fn print_header(
    method print_footer (line 115) | fn print_footer(&mut self, _handle: &mut OutputHandle, _input: &Opened...
    method print_snip (line 119) | fn print_snip(&mut self, _handle: &mut OutputHandle) -> Result<()> {
    method print_line (line 123) | fn print_line(
    method print_header (line 456) | fn print_header(
    method print_footer (line 568) | fn print_footer(&mut self, handle: &mut OutputHandle, _input: &OpenedI...
    method print_snip (line 585) | fn print_snip(&mut self, handle: &mut OutputHandle) -> Result<()> {
    method print_line (line 609) | fn print_line(
  type SimplePrinter (line 91) | pub struct SimplePrinter<'a> {
  function new (line 97) | pub fn new(config: &'a Config) -> Self {
  type HighlighterFromSet (line 174) | struct HighlighterFromSet<'a> {
  function new (line 180) | fn new(syntax_in_set: SyntaxReferenceInSet<'a>, theme: &'a Theme) -> Self {
  type InteractivePrinter (line 188) | pub(crate) struct InteractivePrinter<'a> {
  function new (line 205) | pub(crate) fn new(
  function print_horizontal_line_term (line 327) | fn print_horizontal_line_term(
  function print_horizontal_line (line 340) | fn print_horizontal_line(&mut self, handle: &mut OutputHandle, grid_char...
  function create_fake_panel (line 352) | fn create_fake_panel(&self, text: &str) -> String {
  function get_header_component_indent_length (line 369) | fn get_header_component_indent_length(&self) -> usize {
  function print_header_component_indent (line 377) | fn print_header_component_indent(&mut self, handle: &mut OutputHandle) -...
  function print_header_component_with_indent (line 392) | fn print_header_component_with_indent(
  function print_header_multiline_component (line 401) | fn print_header_multiline_component(
  function highlight_regions_for_line (line 420) | fn highlight_regions_for_line<'b>(
  function preprocess (line 445) | fn preprocess(&self, text: &str, cursor: &mut usize) -> String {
  constant DEFAULT_GUTTER_COLOR (line 937) | const DEFAULT_GUTTER_COLOR: u8 = 238;
  type Colors (line 940) | pub struct Colors {
    method plain (line 951) | fn plain() -> Self {
    method colored (line 955) | fn colored(theme: &Theme, true_color: bool) -> Self {

FILE: src/style.rs
  type StyleComponent (line 8) | pub enum StyleComponent {
    method components (line 25) | pub fn components(self, interactive_terminal: bool) -> &'static [Style...
  type Err (line 66) | type Err = Error;
  method from_str (line 68) | fn from_str(s: &str) -> Result<Self> {
  type StyleComponents (line 89) | pub struct StyleComponents(pub HashSet<StyleComponent>);
    method new (line 92) | pub fn new(components: &[StyleComponent]) -> StyleComponents {
    method changes (line 97) | pub fn changes(&self) -> bool {
    method grid (line 101) | pub fn grid(&self) -> bool {
    method rule (line 105) | pub fn rule(&self) -> bool {
    method header (line 109) | pub fn header(&self) -> bool {
    method header_filename (line 113) | pub fn header_filename(&self) -> bool {
    method header_filesize (line 117) | pub fn header_filesize(&self) -> bool {
    method numbers (line 121) | pub fn numbers(&self) -> bool {
    method snip (line 125) | pub fn snip(&self) -> bool {
    method plain (line 129) | pub fn plain(&self) -> bool {
    method insert (line 133) | pub fn insert(&mut self, component: StyleComponent) {
    method clear (line 137) | pub fn clear(&mut self) {
  type ComponentAction (line 143) | enum ComponentAction {
    method extract_from_str (line 150) | fn extract_from_str(string: &str) -> (ComponentAction, &str) {
  type StyleComponentList (line 160) | pub struct StyleComponentList(Vec<(ComponentAction, StyleComponent)>);
    method expand_into (line 163) | fn expand_into(&self, components: &mut HashSet<StyleComponent>, intera...
    method contains_override (line 176) | fn contains_override(&self) -> bool {
    method to_components (line 195) | pub fn to_components(
  method default (line 217) | fn default() -> Self {
  type Err (line 223) | type Err = Error;
  method from_str (line 225) | fn from_str(s: &str) -> Result<Self> {
  function style_component_list_parse (line 246) | pub fn style_component_list_parse() {
  function style_component_list_to_components (line 266) | pub fn style_component_list_to_components() {
  function style_component_list_to_components_removes_negated (line 279) | pub fn style_component_list_to_components_removes_negated() {
  function style_component_list_to_components_expands_subcomponents (line 292) | pub fn style_component_list_to_components_expands_subcomponents() {
  function style_component_list_expand_negates_subcomponents (line 305) | pub fn style_component_list_expand_negates_subcomponents() {
  function style_component_list_to_components_precedence_overrides_previous_lists (line 315) | pub fn style_component_list_to_components_precedence_overrides_previous_...
  function style_component_list_to_components_precedence_merges_previous_lists (line 331) | pub fn style_component_list_to_components_precedence_merges_previous_lis...
  function style_component_list_default_builds_on_auto (line 348) | pub fn style_component_list_default_builds_on_auto() {

FILE: src/syntax_mapping.rs
  function make_glob_matcher (line 20) | fn make_glob_matcher(from: &str) -> Result<GlobMatcher> {
  type MappingTarget (line 31) | pub enum MappingTarget<'a> {
  type SyntaxMapping (line 50) | pub struct SyntaxMapping<'a> {
  method drop (line 65) | fn drop(&mut self) {
  function new (line 72) | pub fn new() -> SyntaxMapping<'a> {
  function start_offload_build_all (line 82) | pub fn start_offload_build_all(&self) {
  function insert (line 99) | pub fn insert(&mut self, from: &str, to: MappingTarget<'a>) -> Result<()> {
  function all_mappings (line 112) | pub fn all_mappings(&self) -> impl Iterator<Item = (&GlobMatcher, &Mappi...
  function builtin_mappings (line 135) | pub fn builtin_mappings(
  function custom_mappings (line 144) | pub fn custom_mappings(&self) -> &[(GlobMatcher, MappingTarget<'a>)] {
  function get_syntax_for (line 148) | pub fn get_syntax_for(&self, path: impl AsRef<Path>) -> Option<MappingTa...
  function insert_ignored_suffix (line 170) | pub fn insert_ignored_suffix(&mut self, suffix: &'a str) {
  function builtin_mappings_work (line 180) | fn builtin_mappings_work() {
  function all_fixed_builtin_mappings_can_compile (line 190) | fn all_fixed_builtin_mappings_can_compile() {
  function builtin_mappings_matcher_only_compile_once (line 199) | fn builtin_mappings_matcher_only_compile_once() {
  function custom_mappings_work (line 216) | fn custom_mappings_work() {
  function custom_mappings_override_builtin (line 236) | fn custom_mappings_override_builtin() {
  function custom_mappings_precedence (line 252) | fn custom_mappings_precedence() {

FILE: src/syntax_mapping/builtin.rs
  function build_matcher_fixed (line 56) | fn build_matcher_fixed(from: &str) -> GlobMatcher {
  function build_matcher_dynamic (line 67) | fn build_matcher_dynamic(segs: &[MatcherSegment]) -> Option<GlobMatcher> {
  type MatcherSegment (line 88) | enum MatcherSegment {

FILE: src/syntax_mapping/ignored_suffixes.rs
  type IgnoredSuffixes (line 8) | pub struct IgnoredSuffixes<'a> {
  method default (line 13) | fn default() -> Self {
  function add_suffix (line 41) | pub fn add_suffix(&mut self, suffix: &'a str) {
  function strip_suffix (line 45) | pub fn strip_suffix(&self, file_name: &'a str) -> Option<&'a str> {
  function try_with_stripped_suffix (line 56) | pub fn try_with_stripped_suffix<T, F>(&self, file_name: &'a OsStr, func:...
  function internal_suffixes (line 70) | fn internal_suffixes() {
  function external_suffixes (line 90) | fn external_suffixes() {

FILE: src/terminal.rs
  function to_ansi_color (line 6) | pub fn to_ansi_color(color: highlighting::Color, true_color: bool) -> Op...
  function as_terminal_escaped (line 49) | pub fn as_terminal_escaped(

FILE: src/theme.rs
  constant BAT_THEME (line 11) | pub const BAT_THEME: &str = "BAT_THEME";
  constant BAT_THEME_DARK (line 13) | pub const BAT_THEME_DARK: &str = "BAT_THEME_DARK";
  constant BAT_THEME_LIGHT (line 15) | pub const BAT_THEME_LIGHT: &str = "BAT_THEME_LIGHT";
  function theme (line 24) | pub fn theme(options: ThemeOptions) -> ThemeResult {
  function default_theme (line 30) | pub const fn default_theme(color_scheme: ColorScheme) -> &'static str {
  function color_scheme (line 38) | pub fn color_scheme(when: DetectColorScheme) -> Option<ColorScheme> {
  type ThemeOptions (line 45) | pub struct ThemeOptions {
  type ThemePreference (line 67) | pub enum ThemePreference {
    method new (line 87) | pub fn new(s: impl Into<String>) -> Self {
    method fmt (line 110) | fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
  method default (line 80) | fn default() -> Self {
  type Err (line 102) | type Err = Infallible;
  method from_str (line 104) | fn from_str(s: &str) -> Result<Self, Self::Err> {
  type ThemeName (line 131) | pub enum ThemeName {
    method new (line 138) | pub fn new(s: impl Into<String>) -> Self {
    method fmt (line 157) | fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
  type Err (line 149) | type Err = Infallible;
  method from_str (line 151) | fn from_str(s: &str) -> Result<Self, Self::Err> {
  type DetectColorScheme (line 166) | pub enum DetectColorScheme {
  type ColorScheme (line 178) | pub enum ColorScheme {
  type ThemeResult (line 187) | pub struct ThemeResult {
    method fmt (line 196) | fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
  function theme_impl (line 204) | fn theme_impl(options: ThemeOptions, detector: &dyn ColorSchemeDetector)...
  function choose_theme_opt (line 218) | fn choose_theme_opt(color_scheme: Option<ColorScheme>, options: ThemeOpt...
  function choose_theme (line 227) | fn choose_theme(options: ThemeOptions, color_scheme: ColorScheme) -> Opt...
  function color_scheme_impl (line 234) | fn color_scheme_impl(
  type ColorSchemeDetector (line 246) | trait ColorSchemeDetector {
    method should_detect (line 247) | fn should_detect(&self) -> bool;
    method detect (line 249) | fn detect(&self) -> Option<ColorScheme>;
    method should_detect (line 255) | fn should_detect(&self) -> bool {
    method detect (line 268) | fn detect(&self) -> Option<ColorScheme> {
    method should_detect (line 308) | fn should_detect(&self) -> bool {
    method detect (line 312) | fn detect(&self) -> Option<ColorScheme> {
    method should_detect (line 541) | fn should_detect(&self) -> bool {
    method detect (line 545) | fn detect(&self) -> Option<ColorScheme> {
    method should_detect (line 554) | fn should_detect(&self) -> bool {
    method detect (line 558) | fn detect(&self) -> Option<ColorScheme> {
  type TerminalColorSchemeDetector (line 252) | struct TerminalColorSchemeDetector;
  function color_scheme_from_system (line 278) | fn color_scheme_from_system() -> Option<ColorScheme> {
  function color_scheme_from_system (line 287) | fn color_scheme_from_system() -> Option<ColorScheme> {
  function not_called_for_dark_or_light (line 328) | fn not_called_for_dark_or_light() {
  function called_for_always (line 341) | fn called_for_always() {
  function called_for_auto_if_should_detect (line 357) | fn called_for_auto_if_should_detect() {
  function not_called_for_auto_if_not_should_detect (line 364) | fn not_called_for_auto_if_not_should_detect() {
  function theme_is_preferred_over_light_or_dark_themes (line 375) | fn theme_is_preferred_over_light_or_dark_themes() {
  function detector_is_not_called_if_theme_is_present (line 395) | fn detector_is_not_called_if_theme_is_present() {
  function default_dark_if_unable_to_detect_color_scheme (line 410) | fn default_dark_if_unable_to_detect_color_scheme() {
  function default_dark_if_requested_explicitly_through_theme (line 421) | fn default_dark_if_requested_explicitly_through_theme() {
  function varies_depending_on_color_scheme (line 436) | fn varies_depending_on_color_scheme() {
  function chooses_default_theme_if_unknown (line 460) | fn chooses_default_theme_if_unknown() {
  function chooses_dark_theme_if_dark_or_unknown (line 474) | fn chooses_dark_theme_if_dark_or_unknown() {
  function chooses_light_theme_if_light (line 485) | fn chooses_light_theme_if_light() {
  function values_roundtrip_via_display (line 500) | fn values_roundtrip_via_display() {
  type DetectorStub (line 516) | struct DetectorStub {
    method should_detect (line 523) | fn should_detect(color_scheme: Option<ColorScheme>) -> Self {
    method should_not_detect (line 531) | fn should_not_detect() -> Self {
  type ConstantDetector (line 551) | struct ConstantDetector(Option<ColorScheme>);
  function optional (line 563) | fn optional<T>(value: impl Iterator<Item = T>) -> impl Iterator<Item = O...
  function color_schemes (line 567) | fn color_schemes() -> impl Iterator<Item = ColorScheme> {

FILE: src/vscreen.rs
  type AnsiStyle (line 8) | pub struct AnsiStyle {
    method new (line 13) | pub fn new() -> Self {
    method update (line 17) | pub fn update(&mut self, sequence: EscapeSequence) -> bool {
    method to_reset_sequence (line 27) | pub fn to_reset_sequence(&self) -> String {
  method fmt (line 36) | fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
  type Attributes (line 44) | struct Attributes {
    method new (line 87) | pub fn new() -> Self {
    method update (line 107) | pub fn update(&mut self, sequence: EscapeSequence) -> bool {
    method sgr_reset (line 148) | fn sgr_reset(&mut self) {
    method update_with_sgr (line 161) | fn update_with_sgr(&mut self, parameters: &str) -> bool {
    method update_with_unsupported (line 197) | fn update_with_unsupported(&mut self, sequence: &str) -> bool {
    method update_with_hyperlink (line 202) | fn update_with_hyperlink(&mut self, sequence: &str) -> bool {
    method update_with_charset (line 214) | fn update_with_charset(&mut self, kind: char, set: impl Iterator<Item ...
    method parse_color (line 219) | fn parse_color(color: u16, parameters: &mut dyn Iterator<Item = u16>) ...
    method to_reset_sequence (line 233) | pub fn to_reset_sequence(&self) -> String {
  method fmt (line 256) | fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
  function join (line 274) | fn join(
  type EscapeSequenceOffsets (line 288) | pub enum EscapeSequenceOffsets {
    method index_of_start (line 325) | pub fn index_of_start(&self) -> usize {
    method index_past_end (line 337) | pub fn index_past_end(&self) -> usize {
  type EscapeSequenceOffsetsIterator (line 356) | pub struct EscapeSequenceOffsetsIterator<'a> {
  function new (line 362) | pub fn new(text: &'a str) -> EscapeSequenceOffsetsIterator<'a> {
  function chars_take_while (line 371) | fn chars_take_while(&mut self, pred: impl Fn(char) -> bool) -> Option<(u...
  function next_text (line 388) | fn next_text(&mut self) -> Option<EscapeSequenceOffsets> {
  function next_sequence (line 393) | fn next_sequence(&mut self) -> Option<EscapeSequenceOffsets> {
  function next_osc (line 413) | fn next_osc(&mut self, start_sequence: usize) -> Option<EscapeSequenceOf...
  function next_csi (line 477) | fn next_csi(&mut self, start_sequence: usize) -> Option<EscapeSequenceOf...
  function next_nf (line 510) | fn next_nf(&mut self, start_sequence: usize) -> Option<EscapeSequenceOff...
  type Item (line 543) | type Item = EscapeSequenceOffsets;
  method next (line 544) | fn next(&mut self) -> Option<Self::Item> {
  type EscapeSequenceIterator (line 560) | pub struct EscapeSequenceIterator<'a> {
  function new (line 566) | pub fn new(text: &'a str) -> EscapeSequenceIterator<'a> {
  type Item (line 575) | type Item = EscapeSequence<'a>;
  method next (line 576) | fn next(&mut self) -> Option<Self::Item> {
  type EscapeSequence (line 617) | pub enum EscapeSequence<'a> {
  function raw (line 641) | pub fn raw(&self) -> &'a str {
  function test_escape_sequence_offsets_iterator_parses_text (line 661) | fn test_escape_sequence_offsets_iterator_parses_text() {
  function test_escape_sequence_offsets_iterator_parses_text_stops_at_esc (line 670) | fn test_escape_sequence_offsets_iterator_parses_text_stops_at_esc() {
  function test_escape_sequence_offsets_iterator_parses_osc_with_bel (line 679) | fn test_escape_sequence_offsets_iterator_parses_osc_with_bel() {
  function test_escape_sequence_offsets_iterator_parses_osc_with_st (line 693) | fn test_escape_sequence_offsets_iterator_parses_osc_with_st() {
  function test_escape_sequence_offsets_iterator_parses_osc_thats_broken (line 707) | fn test_escape_sequence_offsets_iterator_parses_osc_thats_broken() {
  function test_escape_sequence_offsets_iterator_parses_csi (line 721) | fn test_escape_sequence_offsets_iterator_parses_csi() {
  function test_escape_sequence_offsets_iterator_parses_csi_with_parameters (line 736) | fn test_escape_sequence_offsets_iterator_parses_csi_with_parameters() {
  function test_escape_sequence_offsets_iterator_parses_csi_with_intermediates (line 751) | fn test_escape_sequence_offsets_iterator_parses_csi_with_intermediates() {
  function test_escape_sequence_offsets_iterator_parses_csi_with_parameters_and_intermediates (line 766) | fn test_escape_sequence_offsets_iterator_parses_csi_with_parameters_and_...
  function test_escape_sequence_offsets_iterator_parses_csi_thats_broken (line 781) | fn test_escape_sequence_offsets_iterator_parses_csi_thats_broken() {
  function test_escape_sequence_offsets_iterator_parses_nf (line 820) | fn test_escape_sequence_offsets_iterator_parses_nf() {
  function test_escape_sequence_offsets_iterator_parses_nf_thats_broken (line 833) | fn test_escape_sequence_offsets_iterator_parses_nf_thats_broken() {
  function test_escape_sequence_offsets_iterator_iterates (line 846) | fn test_escape_sequence_offsets_iterator_iterates() {
  function test_escape_sequence_iterator_iterates (line 883) | fn test_escape_sequence_iterator_iterates() {
  function test_sgr_attributes_do_not_leak_into_wrong_field (line 922) | fn test_sgr_attributes_do_not_leak_into_wrong_field() {

FILE: src/wrapping.rs
  type WrappingMode (line 2) | pub enum WrappingMode {
  method default (line 10) | fn default() -> Self {

FILE: tests/assets.rs
  function all_themes_are_present (line 7) | fn all_themes_are_present() {

FILE: tests/benchmarks/highlighting-speed-src/jquery.js
  function DOMEval (line 97) | function DOMEval( code, doc, node ) {
  function toType (line 115) | function toType( obj ) {
  function isArrayLike (line 483) | function isArrayLike( obj ) {
  function Sizzle (line 715) | function Sizzle( selector, context, results, seed ) {
  function createCache (line 854) | function createCache() {
  function markFunction (line 872) | function markFunction( fn ) {
  function assert (line 881) | function assert( fn ) {
  function addHandle (line 903) | function addHandle( attrs, handler ) {
  function siblingCheck (line 918) | function siblingCheck( a, b ) {
  function createInputPseudo (line 944) | function createInputPseudo( type ) {
  function createButtonPseudo (line 955) | function createButtonPseudo( type ) {
  function createDisabledPseudo (line 966) | function createDisabledPseudo( disabled ) {
  function createPositionalPseudo (line 1022) | function createPositionalPseudo( fn ) {
  function testContext (line 1045) | function testContext( context ) {
  function setFilters (line 2127) | function setFilters() {}
  function toSelector (line 2198) | function toSelector( tokens ) {
  function addCombinator (line 2208) | function addCombinator( matcher, combinator, base ) {
  function elementMatcher (line 2272) | function elementMatcher( matchers ) {
  function multipleContexts (line 2286) | function multipleContexts( selector, contexts, results ) {
  function condense (line 2295) | function condense( unmatched, map, filter, context, xml ) {
  function setMatcher (line 2316) | function setMatcher( preFilter, selector, matcher, postFilter, postFinde...
  function matcherFromTokens (line 2409) | function matcherFromTokens( tokens ) {
  function matcherFromGroupMatchers (line 2467) | function matcherFromGroupMatchers( elementMatchers, setMatchers ) {
  function nodeName (line 2803) | function nodeName( elem, name ) {
  function winnow (line 2813) | function winnow( elements, qualifier, not ) {
  function sibling (line 3108) | function sibling( cur, dir ) {
  function createOptions (line 3195) | function createOptions( options ) {
  function Identity (line 3420) | function Identity( v ) {
  function Thrower (line 3423) | function Thrower( ex ) {
  function adoptValue (line 3427) | function adoptValue( value, resolve, reject, noValue ) {
  function resolve (line 3520) | function resolve( depth, deferred, handler, special ) {
  function completed (line 3885) | function completed() {
  function fcamelCase (line 3980) | function fcamelCase( all, letter ) {
  function camelCase (line 3987) | function camelCase( string ) {
  function Data (line 4004) | function Data() {
  function getData (line 4173) | function getData( data ) {
  function dataAttr (line 4198) | function dataAttr( elem, key, data ) {
  function adjustCSS (line 4511) | function adjustCSS( elem, prop, valueParts, tween ) {
  function getDefaultDisplay (line 4578) | function getDefaultDisplay( elem ) {
  function showHide (line 4601) | function showHide( elements, show ) {
  function getAll (line 4702) | function getAll( context, tag ) {
  function setGlobalEval (line 4727) | function setGlobalEval( elems, refElements ) {
  function buildFragment (line 4743) | function buildFragment( elems, context, scripts, selection, ignored ) {
  function returnTrue (line 4866) | function returnTrue() {
  function returnFalse (line 4870) | function returnFalse() {
  function safeActiveElement (line 4876) | function safeActiveElement() {
  function on (line 4882) | function on( elem, types, selector, data, fn, one ) {
  function manipulationTarget (line 5610) | function manipulationTarget( elem, content ) {
  function disableScript (line 5621) | function disableScript( elem ) {
  function restoreScript (line 5625) | function restoreScript( elem ) {
  function cloneCopyEvent (line 5635) | function cloneCopyEvent( src, dest ) {
  function fixInput (line 5670) | function fixInput( src, dest ) {
  function domManip (line 5683) | function domManip( collection, args, callback, ignored ) {
  function remove (line 5773) | function remove( elem, selector, keepData ) {
  function computeStyleTests (line 6066) | function computeStyleTests() {
  function roundPixelMeasures (line 6108) | function roundPixelMeasures( measure ) {
  function curCSS (line 6153) | function curCSS( elem, name, computed ) {
  function addGetHookIf (line 6206) | function addGetHookIf( conditionFn, hookFn ) {
  function vendorPropName (line 6243) | function vendorPropName( name ) {
  function finalPropName (line 6264) | function finalPropName( name ) {
  function setPositiveNumber (line 6272) | function setPositiveNumber( elem, value, subtract ) {
  function boxModelAdjustment (line 6284) | function boxModelAdjustment( elem, dimension, box, isBorderBox, styles, ...
  function getWidthOrHeight (line 6349) | function getWidthOrHeight( elem, dimension, extra ) {
  function Tween (line 6682) | function Tween( elem, options, prop, end, easing ) {
  function schedule (line 6805) | function schedule() {
  function createFxNow (line 6818) | function createFxNow() {
  function genFx (line 6826) | function genFx( type, includeWidth ) {
  function createTween (line 6846) | function createTween( value, prop, animation ) {
  function defaultPrefilter (line 6860) | function defaultPrefilter( elem, props, opts ) {
  function propFilter (line 7032) | function propFilter( props, specialEasing ) {
  function Animation (line 7069) | function Animation( elem, properties, options ) {
  function stripAndCollapse (line 7784) | function stripAndCollapse( value ) {
  function getClass (line 7790) | function getClass( elem ) {
  function classesToArray (line 7794) | function classesToArray( value ) {
  function buildParams (line 8416) | function buildParams( prefix, obj, traditional, add ) {
  function addToPrefiltersOrTransports (line 8566) | function addToPrefiltersOrTransports( structure ) {
  function inspectPrefiltersOrTransports (line 8600) | function inspectPrefiltersOrTransports( structure, options, originalOpti...
  function ajaxExtend (line 8629) | function ajaxExtend( target, src ) {
  function ajaxHandleResponses (line 8649) | function ajaxHandleResponses( s, jqXHR, responses ) {
  function ajaxConvert (line 8707) | function ajaxConvert( s, response, jqXHR, isSuccess ) {
  function done (line 9220) | function done( status, nativeStatusText, responses, headers ) {

FILE: tests/benchmarks/highlighting-speed-src/miniz.c
  function mz_ulong (line 39) | mz_ulong mz_adler32(mz_ulong adler, const unsigned char *ptr, size_t buf...
  function mz_ulong (line 69) | mz_ulong mz_crc32(mz_ulong crc, const mz_uint8 *ptr, size_t buf_len)
  function mz_ulong (line 88) | mz_ulong mz_crc32(mz_ulong crc, const mz_uint8 *ptr, size_t buf_len)
  function mz_free (line 155) | void mz_free(void *p)
  function miniz_def_free_func (line 165) | void miniz_def_free_func(void *opaque, void *address)
  function mz_deflateInit (line 183) | int mz_deflateInit(mz_streamp pStream, int level)
  function mz_deflateInit2 (line 188) | int mz_deflateInit2(mz_streamp pStream, int level, int method, int windo...
  function mz_deflateReset (line 224) | int mz_deflateReset(mz_streamp pStream)
  function mz_deflate (line 233) | int mz_deflate(mz_streamp pStream, int flush)
  function mz_deflateEnd (line 291) | int mz_deflateEnd(mz_streamp pStream)
  function mz_ulong (line 303) | mz_ulong mz_deflateBound(mz_streamp pStream, mz_ulong source_len)
  function mz_compress2 (line 310) | int mz_compress2(unsigned char *pDest, mz_ulong *pDest_len, const unsign...
  function mz_compress (line 340) | int mz_compress(unsigned char *pDest, mz_ulong *pDest_len, const unsigne...
  function mz_ulong (line 345) | mz_ulong mz_compressBound(mz_ulong source_len)
  type inflate_state (line 350) | typedef struct
  function mz_inflateInit2 (line 359) | int mz_inflateInit2(mz_streamp pStream, int window_bits)
  function mz_inflateInit (line 395) | int mz_inflateInit(mz_streamp pStream)
  function mz_inflate (line 400) | int mz_inflate(mz_streamp pStream, int flush)
  function mz_inflateEnd (line 512) | int mz_inflateEnd(mz_streamp pStream)
  function mz_uncompress (line 524) | int mz_uncompress(unsigned char *pDest, mz_ulong *pDest_len, const unsig...

FILE: tests/benchmarks/highlighting-speed-src/numpy_test_multiarray.py
  function _aligned_zeros (line 39) | def _aligned_zeros(shape, dtype=float, order="C", align=None):
  class TestFlags (line 75) | class TestFlags:
    method setup (line 76) | def setup(self):
    method test_writeable (line 79) | def test_writeable(self):
    method test_writeable_any_base (line 88) | def test_writeable_any_base(self):
    method test_writeable_from_readonly (line 121) | def test_writeable_from_readonly(self):
    method test_writeable_from_buffer (line 132) | def test_writeable_from_buffer(self):
    method test_writeable_pickle (line 150) | def test_writeable_pickle(self):
    method test_writeable_from_c_data (line 161) | def test_writeable_from_c_data(self):
    method test_warnonwrite (line 201) | def test_warnonwrite(self):
    method test_otherflags (line 211) | def test_otherflags(self):
    method test_string_align (line 230) | def test_string_align(self):
    method test_void_align (line 237) | def test_void_align(self):
  class TestHash (line 242) | class TestHash:
    method test_int (line 244) | def test_int(self):
  class TestAttributes (line 264) | class TestAttributes:
    method setup (line 265) | def setup(self):
    method test_attributes (line 270) | def test_attributes(self):
    method test_dtypeattr (line 291) | def test_dtypeattr(self):
    method test_int_subclassing (line 300) | def test_int_subclassing(self):
    method test_stridesattr (line 308) | def test_stridesattr(self):
    method test_set_stridesattr (line 325) | def test_set_stridesattr(self):
    method test_fill (line 364) | def test_fill(self):
    method test_fill_max_uint64 (line 372) | def test_fill_max_uint64(self):
    method test_fill_struct_array (line 380) | def test_fill_struct_array(self):
  class TestArrayConstruction (line 393) | class TestArrayConstruction:
    method test_array (line 394) | def test_array(self):
    method test_array_empty (line 433) | def test_array_empty(self):
    method test_array_copy_false (line 436) | def test_array_copy_false(self):
    method test_array_copy_true (line 447) | def test_array_copy_true(self):
    method test_array_cont (line 460) | def test_array_cont(self):
  class TestAssignment (line 471) | class TestAssignment:
    method test_assignment_broadcasting (line 472) | def test_assignment_broadcasting(self):
    method test_assignment_errors (line 498) | def test_assignment_errors(self):
    method test_unicode_assignment (line 510) | def test_unicode_assignment(self):
    method test_stringlike_empty_list (line 532) | def test_stringlike_empty_list(self):
    method test_longdouble_assignment (line 547) | def test_longdouble_assignment(self):
    method test_cast_to_string (line 579) | def test_cast_to_string(self):
  class TestDtypedescr (line 588) | class TestDtypedescr:
    method test_construction (line 589) | def test_construction(self):
    method test_byteorders (line 595) | def test_byteorders(self):
    method test_structured_non_void (line 599) | def test_structured_non_void(self):
  class TestZeroRank (line 610) | class TestZeroRank:
    method setup (line 611) | def setup(self):
    method test_ellipsis_subscript (line 614) | def test_ellipsis_subscript(self):
    method test_empty_subscript (line 621) | def test_empty_subscript(self):
    method test_invalid_subscript (line 628) | def test_invalid_subscript(self):
    method test_ellipsis_subscript_assignment (line 635) | def test_ellipsis_subscript_assignment(self):
    method test_empty_subscript_assignment (line 642) | def test_empty_subscript_assignment(self):
    method test_invalid_subscript_assignment (line 649) | def test_invalid_subscript_assignment(self):
    method test_newaxis (line 659) | def test_newaxis(self):
    method test_invalid_newaxis (line 670) | def test_invalid_newaxis(self):
    method test_constructor (line 679) | def test_constructor(self):
    method test_output (line 693) | def test_output(self):
    method test_real_imag (line 697) | def test_real_imag(self):
  class TestScalarIndexing (line 714) | class TestScalarIndexing:
    method setup (line 715) | def setup(self):
    method test_ellipsis_subscript (line 718) | def test_ellipsis_subscript(self):
    method test_empty_subscript (line 723) | def test_empty_subscript(self):
    method test_invalid_subscript (line 728) | def test_invalid_subscript(self):
    method test_invalid_subscript_assignment (line 733) | def test_invalid_subscript_assignment(self):
    method test_newaxis (line 741) | def test_newaxis(self):
    method test_invalid_newaxis (line 752) | def test_invalid_newaxis(self):
    method test_overlapping_assignment (line 761) | def test_overlapping_assignment(self):
  class TestCreation (line 810) | class TestCreation:
    method test_from_attribute (line 814) | def test_from_attribute(self):
    method test_from_string (line 821) | def test_from_string(self):
    method test_void (line 829) | def test_void(self):
    method test_too_big_error (line 833) | def test_too_big_error(self):
    method test_malloc_fails (line 850) | def test_malloc_fails(self):
    method test_zeros (line 855) | def test_zeros(self):
    method test_zeros_big (line 878) | def test_zeros_big(self):
    method test_zeros_obj (line 889) | def test_zeros_obj(self):
    method test_zeros_obj_obj (line 895) | def test_zeros_obj_obj(self):
    method test_zeros_like_like_zeros (line 899) | def test_zeros_like_like_zeros(self):
    method test_empty_unicode (line 933) | def test_empty_unicode(self):
    method test_sequence_non_homogenous (line 939) | def test_sequence_non_homogenous(self):
    method test_non_sequence_sequence (line 948) | def test_non_sequence_sequence(self):
    method test_no_len_object_type (line 976) | def test_no_len_object_type(self):
    method test_false_len_sequence (line 990) | def test_false_len_sequence(self):
    method test_false_len_iterable (line 1001) | def test_false_len_iterable(self):
    method test_failed_len_sequence (line 1015) | def test_failed_len_sequence(self):
    method test_array_too_big (line 1029) | def test_array_too_big(self):
    method _ragged_creation (line 1044) | def _ragged_creation(self, seq):
    method test_ragged_ndim_object (line 1052) | def test_ragged_ndim_object(self):
    method test_ragged_shape_object (line 1066) | def test_ragged_shape_object(self):
    method test_array_of_ragged_array (line 1080) | def test_array_of_ragged_array(self):
    method test_deep_nonragged_object (line 1093) | def test_deep_nonragged_object(self):
  class TestStructured (line 1099) | class TestStructured:
    method test_subarray_field_access (line 1100) | def test_subarray_field_access(self):
    method test_subarray_comparison (line 1114) | def test_subarray_comparison(self):
    method test_casting (line 1183) | def test_casting(self):
    method test_objview (line 1241) | def test_objview(self):
    method test_setfield (line 1250) | def test_setfield(self):
    method test_setfield_object (line 1259) | def test_setfield_object(self):
    method test_zero_width_string (line 1275) | def test_zero_width_string(self):
    method test_base_attr (line 1331) | def test_base_attr(self):
    method test_assignment (line 1336) | def test_assignment(self):
    method test_scalar_assignment (line 1373) | def test_scalar_assignment(self):
    method test_structuredscalar_indexing (line 1378) | def test_structuredscalar_indexing(self):
    method test_multiindex_titles (line 1384) | def test_multiindex_titles(self):
  class TestBool (line 1392) | class TestBool:
    method test_test_interning (line 1393) | def test_test_interning(self):
    method test_sum (line 1403) | def test_sum(self):
    method check_count_nonzero (line 1414) | def check_count_nonzero(self, power, length):
    method test_count_nonzero (line 1429) | def test_count_nonzero(self):
    method test_count_nonzero_all (line 1435) | def test_count_nonzero_all(self):
    method test_count_nonzero_unaligned (line 1440) | def test_count_nonzero_unaligned(self):
    method _test_cast_from_flexible (line 1450) | def _test_cast_from_flexible(self, dtype):
    method test_cast_from_void (line 1470) | def test_cast_from_void(self):
    method test_cast_from_unicode (line 1474) | def test_cast_from_unicode(self):
    method test_cast_from_bytes (line 1478) | def test_cast_from_bytes(self):
  class TestZeroSizeFlexible (line 1482) | class TestZeroSizeFlexible:
    method _zeros (line 1484) | def _zeros(shape, dtype=str):
    method test_create (line 1493) | def test_create(self):
    method _test_sort_partition (line 1501) | def _test_sort_partition(self, name, kinds, **kwargs):
    method test_sort (line 1511) | def test_sort(self):
    method test_argsort (line 1514) | def test_argsort(self):
    method test_partition (line 1517) | def test_partition(self):
    method test_argpartition (line 1520) | def test_argpartition(self):
    method test_resize (line 1523) | def test_resize(self):
    method test_view (line 1530) | def test_view(self):
    method test_dumps (line 1540) | def test_dumps(self):
    method test_pickle (line 1544) | def test_pickle(self):
    method test_pickle_with_buffercallback (line 1555) | def test_pickle_with_buffercallback(self):
  class TestMethods (line 1569) | class TestMethods:
    method test_compress (line 1573) | def test_compress(self):
    method test_choose (line 1592) | def test_choose(self):
    method test_prod (line 1617) | def test_prod(self):
    method test_repeat (line 1635) | def test_repeat(self):
    method test_reshape (line 1666) | def test_reshape(self):
    method test_round (line 1681) | def test_round(self):
    method test_squeeze (line 1698) | def test_squeeze(self):
    method test_transpose (line 1705) | def test_transpose(self):
    method test_sort (line 1712) | def test_sort(self):
    method test_sort_unsigned (line 1740) | def test_sort_unsigned(self, dtype):
    method test_sort_signed (line 1755) | def test_sort_signed(self, dtype):
    method test_sort_complex (line 1769) | def test_sort_complex(self, part, dtype):
    method test_sort_complex_byte_swapping (line 1792) | def test_sort_complex_byte_swapping(self):
    method test_sort_string (line 1803) | def test_sort_string(self, dtype):
    method test_sort_object (line 1816) | def test_sort_object(self):
    method test_sort_structured (line 1830) | def test_sort_structured(self):
    method test_sort_time (line 1845) | def test_sort_time(self, dtype):
    method test_sort_axis (line 1858) | def test_sort_axis(self):
    method test_sort_size_0 (line 1874) | def test_sort_size_0(self):
    method test_sort_bad_ordering (line 1884) | def test_sort_bad_ordering(self):
    method test_void_sort (line 1898) | def test_void_sort(self):
    method test_sort_raises (line 1911) | def test_sort_raises(self):
    method test_sort_degraded (line 1926) | def test_sort_degraded(self):
    method test_copy (line 1941) | def test_copy(self):
    method test_sort_order (line 1966) | def test_sort_order(self):
    method test_argsort (line 2003) | def test_argsort(self):
    method test_sort_unicode_kind (line 2140) | def test_sort_unicode_kind(self):
    method test_searchsorted (line 2146) | def test_searchsorted(self):
    method test_searchsorted_unicode (line 2248) | def test_searchsorted_unicode(self):
    method test_searchsorted_with_invalid_sorter (line 2275) | def test_searchsorted_with_invalid_sorter(self):
    method test_searchsorted_with_sorter (line 2289) | def test_searchsorted_with_sorter(self):
    method test_searchsorted_return_type (line 2366) | def test_searchsorted_return_type(self):
    method test_argpartition_out_of_range (line 2378) | def test_argpartition_out_of_range(self):
    method test_partition_out_of_range (line 2389) | def test_partition_out_of_range(self):
    method test_argpartition_integer (line 2400) | def test_argpartition_integer(self):
    method test_partition_integer (line 2409) | def test_partition_integer(self):
    method test_partition_empty_array (line 2418) | def test_partition_empty_array(self):
    method test_argpartition_empty_array (line 2428) | def test_argpartition_empty_array(self):
    method test_partition (line 2440) | def test_partition(self):
    method assert_partitioned (line 2648) | def assert_partitioned(self, d, kth):
    method test_partition_iterative (line 2656) | def test_partition_iterative(self):
    method test_partition_cdtype (line 2724) | def test_partition_cdtype(self):
    method test_partition_unicode_kind (line 2749) | def test_partition_unicode_kind(self):
    method test_partition_fuzz (line 2755) | def test_partition_fuzz(self):
    method test_argpartition_gh5524 (line 2768) | def test_argpartition_gh5524(self):
    method test_flatten (line 2774) | def test_flatten(self):
    method test_arr_mult (line 2790) | def test_arr_mult(self, func):
    method test_no_dgemv (line 2869) | def test_no_dgemv(self, func, dtype):
    method test_dot (line 2897) | def test_dot(self):
    method test_dot_type_mismatch (line 2915) | def test_dot_type_mismatch(self):
    method test_dot_out_mem_overlap (line 2922) | def test_dot_out_mem_overlap(self):
    method test_dot_matmul_out (line 2944) | def test_dot_matmul_out(self):
    method test_dot_matmul_inner_array_casting_fails (line 2956) | def test_dot_matmul_inner_array_casting_fails(self):
    method test_matmul_out (line 2967) | def test_matmul_out(self):
    method test_diagonal (line 2979) | def test_diagonal(self):
    method test_diagonal_view_notwriteable (line 3002) | def test_diagonal_view_notwriteable(self):
    method test_diagonal_memleak (line 3015) | def test_diagonal_memleak(self):
    method test_size_zero_memleak (line 3025) | def test_size_zero_memleak(self):
    method test_trace (line 3036) | def test_trace(self):
    method test_trace_subclass (line 3053) | def test_trace_subclass(self):
    method test_put (line 3063) | def test_put(self):
    method test_ravel (line 3103) | def test_ravel(self):
    method test_ravel_subclass (line 3194) | def test_ravel_subclass(self):
    method test_swapaxes (line 3210) | def test_swapaxes(self):
    method test_conjugate (line 3242) | def test_conjugate(self):
    method test__complex__ (line 3279) | def test__complex__(self):
    method test__complex__should_not_work (line 3297) | def test__complex__should_not_work(self):
  class TestCequenceMethods (line 3319) | class TestCequenceMethods:
    method test_array_contains (line 3320) | def test_array_contains(self):
  class TestBinop (line 3324) | class TestBinop:
    method test_inplace (line 3325) | def test_inplace(self):
    method test_ufunc_binop_interaction (line 3362) | def test_ufunc_binop_interaction(self):
    method test_ufunc_override_normalize_signature (line 3546) | def test_ufunc_override_normalize_signature(self):
    method test_array_ufunc_index (line 3562) | def test_array_ufunc_index(self):
    method test_out_override (line 3610) | def test_out_override(self):
    method test_pow_override_with_errors (line 3631) | def test_pow_override_with_errors(self):
    method test_pow_array_object_dtype (line 3652) | def test_pow_array_object_dtype(self):
    method test_pos_array_ufunc_override (line 3685) | def test_pos_array_ufunc_override(self):
  class TestTemporaryElide (line 3695) | class TestTemporaryElide:
    method test_extension_incref_elide (line 3698) | def test_extension_incref_elide(self):
    method test_extension_incref_elide_stack (line 3713) | def test_extension_incref_elide_stack(self):
    method test_temporary_with_cast (line 3728) | def test_temporary_with_cast(self):
    method test_elide_broadcast (line 3761) | def test_elide_broadcast(self):
    method test_elide_scalar (line 3771) | def test_elide_scalar(self):
    method test_elide_scalar_readonly (line 3776) | def test_elide_scalar_readonly(self):
    method test_elide_readonly (line 3785) | def test_elide_readonly(self):
    method test_elide_updateifcopy (line 3790) | def test_elide_updateifcopy(self):
  class TestCAPI (line 3797) | class TestCAPI:
    method test_IsPythonScalar (line 3798) | def test_IsPythonScalar(self):
  class TestSubscripting (line 3807) | class TestSubscripting:
    method test_test_zero_rank (line 3808) | def test_test_zero_rank(self):
  class TestPickling (line 3814) | class TestPickling:
    method test_correct_protocol5_error_message (line 3818) | def test_correct_protocol5_error_message(self):
    method test_record_array_with_object_dtype (line 3835) | def test_record_array_with_object_dtype(self):
    method test_f_contiguous_array (line 3858) | def test_f_contiguous_array(self):
    method test_non_contiguous_array (line 3874) | def test_non_contiguous_array(self):
    method test_roundtrip (line 3887) | def test_roundtrip(self):
    method _loads (line 3908) | def _loads(self, obj):
    method test_version0_int8 (line 3913) | def test_version0_int8(self):
    method test_version0_float32 (line 3919) | def test_version0_float32(self):
    method test_version0_object (line 3925) | def test_version0_object(self):
    method test_version1_int8 (line 3932) | def test_version1_int8(self):
    method test_version1_float32 (line 3938) | def test_version1_float32(self):
    method test_version1_object (line 3944) | def test_version1_object(self):
    method test_subarray_int_shape (line 3950) | def test_subarray_int_shape(self):
    method test_datetime64_byteorder (line 3956) | def test_datetime64_byteorder(self):
  class TestFancyIndexing (line 3968) | class TestFancyIndexing:
    method test_list (line 3969) | def test_list(self):
    method test_tuple (line 3978) | def test_tuple(self):
    method test_mask (line 3986) | def test_mask(self):
    method test_mask2 (line 3991) | def test_mask2(self):
    method test_assign_mask (line 4000) | def test_assign_mask(self):
    method test_assign_mask2 (line 4006) | def test_assign_mask2(self):
  class TestStringCompare (line 4022) | class TestStringCompare:
    method test_string (line 4023) | def test_string(self):
    method test_mixed (line 4033) | def test_mixed(self):
    method test_unicode (line 4043) | def test_unicode(self):
  class TestArgmax (line 4054) | class TestArgmax:
    method test_all (line 4119) | def test_all(self):
    method test_combinations (line 4128) | def test_combinations(self):
    method test_output_shape (line 4138) | def test_output_shape(self):
    method test_argmax_unicode (line 4156) | def test_argmax_unicode(self):
    method test_np_vs_ndarray (line 4161) | def test_np_vs_ndarray(self):
    method test_object_argmax_with_NULLs (line 4178) | def test_object_argmax_with_NULLs(self):
  class TestArgmin (line 4189) | class TestArgmin:
    method test_all (line 4254) | def test_all(self):
    method test_combinations (line 4263) | def test_combinations(self):
    method test_minimum_signed_integers (line 4273) | def test_minimum_signed_integers(self):
    method test_output_shape (line 4287) | def test_output_shape(self):
    method test_argmin_unicode (line 4305) | def test_argmin_unicode(self):
    method test_np_vs_ndarray (line 4310) | def test_np_vs_ndarray(self):
    method test_object_argmin_with_NULLs (line 4327) | def test_object_argmin_with_NULLs(self):
  class TestMinMax (line 4338) | class TestMinMax:
    method test_scalar (line 4340) | def test_scalar(self):
    method test_axis (line 4349) | def test_axis(self):
    method test_datetime (line 4353) | def test_datetime(self):
  class TestNewaxis (line 4364) | class TestNewaxis:
    method test_basic (line 4365) | def test_basic(self):
  class TestClip (line 4371) | class TestClip:
    method _check_range (line 4372) | def _check_range(self, x, cmin, cmax):
    method _clip_type (line 4376) | def _clip_type(self, type_group, array_max,
    method test_basic (line 4410) | def test_basic(self):
    method test_record_array (line 4427) | def test_record_array(self):
    method test_max_or_min (line 4433) | def test_max_or_min(self):
    method test_nan (line 4442) | def test_nan(self):
  class TestCompress (line 4449) | class TestCompress:
    method test_axis (line 4450) | def test_axis(self):
    method test_truncate (line 4460) | def test_truncate(self):
    method test_flatten (line 4466) | def test_flatten(self):
  class TestPutmask (line 4472) | class TestPutmask:
    method tst_basic (line 4473) | def tst_basic(self, x, T, mask, val):
    method test_ip_types (line 4477) | def test_ip_types(self):
    method test_mask_size (line 4493) | def test_mask_size(self):
    method test_byteorder (line 4497) | def test_byteorder(self, dtype):
    method test_record_array (line 4502) | def test_record_array(self):
    method test_overlaps (line 4515) | def test_overlaps(self):
  class TestTake (line 4526) | class TestTake:
    method tst_basic (line 4527) | def tst_basic(self, x):
    method test_ip_types (line 4531) | def test_ip_types(self):
    method test_raise (line 4544) | def test_raise(self):
    method test_clip (line 4551) | def test_clip(self):
    method test_wrap (line 4557) | def test_wrap(self):
    method test_byteorder (line 4565) | def test_byteorder(self, dtype):
    method test_record_array (line 4569) | def test_record_array(self):
    method test_out_overlap (line 4576) | def test_out_overlap(self):
  class TestLexsort (line 4582) | class TestLexsort:
    method test_basic (line 4588) | def test_basic(self, dtype):
    method test_mixed (line 4596) | def test_mixed(self):
    method test_datetime (line 4604) | def test_datetime(self):
    method test_object (line 4617) | def test_object(self):  # gh-6312
    method test_invalid_axis (line 4633) | def test_invalid_axis(self): # gh-7528
  class TestIO (line 4637) | class TestIO:
    method setup (line 4640) | def setup(self):
    method teardown (line 4649) | def teardown(self):
    method test_nofile (line 4652) | def test_nofile(self):
    method test_bool_fromstring (line 4660) | def test_bool_fromstring(self):
    method test_uint64_fromstring (line 4665) | def test_uint64_fromstring(self):
    method test_int64_fromstring (line 4671) | def test_int64_fromstring(self):
    method test_empty_files_binary (line 4677) | def test_empty_files_binary(self):
    method test_empty_files_text (line 4683) | def test_empty_files_text(self):
    method test_roundtrip_file (line 4689) | def test_roundtrip_file(self):
    method test_roundtrip_filename (line 4697) | def test_roundtrip_filename(self):
    method test_roundtrip_pathlib (line 4702) | def test_roundtrip_pathlib(self):
    method test_roundtrip_dump_pathlib (line 4708) | def test_roundtrip_dump_pathlib(self):
    method test_roundtrip_binary_str (line 4714) | def test_roundtrip_binary_str(self):
    method test_roundtrip_str (line 4723) | def test_roundtrip_str(self):
    method test_roundtrip_repr (line 4732) | def test_roundtrip_repr(self):
    method test_unseekable_fromfile (line 4738) | def test_unseekable_fromfile(self):
    method test_io_open_unbuffered_fromfile (line 4750) | def test_io_open_unbuffered_fromfile(self):
    method test_largish_file (line 4757) | def test_largish_file(self):
    method test_io_open_buffered_fromfile (line 4777) | def test_io_open_buffered_fromfile(self):
    method test_file_position_after_fromfile (line 4784) | def test_file_position_after_fromfile(self):
    method test_file_position_after_tofile (line 4804) | def test_file_position_after_tofile(self):
    method test_load_object_array_fromfile (line 4829) | def test_load_object_array_fromfile(self):
    method test_fromfile_offset (line 4842) | def test_fromfile_offset(self):
    method _check_from (line 4872) | def _check_from(self, s, value, **kw):
    method test_nan (line 4884) | def test_nan(self):
    method test_inf (line 4890) | def test_inf(self):
    method test_numbers (line 4896) | def test_numbers(self):
    method test_binary (line 4900) | def test_binary(self):
    method test_big_binary (line 4906) | def test_big_binary(self):
    method test_string (line 4930) | def test_string(self):
    method test_counted_string (line 4933) | def test_counted_string(self):
    method test_string_with_ws (line 4938) | def test_string_with_ws(self):
    method test_counted_string_with_ws (line 4941) | def test_counted_string_with_ws(self):
    method test_ascii (line 4945) | def test_ascii(self):
    method test_malformed (line 4949) | def test_malformed(self):
    method test_long_sep (line 4953) | def test_long_sep(self):
    method test_dtype (line 4956) | def test_dtype(self):
    method test_dtype_bool (line 4960) | def test_dtype_bool(self):
    method test_tofile_sep (line 4970) | def test_tofile_sep(self):
    method test_tofile_format (line 4980) | def test_tofile_format(self):
    method test_locale (line 4988) | def test_locale(self):
    method test_fromfile_subarray_binary (line 4999) | def test_fromfile_subarray_binary(self):
  class TestFromBuffer (line 5013) | class TestFromBuffer:
    method test_basic (line 5016) | def test_basic(self, byteorder, dtype):
    method test_empty (line 5022) | def test_empty(self):
  class TestFlat (line 5026) | class TestFlat:
    method setup (line 5027) | def setup(self):
    method test_contiguous (line 5037) | def test_contiguous(self):
    method test_discontiguous (line 5046) | def test_discontiguous(self):
    method test___array__ (line 5055) | def test___array__(self):
    method test_refcount (line 5082) | def test_refcount(self):
  class TestResize (line 5098) | class TestResize:
    method test_basic (line 5101) | def test_basic(self):
    method test_check_reference (line 5111) | def test_check_reference(self):
    method test_int_shape (line 5118) | def test_int_shape(self):
    method test_none_shape (line 5126) | def test_none_shape(self):
    method test_0d_shape (line 5133) | def test_0d_shape(self):
    method test_invalid_arguments (line 5145) | def test_invalid_arguments(self):
    method test_freeform_shape (line 5152) | def test_freeform_shape(self):
    method test_zeros_appended (line 5161) | def test_zeros_appended(self):
    method test_obj_obj (line 5171) | def test_obj_obj(self):
    method test_empty_view (line 5182) | def test_empty_view(self):
    method test_check_weakref (line 5190) | def test_check_weakref(self):
  class TestRecord (line 5197) | class TestRecord:
    method test_field_rename (line 5198) | def test_field_rename(self):
    method test_multiple_field_name_occurrence (line 5203) | def test_multiple_field_name_occurrence(self):
    method test_bytes_fields (line 5210) | def test_bytes_fields(self):
    method test_multiple_field_name_unicode (line 5225) | def test_multiple_field_name_unicode(self):
    method test_fromarrays_unicode (line 5232) | def test_fromarrays_unicode(self):
    method test_unicode_order (line 5239) | def test_unicode_order(self):
    method test_field_names (line 5247) | def test_field_names(self):
    method test_record_hash (line 5288) | def test_record_hash(self):
    method test_record_no_hash (line 5300) | def test_record_no_hash(self):
    method test_empty_structure_creation (line 5304) | def test_empty_structure_creation(self):
    method test_multifield_indexing_view (line 5311) | def test_multifield_indexing_view(self):
  class TestView (line 5321) | class TestView:
    method test_basic (line 5322) | def test_basic(self):
  function _mean (line 5334) | def _mean(a, **args):
  function _var (line 5338) | def _var(a, **args):
  function _std (line 5342) | def _std(a, **args):
  class TestStats (line 5346) | class TestStats:
    method setup (line 5350) | def setup(self):
    method test_python_type (line 5357) | def test_python_type(self):
    method test_keepdims (line 5363) | def test_keepdims(self):
    method test_out (line 5374) | def test_out(self):
    method test_dtype_from_input (line 5387) | def test_dtype_from_input(self):
    method test_dtype_from_dtype (line 5436) | def test_dtype_from_dtype(self):
    method test_ddof (line 5463) | def test_ddof(self):
    method test_ddof_too_big (line 5477) | def test_ddof_too_big(self):
    method test_empty (line 5488) | def test_empty(self):
    method test_mean_values (line 5502) | def test_mean_values(self):
    method test_mean_float16 (line 5513) | def test_mean_float16(self):
    method test_mean_axis_error (line 5518) | def test_mean_axis_error(self):
    method test_var_values (line 5524) | def test_var_values(self):
    method test_var_complex_values (line 5538) | def test_var_complex_values(self, complex_dtype, ndec):
    method test_var_dimensions (line 5548) | def test_var_dimensions(self):
    method test_var_complex_byteorder (line 5559) | def test_var_complex_byteorder(self):
    method test_var_axis_error (line 5566) | def test_var_axis_error(self):
    method test_std_values (line 5572) | def test_std_values(self):
    method test_subclass (line 5579) | def test_subclass(self):
  class TestVdot (line 5598) | class TestVdot:
    method test_basic (line 5599) | def test_basic(self):
    method test_vdot_array_order (line 5625) | def test_vdot_array_order(self):
    method test_vdot_uncontiguous (line 5635) | def test_vdot_uncontiguous(self):
  class TestDot (line 5658) | class TestDot:
    method setup (line 5659) | def setup(self):
    method test_dotmatmat (line 5668) | def test_dotmatmat(self):
    method test_dotmatvec (line 5675) | def test_dotmatvec(self):
    method test_dotmatvec2 (line 5682) | def test_dotmatvec2(self):
    method test_dotvecmat (line 5688) | def test_dotvecmat(self):
    method test_dotvecmat2 (line 5694) | def test_dotvecmat2(self):
    method test_dotvecmat3 (line 5700) | def test_dotvecmat3(self):
    method test_dotvecvecouter (line 5706) | def test_dotvecvecouter(self):
    method test_dotvecvecinner (line 5712) | def test_dotvecvecinner(self):
    method test_dotcolumnvect1 (line 5718) | def test_dotcolumnvect1(self):
    method test_dotcolumnvect2 (line 5725) | def test_dotcolumnvect2(self):
    method test_dotvecscalar (line 5732) | def test_dotvecscalar(self):
    method test_dotvecscalar2 (line 5740) | def test_dotvecscalar2(self):
    method test_all (line 5748) | def test_all(self):
    method test_vecobject (line 5759) | def test_vecobject(self):
    method test_dot_2args (line 5792) | def test_dot_2args(self):
    method test_dot_3args (line 5802) | def test_dot_3args(self):
    method test_dot_3args_errors (line 5824) | def test_dot_3args_errors(self):
    method test_dot_array_order (line 5854) | def test_dot_array_order(self):
    method test_accelerate_framework_sgemv_fix (line 5864) | def test_accelerate_framework_sgemv_fix(self):
  class MatmulCommon (line 5929) | class MatmulCommon:
    method test_exceptions (line 5937) | def test_exceptions(self):
    method test_shapes (line 5955) | def test_shapes(self):
    method test_result_types (line 5975) | def test_result_types(self):
    method test_scalar_output (line 5990) | def test_scalar_output(self):
    method test_vector_vector_values (line 6007) | def test_vector_vector_values(self):
    method test_vector_matrix_values (line 6026) | def test_vector_matrix_values(self):
    method test_matrix_vector_values (line 6053) | def test_matrix_vector_values(self):
    method test_matrix_matrix_values (line 6080) | def test_matrix_matrix_values(self):
  class TestMatmul (line 6146) | class TestMatmul(MatmulCommon):
    method test_out_arg (line 6149) | def test_out_arg(self):
    method test_out_contiguous (line 6180) | def test_out_contiguous(self):
    method test_dot_equivalent (line 6232) | def test_dot_equivalent(self, args):
    method test_matmul_object (line 6240) | def test_matmul_object(self):
    method test_matmul_object_type_scalar (line 6255) | def test_matmul_object_type_scalar(self):
    method test_matmul_empty (line 6261) | def test_matmul_empty(self):
    method test_matmul_exception_multiply (line 6267) | def test_matmul_exception_multiply(self):
    method test_matmul_exception_add (line 6276) | def test_matmul_exception_add(self):
    method test_matmul_bool (line 6285) | def test_matmul_bool(self):
  class TestMatmulOperator (line 6304) | class TestMatmulOperator(MatmulCommon):
    method test_array_priority_override (line 6308) | def test_array_priority_override(self):
    method test_matmul_raises (line 6324) | def test_matmul_raises(self):
  function test_matmul_inplace (line 6329) | def test_matmul_inplace():
  function test_matmul_axes (line 6340) | def test_matmul_axes():
  class TestInner (line 6352) | class TestInner:
    method test_inner_type_mismatch (line 6354) | def test_inner_type_mismatch(self):
    method test_inner_scalar_and_vector (line 6361) | def test_inner_scalar_and_vector(self):
    method test_vecself (line 6369) | def test_vecself(self):
    method test_inner_product_with_various_contiguities (line 6377) | def test_inner_product_with_various_contiguities(self):
    method test_3d_tensor (line 6402) | def test_3d_tensor(self):
  class TestAlen (line 6430) | class TestAlen:
    method test_basic (line 6431) | def test_basic(self):
    method test_singleton (line 6445) | def test_singleton(self):
  class TestChoose (line 6450) | class TestChoose:
    method setup (line 6451) | def setup(self):
    method test_basic (line 6458) | def test_basic(self):
    method test_broadcast1 (line 6462) | def test_broadcast1(self):
    method test_broadcast2 (line 6466) | def test_broadcast2(self):
    method test_output_dtype (line 6475) | def test_output_dtype(self, ops):
  class TestRepeat (line 6480) | class TestRepeat:
    method setup (line 6481) | def setup(self):
    method test_basic (line 6485) | def test_basic(self):
    method test_broadcast1 (line 6490) | def test_broadcast1(self):
    method test_axis_spec (line 6495) | def test_axis_spec(self):
    method test_broadcast2 (line 6505) | def test_broadcast2(self):
  class TestNeighborhoodIter (line 6522) | class TestNeighborhoodIter:
    method test_simple2d (line 6524) | def test_simple2d(self, dt):
    method test_mirror2d (line 6551) | def test_mirror2d(self, dt):
    method test_simple (line 6562) | def test_simple(self, dt):
    method test_mirror (line 6581) | def test_mirror(self, dt):
    method test_circular (line 6591) | def test_circular(self, dt):
  class TestStackedNeighborhoodIter (line 6601) | class TestStackedNeighborhoodIter:
    method test_simple_const (line 6603) | def test_simple_const(self):
    method test_simple_mirror (line 6629) | def test_simple_mirror(self):
    method test_simple_circular (line 6677) | def test_simple_circular(self):
    method test_simple_strict_within (line 6725) | def test_simple_strict_within(self):
  class TestWarnings (line 6751) | class TestWarnings:
    method test_complex_warning (line 6753) | def test_complex_warning(self):
  class TestMinScalarType (line 6763) | class TestMinScalarType:
    method test_usigned_shortshort (line 6765) | def test_usigned_shortshort(self):
    method test_usigned_short (line 6770) | def test_usigned_short(self):
    method test_usigned_int (line 6775) | def test_usigned_int(self):
    method test_usigned_longlong (line 6780) | def test_usigned_longlong(self):
    method test_object (line 6785) | def test_object(self):
  class TestPEP3118Dtype (line 6794) | class TestPEP3118Dtype:
    method _check (line 6795) | def _check(self, spec, wanted):
    method test_native_padding (line 6801) | def test_native_padding(self):
    method test_native_padding_2 (line 6813) | def test_native_padding_2(self):
    method test_trailing_padding (line 6818) | def test_trailing_padding(self):
    method test_native_padding_3 (line 6841) | def test_native_padding_3(self):
    method test_padding_with_array_inside_struct (line 6853) | def test_padding_with_array_inside_struct(self):
    method test_byteorder_inside_struct (line 6860) | def test_byteorder_inside_struct(self):
    method test_intra_padding (line 6866) | def test_intra_padding(self):
    method test_char_vs_string (line 6881) | def test_char_vs_string(self):
    method test_field_order (line 6888) | def test_field_order(self):
    method test_unnamed_fields (line 6893) | def test_unnamed_fields(self):
  class TestNewBufferProtocol (line 6901) | class TestNewBufferProtocol:
    method _check_roundtrip (line 6904) | def _check_roundtrip(self, obj):
    method test_roundtrip (line 6920) | def test_roundtrip(self):
    method test_roundtrip_half (line 6990) | def test_roundtrip_half(self):
    method test_roundtrip_single_types (line 7009) | def test_roundtrip_single_types(self):
    method test_roundtrip_scalar (line 7032) | def test_roundtrip_scalar(self):
    method test_invalid_buffer_format (line 7036) | def test_invalid_buffer_format(self):
    method test_export_simple_1d (line 7044) | def test_export_simple_1d(self):
    method test_export_simple_nd (line 7054) | def test_export_simple_nd(self):
    method test_export_discontiguous (line 7064) | def test_export_discontiguous(self):
    method test_export_record (line 7074) | def test_export_record(self):
    method test_export_subarray (line 7116) | def test_export_subarray(self):
    method test_export_endian (line 7126) | def test_export_endian(self):
    method test_export_flags (line 7141) | def test_export_flags(self):
    method test_padding (line 7147) | def test_padding(self):
    method test_reference_leak (line 7152) | def test_reference_leak(self):
    method test_padded_struct_array (line 7163) | def test_padded_struct_array(self):
    method test_relaxed_strides (line 7183) | def test_relaxed_strides(self, c=np.ones((1, 10, 10), dtype='i8')):
    method test_relaxed_strides_buffer_info_leak (line 7213) | def test_relaxed_strides_buffer_info_leak(self, arr=np.ones((1, 10))):
    method test_out_of_order_fields (line 7227) | def test_out_of_order_fields(self):
    method test_max_dims (line 7240) | def test_max_dims(self):
    method test_error_too_many_dims (line 7245) | def test_error_too_many_dims(self):
    method test_error_pointer_type (line 7268) | def test_error_pointer_type(self):
    method test_error_message_unsupported (line 7277) | def test_error_message_unsupported(self):
    method test_ctypes_integer_via_memoryview (line 7291) | def test_ctypes_integer_via_memoryview(self):
    method test_ctypes_struct_via_memoryview (line 7299) | def test_ctypes_struct_via_memoryview(self):
  class TestArrayAttributeDeletion (line 7315) | class TestArrayAttributeDeletion:
    method test_multiarray_writable_attributes_deletion (line 7317) | def test_multiarray_writable_attributes_deletion(self):
    method test_multiarray_not_writable_attributes_deletion (line 7326) | def test_multiarray_not_writable_attributes_deletion(self):
    method test_multiarray_flags_writable_attribute_deletion (line 7334) | def test_multiarray_flags_writable_attribute_deletion(self):
    method test_multiarray_flags_not_writable_attribute_deletion (line 7340) | def test_multiarray_flags_not_writable_attribute_deletion(self):
  class TestArrayInterface (line 7349) | class TestArrayInterface():
    class Foo (line 7350) | class Foo:
      method __init__ (line 7351) | def __init__(self, value):
      method __float__ (line 7355) | def __float__(self):
      method __array_interface__ (line 7359) | def __array_interface__(self):
    method test_scalar_interface (line 7377) | def test_scalar_interface(self, val, iface, expected):
  function test_interface_no_shape (line 7394) | def test_interface_no_shape():
  function test_array_interface_itemsize (line 7401) | def test_array_interface_itemsize():
  function test_array_interface_empty_shape (line 7411) | def test_array_interface_empty_shape():
  function test_array_interface_offset (line 7436) | def test_array_interface_offset():
  function test_flat_element_deletion (line 7450) | def test_flat_element_deletion():
  function test_scalar_element_deletion (line 7461) | def test_scalar_element_deletion():
  class TestMemEventHook (line 7466) | class TestMemEventHook:
    method test_mem_seteventhook (line 7467) | def test_mem_seteventhook(self):
  class TestMapIter (line 7478) | class TestMapIter:
    method test_mapiter (line 7479) | def test_mapiter(self):
  class TestAsCArray (line 7500) | class TestAsCArray:
    method test_1darray (line 7501) | def test_1darray(self):
    method test_2darray (line 7506) | def test_2darray(self):
    method test_3darray (line 7511) | def test_3darray(self):
  class TestConversion (line 7517) | class TestConversion:
    method test_array_scalar_relational_operation (line 7518) | def test_array_scalar_relational_operation(self):
    method test_to_bool_scalar (line 7559) | def test_to_bool_scalar(self):
    method test_to_int_scalar (line 7581) | def test_to_int_scalar(self):
  class TestWhere (line 7610) | class TestWhere:
    method test_basic (line 7611) | def test_basic(self):
    method test_exotic (line 7637) | def test_exotic(self):
    method test_ndim (line 7678) | def test_ndim(self):
    method test_dtype_mix (line 7692) | def test_dtype_mix(self):
    method test_foreign (line 7716) | def test_foreign(self):
    method test_error (line 7735) | def test_error(self):
    method test_string (line 7742) | def test_string(self):
    method test_empty_result (line 7755) | def test_empty_result(self):
    method test_largedim (line 7763) | def test_largedim(self):
  class TestSizeOf (line 7777) | class TestSizeOf:
    method test_empty_array (line 7779) | def test_empty_array(self):
    method check_array (line 7783) | def check_array(self, dtype):
    method test_array_int32 (line 7790) | def test_array_int32(self):
    method test_array_int64 (line 7793) | def test_array_int64(self):
    method test_array_float32 (line 7796) | def test_array_float32(self):
    method test_array_float64 (line 7799) | def test_array_float64(self):
    method test_view (line 7802) | def test_view(self):
    method test_reshape (line 7806) | def test_reshape(self):
    method test_resize (line 7811) | def test_resize(self):
    method test_error (line 7819) | def test_error(self):
  class TestHashing (line 7824) | class TestHashing:
    method test_arrays_not_hashable (line 7826) | def test_arrays_not_hashable(self):
    method test_collections_hashable (line 7830) | def test_collections_hashable(self):
  class TestArrayPriority (line 7835) | class TestArrayPriority:
    class Foo (line 7845) | class Foo(np.ndarray):
      method __new__ (line 7848) | def __new__(cls, *args, **kwargs):
    class Bar (line 7851) | class Bar(np.ndarray):
      method __new__ (line 7854) | def __new__(cls, *args, **kwargs):
    class Other (line 7857) | class Other:
      method _all (line 7860) | def _all(self, other):
    method test_ndarray_subclass (line 7883) | def test_ndarray_subclass(self):
    method test_ndarray_other (line 7891) | def test_ndarray_other(self):
    method test_subclass_subclass (line 7899) | def test_subclass_subclass(self):
    method test_subclass_other (line 7907) | def test_subclass_other(self):
  class TestBytestringArrayNonzero (line 7916) | class TestBytestringArrayNonzero:
    method test_empty_bstring_array_is_falsey (line 7918) | def test_empty_bstring_array_is_falsey(self):
    method test_whitespace_bstring_array_is_falsey (line 7921) | def test_whitespace_bstring_array_is_falsey(self):
    method test_all_null_bstring_array_is_falsey (line 7926) | def test_all_null_bstring_array_is_falsey(self):
    method test_null_inside_bstring_array_is_truthy (line 7931) | def test_null_inside_bstring_array_is_truthy(self):
  class TestUnicodeEncoding (line 7937) | class TestUnicodeEncoding:
    method test_round_trip (line 7942) | def test_round_trip(self):
    method test_assign_scalar (line 7952) | def test_assign_scalar(self):
    method test_fill_scalar (line 7958) | def test_fill_scalar(self):
  class TestUnicodeArrayNonzero (line 7965) | class TestUnicodeArrayNonzero:
    method test_empty_ustring_array_is_falsey (line 7967) | def test_empty_ustring_array_is_falsey(self):
    method test_whitespace_ustring_array_is_falsey (line 7970) | def test_whitespace_ustring_array_is_falsey(self):
    method test_all_null_ustring_array_is_falsey (line 7975) | def test_all_null_ustring_array_is_falsey(self):
    method test_null_inside_ustring_array_is_truthy (line 7980) | def test_null_inside_ustring_array_is_truthy(self):
  class TestFormat (line 7986) | class TestFormat:
    method test_0d (line 7988) | def test_0d(self):
    method test_1d_no_format (line 7993) | def test_1d_no_format(self):
    method test_1d_format (line 7997) | def test_1d_format(self):
  class TestCTypes (line 8004) | class TestCTypes:
    method test_ctypes_is_available (line 8006) | def test_ctypes_is_available(self):
    method test_ctypes_is_not_available (line 8012) | def test_ctypes_is_not_available(self):
    method _make_readonly (line 8024) | def _make_readonly(x):
    method test_ctypes_data_as_holds_reference (line 8054) | def test_ctypes_data_as_holds_reference(self, arr):
    method test_ctypes_as_parameter_holds_reference (line 8077) | def test_ctypes_as_parameter_holds_reference(self):
  class TestWritebackIfCopy (line 8096) | class TestWritebackIfCopy:
    method test_argmax_with_out (line 8098) | def test_argmax_with_out(self):
    method test_argmin_with_out (line 8104) | def test_argmin_with_out(self):
    method test_insert_noncontiguous (line 8110) | def test_insert_noncontiguous(self):
    method test_put_noncontiguous (line 8118) | def test_put_noncontiguous(self):
    method test_putmask_noncontiguous (line 8123) | def test_putmask_noncontiguous(self):
    method test_take_mode_raise (line 8129) | def test_take_mode_raise(self):
    method test_choose_mod_raise (line 8135) | def test_choose_mod_raise(self):
    method test_flatiter__array__ (line 8144) | def test_flatiter__array__(self):
    method test_dot_out (line 8151) | def test_dot_out(self):
    method test_view_assign (line 8157) | def test_view_assign(self):
    method test_dealloc_warning (line 8177) | def test_dealloc_warning(self):
    method test_view_discard_refcount (line 8185) | def test_view_discard_refcount(self):
  class TestArange (line 8209) | class TestArange:
    method test_infinite (line 8210) | def test_infinite(self):
    method test_nan_step (line 8216) | def test_nan_step(self):
    method test_zero_step (line 8222) | def test_zero_step(self):
  class TestArrayFinalize (line 8231) | class TestArrayFinalize:
    method test_receives_base (line 8234) | def test_receives_base(self):
    method test_lifetime_on_error (line 8243) | def test_lifetime_on_error(self):
  function test_orderconverter_with_nonASCII_unicode_ordering (line 8278) | def test_orderconverter_with_nonASCII_unicode_ordering():
  function test_equal_override (line 8284) | def test_equal_override():
  function test_npymath_complex (line 8310) | def test_npymath_complex():
  function test_npymath_real (line 8329) | def test_npymath_real():
  function test_uintalignment_and_alignment (line 8350) | def test_uintalignment_and_alignment():
  class TestAlignment (line 8386) | class TestAlignment:
    method check (line 8392) | def check(self, shape, dtype, order, align):
    method test_various_alignments (line 8413) | def test_various_alignments(self):
    method test_strided_loop_alignments (line 8424) | def test_strided_loop_alignments(self):
  function test_getfield (line 8457) | def test_getfield():

FILE: tests/github-actions.rs
  function all_jobs_not_missing_any_jobs (line 2) | fn all_jobs_not_missing_any_jobs() {

FILE: tests/integration_tests.rs
  constant SAFE_CHILD_PROCESS_CREATION_TIME (line 21) | pub const SAFE_CHILD_PROCESS_CREATION_TIME: Duration = Duration::from_mi...
  constant CHILD_WAIT_TIMEOUT (line 22) | pub const CHILD_WAIT_TIMEOUT: Duration = Duration::from_secs(15);
  constant EXAMPLES_DIR (line 34) | const EXAMPLES_DIR: &str = "tests/examples";
  function get_config (line 36) | fn get_config() -> &'static str {
  function basic (line 45) | fn basic() {
  function stdin (line 55) | fn stdin() {
  function concatenate (line 64) | fn concatenate() {
  function concatenate_stdin (line 74) | fn concatenate_stdin() {
  function concatenate_empty_first (line 86) | fn concatenate_empty_first() {
  function concatenate_empty_last (line 96) | fn concatenate_empty_last() {
  function concatenate_empty_both (line 106) | fn concatenate_empty_both() {
  function concatenate_empty_between (line 116) | fn concatenate_empty_between() {
  function concatenate_empty_first_and_last (line 127) | fn concatenate_empty_first_and_last() {
  function concatenate_single_line (line 138) | fn concatenate_single_line() {
  function concatenate_single_line_empty (line 148) | fn concatenate_single_line_empty() {
  function line_numbers (line 159) | fn line_numbers() {
  function line_numbers_from_cli_in_loop_through_mode (line 171) | fn line_numbers_from_cli_in_loop_through_mode() {
  function style_from_env_var_ignored_and_line_numbers_from_cli_in_loop_through_mode (line 181) | fn style_from_env_var_ignored_and_line_numbers_from_cli_in_loop_through_...
  function numbers_ignored_from_cli_when_followed_by_plain_in_loop_through_mode (line 193) | fn numbers_ignored_from_cli_when_followed_by_plain_in_loop_through_mode() {
  function numbers_honored_from_cli_when_preceeded_by_plain_in_loop_through_mode (line 206) | fn numbers_honored_from_cli_when_preceeded_by_plain_in_loop_through_mode...
  function line_range_2_3 (line 217) | fn line_range_2_3() {
  function line_range_up_to_2_from_back (line 227) | fn line_range_up_to_2_from_back() {
  function line_range_up_to_2_from_back_single_line_is_empty (line 237) | fn line_range_up_to_2_from_back_single_line_is_empty() {
  function line_range_from_back_last_two (line 247) | fn line_range_from_back_last_two() {
  function line_range_from_back_last_two_single_line_eq_sep (line 257) | fn line_range_from_back_last_two_single_line_eq_sep() {
  function line_range_from_back_last_two_single_line_no_sep (line 267) | fn line_range_from_back_last_two_single_line_no_sep() {
  function line_range_first_two (line 278) | fn line_range_first_two() {
  function line_range_last_3 (line 288) | fn line_range_last_3() {
  function line_range_multiple (line 298) | fn line_range_multiple() {
  function line_range_multiple_with_context (line 309) | fn line_range_multiple_with_context() {
  function line_range_context_around_single_line (line 320) | fn line_range_context_around_single_line() {
  function line_range_context_around_single_line_minimal (line 330) | fn line_range_context_around_single_line_minimal() {
  function line_range_context_around_range (line 340) | fn line_range_context_around_range() {
  function line_range_context_at_file_boundaries (line 350) | fn line_range_context_at_file_boundaries() {
  function line_range_context_at_end_of_file (line 360) | fn line_range_context_at_end_of_file() {
  function line_range_context_zero (line 370) | fn line_range_context_zero() {
  function line_range_context_negative_single_line (line 380) | fn line_range_context_negative_single_line() {
  function line_range_context_negative_range (line 392) | fn line_range_context_negative_range() {
  function line_range_context_non_numeric_single_line (line 404) | fn line_range_context_non_numeric_single_line() {
  function line_range_context_non_numeric_range (line 416) | fn line_range_context_non_numeric_range() {
  function line_range_context_very_large (line 428) | fn line_range_context_very_large() {
  function piped_output_with_implicit_auto_style (line 440) | fn piped_output_with_implicit_auto_style() {
  function piped_output_with_line_number_flag (line 449) | fn piped_output_with_line_number_flag() {
  function piped_output_with_line_numbers_style_flag (line 459) | fn piped_output_with_line_numbers_style_flag() {
  function piped_output_with_line_numbers_with_header_grid_style_flag (line 469) | fn piped_output_with_line_numbers_with_header_grid_style_flag() {
  function piped_output_with_auto_style (line 480) | fn piped_output_with_auto_style() {
  function piped_output_with_default_style_flag (line 491) | fn piped_output_with_default_style_flag() {
  function squeeze_blank (line 510) | fn squeeze_blank() {
  function squeeze_blank_line_numbers (line 520) | fn squeeze_blank_line_numbers() {
  function squeeze_limit (line 532) | fn squeeze_limit() {
  function squeeze_limit_line_numbers (line 551) | fn squeeze_limit_line_numbers() {
  function list_themes_with_colors (line 574) | fn list_themes_with_colors() {
  function list_themes_without_colors (line 590) | fn list_themes_without_colors() {
  function list_themes_to_piped_output (line 606) | fn list_themes_to_piped_output() {
  function list_languages (line 616) | fn list_languages() {
  function short_help (line 629) | fn short_help() {
  function long_help (line 638) | fn long_help() {
  function test_help (line 642) | fn test_help(arg: &str, expect_file: &str) {
  function short_help_with_highlighting (line 649) | fn short_help_with_highlighting() {
  function long_help_with_highlighting (line 662) | fn long_help_with_highlighting() {
  function help_with_color_never (line 675) | fn help_with_color_never() {
  function setup_temp_file (line 687) | fn setup_temp_file(content: &[u8]) -> io::Result<(PathBuf, tempfile::Tem...
  function basic_io_cycle (line 696) | fn basic_io_cycle() -> io::Result<()> {
  function first_file_cyclic_is_ok (line 712) | fn first_file_cyclic_is_ok() -> io::Result<()> {
  function empty_file_cycle_is_ok (line 728) | fn empty_file_cycle_is_ok() -> io::Result<()> {
  function stdin_to_stdout_cycle (line 744) | fn stdin_to_stdout_cycle() -> io::Result<()> {
  function bat_error_to_stderr (line 761) | fn bat_error_to_stderr() {
  function no_args_doesnt_break (line 771) | fn no_args_doesnt_break() {
  function tabs_numbers (line 817) | fn tabs_numbers() {
  function tabs_passthrough_wrapped (line 840) | fn tabs_passthrough_wrapped() {
  function tabs_4_wrapped (line 863) | fn tabs_4_wrapped() {
  function tabs_8_wrapped (line 886) | fn tabs_8_wrapped() {
  function tabs_passthrough (line 909) | fn tabs_passthrough() {
  function tabs_4 (line 932) | fn tabs_4() {
  function tabs_8 (line 955) | fn tabs_8() {
  function tabs_4_env_overrides_config (line 978) | fn tabs_4_env_overrides_config() {
  function tabs_4_arg_overrides_env (line 1002) | fn tabs_4_arg_overrides_env() {
  function tabs_4_arg_overrides_env_noconfig (line 1027) | fn tabs_4_arg_overrides_env_noconfig() {
  function fail_non_existing (line 1051) | fn fail_non_existing() {
  function fail_directory (line 1056) | fn fail_directory() {
  function do_not_exit_directory (line 1061) | fn do_not_exit_directory() {
  function pager_basic (line 1072) | fn pager_basic() {
  function pager_basic_arg (line 1086) | fn pager_basic_arg() {
  function pager_overwrite (line 1103) | fn pager_overwrite() {
  function pager_disable (line 1117) | fn pager_disable() {
  function pager_arg_override_env_withconfig (line 1130) | fn pager_arg_override_env_withconfig() {
  function pager_arg_override_env_noconfig (line 1150) | fn pager_arg_override_env_noconfig() {
  function pager_env_bat_pager_override_config (line 1169) | fn pager_env_bat_pager_override_config() {
  function pager_env_pager_nooverride_config (line 1185) | fn pager_env_pager_nooverride_config() {
  function env_var_pager_value_bat (line 1199) | fn env_var_pager_value_bat() {
  function env_var_bat_pager_value_bat (line 1210) | fn env_var_bat_pager_value_bat() {
  function pager_value_bat (line 1221) | fn pager_value_bat() {
  function pager_most_from_pager_env_var (line 1235) | fn pager_most_from_pager_env_var() {
  function pager_most_from_bat_pager_env_var (line 1252) | fn pager_most_from_bat_pager_env_var() {
  function pager_most_from_pager_arg (line 1267) | fn pager_most_from_pager_arg() {
  function pager_most_with_arg (line 1282) | fn pager_most_with_arg() {
  function pager_more (line 1297) | fn pager_more() {
  function alias_pager_disable (line 1310) | fn alias_pager_disable() {
  function alias_pager_disable_long_overrides_short (line 1322) | fn alias_pager_disable_long_overrides_short() {
  function disable_pager_if_disable_paging_flag_comes_after_paging (line 1336) | fn disable_pager_if_disable_paging_flag_comes_after_paging() {
  function disable_pager_if_pp_flag_comes_after_paging (line 1348) | fn disable_pager_if_pp_flag_comes_after_paging() {
  function enable_pager_if_disable_paging_flag_comes_before_paging (line 1361) | fn enable_pager_if_disable_paging_flag_comes_before_paging() {
  function enable_pager_if_pp_flag_comes_before_paging (line 1376) | fn enable_pager_if_pp_flag_comes_before_paging() {
  function paging_does_not_override_simple_plain (line 1390) | fn paging_does_not_override_simple_plain() {
  function simple_plain_does_not_override_paging (line 1404) | fn simple_plain_does_not_override_paging() {
  function pager_failed_to_parse (line 1418) | fn pager_failed_to_parse() {
  function pager_missing_warning (line 1430) | fn pager_missing_warning() {
  function env_var_bat_paging (line 1445) | fn env_var_bat_paging() {
  function basic_set_terminal_title (line 1458) | fn basic_set_terminal_title() {
  function diagnostic_sanity_check (line 1471) | fn diagnostic_sanity_check() {
  function help_works_with_invalid_config (line 1481) | fn help_works_with_invalid_config() {
  function help_uses_valid_config (line 1508) | fn help_uses_valid_config() {
  function version_works_with_invalid_config (line 1530) | fn version_works_with_invalid_config() {
  function diagnostic_works_with_invalid_config (line 1555) | fn diagnostic_works_with_invalid_config() {
  function config_location_test (line 1580) | fn config_location_test() {
  function config_location_when_generating (line 1597) | fn config_location_when_generating() {
  function config_location_from_bat_config_dir_variable (line 1617) | fn config_location_from_bat_config_dir_variable() {
  function config_read_arguments_from_file (line 1628) | fn config_read_arguments_from_file() {
  function cache_clear (line 1641) | fn cache_clear() {
  function cache_build_blank (line 1689) | fn cache_build_blank() {
  function cache_build (line 1734) | fn cache_build() {
  function utf16 (line 1777) | fn utf16() {
  function utf16le (line 1800) | fn utf16le() {
  function utf16be (line 1812) | fn utf16be() {
  function bom_not_stripped_in_loop_through_mode (line 1825) | fn bom_not_stripped_in_loop_through_mode() {
  function bom_stripped_when_colored_output (line 1838) | fn bom_stripped_when_colored_output() {
  function bom_stripped_when_no_color_and_not_loop_through (line 1852) | fn bom_stripped_when_no_color_and_not_loop_through() {
  function no_broken_osc_emit_with_line_wrapping (line 1874) | fn no_broken_osc_emit_with_line_wrapping() {
  function can_print_file_named_cache (line 1887) | fn can_print_file_named_cache() {
  function can_print_file_named_cache_with_additional_argument (line 1897) | fn can_print_file_named_cache_with_additional_argument() {
  function can_print_file_starting_with_cache (line 1908) | fn can_print_file_starting_with_cache() {
  function does_not_print_unwanted_file_named_cache (line 1918) | fn does_not_print_unwanted_file_named_cache() {
  function accepts_no_custom_assets_arg (line 1923) | fn accepts_no_custom_assets_arg() {
  function unicode_wrap (line 1934) | fn unicode_wrap() {
  function snip (line 1976) | fn snip() {
  function empty_file_leads_to_empty_output_with_grid_enabled (line 2002) | fn empty_file_leads_to_empty_output_with_grid_enabled() {
  function empty_file_leads_to_empty_output_with_rule_enabled (line 2014) | fn empty_file_leads_to_empty_output_with_rule_enabled() {
  function header_basic (line 2026) | fn header_basic() {
  function header_full_basic (line 2040) | fn header_full_basic() {
  function header_env_basic (line 2054) | fn header_env_basic() {
  function header_arg_overrides_env (line 2068) | fn header_arg_overrides_env() {
  function header_binary (line 2083) | fn header_binary() {
  function header_full_binary (line 2097) | fn header_full_binary() {
  function header_narrow_terminal (line 2112) | fn header_narrow_terminal() {
  function header_very_narrow_terminal (line 2136) | fn header_very_narrow_terminal() {
  function header_narrow_terminal_with_multibyte_chars (line 2166) | fn header_narrow_terminal_with_multibyte_chars() {
  function header_default (line 2178) | fn header_default() {
  function header_default_is_default (line 2203) | fn header_default_is_default() {
  function header_and_changes_only (line 2228) | fn header_and_changes_only() {
  function filename_stdin (line 2241) | fn filename_stdin() {
  function filename_stdin_binary (line 2256) | fn filename_stdin_binary() {
  function filename_multiple_ok (line 2270) | fn filename_multiple_ok() {
  function filename_multiple_err (line 2286) | fn filename_multiple_err() {
  function header_padding (line 2299) | fn header_padding() {
  function header_full_padding (line 2311) | fn header_full_padding() {
  function header_padding_rule (line 2323) | fn header_padding_rule() {
  function header_full_padding_rule (line 2343) | fn header_full_padding_rule() {
  function grid_overrides_rule (line 2365) | fn grid_overrides_rule() {
  function file_with_invalid_utf8_filename (line 2390) | fn file_with_invalid_utf8_filename() {
  function do_not_panic_regression_tests (line 2413) | fn do_not_panic_regression_tests() {
  function do_not_detect_different_syntax_for_stdin_and_files (line 2430) | fn do_not_detect_different_syntax_for_stdin_and_files() {
  function no_first_line_fallback_when_mapping_to_invalid_syntax (line 2459) | fn no_first_line_fallback_when_mapping_to_invalid_syntax() {
  function fallback_syntax_is_used_when_no_syntax_is_detected (line 2474) | fn fallback_syntax_is_used_when_no_syntax_is_detected() {
  function fallback_syntax_does_not_override_detected_syntax (line 2508) | fn fallback_syntax_does_not_override_detected_syntax() {
  function fallback_syntax_does_not_override_explicit_language (line 2541) | fn fallback_syntax_does_not_override_explicit_language() {
  function invalid_fallback_syntax_returns_error (line 2576) | fn invalid_fallback_syntax_returns_error() {
  function show_all_mode (line 2589) | fn show_all_mode() {
  function show_all_extends_tab_markers_to_next_tabstop (line 2599) | fn show_all_extends_tab_markers_to_next_tabstop() {
  function show_all_extends_tab_markers_to_next_tabstop_width_8 (line 2622) | fn show_all_extends_tab_markers_to_next_tabstop_width_8() {
  function show_all_with_caret_notation (line 2645) | fn show_all_with_caret_notation() {
  function show_all_with_unicode (line 2664) | fn show_all_with_unicode() {
  function binary_as_text (line 2675) | fn binary_as_text() {
  function no_strip_overstrike_for_plain_text (line 2685) | fn no_strip_overstrike_for_plain_text() {
  function strip_overstrike_with_syntax_highlighting (line 2698) | fn strip_overstrike_with_syntax_highlighting() {
  function strip_overstrike_for_manpage_syntax (line 2711) | fn strip_overstrike_for_manpage_syntax() {
  function no_strip_overstrike_for_other_syntax (line 2725) | fn no_strip_overstrike_for_other_syntax() {
  function show_all_shows_backspace_with_caret_notation (line 2738) | fn show_all_shows_backspace_with_caret_notation() {
  function no_paging_arg (line 2752) | fn no_paging_arg() {
  function no_paging_short_arg (line 2764) | fn no_paging_short_arg() {
  function no_pager_arg (line 2776) | fn no_pager_arg() {
  function plain_mode_does_not_add_nonexisting_newline (line 2788) | fn plain_mode_does_not_add_nonexisting_newline() {
  function grid_for_file_without_newline (line 2803) | fn grid_for_file_without_newline() {
  function ansi_highlight_underline (line 2829) | fn ansi_highlight_underline() {
  function ansi_highlight_json_keys (line 2850) | fn ansi_highlight_json_keys() {
  function ansi_passthrough_emit (line 2867) | fn ansi_passthrough_emit() {
  function ansi_sgr_emitted_when_wrapped (line 2887) | fn ansi_sgr_emitted_when_wrapped() {
  function ansi_hyperlink_emitted_when_wrapped (line 2906) | fn ansi_hyperlink_emitted_when_wrapped() {
  function ansi_sgr_joins_attributes_when_wrapped (line 2924) | fn ansi_sgr_joins_attributes_when_wrapped() {
  function ignored_suffix_arg (line 2941) | fn ignored_suffix_arg() {
  function wrapping_test (line 2977) | fn wrapping_test(wrap_flag: &str, expect_wrap: bool) {
  function no_line_wrapping_when_set_to_never (line 2999) | fn no_line_wrapping_when_set_to_never() {
  function line_wrapping_when_auto (line 3004) | fn line_wrapping_when_auto() {
  function no_line_wrapping_with_s_flag (line 3009) | fn no_line_wrapping_with_s_flag() {
  function no_wrapping_with_chop_long_lines (line 3014) | fn no_wrapping_with_chop_long_lines() {
  function wrap_never_flag_respected_with_paging_always (line 3020) | fn wrap_never_flag_respected_with_paging_always() {
  function s_flag_respected_with_paging_always (line 3039) | fn s_flag_respected_with_paging_always() {
  function theme_arg_overrides_env (line 3057) | fn theme_arg_overrides_env() {
  function theme_arg_overrides_env_withconfig (line 3076) | fn theme_arg_overrides_env_withconfig() {
  function theme_light_env_var_is_respected (line 3096) | fn theme_light_env_var_is_respected() {
  function theme_dark_env_var_is_respected (line 3116) | fn theme_dark_env_var_is_respected() {
  function theme_env_overrides_config (line 3136) | fn theme_env_overrides_config() {
  function highlighting_is_skipped_on_long_lines (line 3155) | fn highlighting_is_skipped_on_long_lines() {
  function all_global_git_config_locations_syntax_mapping_work (line 3174) | fn all_global_git_config_locations_syntax_mapping_work() {
  function map_syntax_and_ignored_suffix_work_together (line 3219) | fn map_syntax_and_ignored_suffix_work_together() {
  function acknowledgements (line 3249) | fn acknowledgements() {
  function lessopen_file_piped (line 3287) | fn lessopen_file_piped() {
  function lessopen_stdin_piped (line 3300) | fn lessopen_stdin_piped() {
  function lessopen_and_lessclose_file_temp (line 3313) | fn lessopen_and_lessclose_file_temp() {
  function lessopen_and_lessclose_file_piped (line 3330) | fn lessopen_and_lessclose_file_piped() {
  function lessopen_and_lessclose_stdin_temp (line 3356) | fn lessopen_and_lessclose_stdin_temp() {
  function lessopen_and_lessclose_stdin_piped (line 3373) | fn lessopen_and_lessclose_stdin_piped() {
  function lessopen_handling_empty_output_file (line 3401) | fn lessopen_handling_empty_output_file() {
  function lessopen_handling_empty_output_stdin (line 3443) | fn lessopen_handling_empty_output_stdin() {
  function lessopen_uses_shell (line 3484) | fn lessopen_uses_shell() {
  function do_not_use_lessopen_by_default (line 3497) | fn do_not_use_lessopen_by_default() {
  function do_not_use_lessopen_if_overridden (line 3509) | fn do_not_use_lessopen_if_overridden() {
  function lessopen_validity (line 3523) | fn lessopen_validity() {
  function highlighting_independant_from_map_syntax_case (line 3560) | fn highlighting_independant_from_map_syntax_case() {
  function map_syntax_target_syntax_case_insensitive (line 3581) | fn map_syntax_target_syntax_case_insensitive() {
  function strip_ansi_always_strips_ansi (line 3602) | fn strip_ansi_always_strips_ansi() {
  function strip_ansi_never_does_not_strip_ansi (line 3615) | fn strip_ansi_never_does_not_strip_ansi() {
  function strip_ansi_does_not_affect_simple_printer (line 3635) | fn strip_ansi_does_not_affect_simple_printer() {
  function strip_ansi_does_not_strip_when_show_nonprintable (line 3655) | fn strip_ansi_does_not_strip_when_show_nonprintable() {
  function strip_ansi_auto_strips_ansi_when_detected_syntax_by_filename (line 3676) | fn strip_ansi_auto_strips_ansi_when_detected_syntax_by_filename() {
  function strip_ansi_auto_strips_ansi_when_provided_syntax_by_option (line 3690) | fn strip_ansi_auto_strips_ansi_when_provided_syntax_by_option() {
  function strip_ansi_auto_does_not_strip_when_plain_text_by_filename (line 3704) | fn strip_ansi_auto_does_not_strip_when_plain_text_by_filename() {
  function strip_ansi_auto_does_not_strip_ansi_when_plain_text_by_option (line 3725) | fn strip_ansi_auto_does_not_strip_ansi_when_plain_text_by_option() {
  function style_components_can_be_removed (line 3747) | fn style_components_can_be_removed() {
  function style_components_can_be_overidden (line 3770) | fn style_components_can_be_overidden() {
  function style_components_will_merge (line 3785) | fn style_components_will_merge() {
  function style_components_will_merge_with_env_var (line 3800) | fn style_components_will_merge_with_env_var() {
  function plain_with_sized_terminal_width (line 3815) | fn plain_with_sized_terminal_width() {
  function quiet_empty_suppresses_output_on_empty_stdin (line 3828) | fn quiet_empty_suppresses_output_on_empty_stdin() {
  function quiet_empty_does_not_affect_non_empty_input (line 3838) | fn quiet_empty_does_not_affect_non_empty_input() {
  function quiet_empty_suppresses_output_on_empty_file (line 3848) | fn quiet_empty_suppresses_output_on_empty_file() {
  function cache_help_shows_help_message (line 3858) | fn cache_help_shows_help_message() {
  function unbuffered_flag_is_accepted (line 3875) | fn unbuffered_flag_is_accepted() {
  function unbuffered_mode_disables_line_numbers (line 3885) | fn unbuffered_mode_disables_line_numbers() {
  function unbuffered_mode_plain_output (line 3899) | fn unbuffered_mode_plain_output() {
  function word_wrap_breaks_at_word_boundaries (line 3911) | fn word_wrap_breaks_at_word_boundaries() {
  function word_wrap_with_line_numbers (line 3934) | fn word_wrap_with_line_numbers() {
  function word_wrap_short_line_no_wrap (line 3956) | fn word_wrap_short_line_no_wrap() {

FILE: tests/no_duplicate_extensions.rs
  function no_duplicate_extensions (line 6) | fn no_duplicate_extensions() {

FILE: tests/scripts/find-slow-to-highlight-files.py
  function find_slow_files (line 34) | def find_slow_files(startup_time, glob_pattern, language=None):
  function measure_bat_startup_speed (line 85) | def measure_bat_startup_speed():
  function traverse_all_languages (line 101) | def traverse_all_languages(startup_time):
  function main (line 112) | def main():

FILE: tests/snapshots/generate_snapshots.py
  function generate_snapshots (line 9) | def generate_snapshots():
  function generate_style_snapshot (line 21) | def generate_style_snapshot(style):
  function generate_snapshot (line 25) | def generate_snapshot(name, arguments):
  function build_bat (line 35) | def build_bat():
  function prepare_output_dir (line 40) | def prepare_output_dir():
  function modify_sample_file (line 45) | def modify_sample_file():
  function undo_sample_file_modification (line 50) | def undo_sample_file_modification():

FILE: tests/snapshots/sample.modified.rs
  type Rectangle (line 2) | struct Rectangle {
  function main (line 7) | fn main() {
  function area (line 17) | fn area(rectangle: &Rectangle) -> u32 {
  function perimeter (line 21) | fn perimeter(rectangle: &Rectangle) -> u32 {

FILE: tests/snapshots/sample.rs
  type Rectangle (line 1) | struct Rectangle {
  function main (line 6) | fn main() {
  function area (line 16) | fn area(rectangle: &Rectangle) -> u32 {

FILE: tests/syntax-tests/compare_highlighted_versions.py
  function compare_highlighted_versions (line 10) | def compare_highlighted_versions(root_old, root_new):
  function strip_root (line 53) | def strip_root(p: str) -> str:

FILE: tests/syntax-tests/create_highlighted_versions.py
  function get_options (line 29) | def get_options(source):
  function create_highlighted_version (line 43) | def create_highlighted_version(args):
  function create_highlighted_versions (line 81) | def create_highlighted_versions(output_basepath):

FILE: tests/syntax-tests/highlighted/Dart/test.dart
  function m (line 2) | m(List list[38;2;248...

FILE: tests/syntax-tests/source/C-Sharp/Stack.cs
  class Stack (line 3) | internal class Stack<T>
    method Stack (line 9) | public Stack()
    method IsEmpty (line 14) | private bool IsEmpty()
    method IsFull (line 18) | private bool IsFull()
    method Peek (line 23) | public void Peek()
    method Pop (line 28) | public T Pop()
    method Push (line 33) | public void Push(T element)
    method ToString (line 45) | public override string ToString()

FILE: tests/syntax-tests/source/C/test.c
  function test_function (line 5) | void test_function()
  type Node (line 13) | struct Node
  function main (line 19) | int main(int argc, char **argv)

FILE: tests/syntax-tests/source/Cpp/test.cpp
  function test_function (line 10) | bool test_function(int x, int y)
  function main (line 38) | int main()

FILE: tests/syntax-tests/source/Dart/inner_comment.dart
  function Object (line 1) | return Object(

FILE: tests/syntax-tests/source/Dart/test.dart
  function partition (line 2) | int partition(List list, int low, int high)
  function swap (line 7) | void swap(List list, int i, int j)
  function quickSort (line 23) | void quickSort(List list, int low, int high)
  function merge (line 31) | void merge(List list, int leftIndex, int middleIndex, int rightIndex)
  function mergeSort (line 68) | void mergeSort(List list, int leftIndex, int rightIndex)
  class Spacecraft (line 90) | class Spacecraft {
    method describe (line 100) | void describe()
  class PilotedCraft (line 112) | class PilotedCraft extends Spacecraft with Piloted {
  class MockSpaceship (line 117) | class MockSpaceship implements Spacecraft {
  function printWithDelay (line 122) | Future<void> printWithDelay(String message)
  function report (line 128) | Stream<String> report(Spacecraft craft, Iterable<String> objects)

FILE: tests/syntax-tests/source/Elixir/command.ex
  class Charlex.Command (line 1) | defmodule Charlex.Command

FILE: tests/syntax-tests/source/Go/main.go
  function PrintHugeParams (line 23) | func PrintHugeParams(fset *token.FileSet, info *types.Info, files []*ast...
  function main (line 53) | func main() {

FILE: tests/syntax-tests/source/Java/test.java
  class Main (line 7) | public class Main
    method main (line 9) | public static void main(String[] arg)

FILE: tests/syntax-tests/source/JavaScript/test.js
  function weatherSays (line 28) | function weatherSays(when=Date.now()) {
  class Forecast (line 52) | class Forecast {
    method constructor (line 53) | constructor(where, isGonnaRainA=true, isGonnaRainB=false, isGonnaRainC...
    method getLocalPrevisions (line 73) | async getLocalPrevisions() {
    method communicatePrevisions (line 78) | communicatePrevisions(isGonnaRain=undefined) {
    method destroy (line 82) | destroy() {
    method startHiring (line 86) | static startHiring() {
    method generateRainInZoneC (line 92) | * generateRainInZoneC(clouds=[1, 2, 3]) {

FILE: tests/syntax-tests/source/PHP/test.php
  function favMovie (line 53) | function favMovie() {
  class Person (line 85) | class Person {
    method __construct (line 89) | function __construct($name){
    method __destruct (line 93) | function __destruct(){
    method setName (line 97) | function setName($name) {

FILE: tests/syntax-tests/source/Python/battest.py
  class Hello (line 16) | class Hello:
    method __init__ (line 17) | def __init__(self, x):
    method selfprint (line 20) | def selfprint(self):
    method testprint (line 23) | def testprint(self):
  class Decorators (line 27) | class Decorators:
    method decoratorsTest (line 29) | def decoratorsTest(self):
  function x2 (line 81) | def x2(n):

FILE: tests/syntax-tests/source/Ruby On Rails/test.rb
  class ContactsController (line 1) | class ContactsController < ApplicationController
    method new (line 2) | def new
    method create (line 6) | def create
    method secure_params (line 19) | def secure_params

FILE: tests/syntax-tests/source/Ruby/output.rb
  class RepeatedSubstring (line 1) | class RepeatedSubstring
    method find_repeated_substring (line 2) | def find_repeated_substring(s)
    method get_prefix (line 32) | def get_prefix(s1, s2)
    method next_index (line 45) | def next_index(seq, index, value)
    method find_repeated_substring_file (line 53) | def find_repeated_substring_file(file_path)

FILE: tests/syntax-tests/source/Rust/output.rs
  type OutputType (line 12) | pub enum OutputType {
    method from_mode (line 20) | pub fn from_mode(mode: PagingMode, pager: Option<&str>) -> Result<Self> {
    method try_pager (line 31) | fn try_pager(quit_if_one_screen: bool, pager_from_config: Option<&str>...
    method stdout (line 124) | pub(crate) fn stdout() -> Self {
    method is_pager (line 129) | pub(crate) fn is_pager(&self) -> bool {
    method is_pager (line 138) | pub(crate) fn is_pager(&self) -> bool {
    method handle (line 142) | pub fn handle(&mut self) -> Result<&mut dyn Write> {
  method drop (line 156) | fn drop(&mut self) {

FILE: tests/syntax-tests/source/SQL/ims.sql
  type interships (line 2) | create table interships
  type directions (line 24) | create table directions
  type participants (line 35) | create table participants
  type hiring_layer_types (line 55) | create table hiring_layer_types
  type hiring_layers (line 68) | create table hiring_layers
  type subjects (line 85) | create table subjects
  type direction_subjects (line 97) | create table direction_subjects
  type component_types (line 111) | create table component_types
  type components (line 122) | create table components
  type results (line 136) | create table results
  type learning_material_types (line 150) | create table learning_material_types
  type learning_materials (line 163) | create table learning_materials
  type sessions (line 174) | create table sessions
  type attendances (line 183) | create table attendances
  type intership_info (line 197) | create view intership_info
  type participant_info (line 209) | create view participant_info
  type direction_info (line 228) | create view direction_info
  type subject_info (line 242) | create view subject_info
  type attendance_info (line 257) | create view attendance_info

FILE: tests/syntax-tests/source/TypeScript/example.ts
  type SquareConfig (line 29) | interface SquareConfig {
  type SearchFunc (line 36) | interface SearchFunc {
  type Color (line 40) | enum Color {
  type Easing (line 45) | type Easing = "ease-in" | "ease-out" | "ease-in-out";
  class Greeter (line 47) | class Greeter {
    method constructor (line 50) | constructor(message: string) {
    method greet (line 54) | greet() {
  class Animal (line 61) | class Animal {
    method move (line 62) | move(distanceInMeters: number = 0) {
  class Dog (line 67) | class Dog extends Animal {
    method bark (line 68) | bark() {
  class Point (line 78) | class Point {
  type Point3d (line 83) | interface Point3d extends Point {
  function add (line 89) | function add(x, y) {
  function identity (line 101) | function identity<T>(arg: T): T {
  class GenericNumber (line 107) | class GenericNumber<T> {

FILE: tests/system_wide_config.rs
  function use_systemwide_config (line 10) | fn use_systemwide_config() {
  function config_overrides_system_config (line 22) | fn config_overrides_system_config() {

FILE: tests/test_pretty_printer.rs
  function syntaxes (line 4) | fn syntaxes() {

FILE: tests/tester/mod.rs
  type BatTester (line 13) | pub struct BatTester {
    method test_snapshot (line 22) | pub fn test_snapshot(&self, name: &str, style: &str) {
  method default (line 53) | fn default() -> Self {
  function create_sample_directory (line 62) | fn create_sample_directory() -> Result<TempDir, git2::Error> {

FILE: tests/utils/command.rs
  function bat_raw_command_with_config (line 6) | pub fn bat_raw_command_with_config() -> Command {
  function bat_raw_command (line 27) | pub fn bat_raw_command() -> Command {
  function bat_with_config (line 34) | pub fn bat_with_config() -> assert_cmd::Command {
  function bat (line 39) | pub fn bat() -> assert_cmd::Command {

FILE: tests/utils/mocked_pagers.rs
  function get_mocked_pagers_dir (line 10) | fn get_mocked_pagers_dir() -> PathBuf {
  function from (line 19) | pub fn from(base: &str) -> String {
  function prepend_dir_to_path_env_var (line 34) | fn prepend_dir_to_path_env_var(dir: PathBuf) -> String {
  function restore_path (line 51) | fn restore_path(original_path: String) {
  function with_mocked_versions_of_more_and_most_in_path (line 58) | pub fn with_mocked_versions_of_more_and_most_in_path(actual_test: fn()) {
Condensed preview — 885 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (7,621K chars).
[
  {
    "path": ".cargo/audit.toml",
    "chars": 65,
    "preview": "[advisories]\nignore = [\"RUSTSEC-2024-0320\", \"RUSTSEC-2024-0421\"]\n"
  },
  {
    "path": ".envrc",
    "chars": 10,
    "preview": "use flake\n"
  },
  {
    "path": ".github/.codecov.yml",
    "chars": 15,
    "preview": "comment: false\n"
  },
  {
    "path": ".github/FUNDING.yml",
    "chars": 39,
    "preview": "github: [sharkdp, keith-hall, Enselic]\n"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/bug_report.md",
    "chars": 1358,
    "preview": "---\nname: Bug Report\nabout: Report a bug.\ntitle: \"\"\nlabels: bug\nassignees: ''\n\n---\n\n<!--\n\nHey there, thank you for repor"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/config.yml",
    "chars": 27,
    "preview": "blank_issues_enabled: true\n"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/feature_request.md",
    "chars": 121,
    "preview": "---\nname: Feature Request\nabout: Suggest an idea for this project.\ntitle: ''\nlabels: feature-request\nassignees: ''\n\n---\n"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/question.md",
    "chars": 248,
    "preview": "---\nname: Question\nabout: Ask a question about 'bat'.\ntitle: ''\nlabels: question\nassignees: ''\n\n---\n\n<!-- Using a normal"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/syntax_request.md",
    "chars": 664,
    "preview": "---\nname: Syntax Request\nabout: Request adding a new syntax to bat.\ntitle: \"\"\nlabels: syntax-request\nassignees: ''\n\n---\n"
  },
  {
    "path": ".github/dependabot.yml",
    "chars": 474,
    "preview": "version: 2\nupdates:\n- package-ecosystem: cargo\n  directory: \"/\"\n  schedule:\n    interval: monthly\n    time: \"04:00\"\n    "
  },
  {
    "path": ".github/workflows/CICD.yml",
    "chars": 20045,
    "preview": "name: CICD\n\nenv:\n  CICD_INTERMEDIATES_DIR: \"_cicd-intermediates\"\n  MSRV_FEATURES: --no-default-features --features minim"
  },
  {
    "path": ".github/workflows/require-changelog-for-PRs.yml",
    "chars": 1199,
    "preview": "name: Changelog\n\non:\n  pull_request:\n\njobs:\n  check-changelog:\n    name: Check for changelog entry\n    runs-on: ubuntu-l"
  },
  {
    "path": ".gitignore",
    "chars": 235,
    "preview": ".direnv/\n/target/\n**/*.rs.bk\n\n# Editors\n.idea/\n.vscode/\n\n# Generated files\n/assets/completions/_bat.ps1\n/assets/completi"
  },
  {
    "path": ".gitmodules",
    "chars": 12659,
    "preview": "[submodule \"assets/syntaxes/Elixir\"]\n\tpath = assets/syntaxes/02_Extra/Elixir\n\turl = https://github.com/princemaple/elixi"
  },
  {
    "path": "CHANGELOG.md",
    "chars": 59315,
    "preview": "# unreleased\n\n- Fixed bug caused by using `--plain` and `--terminal-width=N` flags simultaneously, see #3529 (@H4k1l)\n- "
  },
  {
    "path": "CONTRIBUTING.md",
    "chars": 4236,
    "preview": "# Contributing\n\nThank you for considering to contribute to `bat`!\n\n\n\n## Add an entry to the changelog\n\nKeeping the [`CHA"
  },
  {
    "path": "Cargo.toml",
    "chars": 3790,
    "preview": "[package]\nauthors = [\"David Peter <mail@david-peter.de>\"]\ncategories = [\"command-line-utilities\"]\ndescription = \"A cat(1"
  },
  {
    "path": "LICENSE-APACHE",
    "chars": 11357,
    "preview": "                                 Apache License\n                           Version 2.0, January 2004\n                   "
  },
  {
    "path": "LICENSE-MIT",
    "chars": 1097,
    "preview": "Copyright (c) 2018-2023 bat-developers (https://github.com/sharkdp/bat).\n\nPermission is hereby granted, free of charge, "
  },
  {
    "path": "NOTICE",
    "chars": 248,
    "preview": "Copyright (c) 2018-2021 bat-developers (https://github.com/sharkdp/bat).\n\nbat is made available under the terms of eithe"
  },
  {
    "path": "README.md",
    "chars": 33008,
    "preview": "<p align=\"center\">\n  <img src=\"doc/logo-header.svg\" alt=\"bat - a cat clone with wings\"><br>\n  <a href=\"https://github.co"
  },
  {
    "path": "SECURITY.md",
    "chars": 129,
    "preview": "# Security Vulnerabilities\n\nTo report a security vulnerability, please contact [David Peter](https://david-peter.de/) vi"
  },
  {
    "path": "assets/.gitattributes",
    "chars": 20,
    "preview": "* linguist-vendored\n"
  },
  {
    "path": "assets/.ignore",
    "chars": 20,
    "preview": "syntaxes/*\nthemes/*\n"
  },
  {
    "path": "assets/completions/_bat.ps1.in",
    "chars": 18479,
    "preview": "\nusing namespace System.Management.Automation\nusing namespace System.Management.Automation.Language\n\nRegister-ArgumentCo"
  },
  {
    "path": "assets/completions/bat.bash.in",
    "chars": 5306,
    "preview": "# shellcheck disable=SC2207\n\n# Requires https://github.com/scop/bash-completion\n\n# Macs have bash3 for which the bash-co"
  },
  {
    "path": "assets/completions/bat.fish.in",
    "chars": 10866,
    "preview": "# Fish Shell Completions\n# Copy or symlink to $XDG_CONFIG_HOME/fish/completions/{{PROJECT_EXECUTABLE}}.fish\n# ($XDG_CONF"
  },
  {
    "path": "assets/completions/bat.zsh.in",
    "chars": 6629,
    "preview": "#compdef {{PROJECT_EXECUTABLE}}\n\nlocal curcontext=\"$curcontext\" ret=1\nlocal -a state state_descr line\ntypeset -A opt_arg"
  },
  {
    "path": "assets/create.sh",
    "chars": 1841,
    "preview": "#!/usr/bin/env bash\nset -euo pipefail\n\nASSET_DIR=\"$( cd \"$( dirname \"${BASH_SOURCE[0]}\" )\" && pwd )\"\nREPO_DIR=\"$ASSET_DI"
  },
  {
    "path": "assets/manual/bat.1.in",
    "chars": 15838,
    "preview": ".TH {{PROJECT_EXECUTABLE_UPPERCASE}} \"1\"\n.SH NAME\n{{PROJECT_EXECUTABLE}} \\- a cat(1) clone with syntax highlighting and "
  },
  {
    "path": "assets/patches/1337.tmTheme.patch",
    "chars": 805,
    "preview": "diff --git themes/1337-Scheme/1337.tmTheme themes/1337-Scheme/1337.tmTheme\nindex fdff5bf..8cfc888 100644\n--- themes/1337"
  },
  {
    "path": "assets/patches/C#.sublime-syntax.patch",
    "chars": 582,
    "preview": "diff --git syntaxes/01_Packages/C#/C#.sublime-syntax syntaxes/01_Packages/C#/C#.sublime-syntax\nindex ed494f8b..01b710e8 "
  },
  {
    "path": "assets/patches/Groff.sublime-syntax.patch",
    "chars": 577,
    "preview": "diff --git syntaxes/02_Extra/Groff/Man Page/Man Page.sublime-syntax syntaxes/02_Extra/Groff/Man Page/Man Page.sublime-sy"
  },
  {
    "path": "assets/patches/JavaDoc.sublime-syntax.patch",
    "chars": 541,
    "preview": "diff --git syntaxes/01_Packages/Java/JavaDoc.sublime-syntax syntaxes/01_Packages/Java/JavaDoc.sublime-syntax\nindex 422a6"
  },
  {
    "path": "assets/patches/JavaScript.sublime-syntax.patch",
    "chars": 555,
    "preview": "Submodule assets/syntaxes/01_Packages contains modified content\ndiff --git syntaxes/01_Packages/JavaScript/JavaScript.su"
  },
  {
    "path": "assets/patches/Lisp.sublime-syntax.patch",
    "chars": 75490,
    "preview": "diff --git syntaxes/01_Packages/Lisp/Lisp.sublime-syntax syntaxes/01_Packages/Lisp/Lisp.sublime-syntax\nindex 50e5dad3..4"
  },
  {
    "path": "assets/patches/Makefile.sublime-syntax.patch",
    "chars": 3371,
    "preview": "diff --git syntaxes/01_Packages/Makefile/Makefile.sublime-syntax syntaxes/01_Packages/Makefile/Makefile.sublime-syntax\ni"
  },
  {
    "path": "assets/patches/Markdown.sublime-syntax.patch",
    "chars": 8970,
    "preview": "diff --git syntaxes/01_Packages/Markdown/Markdown.sublime-syntax syntaxes/01_Packages/Markdown/Markdown.sublime-syntax\ni"
  },
  {
    "path": "assets/patches/MediaWiki.sublime-syntax.patch",
    "chars": 464,
    "preview": "diff --git syntaxes/02_Extra/MediaWiki/MediawikiNG.sublime-syntax syntaxes/02_Extra/MediaWiki/MediawikiNG.sublime-syntax"
  },
  {
    "path": "assets/patches/Monokai-Extended.tmTheme.patch",
    "chars": 1642,
    "preview": "diff --git themes/sublime-monokai-extended/Monokai\\ Extended.tmTheme themes/sublime-monokai-extended/Monokai\\ Extended.t"
  },
  {
    "path": "assets/patches/OneHalfDark.tmTheme.patch",
    "chars": 1486,
    "preview": "diff --git themes/onehalf/sublimetext/OneHalfDark.tmTheme themes/onehalf/sublimetext/OneHalfDark.tmTheme\nindex b16050c.."
  },
  {
    "path": "assets/patches/Python.sublime-syntax.patch",
    "chars": 668,
    "preview": "diff --git syntaxes/01_Packages/Python/Python.sublime-syntax syntaxes/01_Packages/Python/Python.sublime-syntax\nindex 2ac"
  },
  {
    "path": "assets/patches/Rust.sublime-syntax.patch",
    "chars": 449,
    "preview": "diff --git syntaxes/01_Packages/Rust/Rust.sublime-syntax syntaxes/01_Packages/Rust/Rust.sublime-syntax\nindex 3c354486..2"
  },
  {
    "path": "assets/patches/ShellScript.sublime-syntax.patch",
    "chars": 708,
    "preview": "diff --git syntaxes/01_Packages/ShellScript/Bash.sublime-syntax syntaxes/01_Packages/ShellScript/Bash.sublime-syntax\nind"
  },
  {
    "path": "assets/patches/TodoTxt.sublime-syntax.patch",
    "chars": 532,
    "preview": "diff --git syntaxes/02_Extra/TodoTxt/TodoTxt.sublime-syntax syntaxes/02_Extra/TodoTxt/TodoTxt.sublime-syntax\nindex 6c75d"
  },
  {
    "path": "assets/patches/TwoDark.tmTheme.patch",
    "chars": 1427,
    "preview": "diff --git themes/TwoDark/TwoDark.tmTheme themes/TwoDark/TwoDark.tmTheme\nindex 87fd358..56376d3 100644\n--- themes/TwoDar"
  },
  {
    "path": "assets/patches/XML.sublime-syntax.patch",
    "chars": 344,
    "preview": "diff --git syntaxes/01_Packages/XML/XML.sublime-syntax syntaxes/01_Packages/XML/XML.sublime-syntax\nindex ad7d9c87..af4a0"
  },
  {
    "path": "assets/syntaxes/02_Extra/Apache.sublime-syntax",
    "chars": 12707,
    "preview": "%YAML 1.2\n---\n# http://www.sublimetext.com/docs/3/syntax.html\nname: Apache Conf\nfile_extensions:\n  - envvars\n  - htacces"
  },
  {
    "path": "assets/syntaxes/02_Extra/AsciiDoc.sublime-syntax",
    "chars": 32082,
    "preview": "%YAML 1.2\n---\n# http://www.sublimetext.com/docs/3/syntax.html\nname: AsciiDoc (Asciidoctor)\nfile_extensions:\n  - adoc\n  -"
  },
  {
    "path": "assets/syntaxes/02_Extra/Assembly (ARM).sublime-syntax",
    "chars": 6322,
    "preview": "%YAML 1.2\n---\n# http://www.sublimetext.com/docs/3/syntax.html\nname: ARM Assembly\nfile_extensions:\n  - s\n  - S\nscope: sou"
  },
  {
    "path": "assets/syntaxes/02_Extra/Assembly (x86_64).sublime-syntax",
    "chars": 65054,
    "preview": "%YAML 1.2\n---\nname: x86_64 Assembly\nfile_extensions: [yasm, nasm, asm, inc, mac]\nscope: source.asm.x86_64\n\nvariables:\n  "
  },
  {
    "path": "assets/syntaxes/02_Extra/CSV/CSV-comma.sublime-syntax",
    "chars": 1912,
    "preview": "%YAML 1.2\n---\n# See http://www.sublimetext.com/docs/3/syntax.html\nname: Comma Separated Values\nscope: text.csv.comma\nvar"
  },
  {
    "path": "assets/syntaxes/02_Extra/CSV/CSV-pipe.sublime-syntax",
    "chars": 1912,
    "preview": "%YAML 1.2\n---\n# See http://www.sublimetext.com/docs/3/syntax.html\nname: Pipe Separated Values\nscope: text.csv.pipe\nvaria"
  },
  {
    "path": "assets/syntaxes/02_Extra/CSV/CSV-semi-colon.sublime-syntax",
    "chars": 1922,
    "preview": "%YAML 1.2\n---\n# See http://www.sublimetext.com/docs/3/syntax.html\nname: Semi-Colon Separated Values\nscope: text.csv.semi"
  },
  {
    "path": "assets/syntaxes/02_Extra/CSV/CSV.sublime-syntax",
    "chars": 3043,
    "preview": "%YAML 1.2\n---\n# See http://www.sublimetext.com/docs/3/syntax.html\nname: Separated Values\nfile_extensions:\n  - csv\nscope:"
  },
  {
    "path": "assets/syntaxes/02_Extra/CSV/TSV.sublime-syntax",
    "chars": 1936,
    "preview": "%YAML 1.2\n---\n# See http://www.sublimetext.com/docs/3/syntax.html\nname: Tab Separated Values\nscope: text.csv.tab\nfile_ex"
  },
  {
    "path": "assets/syntaxes/02_Extra/Cabal.sublime-syntax",
    "chars": 1365,
    "preview": "%YAML 1.2\n---\n# http://www.sublimetext.com/docs/3/syntax.html\nname: Cabal\nfile_extensions:\n  - cabal\nscope: source.cabal"
  },
  {
    "path": "assets/syntaxes/02_Extra/CoffeeScript.sublime-syntax",
    "chars": 9491,
    "preview": "%YAML 1.2\n---\n# http://www.sublimetext.com/docs/3/syntax.html\nname: CoffeeScript\ncomment: \"CoffeeScript Syntax: version "
  },
  {
    "path": "assets/syntaxes/02_Extra/CpuInfo.sublime-syntax",
    "chars": 273,
    "preview": "%YAML 1.2\n---\n# http://www.sublimetext.com/docs/3/syntax.html\nname: CpuInfo\nfile_extensions:\n  - cpuinfo\nscope: source.c"
  },
  {
    "path": "assets/syntaxes/02_Extra/Crystal.sublime-syntax",
    "chars": 38194,
    "preview": "%YAML 1.2\n---\n# http://www.sublimetext.com/docs/3/syntax.html\nname: Crystal\ncomment: |\n  TODO: unresolved issues\n\n      "
  },
  {
    "path": "assets/syntaxes/02_Extra/Dart.sublime-syntax",
    "chars": 6492,
    "preview": "%YAML 1.2\n---\n# http://www.sublimetext.com/docs/syntax.html\nname: Dart\nfile_extensions:\n  - dart\nscope: source.dart\ncont"
  },
  {
    "path": "assets/syntaxes/02_Extra/DotENV.sublime-syntax",
    "chars": 2751,
    "preview": "%YAML 1.2\n---\n# http://www.sublimetext.com/docs/3/syntax.html\nname: DotENV\nfile_extensions:\n  - .env\n  - .env.dist\n  - ."
  },
  {
    "path": "assets/syntaxes/02_Extra/Fstab.sublime-syntax",
    "chars": 3256,
    "preview": "%YAML 1.2\n---\n# http://www.sublimetext.com/docs/3/syntax.html\nname: fstab\nfile_extensions:\n  - fstab\n  - crypttab\n  - mt"
  },
  {
    "path": "assets/syntaxes/02_Extra/Group.sublime-syntax",
    "chars": 753,
    "preview": "%YAML 1.2\n---\n# http://www.sublimetext.com/docs/3/syntax.html\nname: group\nfile_extensions:\n  - group\nscope: source.group"
  },
  {
    "path": "assets/syntaxes/02_Extra/HTML (Twig).sublime-syntax",
    "chars": 22961,
    "preview": "%YAML 1.2\n---\n# http://www.sublimetext.com/docs/3/syntax.html\nname: HTML (Twig)\nfile_extensions:\n  - twig\n  - html.twig\n"
  },
  {
    "path": "assets/syntaxes/02_Extra/INI.sublime-syntax",
    "chars": 1218,
    "preview": "%YAML 1.2\n---\n# http://www.sublimetext.com/docs/3/syntax.html\nname: INI\nfile_extensions:\n  - ini\n  - INI\n  - \"inf\"\n  - \""
  },
  {
    "path": "assets/syntaxes/02_Extra/JavaScript (Babel).sublime-syntax",
    "chars": 42229,
    "preview": "%YAML 1.2\n---\n# http://www.sublimetext.com/docs/3/syntax.html\nname: JavaScript (Babel)\nfile_extensions:\n  - js\n  - mjs\n "
  },
  {
    "path": "assets/syntaxes/02_Extra/Kotlin.sublime-syntax",
    "chars": 11444,
    "preview": "%YAML 1.2\n---\n# http://www.sublimetext.com/docs/3/syntax.html\nname: Kotlin\nfile_extensions:\n  - kt\n  - kts\nscope: source"
  },
  {
    "path": "assets/syntaxes/02_Extra/Lean.sublime-syntax",
    "chars": 4671,
    "preview": "%YAML 1.2\n---\n# http://www.sublimetext.com/docs/syntax.html\nname: Lean 4\nfile_extensions:\n  - lean\nscope: source.lean4\nc"
  },
  {
    "path": "assets/syntaxes/02_Extra/LiveScript.sublime-syntax",
    "chars": 15465,
    "preview": "%YAML 1.2\n---\n# http://www.sublimetext.com/docs/3/syntax.html\nname: LiveScript\ncomment: \"LiveScript Syntax: version 1\"\nf"
  },
  {
    "path": "assets/syntaxes/02_Extra/Manpage.sublime-syntax",
    "chars": 5621,
    "preview": "%YAML 1.2\n---\n# http://www.sublimetext.com/docs/3/syntax.html\nname: Manpage\nfile_extensions:\n  - man\nscope: source.man\n\n"
  },
  {
    "path": "assets/syntaxes/02_Extra/MemInfo.sublime-syntax",
    "chars": 273,
    "preview": "%YAML 1.2\n---\n# http://www.sublimetext.com/docs/3/syntax.html\nname: MemInfo\nfile_extensions:\n  - meminfo\nscope: source.m"
  },
  {
    "path": "assets/syntaxes/02_Extra/Nim.sublime-syntax",
    "chars": 10057,
    "preview": "%YAML 1.2\n---\n# http://www.sublimetext.com/docs/3/syntax.html\nname: Nim\nfile_extensions:\n  - nim\n  - nims\n  - nimble\nsco"
  },
  {
    "path": "assets/syntaxes/02_Extra/Ninja.sublime-syntax",
    "chars": 1626,
    "preview": "%YAML 1.2\n---\n# http://www.sublimetext.com/docs/3/syntax.html\nname: Ninja\nfile_extensions:\n  - ninja\nscope: source.ninja"
  },
  {
    "path": "assets/syntaxes/02_Extra/Nix.sublime-syntax",
    "chars": 18212,
    "preview": "%YAML 1.2\n---\n# http://www.sublimetext.com/docs/3/syntax.html\nname: Nix\nfile_extensions:\n  - nix\nscope: source.nix\nconte"
  },
  {
    "path": "assets/syntaxes/02_Extra/Org mode.sublime-syntax",
    "chars": 7076,
    "preview": "%YAML 1.2\n---\n# http://www.sublimetext.com/docs/3/syntax.html\nname: orgmode\nfile_extensions:\n  - org\nscope: text.orgmode"
  },
  {
    "path": "assets/syntaxes/02_Extra/Passwd.sublime-syntax",
    "chars": 1119,
    "preview": "%YAML 1.2\n---\n# http://www.sublimetext.com/docs/3/syntax.html\nname: passwd\nfile_extensions:\n  - passwd\nscope: source.pas"
  },
  {
    "path": "assets/syntaxes/02_Extra/PowerShell.sublime-syntax",
    "chars": 22202,
    "preview": "%YAML 1.2\n---\n# http://www.sublimetext.com/docs/3/syntax.html\nname: PowerShell\nfile_extensions:\n  - ps1\n  - psm1\n  - psd"
  },
  {
    "path": "assets/syntaxes/02_Extra/QML.sublime-syntax",
    "chars": 3571,
    "preview": "%YAML 1.2\n---\n# http://www.sublimetext.com/docs/3/syntax.html\nname: QML\nfile_extensions:\n  - qml\n  - qmlproject\nscope: s"
  },
  {
    "path": "assets/syntaxes/02_Extra/Racket.sublime-syntax",
    "chars": 1711,
    "preview": "%YAML 1.2\n---\n# http://www.sublimetext.com/docs/3/syntax.html\nname: Racket\nfile_extensions:\n  - rkt\nscope: source.racket"
  },
  {
    "path": "assets/syntaxes/02_Extra/Rego.sublime-syntax",
    "chars": 2830,
    "preview": "%YAML 1.2\n---\n# http://www.sublimetext.com/docs/3/syntax.html\nname: Rego\nfile_extensions:\n  - rego\nscope: source.rego\nco"
  },
  {
    "path": "assets/syntaxes/02_Extra/Requirementstxt.sublime-syntax",
    "chars": 4411,
    "preview": "%YAML 1.2\n---\n# http://www.sublimetext.com/docs/syntax.html\nname: Requirements.txt\nscope: source.requirements-txt\n# http"
  },
  {
    "path": "assets/syntaxes/02_Extra/Resolv.sublime-syntax",
    "chars": 581,
    "preview": "%YAML 1.2\n---\n# http://www.sublimetext.com/docs/3/syntax.html\nname: resolv\nfile_extensions:\n  - resolv.conf\nscope: sourc"
  },
  {
    "path": "assets/syntaxes/02_Extra/Robot.sublime-syntax",
    "chars": 2145,
    "preview": "%YAML 1.2\n---\n# http://www.sublimetext.com/docs/3/syntax.html\nname: Robot Framework\nfile_extensions:\n  - robot\n  - resou"
  },
  {
    "path": "assets/syntaxes/02_Extra/SML.sublime-syntax",
    "chars": 1132,
    "preview": "%YAML 1.2\n---\n# http://www.sublimetext.com/docs/3/syntax.html\nname: SML\nfile_extensions:\n  - sml\n  - cm\n  - sig\nscope: s"
  },
  {
    "path": "assets/syntaxes/02_Extra/Slim.sublime-syntax",
    "chars": 9859,
    "preview": "%YAML 1.2\n---\n# http://www.sublimetext.com/docs/syntax.html\nname: Ruby Slim\nfile_extensions:\n  - slim\n  - skim\nscope: te"
  },
  {
    "path": "assets/syntaxes/02_Extra/Stylus.sublime-syntax",
    "chars": 27528,
    "preview": "%YAML 1.2\n---\n# http://www.sublimetext.com/docs/3/syntax.html\nname: Stylus\nfile_extensions:\n  - styl\n  - stylus\nscope: s"
  },
  {
    "path": "assets/syntaxes/02_Extra/Swift.sublime-syntax",
    "chars": 13456,
    "preview": "%YAML 1.2\n---\n# http://www.sublimetext.com/docs/3/syntax.html\nname: Swift\nfile_extensions:\n  - swift\nfirst_line_match: ^"
  },
  {
    "path": "assets/syntaxes/02_Extra/TypeScript.sublime-syntax",
    "chars": 201893,
    "preview": "%YAML 1.2\n---\n# http://www.sublimetext.com/docs/3/syntax.html\nname: TypeScript\nfile_extensions:\n  - ts\n  - mts\n  - cts\ns"
  },
  {
    "path": "assets/syntaxes/02_Extra/TypsecriptReact.sublime-syntax",
    "chars": 200576,
    "preview": "%YAML 1.2\n---\n# http://www.sublimetext.com/docs/3/syntax.html\nname: TypeScriptReact\nfile_extensions:\n  - tsx\nscope: sour"
  },
  {
    "path": "assets/syntaxes/02_Extra/Verilog.sublime-syntax",
    "chars": 6291,
    "preview": "%YAML 1.2\n---\n# http://www.sublimetext.com/docs/3/syntax.html\nname: Verilog\nfile_extensions:\n  - v\n  - V\nscope: source.v"
  },
  {
    "path": "assets/syntaxes/02_Extra/VimHelp.sublime-syntax",
    "chars": 4001,
    "preview": "%YAML 1.2\n---\n# http://www.sublimetext.com/docs/syntax.html\nscope: source.vimhelp\nfile_extensions:\n  # shortname\n  - vim"
  },
  {
    "path": "assets/syntaxes/02_Extra/apt-source-list.sublime-syntax",
    "chars": 1027,
    "preview": "%YAML 1.2\n---\n# See http://www.sublimetext.com/docs/syntax.html\nname: debsources\nfile_extensions:\n  - sources.list\nscope"
  },
  {
    "path": "assets/syntaxes/02_Extra/gnuplot.sublime-syntax",
    "chars": 8188,
    "preview": "%YAML 1.2\n---\n# http://www.sublimetext.com/docs/3/syntax.html\nname: gnuplot\nfile_extensions:\n  - gp\n  - gpl\n  - gnuplot\n"
  },
  {
    "path": "assets/syntaxes/02_Extra/log.sublime-syntax",
    "chars": 6331,
    "preview": "%YAML 1.2\n---\n# See http://www.sublimetext.com/docs/3/syntax.html\nfile_extensions:\n  - log\nscope: text.log\nvariables:\n  "
  },
  {
    "path": "assets/syntaxes/02_Extra/show-nonprintable.sublime-syntax",
    "chars": 1060,
    "preview": "%YAML 1.2\n---\n# http://www.sublimetext.com/docs/3/syntax.html\nname: Highlight non-printables\nfile_extensions:\n    - show"
  },
  {
    "path": "assets/syntaxes/02_Extra/syntax_test_csv.csv",
    "chars": 2776,
    "preview": "# SYNTAX TEST \"CSV.sublime-syntax\"\nForename,Surname,House No.,Street,City,Postcode\n#^^^^^^^ meta.field-1\n#       ^ punct"
  },
  {
    "path": "assets/syntaxes/02_Extra/syntax_test_helphelp.txt",
    "chars": 16196,
    "preview": "# SYNTAX TEST \"VimHelp.sublime-syntax\"\n*helphelp.txt*\tNvim\n# <- punctuation.definition.constant.begin\n#^^^^^^^^^^^^ enti"
  },
  {
    "path": "assets/syntaxes/02_Extra/syntax_test_man.man",
    "chars": 13091,
    "preview": "# SYNTAX TEST \"Manpage.sublime-syntax\"\nSOMETHING(8)                System Manager's Manual               SOMETHING(8)\n# "
  },
  {
    "path": "assets/syntaxes/02_Extra/syntax_test_requirements.txt",
    "chars": 4193,
    "preview": "# SYNTAX TEST \"Requirementstxt.sublime-syntax\"\n# Options\n# <- punctuation.definition.comment\n# ^^^^^^^ comment.line\n--al"
  },
  {
    "path": "assets/syntaxes/02_Extra/syntax_test_tsv.tsv",
    "chars": 2776,
    "preview": "# SYNTAX TEST \"CSV.sublime-syntax\"\nForename\tSurname\tHouse No.\tStreet\tCity\tPostcode\n#^^^^^^^ meta.field-1\n#       ^ punct"
  },
  {
    "path": "assets/syntaxes/02_Extra/syslog.sublime-syntax",
    "chars": 1843,
    "preview": "%YAML 1.2\n---\n# http://www.sublimetext.com/docs/3/syntax.html\nname: syslog\nfile_extensions:\n  - syslog\nscope: text.log.s"
  },
  {
    "path": "assets/syntaxes/02_Extra/wgsl.sublime-syntax",
    "chars": 6629,
    "preview": "%YAML 1.2\n---\n# http://www.sublimetext.com/docs/syntax.html\nname: WGSL\nfile_extensions:\n  - wgsl\nscope: source.wgsl\ncont"
  },
  {
    "path": "assets/theme_preview.rs",
    "chars": 168,
    "preview": "  // Output the square of a number.\n  fn print_square(num: f64) {\n      let result = f64::powf(num, 2.0);\n      println!"
  },
  {
    "path": "assets/themes/ansi.tmTheme",
    "chars": 15051,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
  },
  {
    "path": "assets/themes/base16-256.tmTheme",
    "chars": 19521,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
  },
  {
    "path": "assets/themes/base16.tmTheme",
    "chars": 19449,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
  },
  {
    "path": "build/application.rs",
    "chars": 2794,
    "preview": "use std::{env, fs, path::PathBuf};\n\nuse crate::util::render_template;\n\n/// Generate manpage and shell completions for th"
  },
  {
    "path": "build/main.rs",
    "chars": 431,
    "preview": "#[cfg(feature = \"application\")]\nmod application;\nmod syntax_mapping;\nmod util;\n\nfn main() -> anyhow::Result<()> {\n    //"
  },
  {
    "path": "build/syntax_mapping.rs",
    "chars": 9687,
    "preview": "use std::{\n    convert::Infallible,\n    env, fs,\n    path::{Path, PathBuf},\n    str::FromStr,\n};\n\nuse anyhow::{anyhow, b"
  },
  {
    "path": "build/util.rs",
    "chars": 564,
    "preview": "#![allow(dead_code)]\n\nuse std::{collections::HashMap, fs, path::Path};\n\n/// Generates a file from a template.\npub fn ren"
  },
  {
    "path": "diagnostics/.gitattributes",
    "chars": 20,
    "preview": "* linguist-vendored\n"
  },
  {
    "path": "diagnostics/info.sh",
    "chars": 6300,
    "preview": "#!/usr/bin/env bash\n_modules=('system' 'bat' 'bat_config' 'bat_wrapper' 'bat_wrapper_function' 'tool')\n_modules_consente"
  },
  {
    "path": "doc/README-ja.md",
    "chars": 15765,
    "preview": "<p align=\"center\">\n  <img src=\"logo-header.svg\" alt=\"bat - a cat clone with wings\"><br>\n  <a href=\"https://github.com/sh"
  },
  {
    "path": "doc/README-ko.md",
    "chars": 18852,
    "preview": "<p align=\"center\">\n  <img src=\"logo-header.svg\" alt=\"bat - a cat clone with wings\"><br>\n  <a href=\"https://github.com/sh"
  },
  {
    "path": "doc/README-ru.md",
    "chars": 22032,
    "preview": "<p align=\"center\">\n  <img src=\"logo-header.svg\" alt=\"bat - a cat clone with wings\"><br>\n  <a href=\"https://github.com/sh"
  },
  {
    "path": "doc/README-zh.md",
    "chars": 15135,
    "preview": "<p align=\"center\">\n  <img src=\"logo-header.svg\" alt=\"bat - a cat clone with wings\"><br>\n  <a href=\"https://github.com/sh"
  },
  {
    "path": "doc/alternatives.md",
    "chars": 7637,
    "preview": "# Alternatives\n\nThe following table tries to give an overview *from `bat`s perspective*, i.e. we only compare\ncategories"
  },
  {
    "path": "doc/assets.md",
    "chars": 6827,
    "preview": "## Adding new builtin languages for syntax highlighting\n\nShould you find that a particular syntax is not available withi"
  },
  {
    "path": "doc/long-help.txt",
    "chars": 11745,
    "preview": "A cat(1) clone with syntax highlighting and Git integration.\n\nUsage: bat [OPTIONS] [FILE]...\n       bat <COMMAND>\n\nArgum"
  },
  {
    "path": "doc/release-checklist.md",
    "chars": 3257,
    "preview": "# Release checklist\n\n## Version bump\n\n- [ ] Update version in `Cargo.toml`. Run `cargo build` to update `Cargo.lock`.\n  "
  },
  {
    "path": "doc/short-help.txt",
    "chars": 2907,
    "preview": "A cat(1) clone with wings.\n\nUsage: bat [OPTIONS] [FILE]...\n       bat <COMMAND>\n\nArguments:\n  [FILE]...  File(s) to prin"
  },
  {
    "path": "doc/sponsors.md",
    "chars": 686,
    "preview": "## Sponsors\n\n`bat` development is sponsored by many individuals and companies. Thank you very much!\n\nPlease note, that b"
  },
  {
    "path": "examples/advanced.rs",
    "chars": 545,
    "preview": "/// A program that prints its own source code using the bat library\nuse bat::{PagingMode, PrettyPrinter, WrappingMode};\n"
  },
  {
    "path": "examples/buffer.rs",
    "chars": 586,
    "preview": "use bat::{\n    assets::HighlightingAssets, config::Config, controller::Controller, output::OutputHandle, Input,\n};\n\nfn m"
  },
  {
    "path": "examples/cat.rs",
    "chars": 341,
    "preview": "/// A very simple colorized `cat` clone, using `bat` as a library.\n/// See `src/bin/bat` for the full `bat` application."
  },
  {
    "path": "examples/inputs.rs",
    "chars": 626,
    "preview": "/// A small demonstration of the Input API.\n/// This prints embedded bytes with a custom header and then reads from STDI"
  },
  {
    "path": "examples/list_syntaxes_and_themes.rs",
    "chars": 414,
    "preview": "/// A simple program that lists all supported syntaxes and themes.\nuse bat::PrettyPrinter;\n\nfn main() {\n    let printer "
  },
  {
    "path": "examples/simple.rs",
    "chars": 177,
    "preview": "/// A simple program that prints its own source code using the bat library\nuse bat::PrettyPrinter;\n\nfn main() {\n    Pret"
  },
  {
    "path": "examples/yaml.rs",
    "chars": 913,
    "preview": "/// A program that serializes a Rust structure to YAML and pretty-prints the result\nuse bat::{Input, PrettyPrinter};\nuse"
  },
  {
    "path": "flake.nix",
    "chars": 863,
    "preview": "{\n  description = \"bat\";\n\n  inputs.nixpkgs.url = \"github:NixOS/nixpkgs/nixos-unstable\";\n\n  outputs =\n    { self, ... }@i"
  },
  {
    "path": "rustfmt.toml",
    "chars": 21,
    "preview": "# Defaults are used\r\n"
  },
  {
    "path": "src/assets/assets_metadata.rs",
    "chars": 2846,
    "preview": "use std::fs::File;\nuse std::path::Path;\nuse std::time::SystemTime;\n\nuse semver::Version;\nuse serde_derive::{Deserialize,"
  },
  {
    "path": "src/assets/build_assets/acknowledgements.rs",
    "chars": 6642,
    "preview": "use std::fmt::Write;\nuse std::fs::read_to_string;\nuse std::path::{Path, PathBuf};\n\nuse walkdir::DirEntry;\n\nuse crate::er"
  },
  {
    "path": "src/assets/build_assets.rs",
    "chars": 4724,
    "preview": "use std::convert::TryInto;\nuse std::path::Path;\n\nuse syntect::highlighting::ThemeSet;\nuse syntect::parsing::{SyntaxSet, "
  },
  {
    "path": "src/assets/lazy_theme_set.rs",
    "chars": 3171,
    "preview": "use super::*;\n\nuse std::collections::BTreeMap;\nuse std::convert::TryFrom;\n\nuse serde_derive::{Deserialize, Serialize};\n\n"
  },
  {
    "path": "src/assets/serialized_syntax_set.rs",
    "chars": 787,
    "preview": "use std::path::PathBuf;\n\nuse syntect::parsing::SyntaxSet;\n\nuse super::*;\n\n/// A SyntaxSet in serialized form, i.e. binco"
  },
  {
    "path": "src/assets.rs",
    "chars": 29067,
    "preview": "use std::ffi::OsStr;\nuse std::fs;\nuse std::path::Path;\n\nuse once_cell::unsync::OnceCell;\n\nuse syntect::highlighting::The"
  },
  {
    "path": "src/bin/bat/app.rs",
    "chars": 25977,
    "preview": "use std::collections::HashSet;\nuse std::env;\nuse std::io::IsTerminal;\nuse std::path::{Path, PathBuf};\nuse std::str::From"
  },
  {
    "path": "src/bin/bat/assets.rs",
    "chars": 1924,
    "preview": "use std::fs;\nuse std::io;\nuse std::path::Path;\nuse std::path::PathBuf;\n\nuse clap::crate_version;\n\nuse bat::assets::Highl"
  },
  {
    "path": "src/bin/bat/clap_app.rs",
    "chars": 34705,
    "preview": "use bat::style::StyleComponentList;\nuse clap::{crate_name, crate_version, value_parser, Arg, ArgAction, ColorChoice, Com"
  },
  {
    "path": "src/bin/bat/completions.rs",
    "chars": 359,
    "preview": "use std::env;\n\npub const BASH_COMPLETION: &str = include_str!(env!(\"BAT_GENERATED_COMPLETION_BASH\"));\npub const FISH_COM"
  },
  {
    "path": "src/bin/bat/config.rs",
    "chars": 7162,
    "preview": "use std::env;\nuse std::ffi::OsString;\nuse std::fs;\nuse std::io::{self, Write};\nuse std::path::{Path, PathBuf};\n\nuse crat"
  },
  {
    "path": "src/bin/bat/directories.rs",
    "chars": 1565,
    "preview": "use std::env;\nuse std::path::{Path, PathBuf};\n\nuse etcetera::BaseStrategy;\nuse once_cell::sync::Lazy;\n\n/// Wrapper for '"
  },
  {
    "path": "src/bin/bat/input.rs",
    "chars": 567,
    "preview": "use bat::input::Input;\nuse std::path::Path;\n\npub fn new_file_input<'a>(file: &'a Path, name: Option<&'a Path>) -> Input<"
  },
  {
    "path": "src/bin/bat/main.rs",
    "chars": 15377,
    "preview": "#![deny(unsafe_code)]\n\nmod app;\nmod assets;\nmod clap_app;\n#[cfg(feature = \"application\")]\nmod completions;\nmod config;\nm"
  },
  {
    "path": "src/config.rs",
    "chars": 7088,
    "preview": "use crate::line_range::{HighlightedLineRanges, LineRanges};\nuse crate::nonprintable_notation::{BinaryBehavior, Nonprinta"
  },
  {
    "path": "src/controller.rs",
    "chars": 12312,
    "preview": "use crate::assets::HighlightingAssets;\nuse crate::config::{Config, VisibleLines};\n#[cfg(feature = \"git\")]\nuse crate::dif"
  },
  {
    "path": "src/decorations.rs",
    "chars": 4358,
    "preview": "#[cfg(feature = \"git\")]\nuse crate::diff::LineChange;\nuse crate::printer::{Colors, InteractivePrinter};\nuse nu_ansi_term:"
  },
  {
    "path": "src/diff.rs",
    "chars": 2494,
    "preview": "#![cfg(feature = \"git\")]\n\nuse std::collections::HashMap;\nuse std::fs;\nuse std::path::Path;\n\nuse git2::{DiffOptions, Into"
  },
  {
    "path": "src/error.rs",
    "chars": 2273,
    "preview": "use std::io::Write;\nuse thiserror::Error;\n\n#[derive(Error, Debug)]\n#[non_exhaustive]\npub enum Error {\n    #[error(transp"
  },
  {
    "path": "src/input.rs",
    "chars": 15472,
    "preview": "use std::convert::TryFrom;\nuse std::fs;\nuse std::fs::File;\nuse std::io::{self, BufRead, BufReader, Read};\nuse std::path:"
  },
  {
    "path": "src/less.rs",
    "chars": 4013,
    "preview": "#![cfg(feature = \"paging\")]\n\nuse std::ffi::OsStr;\nuse std::process::Command;\n\n#[derive(Debug, PartialEq, Eq)]\npub enum L"
  },
  {
    "path": "src/lessopen.rs",
    "chars": 13558,
    "preview": "use std::convert::TryFrom;\nuse std::env;\nuse std::fs::File;\nuse std::io::{BufRead, BufReader, Cursor, Read};\nuse std::pa"
  },
  {
    "path": "src/lib.rs",
    "chars": 1626,
    "preview": "//! `bat` is a library to print syntax highlighted content.\n//!\n//! The main struct of this crate is `PrettyPrinter` whi"
  },
  {
    "path": "src/line_range.rs",
    "chars": 25260,
    "preview": "use crate::error::*;\nuse itertools::{Itertools, MinMaxResult};\n\n#[derive(Debug, Copy, Clone)]\npub struct LineRange {\n   "
  },
  {
    "path": "src/macros.rs",
    "chars": 196,
    "preview": "#[macro_export]\nmacro_rules! bat_warning {\n    ($($arg:tt)*) => ({\n        use nu_ansi_term::Color::Yellow;\n        epri"
  },
  {
    "path": "src/nonprintable_notation.rs",
    "chars": 588,
    "preview": "/// How to print non-printable characters with\n/// [crate::config::Config::show_nonprintable]\n#[derive(Debug, Default, C"
  },
  {
    "path": "src/output.rs",
    "chars": 8373,
    "preview": "use std::fmt;\nuse std::io;\n#[cfg(feature = \"paging\")]\nuse std::process::Child;\n#[cfg(feature = \"paging\")]\nuse std::threa"
  },
  {
    "path": "src/pager.rs",
    "chars": 3971,
    "preview": "use shell_words::ParseError;\nuse std::env;\n\n/// If we use a pager, this enum tells us from where we were told to use it."
  },
  {
    "path": "src/paging.rs",
    "chars": 137,
    "preview": "#[derive(Debug, Default, Clone, Copy, PartialEq, Eq)]\npub enum PagingMode {\n    Always,\n    QuitIfOneScreen,\n    #[defau"
  },
  {
    "path": "src/preprocessor.rs",
    "chars": 8644,
    "preview": "use std::fmt::Write;\n\nuse crate::{\n    nonprintable_notation::NonprintableNotation,\n    vscreen::{EscapeSequenceOffsets,"
  },
  {
    "path": "src/pretty_printer.rs",
    "chars": 12754,
    "preview": "use std::io::Read;\nuse std::path::Path;\n\nuse console::Term;\n\nuse crate::{\n    assets::HighlightingAssets,\n    config::{C"
  },
  {
    "path": "src/printer.rs",
    "chars": 35960,
    "preview": "use std::vec::Vec;\n\nuse nu_ansi_term::Color::{Fixed, Green, Red, Yellow};\nuse nu_ansi_term::Style;\n\nuse bytesize::ByteSi"
  },
  {
    "path": "src/style.rs",
    "chars": 11438,
    "preview": "use std::collections::HashSet;\nuse std::str::FromStr;\n\nuse crate::error::*;\n\n#[non_exhaustive]\n#[derive(Debug, Eq, Parti"
  },
  {
    "path": "src/syntax_mapping/builtin.rs",
    "chars": 3275,
    "preview": "use std::env;\n\nuse globset::GlobMatcher;\nuse once_cell::sync::Lazy;\n\nuse crate::syntax_mapping::{make_glob_matcher, Mapp"
  },
  {
    "path": "src/syntax_mapping/builtins/README.md",
    "chars": 4403,
    "preview": "# `/src/syntax_mapping/builtins`\n\nThe files in this directory define path/name-based syntax mappings, which amend\nand ta"
  },
  {
    "path": "src/syntax_mapping/builtins/bsd-family/.gitkeep",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "src/syntax_mapping/builtins/bsd-family/50-os-release.toml",
    "chars": 84,
    "preview": "[mappings]\n\"Bourne Again Shell (bash)\" = [\"/etc/os-release\", \"/var/run/os-release\"]\n"
  },
  {
    "path": "src/syntax_mapping/builtins/common/.gitkeep",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "src/syntax_mapping/builtins/common/50-apache.toml",
    "chars": 42,
    "preview": "[mappings]\n\"Apache Conf\" = [\"httpd.conf\"]\n"
  },
  {
    "path": "src/syntax_mapping/builtins/common/50-aws-credentials.toml",
    "chars": 61,
    "preview": "[mappings]\n\"INI\" = [\"**/.aws/credentials\", \"**/.aws/config\"]\n"
  },
  {
    "path": "src/syntax_mapping/builtins/common/50-bat.toml",
    "chars": 59,
    "preview": "[mappings]\n\"Bourne Again Shell (bash)\" = [\"**/bat/config\"]\n"
  },
  {
    "path": "src/syntax_mapping/builtins/common/50-citation.toml",
    "chars": 37,
    "preview": "[mappings]\n\"YAML\" = [\"CITATION.cff\"]\n"
  },
  {
    "path": "src/syntax_mapping/builtins/common/50-container.toml",
    "chars": 44,
    "preview": "[mappings]\n\"Dockerfile\" = [\"Containerfile\"]\n"
  },
  {
    "path": "src/syntax_mapping/builtins/common/50-cpp.toml",
    "chars": 125,
    "preview": "[mappings]\n\"C++\" = [\n    # probably better than the default Objective C mapping #877\n    \"*.h\",\n]\n\"YAML\" = [\".clang-form"
  },
  {
    "path": "src/syntax_mapping/builtins/common/50-diff.toml",
    "chars": 97,
    "preview": "# .debdiff is the extension used for diffs in Debian packaging\n[mappings]\n\"Diff\" = [\"*.debdiff\"]\n"
  },
  {
    "path": "src/syntax_mapping/builtins/common/50-dotnet-xml.toml",
    "chars": 68,
    "preview": "[mappings]\n\"XML\" = [\"*.csproj\", \"*.vbproj\", \"*.props\", \"*.targets\"]\n"
  },
  {
    "path": "src/syntax_mapping/builtins/common/50-f-sharp.toml",
    "chars": 27,
    "preview": "[mappings]\n\"F#\" = [\"*.fs\"]\n"
  },
  {
    "path": "src/syntax_mapping/builtins/common/50-gcloud-cli-config.toml",
    "chars": 99,
    "preview": "[mappings]\n\"INI\" = [\".boto\", \"**/gcloud/configurations/config_*\"]\n\"Git Ignore\" = [\".gcloudignore\"]\n"
  },
  {
    "path": "src/syntax_mapping/builtins/common/50-git.toml",
    "chars": 409,
    "preview": "# Global git config files rooted in `$XDG_CONFIG_HOME/git/` or `$HOME/.config/git/`\n# See e.g. https://git-scm.com/docs/"
  },
  {
    "path": "src/syntax_mapping/builtins/common/50-json.toml",
    "chars": 129,
    "preview": "# JSON Lines is a simple variation of JSON #2535\n[mappings]\n\"JSON\" = [\"*.jsonl\", \"*.jsonc\", \"*.jsonld\", \"*.geojson\", \"*."
  },
  {
    "path": "src/syntax_mapping/builtins/common/50-markdown.toml",
    "chars": 34,
    "preview": "[mappings]\n\"Markdown\" = [\"*.mkd\"]\n"
  },
  {
    "path": "src/syntax_mapping/builtins/common/50-mill.toml",
    "chars": 31,
    "preview": "[mappings]\n\"Scala\" = [\"*.mill\"]"
  },
  {
    "path": "src/syntax_mapping/builtins/common/50-nginx.toml",
    "chars": 50,
    "preview": "[mappings]\n\"nginx\" = [\"nginx.conf\", \"mime.types\"]\n"
  },
  {
    "path": "src/syntax_mapping/builtins/common/50-nix.toml",
    "chars": 35,
    "preview": "[mappings]\n\"JSON\" = [\"flake.lock\"]\n"
  },
  {
    "path": "src/syntax_mapping/builtins/common/50-nmap.toml",
    "chars": 82,
    "preview": "[mappings]\n# See #2151, https://nmap.org/book/nse-language.html\n\"Lua\" = [\"*.nse\"]\n"
  },
  {
    "path": "src/syntax_mapping/builtins/common/50-proxy-auto-config.toml",
    "chars": 51,
    "preview": "# 1515\n[mappings]\n\"JavaScript (Babel)\" = [\"*.pac\"]\n"
  },
  {
    "path": "src/syntax_mapping/builtins/common/50-ron.toml",
    "chars": 60,
    "preview": "# Rusty Object Notation #2427\n[mappings]\n\"Rust\" = [\"*.ron\"]\n"
  },
  {
    "path": "src/syntax_mapping/builtins/common/50-sarif.toml",
    "chars": 96,
    "preview": "# SARIF is a format for reporting static analysis results #2695\n[mappings]\n\"JSON\" = [\"*.sarif\"]\n"
  },
  {
    "path": "src/syntax_mapping/builtins/common/50-ssh.toml",
    "chars": 45,
    "preview": "[mappings]\n\"SSH Config\" = [\"**/.ssh/config\"]\n"
  },
  {
    "path": "src/syntax_mapping/builtins/common/90-ignore-files.toml",
    "chars": 40,
    "preview": "[mappings]\n\"Git Ignore\" = [\".?*ignore\"]\n"
  },
  {
    "path": "src/syntax_mapping/builtins/common/99-unset-ambiguous-extensions.toml",
    "chars": 123,
    "preview": "[mappings]\n\"MappingTarget::MapExtensionToUnknown\" = [\n    # common extension used for all kinds of formats\n    \"*.conf\","
  },
  {
    "path": "src/syntax_mapping/builtins/common/99-unset-ambiguous-filenames.toml",
    "chars": 234,
    "preview": "[mappings]\n\"MappingTarget::MapToUnknown\" = [\n    # \"NAnt Build File\" should only match *.build files, not files named \"b"
  },
  {
    "path": "src/syntax_mapping/builtins/common/xonsh.toml",
    "chars": 77,
    "preview": "# Xonsh shell (https://xon.sh/)\n[mappings]\n\"Python\" = [\"*.xsh\", \"*.xonshrc\"]\n"
  },
  {
    "path": "src/syntax_mapping/builtins/linux/.gitkeep",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "src/syntax_mapping/builtins/linux/50-containers.toml",
    "chars": 244,
    "preview": "# see https://github.com/containers/image/tree/main/docs\n[mappings]\n\"TOML\" = [\n    \"/usr/share/containers/**/*.conf\",\n  "
  },
  {
    "path": "src/syntax_mapping/builtins/linux/50-flatpak.toml",
    "chars": 63,
    "preview": "[mappings]\n\"INI\" = [\n    \"*.flatpakref\",\n    \"*.flatpakrepo\"\n]\n"
  },
  {
    "path": "src/syntax_mapping/builtins/linux/50-kubernetes.toml",
    "chars": 47,
    "preview": "[mappings]\n\"YAML\" = [\"/etc/kubernetes/*.conf\"]\n"
  },
  {
    "path": "src/syntax_mapping/builtins/linux/50-os-release.toml",
    "chars": 178,
    "preview": "[mappings]\n\"Bourne Again Shell (bash)\" = [\n    \"/etc/os-release\",\n    \"/usr/lib/os-release\",\n    \"/etc/initrd-release\",\n"
  }
]

// ... and 685 more files (download for full content)

About this extraction

This page contains the full source code of the sharkdp/bat GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 885 files (6.0 MB), approximately 1.6M tokens, and a symbol index with 1774 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!