1
0
mirror of https://github.com/sharkdp/bat.git synced 2025-06-17 13:55:55 +01:00

Compare commits

...

748 Commits

Author SHA1 Message Date
e2aa4bc33c Merge pull request from krikera/add-mill-syntax-mapping
Add syntax mapping for Mill build tool files to use Scala syntax
2025-06-02 19:50:38 +03:00
9d3db318e3 Add syntax mapping for Mill build tool files to use Scala syntax 2025-06-01 22:03:54 +05:30
5aa123b4f0 Bump assets/syntaxes/02_Extra/Apache from cf6cefc to c438c35 ()
Bumps [assets/syntaxes/02_Extra/Apache](https://github.com/colinta/ApacheConf.tmLanguage) from `cf6cefc` to `c438c35`.
- [Commits](cf6cefc51e...c438c352db)

---
updated-dependencies:
- dependency-name: assets/syntaxes/02_Extra/Apache
  dependency-version: c438c352db7dd59c7bc0849134b1bab9b338a36e
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-06-01 02:13:57 +00:00
f11d34997a Merge pull request from SchweGELBin/catppuccin
Themes: Add Catppuccin
2025-05-31 16:50:34 +03:00
510814410c docs(changelog): add catppuccin theme 2025-05-31 15:05:44 +02:00
e4bae61393 binary: update to support Catppuccin 2025-05-31 14:57:44 +02:00
4cfc50c358 theme: add Catppuccin 2025-05-31 14:56:10 +02:00
6886cdaace Merge pull request from krikera/fix-utf8-bom-syntax-detection
Fix UTF-8 BOM file type detection for first-line syntax patterns
2025-05-31 14:45:50 +03:00
17e6952ab8 Fix UTF-8 BOM file type detection for first-line syntax patterns - Fixes 2025-05-31 02:58:47 +05:30
0da4084064 Merge pull request from cskeeters/syntax_typst
Adds Typst syntax from hyrious/typst-syntax-highlight
2025-05-21 05:47:26 +03:00
4c9a51990c Corrects spelling mistake in syntax-test for Typst 2025-05-20 16:35:47 -05:00
36a86d34e8 Adds changelog entry 2025-05-20 14:50:53 -05:00
fb514ca90f Adds Typst syntax from hyrious/typst-syntax-highlight 2025-05-20 14:43:21 -05:00
aa5e28bef5 Merge pull request from cyqsimon/quadlet
Update quadlet syntax mapping rules to cover quadlets in subdirectories
2025-05-20 21:40:43 +03:00
5dc3d8c936 Write changelog 2025-05-20 15:33:57 +08:00
a4ffe2fdbf Update quadlet syntax mapping rules to cover quadlets in subdirectories 2025-05-20 15:22:55 +08:00
c32fa662d5 Merge pull request from ZaneErebos/patch-2
Clarify situation in which man page and shell completions will be accessible when building from source
2025-05-19 04:42:28 +03:00
0a9588a866 Clarify situation in which man page and shell completions will be accessible when building from source 2025-05-18 21:00:59 -04:00
861b868416 Update base16 urls to link to community run version 2025-05-14 19:01:50 +02:00
b7f9662097 Update README.md 2025-05-05 08:46:01 +02:00
79ecb11ce2 Add new sponsor Graphite to Readme ()
* Add new sponsor Graphite to Readme

* hide bullet points in sponsors section of readme

* remove bullet points
2025-05-05 08:44:24 +02:00
4e9bb610b3 docs(README): fix broken link of Visual C++ Redistributable 2025-05-01 13:33:43 +02:00
c88faf8cfa Bump assets/themes/zenburn from 9c588eb to 4f21745 ()
Bumps [assets/themes/zenburn](https://github.com/colinta/zenburn) from `9c588eb` to `4f21745`.
- [Commits](9c588ebc11...4f21745723)

---
updated-dependencies:
- dependency-name: assets/themes/zenburn
  dependency-version: 4f217457230ff5f31d594b0e20474b69294988d4
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-05-01 03:10:48 +00:00
0b48eab7a6 Merge pull request from forkeith/livescript_fix
remove LiveScript submodule
2025-04-30 22:42:30 +03:00
ccfbd1ee31 remove LiveScript submodule
the repo has gone away, causing all our CI etc. to break

we can keep the highlighting though because we have a .sublime-syntax file
2025-04-30 22:32:48 +03:00
98c9a5d948 Merge pull request from gthb/patch-1
Fix copy-paste mistake in bat.1.in
2025-04-15 21:55:35 +03:00
96ea42e5f4 Merge branch 'master' into patch-1 2025-04-15 21:25:32 +03:00
2ff2a818ef Merge pull request from ajesipow/read-from-tail
Support relative negative line ranges
2025-04-15 21:16:39 +03:00
dd694c266e Merge branch 'master' into patch-1 2025-04-15 21:00:19 +03:00
c4461f7d78 Merge branch 'master' into read-from-tail 2025-04-15 20:59:51 +03:00
77de5160ac Merge pull request from sharkdp/fix_ci
use latest Ubuntu for CI jobs now that GitHub deprecated 20.04
2025-04-15 20:59:14 +03:00
b9fcc5ae2d use latest Ubuntu for CI jobs now that GitHub deprecated 20.04 2025-04-15 20:30:56 +03:00
e42883bf2c Merge branch 'master' into read-from-tail 2025-04-15 20:27:26 +03:00
5c41a45931 Merge branch 'master' into patch-1 2025-04-15 20:09:50 +03:00
ba49ba0acd Bump assets/themes/zenburn from 86d4ee7 to 9c588eb ()
Bumps [assets/themes/zenburn](https://github.com/colinta/zenburn) from `86d4ee7` to `9c588eb`.
- [Commits](86d4ee7a1f...9c588ebc11)

---
updated-dependencies:
- dependency-name: assets/themes/zenburn
  dependency-version: 9c588ebc11c3e6487b081bd54528af08baa8a09a
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-04-13 10:36:54 +00:00
5d75632c8e Bump assets/syntaxes/02_Extra/PowerShell from c0372a1 to a08b55b ()
Bumps [assets/syntaxes/02_Extra/PowerShell](https://github.com/PowerShell/EditorSyntax) from `c0372a1` to `a08b55b`.
- [Commits](c0372a1d2d...a08b55bf11)

---
updated-dependencies:
- dependency-name: assets/syntaxes/02_Extra/PowerShell
  dependency-version: a08b55bf1146c210f58e844be53c2aa78fd5e610
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-04-13 10:14:09 +00:00
e202a33ea1 Bump assets/syntaxes/02_Extra/Apache from 163bc03 to cf6cefc ()
Bumps [assets/syntaxes/02_Extra/Apache](https://github.com/colinta/ApacheConf.tmLanguage) from `163bc03` to `cf6cefc`.
- [Commits](163bc03ae8...cf6cefc51e)

---
updated-dependencies:
- dependency-name: assets/syntaxes/02_Extra/Apache
  dependency-version: cf6cefc51ebb46b1b54906433edbae0fe9c71cad
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-04-13 09:50:51 +00:00
93be82ebc9 Merge pull request from chetanjangir0/add-gdscript-support
Add GDScript Syntax Support ()
2025-04-13 12:31:26 +03:00
0bf4753ff1 Update CHANGELOG.md
Co-authored-by: Keith Hall <keith-hall@users.noreply.github.com>
2025-04-13 14:51:53 +05:30
fbb07a1494 Merge branch 'master' into add-gdscript-support 2025-04-13 10:00:58 +05:30
debb66f8b0 Merge pull request from AdamGaskins/bash-zsh
Fix syntax highlighting for bash/zsh
2025-04-12 18:21:01 +03:00
45185b36fb Merge branch 'master' into bash-zsh 2025-04-12 11:09:33 -04:00
e761d79512 Update CHANGELOG.md
Co-authored-by: Keith Hall <keith-hall@users.noreply.github.com>
2025-04-12 11:08:57 -04:00
14064dd987 regenerated the highlighted file 2025-04-12 19:14:15 +05:30
3eef8590f4 genereated highlighted syntax test file 2025-04-12 18:00:43 +05:30
3e7ad18fe3 fixed merge conflicts 2025-04-12 17:22:18 +05:30
80a38590b8 Merge pull request from HSM95/fix/multibyte-chars
Fix for multibyte characters in file path
2025-04-12 11:30:28 +03:00
44a6e29da7 Merge branch 'master' into fix/multibyte-chars 2025-04-12 11:20:48 +03:00
a6e847e267 Fix copy-paste mistake in bat.1.in
The `--theme-light` documentation says “dark” in two places where it should say “light” (presumably copy-pasted from the `--theme-dark` documentation)
2025-04-10 10:56:19 +00:00
2f70906665 Cargo.toml: Document that MSRV can be bumped if there is a reason for it
To the best of my knowledge our current MSRV rule is that we can bump
MSRV whenever there is a reason for it. Let's document it.
2025-04-08 05:00:00 +02:00
c4c919aa31 Update CHANGELOG.md 2025-04-07 17:43:56 -04:00
51491c3c08 Fix syntax highlighting for bash/zsh 2025-04-07 17:43:56 -04:00
ea17f6ad28 Make mention (@ in front of name) in CHANGELOG entry optional 2025-04-07 17:31:12 +02:00
3691c9945a CICD: Stop building for x86_64-pc-windows-gnu which fails
Let's not build for platforms that are broken. If someone fixes the
build we can of course add it back.
2025-04-07 17:31:12 +02:00
57629bcaca Merge pull request from einfachIrgendwer0815/feature/page_list_themes
Add paging to `--list-themes`
2025-04-05 09:08:35 +03:00
b38ee77628 Merge branch 'master' into fix/multibyte-chars 2025-04-03 00:49:55 -07:00
b5413cc015 Do not split into graphemes if not necessary 2025-04-03 00:49:14 -07:00
5edaa96164 Update CHANGELOG 2025-04-02 11:27:37 +02:00
12a2a451b4 Add paging to --list-themes 2025-04-02 11:27:37 +02:00
fc7dff50b0 Merge pull request from dan-hipschman/fix-syntax-test-compare-script
Make highlight tests fail when new syntaxes don't have fixtures
2025-04-02 05:21:30 +03:00
9272e09058 Make highlight tests fail when new syntaxes don't have fixtures 2025-04-01 13:08:19 -07:00
b13c4d5f8d Bump indexmap from 2.7.0 to 2.8.0 ()
Bumps [indexmap](https://github.com/indexmap-rs/indexmap) from 2.7.0 to 2.8.0.
- [Changelog](https://github.com/indexmap-rs/indexmap/blob/main/RELEASES.md)
- [Commits](https://github.com/indexmap-rs/indexmap/compare/2.7.0...2.8.0)

---
updated-dependencies:
- dependency-name: indexmap
  dependency-version: 2.8.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-04-01 03:39:30 +00:00
d7b10b4352 Bump etcetera from 0.8.0 to 0.10.0 ()
Bumps [etcetera](https://github.com/lunacookies/etcetera) from 0.8.0 to 0.10.0.
- [Release notes](https://github.com/lunacookies/etcetera/releases)
- [Commits](https://github.com/lunacookies/etcetera/compare/v0.8.0...v0.10.0)

---
updated-dependencies:
- dependency-name: etcetera
  dependency-version: 0.10.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-04-01 03:11:49 +00:00
05cddff72d Bump anyhow from 1.0.95 to 1.0.97 ()
Bumps [anyhow](https://github.com/dtolnay/anyhow) from 1.0.95 to 1.0.97.
- [Release notes](https://github.com/dtolnay/anyhow/releases)
- [Commits](https://github.com/dtolnay/anyhow/compare/1.0.95...1.0.97)

---
updated-dependencies:
- dependency-name: anyhow
  dependency-version: 1.0.97
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-04-01 02:44:03 +00:00
a55d23aaa4 Add PR to CHANGELOG 2025-03-31 17:50:23 -07:00
18b71743c8 Fix for multibyte characters in file path 2025-03-31 17:29:18 -07:00
f761ff6824 Bump assets/syntaxes/02_Extra/Org_mode from 4976d8f to bb6e5d8 ()
Bumps [assets/syntaxes/02_Extra/Org_mode](https://github.com/jezcope/Org.tmbundle) from `4976d8f` to `bb6e5d8`.
- [Release notes](https://github.com/jezcope/Org.tmbundle/releases)
- [Commits](4976d8f84e...bb6e5d8481)

---
updated-dependencies:
- dependency-name: assets/syntaxes/02_Extra/Org_mode
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-03-29 06:55:24 +00:00
8e2d233445 Bump assets/syntaxes/02_Extra/Zig from 1a4a384 to 8a4a3fe ()
Bumps [assets/syntaxes/02_Extra/Zig](https://github.com/ziglang/sublime-zig-language) from `1a4a384` to `8a4a3fe`.
- [Release notes](https://github.com/ziglang/sublime-zig-language/releases)
- [Commits](1a4a38445f...8a4a3fe4a0)

---
updated-dependencies:
- dependency-name: assets/syntaxes/02_Extra/Zig
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-03-29 06:41:10 +00:00
59b1f362f6 Merge pull request from chetanjangir0/add-odin-syntax
Add Odin Language Syntax Support
2025-03-29 08:23:52 +02:00
a73c641a0f Update CHANGELOG.md
Co-authored-by: Keith Hall <keith-hall@users.noreply.github.com>
2025-03-29 11:43:36 +05:30
3d4c72da0b Merge branch 'master' into add-gdscript-support 2025-03-29 09:44:48 +05:30
71547b3fb3 Merge branch 'master' into add-odin-syntax 2025-03-29 09:44:11 +05:30
ad8da94d2a Merge pull request from simono/patch-2
Use built-in detection for OS theme in Readme
2025-03-29 05:27:11 +02:00
5ea762a46c Use built-in detection for OS theme in Readme 2025-03-29 05:15:38 +02:00
bbb5829ad9 Merge pull request from simono/patch-1
Add abbreviations for fish to Readme
2025-03-29 05:13:14 +02:00
c00b382f13 Add abbreviations for fish to Readme 2025-03-28 22:01:23 +01:00
964e2bdac3 updated changelog for pr number 2025-03-28 12:23:34 +00:00
2e7ab99099 Add Odin submodule and syntax test file 2025-03-28 12:17:45 +00:00
4175f28979 Update changelog entry for GDScript support () 2025-03-23 13:53:32 +00:00
207f90f01b Add GDScript submodule and syntax test file for GDScript support, see #XXX (@chetanjangir0) 2025-03-23 13:24:30 +00:00
5c43ddb56c Bump assets/syntaxes/02_Extra/cmd-help from 209559b to 68e727b ()
Bumps [assets/syntaxes/02_Extra/cmd-help](https://github.com/victor-gp/cmd-help-sublime-syntax) from `209559b` to `68e727b`.
- [Commits](209559b72f...68e727bad4)

---
updated-dependencies:
- dependency-name: assets/syntaxes/02_Extra/cmd-help
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-03-18 17:23:30 +00:00
3838766dd4 Bump assets/syntaxes/02_Extra/Docker from 0f6b7bc to c001fb2 ()
Bumps [assets/syntaxes/02_Extra/Docker](https://github.com/asbjornenge/Docker.tmbundle) from `0f6b7bc` to `c001fb2`.
- [Release notes](https://github.com/asbjornenge/Docker.tmbundle/releases)
- [Commits](0f6b7bc87a...c001fb2805)

---
updated-dependencies:
- dependency-name: assets/syntaxes/02_Extra/Docker
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-03-18 16:13:59 +00:00
a006457a72 Update Warp link 2025-03-09 19:20:02 +01:00
0449107230 Update sponsors 2025-03-04 19:30:20 +01:00
75313d886b Bump assets/syntaxes/02_Extra/Nix from 9032bd6 to 48c497c ()
Bumps [assets/syntaxes/02_Extra/Nix](https://github.com/wmertens/sublime-nix) from `9032bd6` to `48c497c`.
- [Release notes](https://github.com/wmertens/sublime-nix/releases)
- [Commits](9032bd6137...48c497c709)

---
updated-dependencies:
- dependency-name: assets/syntaxes/02_Extra/Nix
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-03-01 03:25:07 +00:00
4998f58847 Merge pull request from sharkdp/debsources
Add debsources syntax
2025-02-25 22:28:09 +02:00
ffc094bd91 Add debsources syntax 2025-02-25 22:17:00 +02:00
343326eacf Merge pull request from sharkdp/csproj_xml_mapping
Map various .NET file extensions to XML syntax
2025-02-25 05:09:12 +02:00
d31bc4347a Map various .NET file extensions to XML syntax 2025-02-23 20:20:52 +02:00
adfb951e51 Merge pull request from sharkdp/ndjson
Add mapping for ndjson file extension to JSON syntax
2025-02-15 12:16:52 +02:00
2843a2c0e8 Add mapping for ndjson file extension to JSON syntax 2025-02-15 08:46:22 +02:00
94d3dc254e Merge pull request from sharkdp/syslog_error_highlighting_fix
Syslog error highlighting fix
2025-02-10 20:46:54 +02:00
915eb55779 Merge branch 'master' into syslog_error_highlighting_fix 2025-02-09 22:20:14 +02:00
547bc38118 Merge pull request from sharkdp/csv_1977
Correctly handle CSV files with a single separator throughout
2025-02-09 20:49:14 +02:00
93fd013aa1 Update changelog 2025-02-09 20:37:53 +02:00
512bfde7ce Correctly handle CSV files with a single separator throughout
better auto-detection of CSV delimiter
- files with a tsv extension are automatically detected as tab delimited
- other files parsed as CSV go through the following steps:
  - if the first line contains at least 3 of the same separator, it uses that separator as a delimiter
  - if the first line contains only one supported separator character, it uses that separator as a delimiter
  - otherwise it falls back to treating all supported delimiters as the delimiter

 supported delimiters, in precedence order:
 - comma `,`
 - semi-colon `;`
 - tab `\t`
 - pipe `|`
2025-02-09 20:37:53 +02:00
27ba45ded7 patch Monokai Extended theme for better Syslog error highlighting 2025-02-09 20:32:48 +02:00
c0898dedb1 fix meta scope ordering to come before constant.numeric scope for times 2025-02-09 20:31:31 +02:00
b82b920420 attempt to fix syslog error highlighting 2025-02-09 20:31:31 +02:00
ac40f7cfd8 Merge pull request from victor-gp/fix-submodules-for-dependabot
Rename submodule paths to fix Dependabot submodule updates
2025-02-04 05:15:14 +02:00
330c51de9f Add Changelog entry 2025-02-04 00:15:45 +01:00
0ed527f0d1 Replace spaces in git submodule paths
To mitigate a bug in the GitHub API that broke the Dependabot action
that updates submodules. See .
2025-02-03 22:01:33 +01:00
7df1dec65c Merge pull request from odilf/master
Add syntax mapping for `nix`s `flake.lock`
2025-02-02 21:20:33 +02:00
61d42ee87b Add syntax mapping for nixs flake.lock 2025-02-02 21:10:03 +02:00
a95e65eea1 Merge pull request from einfachIrgendwer0815/style/fix_lints
Fix clippy lint warnings
2025-02-02 21:05:43 +02:00
71dce0e7f3 Fix clippy::duplicated_attributes warnings 2025-02-02 15:08:16 +01:00
53af1dc32d Fix clippy::unnecessary_filter_map warnings 2025-02-02 15:08:15 +01:00
52252b15d6 Fix clippy::needless_lifetimes warnings 2025-02-02 15:08:15 +01:00
bc24ce9ad4 Fix clippy::needless_update warnings 2025-02-02 15:08:15 +01:00
625e986552 Fix clippy::manual_ignore_case_cmp warnings 2025-02-02 15:08:14 +01:00
095442191c Fix clippy::ptr_arg warnings 2025-02-02 15:08:14 +01:00
cc46282866 Fix clippy::into_iter_on_ref warnings 2025-02-02 15:08:13 +01:00
cbc9c3629d Fix clippy::manual_pattern_char_comparison warnings 2025-02-02 15:08:13 +01:00
2c49d905e4 Fix clippy::legacy_numeric_constants warnings 2025-02-02 15:08:12 +01:00
f0e2f642e0 Fix clippy::redundant_closure warnings 2025-02-02 15:08:12 +01:00
3d0f0c0565 Fix clippy::unnecessary_map_or warnings 2025-02-02 15:08:12 +01:00
3d442cdf98 Fix clippy::needless_borrow warnings 2025-02-02 15:08:11 +01:00
b009fee5ea Fix clippy::needless_return warnings 2025-02-02 15:08:11 +01:00
6cf747678c Fix clippy::needless_borrows_for_generic_args warnings 2025-02-02 15:08:11 +01:00
db812e1179 Bump thiserror from 1.0.69 to 2.0.11 ()
Bumps [thiserror](https://github.com/dtolnay/thiserror) from 1.0.69 to 2.0.11.
- [Release notes](https://github.com/dtolnay/thiserror/releases)
- [Commits](https://github.com/dtolnay/thiserror/compare/1.0.69...2.0.11)

---
updated-dependencies:
- dependency-name: thiserror
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-02-01 04:35:19 +00:00
995f23b58f Bump tempfile from 3.15.0 to 3.16.0 ()
Bumps [tempfile](https://github.com/Stebalien/tempfile) from 3.15.0 to 3.16.0.
- [Changelog](https://github.com/Stebalien/tempfile/blob/master/CHANGELOG.md)
- [Commits](https://github.com/Stebalien/tempfile/compare/v3.15.0...v3.16.0)

---
updated-dependencies:
- dependency-name: tempfile
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-02-01 04:18:58 +00:00
ef3830234d Bump itertools from 0.13.0 to 0.14.0 ()
Bumps [itertools](https://github.com/rust-itertools/itertools) from 0.13.0 to 0.14.0.
- [Changelog](https://github.com/rust-itertools/itertools/blob/master/CHANGELOG.md)
- [Commits](https://github.com/rust-itertools/itertools/compare/v0.13.0...v0.14.0)

---
updated-dependencies:
- dependency-name: itertools
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-02-01 03:53:27 +00:00
4fc55cfcec Bump semver from 1.0.24 to 1.0.25 ()
Bumps [semver](https://github.com/dtolnay/semver) from 1.0.24 to 1.0.25.
- [Release notes](https://github.com/dtolnay/semver/releases)
- [Commits](https://github.com/dtolnay/semver/compare/1.0.24...1.0.25)

---
updated-dependencies:
- dependency-name: semver
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-02-01 03:24:58 +00:00
487ac3bc48 Merge pull request from buzden/add-idris-syntax
[ new ] Add support for Idris 2 programming language
2025-01-27 23:00:05 +02:00
d6cb3ba747 [ new ] Add support for Idris 2 programming language 2025-01-27 23:47:20 +03:00
a9a2dceb72 Merge pull request from buzden/fix-readme-translation
Correct and update one readme's translation according to the main english one
2025-01-27 22:35:23 +02:00
bee08e48ae Merge branch 'master' into fix-readme-translation 2025-01-27 22:20:35 +02:00
b14fb9db24 Merge pull request from einfachIrgendwer0815/fix/list_themes_2
Fix: Don't output default theme info to piped stdout
2025-01-27 21:59:18 +02:00
91acb0d16f update changelog to mention --list-themes bugfix when stdout is piped 2025-01-27 21:43:57 +02:00
4f161705a3 Fix: Don't output default theme info to piped stdout 2025-01-27 17:11:26 +01:00
f8c6e90647 Merge pull request from cyqsimon/paru
Add syntax mapping for paru configuration files
2025-01-24 23:21:29 +02:00
dd9dc4f76b Write changelog 2025-01-24 23:02:57 +02:00
94f49fd99b Add syntax mapping for paru configuration 2025-01-24 23:02:57 +02:00
498df11a50 Merge pull request from dtolnay-contrib/vendorbug
Work around `cargo vendor` losing syntax_mapping builtins directory
2025-01-18 09:31:35 +02:00
db7da314e7 Work around cargo vendor losing syntax_mapping builtins directory 2025-01-17 21:30:37 -08:00
33aabc696a Move section slightly further down 2025-01-15 08:34:52 +01:00
648bedf290 Add Warp Pack sponsorship 2025-01-15 08:34:52 +01:00
dd3d1b8cdb Merge pull request from philipp-tailor/patch-1
Fix tiny accidental repetition in README.md
2025-01-10 19:31:42 +02:00
b39a156d57 Update README.md
Fixes copy and paste error, where same option was listed twice, instead of the 2 distinct options of `--theme` for different system appearances.
2025-01-10 17:45:26 +01:00
b6158c09b4 Merge pull request from bash/fix-env-var-names
Fix name of BAT_THEME_{DARK,LIGHT} env vars
2025-01-09 18:50:02 +02:00
8a11a46f66 Add integration tests 2025-01-09 08:20:36 +01:00
4d73c1e511 Add changelog entry 2025-01-09 08:20:36 +01:00
280f3eeb4e Fix name of BAT_THEME_{DARK,LIGHT} env vars 2025-01-09 08:20:36 +01:00
1321160203 Merge pull request from branchvincent/git2
Bump git2 to 0.20
2025-01-08 06:52:03 +02:00
01680e444b Bump git2 to 0.20 2025-01-07 20:30:27 -08:00
2435453c33 Merge pull request from sharkdp/keith-hall-patch-1
Post release steps
2025-01-07 21:51:03 +02:00
6e466e5ab4 Post release steps
Add new unreleased section at top of change log
2025-01-07 21:30:39 +02:00
25f4f96ea3 Release bat v0.25.0
Merge pull request  from sharkdp/release_0_25
2025-01-07 21:05:49 +02:00
5cfd22ee8b Bump version to 0.25.0 2025-01-07 20:44:21 +02:00
ae07586fef Merge pull request from Anomalocaridid/refactor-lessopen
Rework `lessopen` implementation to use `execute` crate instead of `run_script`
2025-01-06 06:21:46 +02:00
96e4882b5c tests: remove serial attribute on and un-ignore applicable lessopen tests 2025-01-05 21:36:33 +00:00
a0a090c307 tests: disable lessopen for help tests 2025-01-05 21:36:33 +00:00
bc61d84408 update CHANGELOG.md 2025-01-05 21:36:33 +00:00
de8bb79a6f refactor lessopen implementation 2025-01-05 21:36:33 +00:00
7bf459f0ff replace run_script with execute 2025-01-05 21:36:33 +00:00
18ed69aff4 Merge pull request from niklasmohrin/bump-clircle
Bump clircle to 0.6.1
2025-01-05 22:10:45 +02:00
c9431933e5 Deactivate clircle default features and require 0.6.1
This release removes the dependency on `winapi`.
2025-01-05 16:50:45 +01:00
2d3581e8c4 Merge pull request from eth-p/update-docs-for-manpager
Update README steps for using bat as MANPAGER
2025-01-03 09:07:57 +02:00
8453bc93cc Update README steps for using bat as MANPAGER 2025-01-03 08:53:16 +02:00
d1418a9ab0 Merge pull request from sharkdp/two_dark_manpage
Patch themes for better manpage syntax highlighting
2025-01-03 08:44:14 +02:00
09bdcde6c5 Update changelog to mention theme improvements for Manpage 2025-01-03 08:31:05 +02:00
0d2afe79af Improve base16 themes for better Man page syntax highlighting 2025-01-03 08:31:05 +02:00
5a12f187fa Patch 1337 theme for better Man page syntax highlighting 2025-01-03 08:31:05 +02:00
753bfaff49 Improve Ansi theme for better Man page syntax highlighting 2025-01-03 08:31:05 +02:00
9744971b19 Patch OneHalfDark theme for better Man page syntax highlighting 2025-01-03 08:31:05 +02:00
c8f7787281 Patch TwoDark theme for better Man page syntax highlighting 2025-01-03 08:31:05 +02:00
26f19703d3 Merge pull request from sharkdp/man_gs
Manpage: Fix for OPTIONS consisting of a plain dash
2025-01-03 08:30:44 +02:00
b7b05a3553 Fix for OPTIONS consisting of a plain dash 2025-01-03 08:20:40 +02:00
caba54efc9 Bump clircle from 0.6.0 to 0.6.1 ()
Bumps [clircle](https://github.com/niklasmohrin/clircle) from 0.6.0 to 0.6.1.
- [Release notes](https://github.com/niklasmohrin/clircle/releases)
- [Commits](https://github.com/niklasmohrin/clircle/compare/v0.6.0...v0.6.1)

---
updated-dependencies:
- dependency-name: clircle
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-01-01 04:43:24 +00:00
e2528dff6d Bump serde_with from 3.8.1 to 3.12.0 ()
Bumps [serde_with](https://github.com/jonasbb/serde_with) from 3.8.1 to 3.12.0.
- [Release notes](https://github.com/jonasbb/serde_with/releases)
- [Commits](https://github.com/jonasbb/serde_with/compare/v3.8.1...v3.12.0)

---
updated-dependencies:
- dependency-name: serde_with
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-01-01 04:30:15 +00:00
ad11fb815f Bump predicates from 3.1.0 to 3.1.3 ()
Bumps [predicates](https://github.com/assert-rs/predicates-rs) from 3.1.0 to 3.1.3.
- [Changelog](https://github.com/assert-rs/predicates-rs/blob/master/CHANGELOG.md)
- [Commits](https://github.com/assert-rs/predicates-rs/compare/v3.1.0...v3.1.3)

---
updated-dependencies:
- dependency-name: predicates
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-01-01 04:15:10 +00:00
305e8a4d84 Bump serde from 1.0.209 to 1.0.217 ()
Bumps [serde](https://github.com/serde-rs/serde) from 1.0.209 to 1.0.217.
- [Release notes](https://github.com/serde-rs/serde/releases)
- [Commits](https://github.com/serde-rs/serde/compare/v1.0.209...v1.0.217)

---
updated-dependencies:
- dependency-name: serde
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-01-01 03:57:42 +00:00
7e804b27a0 Bump console from 0.15.8 to 0.15.10 ()
Bumps [console](https://github.com/console-rs/console) from 0.15.8 to 0.15.10.
- [Release notes](https://github.com/console-rs/console/releases)
- [Changelog](https://github.com/console-rs/console/blob/main/CHANGELOG.md)
- [Commits](https://github.com/console-rs/console/compare/0.15.8...0.15.10)

---
updated-dependencies:
- dependency-name: console
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-01-01 03:34:32 +00:00
18d963f423 Merge pull request from liliwilson/markdown-puppet-syntax-highlighting
Added patch for puppet syntax highlighting in Markdown code snippets
2024-12-30 21:40:15 +02:00
9d91d22e29 changelog entry 2024-12-30 21:27:28 +02:00
3fa9044029 added patch for puppet syntax highlighting in markdown 2024-12-30 21:27:28 +02:00
8a9821fa9a Merge pull request from sharkdp/fix_cargo_audit_ci
[CI] fix cargo audit failing to run successfully
2024-12-30 21:26:22 +02:00
75fadb8d1c ignore warning for idna also 2024-12-30 21:12:48 +02:00
63560c4733 add cargo audit config file
ignore yaml-rust advisory for now
2024-12-30 20:53:31 +02:00
d660cca8a9 Bump MSRV to 1.74
released over a year ago
2024-12-26 21:30:16 +02:00
be62a4cea4 Upgrade clap to fix cargo audit failure on anstream 0.6.4
which is provided by clap 4.4.12
2024-12-26 21:19:02 +02:00
874448c112 [CI] fix cargo audit failing to run 2024-12-26 21:13:14 +02:00
004d2d5122 [ readme ] Correct and update one readme's translation 2024-12-17 13:49:23 +03:00
3e07483f7a Merge pull request from sharkdp/keith-hall-patch-1
Build with MacOS 13 instead of 12
2024-12-07 12:08:41 +02:00
9859077306 Build with MacOS 13 instead of 12
MacOS 12 is deprecated in GitHub Actions and no longer usable
2024-12-07 11:04:53 +02:00
0cde7167d6 Merge pull request from einfachIrgendwer0815/feature/included_completions
Add `--completion <SHELL>` to provide shell completions
2024-12-01 19:16:05 +02:00
7eff8b687c Update changelog 2024-12-01 09:39:17 +01:00
04c7d15084 Mention --completion in the README 2024-12-01 09:39:17 +01:00
dbe25ba5e6 Include shell completions in the executable 2024-12-01 09:39:17 +01:00
f81d4dc321 Bump terminal-colorsaurus from 0.4.4 to 0.4.7 ()
Bumps [terminal-colorsaurus](https://github.com/bash/terminal-colorsaurus) from 0.4.4 to 0.4.7.
- [Release notes](https://github.com/bash/terminal-colorsaurus/releases)
- [Changelog](https://github.com/bash/terminal-colorsaurus/blob/main/changelog.md)
- [Commits](https://github.com/bash/terminal-colorsaurus/compare/0.4.4...0.4.7)

---
updated-dependencies:
- dependency-name: terminal-colorsaurus
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-12-01 05:00:43 +00:00
f1c5c02713 Bump once_cell from 1.20.1 to 1.20.2 ()
Bumps [once_cell](https://github.com/matklad/once_cell) from 1.20.1 to 1.20.2.
- [Changelog](https://github.com/matklad/once_cell/blob/master/CHANGELOG.md)
- [Commits](https://github.com/matklad/once_cell/compare/v1.20.1...v1.20.2)

---
updated-dependencies:
- dependency-name: once_cell
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-12-01 04:47:55 +00:00
6c25c693a8 Bump regex from 1.10.2 to 1.10.6 ()
Bumps [regex](https://github.com/rust-lang/regex) from 1.10.2 to 1.10.6.
- [Release notes](https://github.com/rust-lang/regex/releases)
- [Changelog](https://github.com/rust-lang/regex/blob/master/CHANGELOG.md)
- [Commits](https://github.com/rust-lang/regex/compare/1.10.2...1.10.6)

---
updated-dependencies:
- dependency-name: regex
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-12-01 04:30:40 +00:00
4be55ead4d Bump flate2 from 1.0.34 to 1.0.35 ()
Bumps [flate2](https://github.com/rust-lang/flate2-rs) from 1.0.34 to 1.0.35.
- [Release notes](https://github.com/rust-lang/flate2-rs/releases)
- [Changelog](https://github.com/rust-lang/flate2-rs/blob/main/CHANGELOG.md)
- [Commits](https://github.com/rust-lang/flate2-rs/compare/1.0.34...1.0.35)

---
updated-dependencies:
- dependency-name: flate2
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-12-01 04:05:04 +00:00
8df326aeed Merge pull request from leo9800/master
Update syntax mapping for Apache Conf
2024-12-01 05:40:59 +02:00
Leo
f87157d009 Update syntax mapping for apache conf 2024-12-01 11:15:17 +08:00
0b4fe03ec3 Merge pull request from fepegar/3130-use-toml-for-uv-lock
Use TOML syntax highlighting for uv.lock
2024-11-25 20:49:37 +02:00
1063264d88 Replace issue number with pull request number 2024-11-24 08:14:24 +00:00
4bee858c78 Update CHANGELOG 2024-11-22 22:50:53 +00:00
d832367d95 Use TOML syntax highlighting for uv.lock 2024-11-22 22:39:35 +00:00
d89a20f8b4 Merge pull request from CosmicHorrorDev/update-sublime-snazzy-theme
Bump themes/sublime-snazzy from `7034320` `48f43a7`
2024-11-21 21:13:27 +02:00
41ef01f25d Merge branch 'master' into update-sublime-snazzy-theme 2024-11-21 20:30:53 +02:00
7b797fd830 Merge pull request from binchengqu/master
chore: remove redundant word in comment
2024-11-21 06:09:50 +02:00
d27064cea5 chore: remove redundant word in comment
Signed-off-by: binchengqu <bincheng@before.tech>
2024-11-21 11:55:43 +08:00
c9aa8d59ef Merge pull request from CosmicHorrorDev/update-nord-theme
Bump themes/Nord-submlime from `0d655b2` `bf92a9e`
2024-11-21 05:29:12 +02:00
57a8b10883 Bump themes/Nord-submlime from 0d655b2 bf92a9e 2024-11-21 05:19:56 +02:00
e608b33142 Merge pull request from kojix2/print
Add print_with_writer to PrettyPrint
2024-11-16 21:52:51 +02:00
6598442d41 Merge branch 'master' into print 2024-11-14 10:08:21 +09:00
822eff6028 Merge pull request from volklord/master
bat.zsh.in: Remove duplicate word
2024-11-13 22:19:09 +02:00
da4defad07 Merge branch 'master' into master 2024-11-13 21:59:48 +02:00
9bed8adb16 Merge pull request from mhelsley/mhelsley-fix-lessopen
Fix lessopen feature
2024-11-13 21:58:02 +02:00
2e836e9822 Merge branch 'master' into mhelsley-fix-lessopen 2024-11-13 21:42:36 +02:00
07554b0c1d Merge pull request from adamperkowski/bat_config_dir_docs
📔 docs: mention `BAT_CONFIG_DIR` in the README
2024-11-13 21:37:40 +02:00
022574314f Merge branch 'master' into bat_config_dir_docs 2024-11-13 21:25:59 +02:00
8a4701f93f Merge pull request from bash/dark-light
Choose Theme Based on The Terminal's Color Scheme
2024-11-13 21:10:50 +02:00
08047a6a2e Merge branch 'master' into dark-light 2024-11-13 20:54:57 +02:00
2caeaef14b 📔 docs: mention BAT_CONFIG_DIR in the README 2024-11-13 20:53:45 +02:00
d00e05643f Merge pull request from Ugzuzg/citation-mapping
Add syntax mapping for CITATION.cff
2024-11-13 20:41:44 +02:00
60693db73f Merge branch 'master' into dark-light 2024-11-13 20:33:37 +02:00
15f2553a3d bat.zsh.in: Remove duplicate word
Remove the duplicate word `disable disable`
2024-11-13 20:30:04 +02:00
dbe352d8b8 Merge branch 'master' into citation-mapping 2024-11-13 20:25:26 +02:00
517ddd8e00 Merge pull request from pratik-m/add-pipe-delimter-to-csv-syntax
Adding pipe delimeter support for csv files
2024-11-13 20:24:20 +02:00
558b487c91 Merge branch 'master' into add-pipe-delimter-to-csv-syntax 2024-11-11 20:41:52 -08:00
f8f12a7db5 Update sponsorship information 2024-11-10 20:02:58 +01:00
d725443116 Merge branch 'master' into add-pipe-delimter-to-csv-syntax 2024-11-02 22:41:52 -07:00
dbaa0a6d9e Bump grep-cli from 0.1.10 to 0.1.11 ()
Bumps [grep-cli](https://github.com/BurntSushi/ripgrep) from 0.1.10 to 0.1.11.
- [Release notes](https://github.com/BurntSushi/ripgrep/releases)
- [Changelog](https://github.com/BurntSushi/ripgrep/blob/master/CHANGELOG.md)
- [Commits](https://github.com/BurntSushi/ripgrep/compare/grep-cli-0.1.10...0.1.11)

---
updated-dependencies:
- dependency-name: grep-cli
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-11-01 05:02:22 +00:00
6b2c5645d2 Bump toml from 0.8.9 to 0.8.19 ()
Bumps [toml](https://github.com/toml-rs/toml) from 0.8.9 to 0.8.19.
- [Commits](https://github.com/toml-rs/toml/compare/toml-v0.8.9...toml-v0.8.19)

---
updated-dependencies:
- dependency-name: toml
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-11-01 04:46:28 +00:00
e7bef716c9 Bump encoding_rs from 0.8.34 to 0.8.35 ()
Bumps [encoding_rs](https://github.com/hsivonen/encoding_rs) from 0.8.34 to 0.8.35.
- [Commits](https://github.com/hsivonen/encoding_rs/compare/v0.8.34...v0.8.35)

---
updated-dependencies:
- dependency-name: encoding_rs
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-11-01 04:23:23 +00:00
c627526f8c Bump clircle from 0.5.0 to 0.6.0 ()
Bumps [clircle](https://github.com/niklasmohrin/clircle) from 0.5.0 to 0.6.0.
- [Release notes](https://github.com/niklasmohrin/clircle/releases)
- [Commits](https://github.com/niklasmohrin/clircle/compare/v0.5.0...v0.6.0)

---
updated-dependencies:
- dependency-name: clircle
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-11-01 03:57:52 +00:00
95cb705ac0 Merge pull request from jacg/debdiff
Make .debdiff imply .diff using syntax_mapping toml
2024-10-31 08:13:35 +02:00
ca43c7a8f8 Merge branch 'master' into print 2024-10-31 15:04:14 +09:00
0a8bfc52a6 Move from unix-family to common 2024-10-31 08:03:45 +02:00
d0ae2e6826 Add CHANGELOG entry for .debdiff => diff 2024-10-31 08:03:45 +02:00
9090fb75e0 Make .debdiff imply .diff using syntax_mapping toml
Closes 
2024-10-31 08:03:45 +02:00
50fa25db60 Merge pull request from cyqsimon/pacman-conf
Add syntax mapping for `/etc/pacman.conf`
2024-10-31 05:20:09 +02:00
bd3c49d234 Merge remote-tracking branch 'origin/master' into pacman-conf 2024-10-31 05:08:46 +02:00
ce7a3d9f7d Merge pull request from einfachIrgendwer0815/fix/2731_plain_override
Fix override of --plain and --paging
2024-10-31 05:07:23 +02:00
3b71837174 Merge branch 'master' into fix/2731_plain_override 2024-10-30 13:06:13 +01:00
2be3a14a7e Merge pull request from einfachIrgendwer0815/feature/binary_as_text
Allow printing binary content by treating it the same as text
2024-10-30 13:55:21 +02:00
8d82402d74 Merge branch 'master' into feature/binary_as_text 2024-10-30 12:46:11 +01:00
1942d40863 changelog updates 2024-10-29 22:36:43 -07:00
5042844342 Adding pipe delimeter support for csv files 2024-10-29 21:34:47 -07:00
649fb05c58 Bump nix from 0.26.4 to 0.29 2024-10-25 09:16:21 +02:00
c533a4aa14 Update CHANGELOG.md 2024-10-23 21:42:02 +09:00
b93a41a9a3 Add print_with_writer to PrettyPrint 2024-10-23 21:21:15 +09:00
937c59fca9 Merge pull request from cyqsimon/kubernetes
Add syntax mapping for kubernetes config files
2024-10-21 23:10:22 +03:00
a80d5ea9f7 Merge branch 'master' into pacman-conf 2024-10-21 23:02:56 +03:00
c11a7d9e41 Merge branch 'master' into kubernetes 2024-10-21 23:01:30 +03:00
ac082ab64b Update changelog 2024-10-18 12:44:53 +02:00
c9fd0f3cf0 Add partial override of -pp and --paging 2024-10-18 12:13:41 +02:00
e667415def Add tests against issue 2024-10-18 12:13:41 +02:00
fd6c7637e4 Partially revert "Make -pp override --paging and vice versa when passed as a later argument. ()"
This partially reverts commit e2bf85e749.
2024-10-18 11:46:51 +02:00
9a816c9c68 Add syntax mapping for CITATION.cff 2024-10-13 11:47:31 +02:00
431344ba67 Merge branch 'master' into mhelsley-fix-lessopen 2024-10-06 21:52:34 -07:00
eca6b8a376 Merge pull request from einfachIrgendwer0815/fix/3073_list_themes
Don't output default theme info to piped stdout
2024-10-06 22:27:18 +03:00
b01ed8d773 Merge branch 'master' into fix/3073_list_themes 2024-10-06 22:08:00 +03:00
3e5f4266ce Fix lessopen feature
RawOsString API changed in os_str_bytes 7.0.0 and bat no longer builds
with the lessopen feature because:

- ::from_string() is deprecated and says to use new().
  The documentation says that new(), like from_string() no longer
  needs to copy the string.

- ::assert_from_raw_vec() is no longer merely deprecated and now
  requires selecting the "conversions" feature of os_str_bytes.

Replaces PR#2938
2024-10-03 16:32:23 -07:00
61c9f312c9 Bump flate2 from 1.0.30 to 1.0.34 ()
Bumps [flate2](https://github.com/rust-lang/flate2-rs) from 1.0.30 to 1.0.34.
- [Release notes](https://github.com/rust-lang/flate2-rs/releases)
- [Changelog](https://github.com/rust-lang/flate2-rs/blob/main/CHANGELOG.md)
- [Commits](https://github.com/rust-lang/flate2-rs/compare/1.0.30...1.0.34)

---
updated-dependencies:
- dependency-name: flate2
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-10-01 03:36:57 +00:00
c59dad0cae Bump git2 from 0.18.3 to 0.19.0 ()
Bumps [git2](https://github.com/rust-lang/git2-rs) from 0.18.3 to 0.19.0.
- [Changelog](https://github.com/rust-lang/git2-rs/blob/master/CHANGELOG.md)
- [Commits](https://github.com/rust-lang/git2-rs/compare/git2-0.18.3...git2-0.19.0)

---
updated-dependencies:
- dependency-name: git2
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-10-01 03:19:34 +00:00
16a79d38c2 Bump once_cell from 1.19.0 to 1.20.1 ()
Bumps [once_cell](https://github.com/matklad/once_cell) from 1.19.0 to 1.20.1.
- [Changelog](https://github.com/matklad/once_cell/blob/master/CHANGELOG.md)
- [Commits](https://github.com/matklad/once_cell/compare/v1.19.0...v1.20.1)

---
updated-dependencies:
- dependency-name: once_cell
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-10-01 03:02:02 +00:00
9d635627dc Bump globset from 0.4.14 to 0.4.15 ()
Bumps [globset](https://github.com/BurntSushi/ripgrep) from 0.4.14 to 0.4.15.
- [Release notes](https://github.com/BurntSushi/ripgrep/releases)
- [Changelog](https://github.com/BurntSushi/ripgrep/blob/master/CHANGELOG.md)
- [Commits](https://github.com/BurntSushi/ripgrep/compare/globset-0.4.14...ignore-0.4.15)

---
updated-dependencies:
- dependency-name: globset
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-10-01 02:40:45 +00:00
bc69ffb0f0 Map *.mkd files to Markdown syntax () 2024-09-26 21:06:07 +02:00
a0226f5670 Update Chinese version translation of README.md 2024-09-20 06:28:20 +02:00
ed7789d9b7 Associate GeoJSON .geojson files with json syntax (fixes ) 2024-09-20 06:14:26 +02:00
b747184788 Accept impl Into<String> to avoid cloning strings 2024-09-08 17:11:11 +02:00
02ae6ef348 Remove redundant guard 2024-09-07 22:59:27 +02:00
0ebb9cbfe2 Add Display impl 2024-09-07 21:57:27 +02:00
f6cbee9e27 Update docs 2024-09-07 21:36:03 +02:00
10e823c4b7 Rename internal function 2024-09-07 21:36:03 +02:00
60e4027332 Expose theme env vars 2024-09-07 21:36:02 +02:00
e075fee5bf Add infallible constructor 2024-09-07 21:36:02 +02:00
16d9b99f6c Flatten preference enum 2024-09-04 21:18:29 +02:00
ffa74a7f49 Bump serde from 1.0.199 to 1.0.209 ()
Bumps [serde](https://github.com/serde-rs/serde) from 1.0.199 to 1.0.209.
- [Release notes](https://github.com/serde-rs/serde/releases)
- [Commits](https://github.com/serde-rs/serde/compare/v1.0.199...v1.0.209)

---
updated-dependencies:
- dependency-name: serde
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-09-01 03:05:26 +00:00
c1772b7793 Bump plist from 1.6.0 to 1.7.0 ()
Bumps [plist](https://github.com/ebarnard/rust-plist) from 1.6.0 to 1.7.0.
- [Release notes](https://github.com/ebarnard/rust-plist/releases)
- [Commits](https://github.com/ebarnard/rust-plist/compare/v1.6.0...v1.7.0)

---
updated-dependencies:
- dependency-name: plist
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-09-01 02:45:53 +00:00
5be9d19500 Reinforce tests for --list-themes 2024-08-25 11:10:25 +02:00
0603f0b844 Don't output default theme info to piped stdout 2024-08-25 10:54:46 +02:00
50958472e5 Return theme alongside detected color scheme 2024-08-23 18:03:07 +02:00
89ce060183 Update help, man page and completions 2024-08-18 20:32:59 +02:00
bc42149a72 Merge color scheme options into theme / BAT_THEME 2024-08-18 14:59:14 +02:00
0c3b22e0f0 Run syntax highlighting when --binary=as-text 2024-08-18 10:06:12 +02:00
a769a3d813 Update CHANGELOG 2024-08-18 10:06:09 +02:00
7cc231b82b Test --binary=as-text 2024-08-18 10:05:43 +02:00
7f089ead62 Add option --binary
`--binary` allows to specify how to deal with binary content. Current
options are not printing anything or treating the binary data as text.
2024-08-18 10:05:37 +02:00
b9b981f657 Generalize --detect-color-scheme to --color-scheme 2024-08-16 14:14:30 +02:00
abf9dada04 Remove HighlightingAssets::default_theme() 2024-08-16 14:13:58 +02:00
5c6974703e Respect --detect-color-scheme flag when listing themes 2024-08-16 14:13:58 +02:00
1b0a6da4be Use new default_theme fn for --list-themes 2024-08-16 14:13:58 +02:00
06b645435a Add changelog entry 2024-08-16 14:13:57 +02:00
c3b190d45b Disable color detection in test 2024-08-16 14:13:18 +02:00
594b1417f1 Update readme 2024-08-16 14:13:18 +02:00
e8ca6ec7c3 Remove cargo feature 2024-08-16 14:13:18 +02:00
6498615f5f Improve upon the documentation 2024-08-16 14:13:18 +02:00
30b0143ccf Make default_theme pub 2024-08-16 14:13:17 +02:00
ff81cfd584 Move actual detection into library 2024-08-16 14:13:16 +02:00
14ce668a1d Add generated powershell completion to ignore list 2024-08-16 14:12:23 +02:00
9a1bfe946d Update completions and man page 2024-08-16 14:12:23 +02:00
cea45e05f3 Expose new theme selection in CLI 2024-08-16 14:12:22 +02:00
cda363a3f7 Use default_theme() function from theme module 2024-08-16 14:09:38 +02:00
de796392cf Deprecate old default_theme function 2024-08-16 14:09:38 +02:00
1423dd9440 Choose theme based on the terminal's color scheme 2024-08-16 14:09:35 +02:00
60b3428ad7 Fix lock file 2024-08-10 11:38:38 +02:00
571970f8ff Merge branch 'master' into read-from-tail 2024-08-10 11:34:45 +02:00
18a0653ce8 Add changelog entry 2024-08-10 11:27:34 +02:00
569286055c Support relative negative line ranges 2024-08-10 10:37:19 +02:00
b662fec214 Bump ansi_colours from 1.2.2 to 1.2.3 ()
Bumps [ansi_colours](https://github.com/mina86/ansi_colours) from 1.2.2 to 1.2.3.
- [Commits](https://github.com/mina86/ansi_colours/commits)

---
updated-dependencies:
- dependency-name: ansi_colours
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-08-01 03:28:12 +00:00
d8d0b77568 Bump indexmap from 2.2.6 to 2.3.0 ()
Bumps [indexmap](https://github.com/indexmap-rs/indexmap) from 2.2.6 to 2.3.0.
- [Changelog](https://github.com/indexmap-rs/indexmap/blob/master/RELEASES.md)
- [Commits](https://github.com/indexmap-rs/indexmap/compare/2.2.6...2.3.0)

---
updated-dependencies:
- dependency-name: indexmap
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-08-01 03:14:26 +00:00
13317b0a3b Bump expect-test from 1.4.1 to 1.5.0 ()
Bumps [expect-test](https://github.com/rust-analyzer/expect-test) from 1.4.1 to 1.5.0.
- [Changelog](https://github.com/rust-analyzer/expect-test/blob/master/CHANGELOG.md)
- [Commits](https://github.com/rust-analyzer/expect-test/compare/v1.4.1...v1.5.0)

---
updated-dependencies:
- dependency-name: expect-test
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-08-01 02:47:46 +00:00
2616296183 Merge pull request from eth-p/add-remove-styles
Merge `--style`s from different places using `+`/`-`
2024-07-30 21:30:19 -07:00
39684b85ad Update changelog 2024-07-30 21:22:05 -07:00
aa3ec109b7 First StyleComponentList should remove from 'auto' style.
This happens when there are no `--style` arguments other than the one
passed in as a command line argument.

Prior to this change, removing a style component (e.g. `--style=-numbers`)
would remove the component from an empty style component set, resulting
in no styles at all. That behaviour was less intuitive than the new
behaviour, which starts out with the default components and
removes the line numbers.
2024-07-30 21:22:02 -07:00
180a77ee99 Add integration tests for merging styles
A huge thanks to @einfachIrgendwer0815 for helping me make sure
these tests work under the MSRV CI job.
2024-07-30 21:22:00 -07:00
93b25d75a0 Join env var options with "=" instead of " "
Joining them with a space was causing certain styles (e.g. `-grid`) to
be misinterpreted as a separate option.
2024-07-30 21:21:58 -07:00
6e91ba83b7 Update clap/docs for merging --style arguments 2024-07-30 21:21:55 -07:00
b74c125c43 Support merging --style arguments
The `overrides_with` clap builder option was removed
because it interfered with the matcher's ability to
retain all occurrences of `--style`.

The behavior it covered is expressed within the new
`forced_style_components` function.
2024-07-30 21:21:53 -07:00
fd1e0d5876 Merge pull request from akinomyoga/update-man
Update the man page of bat (`assets/manual/bat.1.in`)
2024-07-29 07:14:31 +03:00
9a650e8279 Update CHANGELOG 2024-07-29 12:18:40 +09:00
d5aa9d8e05 Add options generated by completions to the man page 2024-07-29 12:18:40 +09:00
b1cdc06430 Add --no-* options to Bash/Zsh completions 2024-07-29 12:18:40 +09:00
83a15ac05f Add --cache-dir to Fish completion 2024-07-29 12:18:40 +09:00
43a77a42f8 Add options present in --help to Bash completion 2024-07-29 12:18:40 +09:00
44ca1e7df1 Add options present in --help to the man page 2024-07-29 12:18:40 +09:00
23fd200482 Associate JSON-LD .jsonld files with json syntax (fixes )
Use PR instead of Issue # number in CHANGELOG.

Clean up (unify) CHANGELOG.
2024-07-27 15:48:02 +02:00
9f1c62b013 Merge pull request from brenton-at-pieces/add-cfml
add CFML syntax
2024-07-26 19:45:44 +03:00
319b8868fc Write changelog 2024-07-26 23:39:27 +08:00
7bd6cdbebc Add syntax mapping for kubernetes config files 2024-07-26 23:23:58 +08:00
1488a4a006 Merge branch 'master' into add-cfml 2024-07-26 09:09:30 -04:00
56d2823b0e Merge pull request from cyqsimon/time
Bump time to 0.3.36 (fixes )
2024-07-26 12:12:57 +03:00
1a11ba11e3 Write changelog 2024-07-26 16:18:16 +08:00
c34bdb5e66 Bump time to 0.3.36 (fixes ) 2024-07-26 16:10:17 +08:00
10456e1d51 Merge branch 'master' into add-cfml 2024-07-25 15:54:50 -04:00
bbdadc7e38 Merge pull request from vorburger/bump-textproto
Update the Protobuf sobmodule in order to add `.textproto` support
2024-07-23 23:02:35 +03:00
ff71e32c0f Update the Protobuf sobmodule (fixes ) 2024-07-21 23:14:12 +02:00
50b01ea8da update CHANGELOG 2024-07-17 16:17:41 -04:00
de697f7717 add CFML syntax 2024-07-17 15:46:38 -04:00
575457c944 Bump themes/sublime-snazzy from 7034320 48f43a7 2024-06-30 23:43:32 -06:00
6fc58821a5 Bump anyhow from 1.0.78 to 1.0.86 ()
Bumps [anyhow](https://github.com/dtolnay/anyhow) from 1.0.78 to 1.0.86.
- [Release notes](https://github.com/dtolnay/anyhow/releases)
- [Commits](https://github.com/dtolnay/anyhow/compare/1.0.78...1.0.86)

---
updated-dependencies:
- dependency-name: anyhow
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-07-01 03:34:46 +00:00
7873b473e8 Bump unicode-width from 0.1.11 to 0.1.13 ()
Bumps [unicode-width](https://github.com/unicode-rs/unicode-width) from 0.1.11 to 0.1.13.
- [Commits](https://github.com/unicode-rs/unicode-width/compare/v0.1.11...v0.1.13)

---
updated-dependencies:
- dependency-name: unicode-width
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-07-01 03:16:35 +00:00
609005a225 Bump encoding_rs from 0.8.33 to 0.8.34 ()
Bumps [encoding_rs](https://github.com/hsivonen/encoding_rs) from 0.8.33 to 0.8.34.
- [Commits](https://github.com/hsivonen/encoding_rs/compare/v0.8.33...v0.8.34)

---
updated-dependencies:
- dependency-name: encoding_rs
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-07-01 02:51:38 +00:00
b9c74ab859 Bump walkdir from 2.4.0 to 2.5.0 ()
Bumps [walkdir](https://github.com/BurntSushi/walkdir) from 2.4.0 to 2.5.0.
- [Commits](https://github.com/BurntSushi/walkdir/compare/2.4.0...2.5.0)

---
updated-dependencies:
- dependency-name: walkdir
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-07-01 02:29:47 +00:00
cee5584daf Fix cmder link 2024-06-29 14:57:40 +02:00
b265b20721 Add flox install 2024-06-23 13:52:52 +02:00
a7a9727c11 Merge pull request from eth-p/strip-ansi-from-input-option
Add option to remove ANSI escape sequences from bat's input.
2024-06-17 18:37:22 -07:00
90dfa7f18d Update README.md to mention --strip-ansi 2024-06-17 18:27:39 -07:00
3f8d62e7d6 Update CHANGELOG.md 2024-06-17 18:27:39 -07:00
3f22311ec8 Add ANSI stripping to bat-as-a-library 2024-06-17 18:27:39 -07:00
9e8176b1c6 Add --strip-ansi=auto option
When using `auto`, escape sequences will be stripped unless printing
plain text.
2024-06-17 18:27:33 -07:00
70ff93d238 Add --strip-ansi option 2024-06-16 16:49:07 -07:00
c264ecd26b ci: support aarch64 statically-linked binary () 2024-06-16 20:16:11 +02:00
10a1b24191 Merge pull request from eth-p/improve-preprocessor
Update bat's tab expansion preprocessor to use bat's ANSI escape sequence iterator.
2024-06-15 16:28:05 -07:00
243819ecdc Update CHANGELOG.md 2024-06-15 16:18:29 -07:00
9c76b72825 Update expand_tabs to use bat's ANSI iterator 2024-06-10 20:07:54 -07:00
b4fe182960 Make EscapeSequenceOffsetsIterator pub, add fns to get indices 2024-06-10 20:04:17 -07:00
b7e44c76dc Bump semver from 1.0.21 to 1.0.23 ()
Bumps [semver](https://github.com/dtolnay/semver) from 1.0.21 to 1.0.23.
- [Release notes](https://github.com/dtolnay/semver/releases)
- [Commits](https://github.com/dtolnay/semver/compare/1.0.21...1.0.23)

---
updated-dependencies:
- dependency-name: semver
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-06-01 03:31:50 +00:00
f3cc69733f Bump thiserror from 1.0.53 to 1.0.61 ()
Bumps [thiserror](https://github.com/dtolnay/thiserror) from 1.0.53 to 1.0.61.
- [Release notes](https://github.com/dtolnay/thiserror/releases)
- [Commits](https://github.com/dtolnay/thiserror/compare/1.0.53...1.0.61)

---
updated-dependencies:
- dependency-name: thiserror
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-06-01 03:18:21 +00:00
3625f0ea1c Bump itertools from 0.12.1 to 0.13.0 ()
Bumps [itertools](https://github.com/rust-itertools/itertools) from 0.12.1 to 0.13.0.
- [Changelog](https://github.com/rust-itertools/itertools/blob/master/CHANGELOG.md)
- [Commits](https://github.com/rust-itertools/itertools/compare/v0.12.1...v0.13.0)

---
updated-dependencies:
- dependency-name: itertools
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-06-01 03:04:56 +00:00
e6e2d4c65d Bump flate2 from 1.0.28 to 1.0.30 ()
Bumps [flate2](https://github.com/rust-lang/flate2-rs) from 1.0.28 to 1.0.30.
- [Release notes](https://github.com/rust-lang/flate2-rs/releases)
- [Commits](https://github.com/rust-lang/flate2-rs/compare/1.0.28...1.0.30)

---
updated-dependencies:
- dependency-name: flate2
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-06-01 02:48:23 +00:00
340e873eff Bump git2 from 0.18.2 to 0.18.3 ()
Bumps [git2](https://github.com/rust-lang/git2-rs) from 0.18.2 to 0.18.3.
- [Changelog](https://github.com/rust-lang/git2-rs/blob/master/CHANGELOG.md)
- [Commits](https://github.com/rust-lang/git2-rs/compare/git2-0.18.2...git2-0.18.3)

---
updated-dependencies:
- dependency-name: git2
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-06-01 02:24:10 +00:00
3407bf4bf6 Merge pull request from ccqpein/master
Patch the lisp syntax
2024-05-31 23:30:08 +03:00
25cd4991d2 update lisp test 2024-05-31 12:39:19 -04:00
503b2c5126 fix the prefix 2024-05-27 16:22:07 -04:00
026bc05d70 changelog 2024-05-27 15:58:04 -04:00
61005f19fa patch the lisp syntax 2024-05-27 15:52:26 -04:00
8f8c953ab6 Add support for Apple Silicon () 2024-05-27 06:14:11 +02:00
f82487daf8 Write changelog 2024-05-15 14:35:47 +08:00
3a9d574770 Add syntax mapping for /etc/pacman.conf 2024-05-15 14:31:25 +08:00
b4e3a84e1a Bump serde from 1.0.197 to 1.0.199 ()
Bumps [serde](https://github.com/serde-rs/serde) from 1.0.197 to 1.0.199.
- [Release notes](https://github.com/serde-rs/serde/releases)
- [Commits](https://github.com/serde-rs/serde/compare/v1.0.197...v1.0.199)

---
updated-dependencies:
- dependency-name: serde
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-05-01 03:23:25 +00:00
f7c39e8353 Bump os_str_bytes from 6.6.1 to 7.0.0 ()
Bumps [os_str_bytes](https://github.com/dylni/os_str_bytes) from 6.6.1 to 7.0.0.
- [Release notes](https://github.com/dylni/os_str_bytes/releases)
- [Commits](https://github.com/dylni/os_str_bytes/compare/6.6.1...7.0.0)

---
updated-dependencies:
- dependency-name: os_str_bytes
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-05-01 03:10:09 +00:00
37d9f0533c Bump indexmap from 2.2.2 to 2.2.6 ()
Bumps [indexmap](https://github.com/indexmap-rs/indexmap) from 2.2.2 to 2.2.6.
- [Changelog](https://github.com/indexmap-rs/indexmap/blob/master/RELEASES.md)
- [Commits](https://github.com/indexmap-rs/indexmap/compare/2.2.2...2.2.6)

---
updated-dependencies:
- dependency-name: indexmap
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-05-01 02:47:11 +00:00
d560f2a515 Bump serde_with from 3.7.0 to 3.8.1 ()
Bumps [serde_with](https://github.com/jonasbb/serde_with) from 3.7.0 to 3.8.1.
- [Release notes](https://github.com/jonasbb/serde_with/releases)
- [Commits](https://github.com/jonasbb/serde_with/compare/v3.7.0...v3.8.1)

---
updated-dependencies:
- dependency-name: serde_with
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-05-01 02:27:04 +00:00
bb4d1cbd2e refactor: factorize constants by inverting loop and condition order 2024-04-19 11:44:47 +02:00
23ec433167 display which theme is the default one in basic output 2024-04-19 11:44:47 +02:00
9eaed3e3f0 [JavaScript] Support bun in shebang for syntax highlighting ()
* [JavaScript] Support bun in shebang for syntax highlighting

---------

Co-authored-by: Keith Hall <keith-hall@users.noreply.github.com>
2024-04-15 06:17:41 +00:00
d5bd4aa93f display which theme is the default one in colored output () 2024-04-14 15:54:52 +02:00
66b70dd8ed Merge pull request from vorburger/patch-1
Fix minor typo in GitHub Syntax Request Issue Template
2024-04-09 21:35:45 +03:00
01731478a6 Fix minor typo in GitHub Syntax Request Issue Template 2024-04-09 19:54:46 +02:00
f8c5429a6c Print $TERM with --diagnostic 2024-04-07 14:24:16 +02:00
f71226adbb Sort env vars printed by --diagnostic 2024-04-07 14:24:16 +02:00
e8d777b73a fix: some typos 2024-04-04 06:01:37 +02:00
3cff44b652 Bump console from 0.15.7 to 0.15.8 ()
Bumps [console](https://github.com/console-rs/console) from 0.15.7 to 0.15.8.
- [Changelog](https://github.com/console-rs/console/blob/master/CHANGELOG.md)
- [Commits](https://github.com/console-rs/console/compare/0.15.7...0.15.8)

---
updated-dependencies:
- dependency-name: console
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-04-01 04:11:21 +00:00
26302a8b08 Bump serde from 1.0.193 to 1.0.197 ()
Bumps [serde](https://github.com/serde-rs/serde) from 1.0.193 to 1.0.197.
- [Release notes](https://github.com/serde-rs/serde/releases)
- [Commits](https://github.com/serde-rs/serde/compare/v1.0.193...v1.0.197)

---
updated-dependencies:
- dependency-name: serde
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-04-01 03:58:57 +00:00
adc5bd0402 Bump serde_with from 3.6.1 to 3.7.0 ()
Bumps [serde_with](https://github.com/jonasbb/serde_with) from 3.6.1 to 3.7.0.
- [Release notes](https://github.com/jonasbb/serde_with/releases)
- [Commits](https://github.com/jonasbb/serde_with/compare/v3.6.1...v3.7.0)

---
updated-dependencies:
- dependency-name: serde_with
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-04-01 03:44:58 +00:00
e3c3be950a Bump predicates from 3.0.4 to 3.1.0 ()
Bumps [predicates](https://github.com/assert-rs/predicates-rs) from 3.0.4 to 3.1.0.
- [Changelog](https://github.com/assert-rs/predicates-rs/blob/master/CHANGELOG.md)
- [Commits](https://github.com/assert-rs/predicates-rs/compare/v3.0.4...v3.1.0)

---
updated-dependencies:
- dependency-name: predicates
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-04-01 03:30:00 +00:00
8d92dc2083 Bump wild from 2.2.0 to 2.2.1 ()
Bumps [wild](https://gitlab.com/kornelski/wild) from 2.2.0 to 2.2.1.
- [Commits](https://gitlab.com/kornelski/wild/compare/v2.2.0...v2.2.1)

---
updated-dependencies:
- dependency-name: wild
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-04-01 03:11:04 +00:00
a1f85b9e06 Bump assets/syntaxes/02_Extra/Julia from 98233f9 to 3366b10 ()
Bumps [assets/syntaxes/02_Extra/Julia](https://github.com/JuliaEditorSupport/Julia-sublime) from `98233f9` to `3366b10`.
- [Release notes](https://github.com/JuliaEditorSupport/Julia-sublime/releases)
- [Commits](98233f96d4...3366b10be9)

---
updated-dependencies:
- dependency-name: assets/syntaxes/02_Extra/Julia
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-04-01 02:47:26 +00:00
424c02dfa7 Bump softprops/action-gh-release from 1 to 2 ()
Bumps [softprops/action-gh-release](https://github.com/softprops/action-gh-release) from 1 to 2.
- [Release notes](https://github.com/softprops/action-gh-release/releases)
- [Changelog](https://github.com/softprops/action-gh-release/blob/master/CHANGELOG.md)
- [Commits](https://github.com/softprops/action-gh-release/compare/v1...v2)

---
updated-dependencies:
- dependency-name: softprops/action-gh-release
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-04-01 02:29:01 +00:00
018a482621 Update Warp logo 2024-03-23 21:15:25 +01:00
4790def1ef fix: typo
Signed-off-by: guoguangwu <guoguangwug@gmail.com>
2024-03-17 15:40:48 +01:00
07c26adc35 style: simplify equality check 2024-03-11 18:57:51 +01:00
f29f9387b5 Merge pull request from cyqsimon/builtin-offload-v2
Faster startup by offloading glob matcher building to a worker thread
2024-03-10 20:08:43 +01:00
c290bfff1e refactor: remove reference that is unnecessary 2024-03-10 11:17:02 +01:00
42153f2b99 Bump nu-ansi-term from 0.49.0 to 0.50.0 ()
Bumps [nu-ansi-term](https://github.com/nushell/nu-ansi-term) from 0.49.0 to 0.50.0.
- [Release notes](https://github.com/nushell/nu-ansi-term/releases)
- [Changelog](https://github.com/nushell/nu-ansi-term/blob/main/CHANGELOG.md)
- [Commits](https://github.com/nushell/nu-ansi-term/compare/v0.49.0...v0.50.0)

---
updated-dependencies:
- dependency-name: nu-ansi-term
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-03-01 04:45:43 +00:00
6d7537d3ec Bump itertools from 0.11.0 to 0.12.1 ()
Bumps [itertools](https://github.com/rust-itertools/itertools) from 0.11.0 to 0.12.1.
- [Changelog](https://github.com/rust-itertools/itertools/blob/master/CHANGELOG.md)
- [Commits](https://github.com/rust-itertools/itertools/compare/v0.11.0...v0.12.1)

---
updated-dependencies:
- dependency-name: itertools
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-03-01 04:29:33 +00:00
b30ec9f975 Bump git2 from 0.18.1 to 0.18.2 ()
Bumps [git2](https://github.com/rust-lang/git2-rs) from 0.18.1 to 0.18.2.
- [Changelog](https://github.com/rust-lang/git2-rs/blob/master/CHANGELOG.md)
- [Commits](https://github.com/rust-lang/git2-rs/compare/git2-0.18.1...git2-0.18.2)

---
updated-dependencies:
- dependency-name: git2
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-03-01 04:10:37 +00:00
a7074f10d4 Bump plist from 1.5.1 to 1.6.0 ()
Bumps [plist](https://github.com/ebarnard/rust-plist) from 1.5.1 to 1.6.0.
- [Release notes](https://github.com/ebarnard/rust-plist/releases)
- [Commits](https://github.com/ebarnard/rust-plist/compare/v1.5.1...v1.6.0)

---
updated-dependencies:
- dependency-name: plist
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-03-01 03:44:56 +00:00
d185f0973b Merge pull request from cyqsimon/wg
Add syntax mapping for Wireguard config
2024-02-29 11:09:31 +01:00
071874ea8f Write changelog 2024-02-29 14:34:00 +08:00
46a2c004a2 Add syntax mapping for Wireguard config 2024-02-29 14:25:20 +08:00
26ac179548 Add note on thread synchronization 2024-02-26 11:31:30 +08:00
4c85483486 Inline format! args wherever possible 2024-02-25 00:38:11 +01:00
487bed2d95 Change CONTRIBUTING.md according to new changelog requirements ()
* Mention changelog requirements in CONTRIBUTING

* Refer to CONTRIBUTING in changelog workflow

* Clarify when changelog entries are necessary

---------

Co-authored-by: Martin Nordholts <martin.nordholts@codetale.se>
2024-02-24 23:58:20 +01:00
6f69682552 Merge pull request from einfachIrgendwer0815/feature_squeeze
Add `-s`/`--squeeze` and `--squeeze-limit` (based on ).
2024-02-24 20:36:17 +01:00
bc5beaec5d Update CHANGELOG.md 2024-02-24 20:36:08 +01:00
83b00bc653 Rename --squeeze to --squeeze-blank 2024-02-24 14:02:27 +01:00
f041ff8c5f Hide --squeeze-limit from short help 2024-02-24 13:57:44 +01:00
1fbdbfc4b2 Update CHANGELOG 2024-02-24 13:52:40 +01:00
2323aa0def Add tests for --squeeze 2024-02-24 13:51:44 +01:00
6c2ce63101 Add squeeze functionality to SimplePrinter 2024-02-24 13:51:44 +01:00
13204c46e2 Update short-help/long-help 2024-02-24 13:51:43 +01:00
9bb0271e7d Update CHANGELOG.md (PR ) 2024-02-24 13:51:40 +01:00
0e4e10edb6 Add --squeeze-limit to specify max number of consecutive empty lines
Co-authored-by: einfachIrgendwer0815 <85333734+einfachIrgendwer0815@users.noreply.github.com>
2024-02-24 13:51:06 +01:00
0c7e5299bf Add squeeze_empty_lines to PrettyPrinter 2024-02-24 13:51:05 +01:00
c36ed32816 Add --squeeze/-s option
Co-authored-by: einfachIrgendwer0815 <85333734+einfachIrgendwer0815@users.noreply.github.com>
2024-02-24 13:51:00 +01:00
e1a3fc5529 Merge pull request from eth-p/skip-highlighting-when-no-color
Skip syntax parsing when color is not being output.
2024-02-23 21:59:45 +01:00
1ae9e843ed Merge branch 'master' into skip-highlighting-when-no-color 2024-02-23 21:59:32 +01:00
dbe4cfb763 Merge pull request from cyqsimon/quadlet
Add syntax mapping for podman quadlets
2024-02-23 21:54:44 +01:00
4549f83689 Merge branch 'master' into quadlet 2024-02-23 21:54:36 +01:00
e6e8f847be Merge pull request from cyqsimon/syntax-mapping-fix
Relax syntax mapping rule restrictions to allow brace expansion
2024-02-23 21:52:55 +01:00
b9e249f782 Merge branch 'master' into syntax-mapping-fix 2024-02-23 21:52:46 +01:00
3ffa3648cf Merge pull request from einfachIrgendwer0815/document_default_style_components
Document default style components
2024-02-23 21:51:55 +01:00
5c2cc53882 Merge pull request from cyqsimon/containers-conf
Map containers `.conf` files to TOML syntax
2024-02-23 21:50:55 +01:00
a6f01af8de Merge branch 'master' into containers-conf 2024-02-23 21:50:35 +01:00
85a549e293 Merge pull request from anki-code/master
Added xonsh shell support
2024-02-23 21:48:58 +01:00
b718889ba2 Merge branch 'master' into master 2024-02-23 21:48:44 +01:00
708c74f6af Merge pull request from mxaddict/master
Added JSONC and aws credentials to the syntax mappings
2024-02-23 21:48:20 +01:00
74d666f5c0 Merge branch 'master' into skip-highlighting-when-no-color 2024-02-23 21:45:38 +01:00
7604fe5567 Merge pull request from Oliver-Looney/2783-setting-terminal-title
2783 setting terminal title
2024-02-23 21:37:28 +01:00
0080b043c4 Merge branch 'master' into master 2024-02-23 21:35:21 +01:00
c7bce46622 Write changelog 2024-02-21 15:24:36 +08:00
2b4339663c Builtin glob matchers build offload, v2 2024-02-21 14:56:37 +08:00
6a6b02117b Apply clippy fixes ()
* Apply clippy fixes

* Write changelog
2024-02-20 19:39:22 +01:00
511cd30105 Write changelog 2024-02-21 00:26:23 +08:00
92915e22e7 Map containers .conf files to TOML syntax 2024-02-21 00:25:06 +08:00
d499191b0a Write changelog 2024-02-20 14:54:43 +08:00
152d69fe98 Add syntax mapping for podman quadlets 2024-02-20 14:49:12 +08:00
81aa24310c Write changelog 2024-02-20 14:33:02 +08:00
75cdabaf13 Relax syntax mapping rule restrictions to allow brace expansion 2024-02-20 14:24:51 +08:00
1f628203e5 Merge branch 'master' into 2783-setting-terminal-title 2024-02-12 09:34:01 +00:00
1b9fc1d5af Merge pull request from eth-p/fix-2185
Fix incorrect categorization of ANSI SGR sequences.
2024-02-12 08:32:47 +01:00
bc1ca1a346 Merge branch 'master' into fix-2185 2024-02-12 08:19:56 +01:00
f735120978 Merge pull request from eth-p/fix-line-number-wrap-off-by-one
Fix off-by-one error in line number continuation
2024-02-12 08:19:34 +01:00
25b5a41189 Skip syntax parsing when color output disabled 2024-02-11 22:49:49 -08:00
c94cf4e14e Split syntax highlighting from print_line into fn
This simplifies the `print_line` function a little bit while also
providing a way for syntax highlighting to be skipped when it's
not being used (i.e. `--color=never`).
2024-02-11 22:27:35 -08:00
84d80eebd0 Test for correct categorization of SGR sequences
This adds a regression test for the fix in the previous commit.
2024-02-11 19:40:29 -08:00
915dd9fbf8 Fix incorrect categorization of SGR sequences
Specifically, prevent other attributes from leaking into the
bold/dim/italic/underline attributes, and ensure that bright backgrounds
are put into the background attribute instead of the foreground
attribute.
2024-02-11 19:35:54 -08:00
9d77c1373c Fix off-by-one error in line number continuation 2024-02-11 16:49:06 -08:00
c3f2ddf509 Merge branch 'master' into 2783-setting-terminal-title 2024-02-11 22:53:48 +00:00
8a51172b11 simplified basic_set_terminal_title 2024-02-11 22:43:07 +00:00
875046e4cd Mention which style components are the default 2024-02-11 10:06:01 +01:00
a5bd9f51be Added JSONC and aws credentials to the syntax mappings 2024-02-11 04:57:42 +08:00
5a2a20af42 Merge pull request from eth-p/fix-2541
Treat OSC ANSI Sequences as Invisible Text & Add OSC 8 Support
2024-02-09 22:20:30 -08:00
61029c8bd2 Update changelog for fix of ANSI OSC sequences 2024-02-09 22:09:40 -08:00
1023399c5e Remove hyperlink when wrapping lines 2024-02-09 22:09:39 -08:00
6549e26f5d Re-emit hyperlinks when wrapping lines 2024-02-09 22:09:39 -08:00
165c495e75 Replace AnsiCodeIterator in printer.rs
This uses the new EscapeSequenceIterator, saving us a preprocessing step
for each line.
2024-02-09 22:09:39 -08:00
6b9b085be3 Add EscapeSequenceIterator
This is an iterator for escape sequences, using
EscapeSequenceOffsetsIterator for the underlying parsing of individual
escape sequences.
2024-02-09 22:09:39 -08:00
2d46d54ae3 Add tests for re-emitting SGR sequences on wrap 2024-02-09 22:09:39 -08:00
3d04699710 Add regression test for
More specifically, the test ensures that OSC sequences don't end up
wrapping the line.
2024-02-09 22:09:39 -08:00
054421268f Strip OSC sequences before printing
This commit strips OSC (Operating System Command) sequences before
printing lines. Eventually when time permits, I want to add back
support for printing OSC sequences (and improve it to treat hyperlinks
like an attribute).

Until then, this should help prevent garbled output :)
2024-02-09 22:09:39 -08:00
414403b062 Add EscapeSequenceOffsetsIterator
This can be used to extract a subset of ANSI escape sequences from a
string of text. I have big plans for this eventually, but for now, it'll
be used to strip OSC before printing.
2024-02-09 22:09:35 -08:00
c29bf2ff28 Update git2 dependency 2024-02-09 22:05:30 -08:00
ab4e5ed52e Merge pull request from dtolnay-contrib/derive
Eliminate dependency on serde's "derive" feature
2024-02-09 08:21:21 +01:00
1a54c9bf6d Eliminate dependency on serde's "derive" feature 2024-02-08 15:55:30 -08:00
02077db53e undid unnecessary api visibility changes 2024-02-08 21:41:20 +00:00
7ce010d9ed Using hypens instead of underscores for set-terminal-title command 2024-02-08 21:33:03 +00:00
95993cf37e Bump assets/syntaxes/02_Extra/cmd-help from b150d84 to 209559b ()
Bumps [assets/syntaxes/02_Extra/cmd-help](https://github.com/victor-gp/cmd-help-sublime-syntax) from `b150d84` to `209559b`.
- [Commits](b150d84534...209559b72f)

---
updated-dependencies:
- dependency-name: assets/syntaxes/02_Extra/cmd-help
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-02-08 07:54:17 +00:00
3761df9112 Merge pull request from eth-p/readme-less-options-explained
Clarify when/how default args are added to less.
2024-02-08 08:29:20 +01:00
adfaef19da Clarify when/how default args are added to less 2024-02-07 21:22:08 -08:00
f7bea6de5b Bump clircle from 0.4.0 to 0.5.0 ()
Bumps [clircle](https://github.com/niklasmohrin/clircle) from 0.4.0 to 0.5.0.
- [Release notes](https://github.com/niklasmohrin/clircle/releases)
- [Commits](https://github.com/niklasmohrin/clircle/compare/v0.4.0...v0.5.0)

---
updated-dependencies:
- dependency-name: clircle
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-02-01 05:00:25 +00:00
65aae5d0a1 Bump toml from 0.8.6 to 0.8.9 ()
Bumps [toml](https://github.com/toml-rs/toml) from 0.8.6 to 0.8.9.
- [Commits](https://github.com/toml-rs/toml/compare/toml-v0.8.6...toml-v0.8.9)

---
updated-dependencies:
- dependency-name: toml
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-02-01 04:43:10 +00:00
e3866b1f7e Bump indexmap from 2.1.0 to 2.2.2 ()
Bumps [indexmap](https://github.com/indexmap-rs/indexmap) from 2.1.0 to 2.2.2.
- [Changelog](https://github.com/indexmap-rs/indexmap/blob/master/RELEASES.md)
- [Commits](https://github.com/indexmap-rs/indexmap/compare/2.1.0...2.2.2)

---
updated-dependencies:
- dependency-name: indexmap
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-02-01 04:25:19 +00:00
23de8e093b Bump semver from 1.0.20 to 1.0.21 ()
Bumps [semver](https://github.com/dtolnay/semver) from 1.0.20 to 1.0.21.
- [Release notes](https://github.com/dtolnay/semver/releases)
- [Commits](https://github.com/dtolnay/semver/compare/1.0.20...1.0.21)

---
updated-dependencies:
- dependency-name: semver
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-02-01 04:05:59 +00:00
196a4cb18f Bump assets/themes/zenburn from e627f1c to 86d4ee7 ()
Bumps [assets/themes/zenburn](https://github.com/colinta/zenburn) from `e627f1c` to `86d4ee7`.
- [Commits](e627f1cb22...86d4ee7a1f)

---
updated-dependencies:
- dependency-name: assets/themes/zenburn
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-02-01 03:15:26 +00:00
695cf1f387 Update CHANGELOG.md 2024-01-31 14:12:00 +01:00
0af1df5258 Create xonsh.toml 2024-01-31 14:07:56 +01:00
a8d07333e9 updated integration_tests.rs 2024-01-30 19:29:28 +00:00
7f12989127 added set_terminal_title arg to clap_app.rs to fix ci errors 2024-01-29 09:47:41 +00:00
60e32cf823 removed set_terminal_title arg from clap_app.rs since other boolean args aren't in clap_app.rs 2024-01-27 14:46:13 +00:00
e9a6aaa30f cargo fmt 2024-01-27 14:44:54 +00:00
9be2a36a01 fixed system wide config tests failing 2024-01-27 14:38:09 +00:00
22254936a2 ran cargo fmt 2024-01-27 14:32:34 +00:00
f6d76e0104 added integration test for setting terminal title 2024-01-27 14:31:28 +00:00
c911829771 fixed failing tests 2024-01-27 14:23:24 +00:00
b33e33fe26 terminal title is only set if user opts in with --set_terminal_title flag 2024-01-27 14:17:25 +00:00
9239b125b1 added a flag to config for setting terminal title 2024-01-27 14:14:40 +00:00
2086cd2668 Merge pull request from FilipRazek/fix-long-file-names
fix: Wrap file name in header
2024-01-21 20:17:34 +01:00
1b88267320 Ensure test succeeds by adding flag 2024-01-21 19:48:26 +01:00
e586751208 Attempt to fix integration test 2024-01-21 19:48:26 +01:00
e7256a624b Refer to PR instead of issue in CHANGELOG 2024-01-21 19:48:26 +01:00
5c1f47359e Run cargo fmt 2024-01-21 19:48:26 +01:00
45ee2dc4c7 fix: Wrap file name in header 2024-01-21 19:48:26 +01:00
db66e4459b Merge pull request from cyqsimon/syntax-mapping-refactor
More extensible syntax mapping mechanism
2024-01-21 19:43:24 +01:00
55e02e101d Apply review suggestions to benchmark script 2024-01-22 00:25:23 +08:00
230abfd2bc Merge branch 'master' into syntax-mapping-refactor 2024-01-19 15:18:48 +08:00
c0f2d6f934 Add note on subdirectory's irrelevance to ordering 2024-01-18 23:26:00 +08:00
9f36a7a284 Minor codestyle improvements 2024-01-18 23:07:11 +08:00
e4d637a3d8 Reverse precedence of syntax mappings specified on CLI 2024-01-18 22:41:57 +08:00
98a2b6bc17 Update changelog 2024-01-17 22:00:29 +01:00
8e66bc8722 Make the error handler FnMut 2024-01-17 22:00:29 +01:00
cd81c7fa6b Bump assets/syntaxes/02_Extra/SublimeJQ from 6870582 to b7e53e5 ()
* Bump assets/syntaxes/02_Extra/SublimeJQ from `6870582` to `b7e53e5`

Bumps [assets/syntaxes/02_Extra/SublimeJQ](https://github.com/zogwarg/SublimeJQ) from `6870582` to `b7e53e5`.
- [Commits](687058289c...b7e53e5d86)

---
updated-dependencies:
- dependency-name: assets/syntaxes/02_Extra/SublimeJQ
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>

* update highlighted version of sample.jq

* update changelog

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Keith Hall <kingkeith+github@gmail.com>
2024-01-03 14:16:33 +00:00
b4fdb5dc36 Merge branch 'master' into 2783-setting-terminal-title 2024-01-01 09:45:53 +00:00
c76ed99db2 Bump once_cell from 1.18.0 to 1.19.0 ()
Bumps [once_cell](https://github.com/matklad/once_cell) from 1.18.0 to 1.19.0.
- [Changelog](https://github.com/matklad/once_cell/blob/master/CHANGELOG.md)
- [Commits](https://github.com/matklad/once_cell/compare/v1.18.0...v1.19.0)

---
updated-dependencies:
- dependency-name: once_cell
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-01-01 04:50:36 +00:00
06aef22943 Bump home from 0.5.5 to 0.5.9 ()
Bumps [home](https://github.com/rust-lang/cargo) from 0.5.5 to 0.5.9.
- [Changelog](https://github.com/rust-lang/cargo/blob/master/CHANGELOG.md)
- [Commits](https://github.com/rust-lang/cargo/commits)

---
updated-dependencies:
- dependency-name: home
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-01-01 04:37:23 +00:00
128b0d6dd3 Bump thiserror from 1.0.50 to 1.0.53 ()
Bumps [thiserror](https://github.com/dtolnay/thiserror) from 1.0.50 to 1.0.53.
- [Release notes](https://github.com/dtolnay/thiserror/releases)
- [Commits](https://github.com/dtolnay/thiserror/compare/1.0.50...1.0.53)

---
updated-dependencies:
- dependency-name: thiserror
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-01-01 04:24:27 +00:00
15dc20109f Bump clap from 4.4.10 to 4.4.12 ()
Bumps [clap](https://github.com/clap-rs/clap) from 4.4.10 to 4.4.12.
- [Release notes](https://github.com/clap-rs/clap/releases)
- [Changelog](https://github.com/clap-rs/clap/blob/master/CHANGELOG.md)
- [Commits](https://github.com/clap-rs/clap/compare/v4.4.10...v4.4.12)

---
updated-dependencies:
- dependency-name: clap
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-01-01 04:10:40 +00:00
5c4bcd6611 Bump anyhow from 1.0.75 to 1.0.78 ()
Bumps [anyhow](https://github.com/dtolnay/anyhow) from 1.0.75 to 1.0.78.
- [Release notes](https://github.com/dtolnay/anyhow/releases)
- [Commits](https://github.com/dtolnay/anyhow/compare/1.0.75...1.0.78)

---
updated-dependencies:
- dependency-name: anyhow
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-01-01 03:52:33 +00:00
ecf4029dc7 Merge pull request from victor-gp/bump-cmd-help-syntax-b150d84
Bump cmd-help syntax to `b150d84`
2024-01-01 05:22:23 +02:00
c261b41578 trying to fix failing system_wide_config.rs tests 2023-12-31 22:44:17 +00:00
6f1cc80d68 Merge branch 'master' into 2783-setting-terminal-title 2023-12-31 22:25:25 +00:00
3b0ade9cb8 slightly changed set terminal command to match docs & broke print line into multiple variables 2023-12-31 22:24:44 +00:00
57016f4e04 small refactoring of set terminal title function 2023-12-31 22:15:00 +00:00
497342fabb Bump cmd-help syntax to latest
Manual update (as opposed to Dependabot's) because the highlighting for
the test help message has changed. It's all good because it's as
intended, an improvement.

See 
2023-12-29 18:15:55 +01:00
bf56cd90f0 Eliminate dependency on syn v1 by updating git-version 2023-12-29 08:37:11 +01:00
0acb979e9e Pull in fix for unsafe-libyaml security advisory 2023-12-28 23:01:55 +01:00
d7503bfc09 Merge branch 'master' into 2783-setting-terminal-title 2023-12-27 16:14:04 +00:00
b89dc15be1 Use proper Architecture for Debian packages built for musl
New values taken from

    dpkg-architecture -L
2023-12-27 17:03:40 +01:00
15ab4478c9 Reduce unnecessary build deps 2023-12-22 19:55:49 +08:00
5b4ce684a1 ran cargo fmt 2023-12-18 17:47:09 +00:00
0027055a83 fixed system_wide_config.rs tests 2023-12-18 17:44:52 +00:00
321b3ec81b updated CHANGELOG.md 2023-12-18 17:38:11 +00:00
1679460f42 updated CHANGELOG.md 2023-12-18 17:32:08 +00:00
907af9e35f updated tests since terminal title is set conditionally 2023-12-18 17:27:51 +00:00
12b74dfb4e terminal title is only set when pager is being used 2023-12-18 16:59:12 +00:00
fd84e4f49f fixed all but two failing tests. Last two tests are erroring because of IO circle detected error 2023-12-11 19:09:48 +00:00
f0a6fe216d Benchmark prototype 2023-12-11 10:38:59 +08:00
d792dc5804 Move rusty-fork to dev-dependencies 2023-12-11 10:21:07 +08:00
8a08025091 Disable builtin_mappings_are_lazily_evaluated for ARM builds 2023-12-11 10:21:06 +08:00
586c804b1e Add test: builtin_mappings_are_lazily_evaluated 2023-12-11 10:21:06 +08:00
e30161ac3c Add test: builtin_mappings_matcher_only_compile_once 2023-12-11 10:21:06 +08:00
3865908439 Add test: custom_mappings_precedence 2023-12-11 10:21:06 +08:00
9474b4cf8b Rename & sort syntax mapping tests 2023-12-11 10:21:06 +08:00
b48bda21a3 Add test: all_fixed_builtin_mappings_can_compile 2023-12-11 10:21:06 +08:00
daf33709a0 Additional sanity check for matcher parser 2023-12-11 10:21:06 +08:00
36073a3d95 Document another rule ignore condition 2023-12-11 10:21:06 +08:00
12fa2cb1eb - is not a legal character in variable name 2023-12-11 10:21:06 +08:00
1f10d846a3 Fix tests
1. for override test, test for something in `common`
2. move git mappings to `common`
2023-12-11 10:21:05 +08:00
22531eab90 Port all mappings to new system 2023-12-11 10:21:05 +08:00
0c1b80faab Impl per-target syntax mappings 2023-12-11 10:21:05 +08:00
2c9bf229e1 Add doc comment for BUILTIN_MAPPINGS 2023-12-11 10:21:05 +08:00
822e81bb24 Suppress clippy warning for MappingTarget in build script 2023-12-11 10:21:05 +08:00
ad628c0471 Fix iterator lifetime incompatibility 2023-12-11 10:21:05 +08:00
f483d2df42 Lazily compile GlobMatchers 2023-12-11 10:21:05 +08:00
4ad3002543 s/Lazy<GlobMatcher>/Lazy<Option<GlobMatcher>>/ 2023-12-11 10:21:05 +08:00
cfd622d6e1 Migrate SyntaxMapping impl to new system
Most existing builtins are removed but not yet ported, so the test
`user_can_override_builtin_mappings` should fail. It should pass once the old
rules have been ported.
2023-12-11 10:21:05 +08:00
1c7c9a6b6d Split syntax_mapping/builtin.rs 2023-12-11 10:21:05 +08:00
0c93ca80f4 Guard against duplicate matchers in build script 2023-12-11 10:21:04 +08:00
de6d418d42 Remove BuiltinMatcher enum
Explanation added as comments in code
Using plain `Lazy<Option<GlobMatcher>>` is just better
2023-12-11 10:21:04 +08:00
c016b462c0 STATIC_RULES => BUILTIN_MAPPINGS 2023-12-11 10:21:04 +08:00
7e1fbcfe95 Fix visibility for SyntaxMapping::get_syntax_for
This change was made in 31fb708, but then was reverted (I assume incorrectly)
in 6246485.
2023-12-11 10:21:04 +08:00
4815b6155e Write changelog 2023-12-11 10:21:03 +08:00
075b5b288a Matcher parser errors when empty 2023-12-11 10:20:12 +08:00
7cfd1e0d78 Rerun build script only when necessary 2023-12-11 10:20:12 +08:00
9f7d70f642 Use regex for matcher parsing
- Somewhat better maintainability I think
2023-12-11 10:20:12 +08:00
0fea82cff9 Minor improvement of variable naming accuracy 2023-12-11 10:20:11 +08:00
64840fbbae join_segments -> build_glob_string
- this is a more descriptive name
2023-12-11 10:20:11 +08:00
827b3eca2f Add unset *.conf example 2023-12-11 10:20:11 +08:00
9478d2dfe8 Isolate variables at compile time 2023-12-11 10:20:11 +08:00
d24501ab5e include! generated mappings in source 2023-12-11 10:20:11 +08:00
9f4259721a Fix codegen type declaration 2023-12-11 10:20:11 +08:00
77e491161c Ensure lexicographical ordering 2023-12-11 10:20:10 +08:00
97780f987e MappingDefModel::into_mapping_list returns MappingList 2023-12-11 10:20:10 +08:00
d1bc0ef0d4 Build script codegen initial impl 2023-12-11 10:20:10 +08:00
52f94b4623 Clarify syntax selection algorithm behaviour 2023-12-11 10:20:10 +08:00
37fd050100 Describe filename ordering more accurately 2023-12-11 10:20:10 +08:00
83286975ff Add ordering prefix to git-config example 2023-12-11 10:20:10 +08:00
f705fcb984 Add global git-config example 2023-12-11 10:20:10 +08:00
9ca1f20f43 Add specification draft 2023-12-11 10:20:10 +08:00
6ad800e43a tidied commits 2023-12-10 17:24:49 +00:00
069318b139 fixed formatting of terminal title 2023-12-10 17:20:42 +00:00
b9b554248d successfully setting the terminal title to bat's input's names 2023-12-10 17:17:19 +00:00
4863d428dd title is being reset on quit, so no need to restore terminal title 2023-12-10 16:44:47 +00:00
2e103ee6b3 able to set terminal title to hardcoded value 2023-12-10 16:39:34 +00:00
28990bc451 fix: display color when NO_COLOR is an empty string () 2023-12-02 11:43:55 +00:00
748e2a681f Add columns=3 to repology badge 2023-12-01 21:39:25 +01:00
bfa0b5241f Update Arch Linux package URL in README files () 2023-12-01 21:26:35 +01:00
4af4bfc0f1 fixed syntax typo in russian readme 2023-12-01 20:59:52 +01:00
51203ff750 Use GitHub API to get correct PR submitter () 2023-12-01 11:18:10 +00:00
96cef9a24e Bump assets/themes/zenburn from 43dc527 to e627f1c ()
Bumps [assets/themes/zenburn](https://github.com/colinta/zenburn) from `43dc527` to `e627f1c`.
- [Commits](43dc527731...e627f1cb22)

---
updated-dependencies:
- dependency-name: assets/themes/zenburn
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-12-01 10:38:36 +00:00
b43d31b75a Improvements and fixes to zsh completion
* Use correct return status so that approximate completion isn't broken
* Follow zsh conventions on description forms
* Some options can be used multiple times, e.g. -H, -r, --file-name
* Set completion context correctly for the cache subcommand
* Better completion for --map-syntax argument
* Add --nonprintable-notation option
* Correct some of the mutual exclusion lists for options
2023-12-01 11:11:44 +01:00
ad3ff26960 Bump serde from 1.0.190 to 1.0.193 ()
Bumps [serde](https://github.com/serde-rs/serde) from 1.0.190 to 1.0.193.
- [Release notes](https://github.com/serde-rs/serde/releases)
- [Commits](https://github.com/serde-rs/serde/compare/v1.0.190...v1.0.193)

---
updated-dependencies:
- dependency-name: serde
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-12-01 04:15:35 +00:00
86b40993c3 Bump grep-cli from 0.1.9 to 0.1.10 ()
Bumps [grep-cli](https://github.com/BurntSushi/ripgrep) from 0.1.9 to 0.1.10.
- [Release notes](https://github.com/BurntSushi/ripgrep/releases)
- [Changelog](https://github.com/BurntSushi/ripgrep/blob/master/CHANGELOG.md)
- [Commits](https://github.com/BurntSushi/ripgrep/compare/grep-cli-0.1.9...0.1.10)

---
updated-dependencies:
- dependency-name: grep-cli
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-12-01 04:01:10 +00:00
31bed250ba Bump clap from 4.4.6 to 4.4.10 ()
Bumps [clap](https://github.com/clap-rs/clap) from 4.4.6 to 4.4.10.
- [Release notes](https://github.com/clap-rs/clap/releases)
- [Changelog](https://github.com/clap-rs/clap/blob/master/CHANGELOG.md)
- [Commits](https://github.com/clap-rs/clap/compare/v4.4.6...v4.4.10)

---
updated-dependencies:
- dependency-name: clap
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-12-01 03:44:01 +00:00
7658334645 Consider adding ?exclude_unsupported=1 to repology badge 2023-11-10 09:00:28 +01:00
491ae70aa9 Write changelog 2023-11-06 06:02:59 +01:00
d64c568196 Allow overriding {WARMUP,RUN}_COUNT using env 2023-11-06 06:02:59 +01:00
b5982a6174 Allow setting number of runs in run-benchmarks.sh 2023-11-06 06:02:59 +01:00
04e7d2a313 fix(completions): add missing fish completions 2023-11-04 08:51:13 +01:00
bcc2de86b4 CI: add changelog check ()
* Added changelog item check

Fetch the base branch and diff correctly

- See: https://github.com/actions/checkout/issues/160

Improve organisation

Add some echo for easier debugging

Fix bad variable syntax

Clarify the double-print in the success case

* Write to changelog

* Don't block dependabot PRs
2023-11-03 08:53:29 +01:00
1296aea836 Write changelog for
- I always forget to write changelog.
2023-11-03 06:25:18 +01:00
5498c24c33 Rerun build script only when necessary 2023-11-02 17:54:57 +01:00
79a03b4299 Reorganise build script into modules 2023-11-02 17:54:57 +01:00
f3a5e9a73c Use implicit format string capture syntax 2023-11-02 17:54:57 +01:00
2710a19ecb Immutably construct variables map 2023-11-02 17:54:57 +01:00
6d0ef259f6 Read env in build script at runtime 2023-11-02 17:54:57 +01:00
b1577cc083 Reorganise functions in build script 2023-11-02 17:54:57 +01:00
28d947fd8b Use anyhow in build script 2023-11-02 17:54:57 +01:00
b000db8f32 Remove old completion generation code 2023-11-02 17:54:57 +01:00
116a6cc9a8 Bump thiserror from 1.0.49 to 1.0.50 ()
Bumps [thiserror](https://github.com/dtolnay/thiserror) from 1.0.49 to 1.0.50.
- [Release notes](https://github.com/dtolnay/thiserror/releases)
- [Commits](https://github.com/dtolnay/thiserror/compare/1.0.49...1.0.50)

---
updated-dependencies:
- dependency-name: thiserror
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-11-01 04:58:49 +00:00
c8291a36b7 Bump serde from 1.0.189 to 1.0.190 ()
Bumps [serde](https://github.com/serde-rs/serde) from 1.0.189 to 1.0.190.
- [Release notes](https://github.com/serde-rs/serde/releases)
- [Commits](https://github.com/serde-rs/serde/compare/v1.0.189...v1.0.190)

---
updated-dependencies:
- dependency-name: serde
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-11-01 04:39:45 +00:00
8180c76890 Bump plist from 1.5.0 to 1.5.1 ()
Bumps [plist](https://github.com/ebarnard/rust-plist) from 1.5.0 to 1.5.1.
- [Release notes](https://github.com/ebarnard/rust-plist/releases)
- [Commits](https://github.com/ebarnard/rust-plist/compare/v1.5.0...v1.5.1)

---
updated-dependencies:
- dependency-name: plist
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-11-01 04:20:25 +00:00
a0f33b1cdc Bump globset from 0.4.10 to 0.4.13 ()
Bumps [globset](https://github.com/BurntSushi/ripgrep) from 0.4.10 to 0.4.13.
- [Release notes](https://github.com/BurntSushi/ripgrep/releases)
- [Changelog](https://github.com/BurntSushi/ripgrep/blob/master/CHANGELOG.md)
- [Commits](https://github.com/BurntSushi/ripgrep/compare/globset-0.4.10...globset-0.4.13)

---
updated-dependencies:
- dependency-name: globset
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-11-01 03:53:53 +00:00
8b60dae81c Bump tempfile from 3.8.0 to 3.8.1 ()
Bumps [tempfile](https://github.com/Stebalien/tempfile) from 3.8.0 to 3.8.1.
- [Changelog](https://github.com/Stebalien/tempfile/blob/master/CHANGELOG.md)
- [Commits](https://github.com/Stebalien/tempfile/commits)

---
updated-dependencies:
- dependency-name: tempfile
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-11-01 03:26:48 +00:00
4b33093f9e Bump edition to 2021 () 2023-10-31 04:54:06 +01:00
3d87b25b19 Add unicode/caret replacements for all control characters () 2023-10-20 19:41:48 +02:00
f2f6902279 Bump syntect from 5.0.0 to 5.1.0 ()
Bumps [syntect](https://github.com/trishume/syntect) from 5.0.0 to 5.1.0.
- [Release notes](https://github.com/trishume/syntect/releases)
- [Changelog](https://github.com/trishume/syntect/blob/master/CHANGELOG.md)
- [Commits](https://github.com/trishume/syntect/compare/v5.0.0...v5.1.0)

---
updated-dependencies:
- dependency-name: syntect
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-10-19 06:43:09 +00:00
c0b17e73e1 Bump assert_cmd from 2.0.10 to 2.0.12 ()
Bumps [assert_cmd](https://github.com/assert-rs/assert_cmd) from 2.0.10 to 2.0.12.
- [Changelog](https://github.com/assert-rs/assert_cmd/blob/master/CHANGELOG.md)
- [Commits](https://github.com/assert-rs/assert_cmd/compare/v2.0.10...v2.0.12)

---
updated-dependencies:
- dependency-name: assert_cmd
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-10-19 06:21:55 +00:00
94544d963b Bump console from 0.15.5 to 0.15.7 ()
Bumps [console](https://github.com/console-rs/console) from 0.15.5 to 0.15.7.
- [Changelog](https://github.com/console-rs/console/blob/master/CHANGELOG.md)
- [Commits](https://github.com/console-rs/console/compare/0.15.5...0.15.7)

---
updated-dependencies:
- dependency-name: console
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-10-19 05:54:24 +00:00
72abbd22de Bump regex from 1.9.4 to 1.10.2 ()
Bumps [regex](https://github.com/rust-lang/regex) from 1.9.4 to 1.10.2.
- [Release notes](https://github.com/rust-lang/regex/releases)
- [Changelog](https://github.com/rust-lang/regex/blob/master/CHANGELOG.md)
- [Commits](https://github.com/rust-lang/regex/compare/1.9.4...1.10.2)

---
updated-dependencies:
- dependency-name: regex
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-10-19 05:26:40 +00:00
64e10ffb21 Bump semver from 1.0.17 to 1.0.20 ()
Bumps [semver](https://github.com/dtolnay/semver) from 1.0.17 to 1.0.20.
- [Release notes](https://github.com/dtolnay/semver/releases)
- [Commits](https://github.com/dtolnay/semver/compare/1.0.17...1.0.20)

---
updated-dependencies:
- dependency-name: semver
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-10-19 05:01:07 +00:00
35d8146bba Revert "Temporarily change dependabot to daily"
This reverts commit 86ac48d68e.
2023-10-19 06:33:48 +02:00
a5a7ede698 release-checklist.md: Adapt to new auto-merge workflow 2023-10-18 21:33:44 +02:00
b551049706 Bump nix from 0.26.2 to 0.26.4 ()
Bumps [nix](https://github.com/nix-rust/nix) from 0.26.2 to 0.26.4.
- [Changelog](https://github.com/nix-rust/nix/blob/v0.26.4/CHANGELOG.md)
- [Commits](https://github.com/nix-rust/nix/compare/v0.26.2...v0.26.4)

---
updated-dependencies:
- dependency-name: nix
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-10-18 16:48:05 +00:00
99cfc13eab Bump serde from 1.0.163 to 1.0.189 ()
Bumps [serde](https://github.com/serde-rs/serde) from 1.0.163 to 1.0.189.
- [Release notes](https://github.com/serde-rs/serde/releases)
- [Commits](https://github.com/serde-rs/serde/compare/v1.0.163...v1.0.189)

---
updated-dependencies:
- dependency-name: serde
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-10-18 16:28:33 +00:00
4b0b5afa13 Bump wild from 2.1.0 to 2.2.0 ()
Bumps [wild](https://gitlab.com/kornelski/wild) from 2.1.0 to 2.2.0.
- [Commits](https://gitlab.com/kornelski/wild/compare/v2.1.0...v2.2.0)

---
updated-dependencies:
- dependency-name: wild
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-10-18 16:06:35 +00:00
d343428441 Bump run_script from 0.10.0 to 0.10.1 ()
Bumps [run_script](https://github.com/sagiegurari/run_script) from 0.10.0 to 0.10.1.
- [Release notes](https://github.com/sagiegurari/run_script/releases)
- [Changelog](https://github.com/sagiegurari/run_script/blob/master/CHANGELOG.md)
- [Commits](https://github.com/sagiegurari/run_script/compare/0.10.0...0.10.1)

---
updated-dependencies:
- dependency-name: run_script
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-10-18 15:43:17 +00:00
16e409ec87 Bump walkdir from 2.3.3 to 2.4.0 ()
Bumps [walkdir](https://github.com/BurntSushi/walkdir) from 2.3.3 to 2.4.0.
- [Commits](https://github.com/BurntSushi/walkdir/compare/2.3.3...2.4.0)

---
updated-dependencies:
- dependency-name: walkdir
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-10-18 15:11:17 +00:00
94d059f258 Bump ansi_colours from 1.2.1 to 1.2.2 ()
Bumps [ansi_colours](https://github.com/mina86/ansi_colours) from 1.2.1 to 1.2.2.
- [Commits](https://github.com/mina86/ansi_colours/compare/v1.2.1...v1.2.2)

---
updated-dependencies:
- dependency-name: ansi_colours
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-10-17 16:07:49 +00:00
c8b9de889d Bump thiserror from 1.0.40 to 1.0.49 ()
Bumps [thiserror](https://github.com/dtolnay/thiserror) from 1.0.40 to 1.0.49.
- [Release notes](https://github.com/dtolnay/thiserror/releases)
- [Commits](https://github.com/dtolnay/thiserror/compare/1.0.40...1.0.49)

---
updated-dependencies:
- dependency-name: thiserror
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-10-17 15:42:03 +00:00
75340d54f9 Bump flate2 from 1.0.27 to 1.0.28 ()
Bumps [flate2](https://github.com/rust-lang/flate2-rs) from 1.0.27 to 1.0.28.
- [Release notes](https://github.com/rust-lang/flate2-rs/releases)
- [Commits](https://github.com/rust-lang/flate2-rs/compare/1.0.27...1.0.28)

---
updated-dependencies:
- dependency-name: flate2
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-10-17 15:17:31 +00:00
b28383e0fa Bump regex from 1.8.3 to 1.9.4 ()
Bumps [regex](https://github.com/rust-lang/regex) from 1.8.3 to 1.9.4.
- [Release notes](https://github.com/rust-lang/regex/releases)
- [Changelog](https://github.com/rust-lang/regex/blob/master/CHANGELOG.md)
- [Commits](https://github.com/rust-lang/regex/compare/1.8.3...1.9.4)

---
updated-dependencies:
- dependency-name: regex
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-10-17 14:50:40 +00:00
8e866db281 Bump actions/checkout from 3 to 4 ()
Bumps [actions/checkout](https://github.com/actions/checkout) from 3 to 4.
- [Release notes](https://github.com/actions/checkout/releases)
- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)
- [Commits](https://github.com/actions/checkout/compare/v3...v4)

---
updated-dependencies:
- dependency-name: actions/checkout
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-10-17 14:13:22 +00:00
0eb157e090 Bump unicode-width from 0.1.10 to 0.1.11 ()
Bumps [unicode-width](https://github.com/unicode-rs/unicode-width) from 0.1.10 to 0.1.11.
- [Commits](https://github.com/unicode-rs/unicode-width/compare/v0.1.10...v0.1.11)

---
updated-dependencies:
- dependency-name: unicode-width
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-10-17 06:48:32 +00:00
85636c28bc Bump predicates from 3.0.3 to 3.0.4 ()
Bumps [predicates](https://github.com/assert-rs/predicates-rs) from 3.0.3 to 3.0.4.
- [Changelog](https://github.com/assert-rs/predicates-rs/blob/master/CHANGELOG.md)
- [Commits](https://github.com/assert-rs/predicates-rs/compare/v3.0.3...v3.0.4)

---
updated-dependencies:
- dependency-name: predicates
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-10-17 06:31:56 +00:00
a70e5c6c65 Bump os_str_bytes from 6.4.1 to 6.6.1 ()
Bumps [os_str_bytes](https://github.com/dylni/os_str_bytes) from 6.4.1 to 6.6.1.
- [Release notes](https://github.com/dylni/os_str_bytes/releases)
- [Commits](https://github.com/dylni/os_str_bytes/compare/6.4.1...6.6.1)

---
updated-dependencies:
- dependency-name: os_str_bytes
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-10-17 06:12:48 +00:00
32e01f740b Bump plist from 1.4.3 to 1.5.0 ()
Bumps [plist](https://github.com/ebarnard/rust-plist) from 1.4.3 to 1.5.0.
- [Release notes](https://github.com/ebarnard/rust-plist/releases)
- [Commits](https://github.com/ebarnard/rust-plist/compare/v1.4.3...v1.5.0)

---
updated-dependencies:
- dependency-name: plist
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-10-17 05:50:47 +00:00
7b20f8fc7b Bump git2 from 0.18.0 to 0.18.1 ()
Bumps [git2](https://github.com/rust-lang/git2-rs) from 0.18.0 to 0.18.1.
- [Changelog](https://github.com/rust-lang/git2-rs/blob/master/CHANGELOG.md)
- [Commits](https://github.com/rust-lang/git2-rs/compare/git2-0.18.0...git2-0.18.1)

---
updated-dependencies:
- dependency-name: git2
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-10-17 05:00:01 +00:00
86ac48d68e Temporarily change dependabot to daily
So we can more easily test that auto-merge works as it should. Once we
have confirmed it does, we revert this commit.
2023-10-17 06:36:36 +02:00
c42fc810ea Setup auto-merge of dependabot PRs that pass CI 2023-10-17 06:18:51 +02:00
6baebd79fa Add test for what jobs 'all-jobs' references 2023-10-13 05:24:25 +02:00
c6cae09f99 CHANGELOG.md: Add new unreleased section 2023-10-11 20:43:52 +02:00
fc9546854f Bump version to v0.24.0
We need to bump 0.x.0 because the library API changed in incompatible
ways:

    $ cargo public-api diff
    Resolved `diff` to `diff 0.23.0`
    Removed items from the public API
    =================================
    (none)

    Changed items in the public API
    ===============================
    -pub fn bat::controller::Controller<'b>::run(&self, inputs: alloc::vec::Vec<bat::input::Input<'_>>) -> bat::error::Result<bool>
    +pub fn bat::controller::Controller<'b>::run(&self, inputs: alloc::vec::Vec<bat::input::Input<'_>>, output_buffer: core::option::Option<&mut dyn core::fmt::Write>) -> bat::error::Result<bool>
    -pub fn bat::controller::Controller<'b>::run_with_error_handler(&self, inputs: alloc::vec::Vec<bat::input::Input<'_>>, handle_error: impl core::ops::function::Fn(&bat::error::Error, &mut dyn std::io::Write)) -> bat::error::Result<bool>
    +pub fn bat::controller::Controller<'b>::run_with_error_handler(&self, inputs: alloc::vec::Vec<bat::input::Input<'_>>, output_buffer: core::option::Option<&mut dyn core::fmt::Write>, handle_error: impl core::ops::function::Fn(&bat::error::Error, &mut dyn std::io::Write)) -> bat::error::Result<bool>

    Added items to the public API
    =============================
    [...]
2023-10-11 19:14:12 +02:00
32da58e723 Update CHANGELOG.md for v0.24.0 2023-10-10 16:50:20 +02:00
63aaa03013 Update the ssh-config submodule ()
* Update the ssh-config submodule

Pull in the fix for the syntax.
Fixes 

* Extend the ssh_config syntax test
2023-10-10 06:16:41 +02:00
fbe9b6f15f New warp text/subtext 2023-10-06 09:14:08 +02:00
c946ddb012 Replace warp logo 2023-10-06 09:11:06 +02:00
e5c81ed41e Replace our own macros to write buffers with standard macros 2023-10-05 09:21:26 +02:00
0937d575fd fix: rewrite overflow test using usize::MAX 2023-10-05 09:20:09 +02:00
4382be5e7c docs: update CHANGELOG.md 2023-10-05 09:20:09 +02:00
d89df18de2 test: add test for overflow in LineRange::from 2023-10-05 09:20:09 +02:00
9fcc57e496 fix: integer overflow in LineRange::parse_range 2023-10-05 09:20:09 +02:00
8e35a56712 Updated version of serde_yaml to 0.9 2023-10-04 12:42:01 +02:00
9f795dd947 Associate *.sarif files with json syntax ()
* Associate `*.sarif` files with `json` syntax

* Update changelog for 
2023-10-04 09:34:40 +02:00
721f956c1c Bump once_cell from 1.17.0 to 1.18.0
Bumps [once_cell](https://github.com/matklad/once_cell) from 1.17.0 to 1.18.0.
- [Changelog](https://github.com/matklad/once_cell/blob/master/CHANGELOG.md)
- [Commits](https://github.com/matklad/once_cell/compare/v1.17.0...v1.18.0)

---
updated-dependencies:
- dependency-name: once_cell
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-10-04 09:29:33 +02:00
db4cdc1cb8 Bump clap from 4.4.2 to 4.4.6
Bumps [clap](https://github.com/clap-rs/clap) from 4.4.2 to 4.4.6.
- [Release notes](https://github.com/clap-rs/clap/releases)
- [Changelog](https://github.com/clap-rs/clap/blob/master/CHANGELOG.md)
- [Commits](https://github.com/clap-rs/clap/compare/clap_complete-v4.4.2...v4.4.6)

---
updated-dependencies:
- dependency-name: clap
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-10-04 09:29:26 +02:00
e455f93a1e Bump encoding_rs from 0.8.32 to 0.8.33
Bumps [encoding_rs](https://github.com/hsivonen/encoding_rs) from 0.8.32 to 0.8.33.
- [Commits](https://github.com/hsivonen/encoding_rs/compare/v0.8.32...v0.8.33)

---
updated-dependencies:
- dependency-name: encoding_rs
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-10-04 09:29:16 +02:00
d756d6f1ed Fix syntax tests failure on macOS during the daytime 2023-10-04 09:28:34 +02:00
6568fb775d Explain how to convert .tmLanguage.json and .tmLanguage.yml files in doc/assets.md 2023-10-04 09:09:54 +02:00
d376a4b631 Add support for WGSL 2023-10-04 09:09:54 +02:00
6e5fd36882 Bump flate2 from 1.0.26 to 1.0.27
Bumps [flate2](https://github.com/rust-lang/flate2-rs) from 1.0.26 to 1.0.27.
- [Release notes](https://github.com/rust-lang/flate2-rs/releases)
- [Commits](https://github.com/rust-lang/flate2-rs/compare/1.0.26...1.0.27)

---
updated-dependencies:
- dependency-name: flate2
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-10-04 09:04:23 +02:00
c7cc4b5c59 Bump bytesize from 1.2.0 to 1.3.0
Bumps [bytesize](https://github.com/hyunsik/bytesize) from 1.2.0 to 1.3.0.
- [Release notes](https://github.com/hyunsik/bytesize/releases)
- [Commits](https://github.com/hyunsik/bytesize/compare/v1.2.0...v1.3.0)

---
updated-dependencies:
- dependency-name: bytesize
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-10-04 09:04:09 +02:00
db76091a53 Bump actions/checkout from 3 to 4
Bumps [actions/checkout](https://github.com/actions/checkout) from 3 to 4.
- [Release notes](https://github.com/actions/checkout/releases)
- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)
- [Commits](https://github.com/actions/checkout/compare/v3...v4)

---
updated-dependencies:
- dependency-name: actions/checkout
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-10-04 08:59:52 +02:00
506fe65474 Add Warp as a sponsor 2023-10-03 20:04:26 +02:00
69c326fd41 Prefer shorter winget install 2023-09-30 00:14:59 +02:00
466b275e87 [docs] Remove duplicate winget
Removes duplicate winget instructions for Windows install.
2023-09-30 00:14:59 +02:00
319c675f3e Fix a double-close in the no_args_doesnt_break test.
Fix the `no_args_doesnt_break` test to avoid calling `from_raw_fd` twice
on the same raw file descriptor, as that cause the file descriptor to be
closed twice, which means it could accidentally close some unrelated newly
created file descriptor.
2023-09-29 18:27:27 +02:00
5a240f36b9 Case insensitive --map-syntax ()
Co-authored-by: Nicolas AMBRY <nicolas.ambry@atos.net>
2023-09-14 16:04:43 +02:00
e2bf85e749 Make -pp override --paging and vice versa when passed as a later argument. () 2023-09-14 05:45:46 +02:00
fe73010a5e ignore failing test 2023-09-08 06:25:20 +02:00
150c04acb6 update CHANGELOG.md 2023-09-08 06:25:20 +02:00
433176ab54 require LESSOPEN to have exactly one %s 2023-09-08 06:25:20 +02:00
b56021ffa9 make LESSOPEN support opt-in 2023-09-08 06:25:20 +02:00
ac2953c070 pass --no-lessopen to less by default 2023-09-08 06:25:20 +02:00
d6e11b59e7 : Fixes unit tests dependent on echo on windows ()
Co-authored-by: Boy van Duuren <boy.van.duuren@rabobank.nl>
2023-09-08 06:18:25 +02:00
f49278cfaa Do not enable lessopen feature by default 2023-09-05 16:37:14 +02:00
9b73eda957 docs: add global --help alias limitations 2023-09-02 14:54:55 +02:00
ed99a3a104 docs: Add better snippet for colorizing help pages 2023-09-02 14:54:55 +02:00
e32ad0b048 Add $LESSOPEN and $LESSCLOSE support () 2023-09-02 08:48:26 +02:00
3abc0c0fc4 Merge pull request from utkarshgupta137/master
Replace `dirs` crate with `etcetera` crate
2023-09-01 21:41:24 +02:00
b06f13f0c5 Merge pull request from Piturnah/feat/write-to-buffer
feat: Optionally write to a buffer instead of stdout
2023-09-01 21:18:04 +02:00
a721cc31f3 Replace dirs crate with etcetera crate 2023-09-01 21:13:21 +02:00
1e52785d35 Merge pull request from rhysd/encoding_rs
Replace unmaintained `encoding` dependency with `encoding_rs`
2023-09-01 21:12:07 +02:00
9ba3b6ed13 No duplicate keys test, fixes ()
* moved unit tests to conditional compile

made module `tests` and conditionally compiled

* added test to check for duplicate keys in builtin

checks all pairs in GlobMatcher::mappings via `GlobMatcher::glob`s `Eq`
panics at first match

```rs
SyntaxMapping {
  mappings: Vec<(
    GlobMatcher {
      glob: Glob, ...,
    }, ...,
  }, ...,
}
```

* output more info with test failure

* dont duplicatively add git config path

* use guard in match for adding builtin git config syntax mapping

---------

Co-authored-by: Orion Yeung <11580988+orionyeung001@users.noreply.github.com>
2023-09-01 21:11:41 +02:00
72e1a40bab Remove leftover unwrap 2023-09-01 20:52:55 +02:00
33a89410d4 Add example to show new feature 2023-09-01 20:52:55 +02:00
b2c28cdddb Clippy lints 2023-09-01 20:52:55 +02:00
906e774372 Handle todos 2023-09-01 20:52:55 +02:00
d929becefc Fix signatures 2023-09-01 20:52:55 +02:00
103a2f0d9b Add OutputHandle enum to use instead of &mut dyn io::Write 2023-09-01 20:52:55 +02:00
d33b2e158e Replace unmaintained encoding with encoding_rs 2023-09-01 20:41:55 +02:00
d295b3a394 Merge pull request from sharkdp/dependabot/cargo/expect-test-1.4.1
Bump expect-test from 1.4.0 to 1.4.1
2023-09-01 20:09:30 +02:00
81a217b1f3 Merge pull request from sitiom/winget-releaser
Add Winget Releaser workflow
2023-09-01 20:01:02 +02:00
bb17f74757 Bump assets/syntaxes/02_Extra/Docker from 9e9a518 to 0f6b7bc
Bumps [assets/syntaxes/02_Extra/Docker](https://github.com/asbjornenge/Docker.tmbundle) from `9e9a518` to `0f6b7bc`.
- [Release notes](https://github.com/asbjornenge/Docker.tmbundle/releases)
- [Commits](9e9a518aed...0f6b7bc87a)

---
updated-dependencies:
- dependency-name: assets/syntaxes/02_Extra/Docker
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-09-01 19:34:48 +02:00
75928d20f8 Bump nu-ansi-term from 0.47.0 to 0.49.0
Bumps [nu-ansi-term](https://github.com/nushell/nu-ansi-term) from 0.47.0 to 0.49.0.
- [Release notes](https://github.com/nushell/nu-ansi-term/releases)
- [Changelog](https://github.com/nushell/nu-ansi-term/blob/main/CHANGELOG.md)
- [Commits](https://github.com/nushell/nu-ansi-term/compare/v0.47.0...v0.49.0)

---
updated-dependencies:
- dependency-name: nu-ansi-term
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-09-01 19:32:30 +02:00
2cc45eea1a Bump clap from 4.3.0 to 4.4.2
Bumps [clap](https://github.com/clap-rs/clap) from 4.3.0 to 4.4.2.
- [Release notes](https://github.com/clap-rs/clap/releases)
- [Changelog](https://github.com/clap-rs/clap/blob/master/CHANGELOG.md)
- [Commits](https://github.com/clap-rs/clap/compare/clap_complete-v4.3.0...v4.4.2)

---
updated-dependencies:
- dependency-name: clap
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-09-01 19:32:16 +02:00
7dbc6e3da4 Bump tempfile from 3.5.0 to 3.8.0
Bumps [tempfile](https://github.com/Stebalien/tempfile) from 3.5.0 to 3.8.0.
- [Changelog](https://github.com/Stebalien/tempfile/blob/master/CHANGELOG.md)
- [Commits](https://github.com/Stebalien/tempfile/compare/v3.5.0...v3.8.0)

---
updated-dependencies:
- dependency-name: tempfile
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-09-01 19:31:59 +02:00
f34b852aa8 Bump git2 from 0.16.1 to 0.18.0
Bumps [git2](https://github.com/rust-lang/git2-rs) from 0.16.1 to 0.18.0.
- [Changelog](https://github.com/rust-lang/git2-rs/blob/master/CHANGELOG.md)
- [Commits](https://github.com/rust-lang/git2-rs/compare/0.16.1...git2-0.18.0)

---
updated-dependencies:
- dependency-name: git2
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-09-01 18:01:55 +02:00
4b04f901fe Add test for BAT_PAGING 2023-09-01 17:59:41 +02:00
26111950b3 Add environment variable BAT_PAGING 2023-09-01 17:59:41 +02:00
f21d3502e1 Add *.ron syntax mapping
Add a mapping to use `Rust` for rusty object notation, identified by `.ron` extension. See [](https://github.com/sharkdp/bat/issues/2427).
2023-09-01 17:57:46 +02:00
5687af8bc7 feat: describe WinGet method for Windows install 2023-09-01 17:53:26 +02:00
0f5f51f9ba Fixed RU readme typos 2023-09-01 17:51:30 +02:00
32c0e1fb45 update highlighted test file 2023-09-01 17:50:30 +02:00
34440f1b0c update highlighted test file 2023-09-01 17:50:30 +02:00
f1d6cc7a64 add test files for NSIS syntax 2023-09-01 17:50:30 +02:00
628ba5d31f add NSIS support 2023-09-01 17:50:30 +02:00
e24150ca3f Bump assets/syntaxes/02_Extra/Julia from 4fde0fd to 98233f9
Bumps [assets/syntaxes/02_Extra/Julia](https://github.com/JuliaEditorSupport/Julia-sublime) from `4fde0fd` to `98233f9`.
- [Release notes](https://github.com/JuliaEditorSupport/Julia-sublime/releases)
- [Commits](4fde0fdedd...98233f96d4)

---
updated-dependencies:
- dependency-name: assets/syntaxes/02_Extra/Julia
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-09-01 17:48:06 +02:00
d580445aef fix: Add syntax mapping jsonl => json 2023-09-01 17:45:41 +02:00
48dc2b0d90 CICD: Add all-jobs job
This opens up future possibilities:
* GitHub's auto-merge feature that merges a PR once CI passes
* Auto-merge of dependabot PRs that pass CI

But before we do any of that we need to have this new job active for a
while to see that it works.
2023-09-01 17:42:14 +02:00
82664e3c82 Bump MSRV to 1.70.0
The intention is to take advantage of `std::io::IsTerminal` that landed
in 1.70.0, both in `bat` and its dependencies (`clap`, `grep-cli`).

This will fix  as well - `grep-cli` 0.1.9 has a patch for that.

Signed-off-by: mataha <mataha@users.noreply.github.com>
2023-09-01 05:42:45 +02:00
1893405cbf Add .dpkg-new and .dpkg-tmp to ignored suffixes
Refs https://www.debian.org/doc/manuals/debian-handbook/sect.package-meta-information.en.html#sect.conffiles
2023-08-28 17:50:29 +02:00
00b7e3b864 Merge pull request from johnmatthiggins/doc_fix
fix for issue 
2023-08-09 17:38:15 +03:00
7826e506f8 Merge branch 'master' into doc_fix 2023-08-02 09:00:29 -07:00
6dd8b28b0d Merge pull request from johnmatthiggins/master
fix for issue 
2023-08-02 15:24:02 +02:00
b720af8a06 fix for issue 2023-08-02 00:28:26 -07:00
b1fbcc8a6e fix for issue 2023-08-02 00:04:55 -07:00
9bf74d687f Cargo.lock: Bump proc-macro2 to fix build with Rust nightly
Without fix:

    $ cargo +nightly build
       Compiling proc-macro2 v1.0.54
    error[E0635]: unknown feature `proc_macro_span_shrink`
      --> /home/martin/.cargo/registry/src/index.crates.io-6f17d22bba15001f/proc-macro2-1.0.54/src/lib.rs:92:30
       |
    92 |     feature(proc_macro_span, proc_macro_span_shrink)
       |                              ^^^^^^^^^^^^^^^^^^^^^^

    For more information about this error, try `rustc --explain E0635`.
    error: could not compile `proc-macro2` (lib) due to previous error
2023-07-27 07:08:38 +02:00
783d4877e1 Merge pull request from einfachIrgendwer0815/feature_containerfile_mapping
Add `Containerfile` syntax mapping
2023-07-14 19:56:49 +03:00
8b187e6997 Update CHANGELOG 2023-07-02 13:55:54 +02:00
c46c53320b Add Containerfile syntax mapping 2023-07-02 13:50:37 +02:00
7f884fa582 Bump expect-test from 1.4.0 to 1.4.1
Bumps [expect-test](https://github.com/rust-analyzer/expect-test) from 1.4.0 to 1.4.1.
- [Changelog](https://github.com/rust-analyzer/expect-test/blob/master/CHANGELOG.md)
- [Commits](https://github.com/rust-analyzer/expect-test/compare/v1.4.0...v1.4.1)

---
updated-dependencies:
- dependency-name: expect-test
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-07-01 02:58:07 +00:00
8676bbf97f Update clircle
See https://github.com/niklasmohrin/clircle/issues/10
2023-06-14 20:14:11 +02:00
77069b368c Update CICD.yml 2023-06-07 17:30:10 +08:00
70e49bd32b Merge pull request from cyqsimon/os-release
Add `os-release` syntax mapping
2023-06-03 23:29:09 +02:00
5042f969e5 Bump clap from 4.2.6 to 4.3.0
Bumps [clap](https://github.com/clap-rs/clap) from 4.2.6 to 4.3.0.
- [Release notes](https://github.com/clap-rs/clap/releases)
- [Changelog](https://github.com/clap-rs/clap/blob/master/CHANGELOG.md)
- [Commits](https://github.com/clap-rs/clap/compare/v4.2.6...clap_complete-v4.3.0)

---
updated-dependencies:
- dependency-name: clap
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-06-03 09:30:39 +02:00
876f5d4113 Bump serde from 1.0.160 to 1.0.163
Bumps [serde](https://github.com/serde-rs/serde) from 1.0.160 to 1.0.163.
- [Release notes](https://github.com/serde-rs/serde/releases)
- [Commits](https://github.com/serde-rs/serde/compare/v1.0.160...v1.0.163)

---
updated-dependencies:
- dependency-name: serde
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-06-02 05:49:14 +02:00
39d9d64e1e Bump regex from 1.8.1 to 1.8.3
Bumps [regex](https://github.com/rust-lang/regex) from 1.8.1 to 1.8.3.
- [Release notes](https://github.com/rust-lang/regex/releases)
- [Changelog](https://github.com/rust-lang/regex/blob/master/CHANGELOG.md)
- [Commits](https://github.com/rust-lang/regex/compare/1.8.1...1.8.3)

---
updated-dependencies:
- dependency-name: regex
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-06-01 20:43:59 +02:00
8e866babfc Write changelog 2023-06-01 13:25:02 +08:00
f8c700027e Add os-release syntax mapping 2023-06-01 13:17:22 +08:00
7639e8b406 CICD.yml: Run cargo audit
This CI check will fail if there are crates with known security vulnerabilities in Cargo.lock.

It will not fail because of warnings. We currently have two warnings.

Note that cargo-audit is installed by default on GitHub's Ubuntu
runners.
2023-05-24 05:43:36 +02:00
149dec6953 Fix paging not happening when stdout is interactive but stdin is not 2023-05-22 05:42:01 +02:00
b420c42aff update readme 2023-05-17 06:25:20 +02:00
3da7adb763 update readme 2023-05-17 06:25:20 +02:00
165e5da6b9 Bump semver from 1.0.16 to 1.0.17
Bumps [semver](https://github.com/dtolnay/semver) from 1.0.16 to 1.0.17.
- [Release notes](https://github.com/dtolnay/semver/releases)
- [Commits](https://github.com/dtolnay/semver/compare/1.0.16...1.0.17)

---
updated-dependencies:
- dependency-name: semver
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-05-13 07:29:48 +02:00
c5a9fdff93 Bump regex from 1.7.0 to 1.8.1
Bumps [regex](https://github.com/rust-lang/regex) from 1.7.0 to 1.8.1.
- [Release notes](https://github.com/rust-lang/regex/releases)
- [Changelog](https://github.com/rust-lang/regex/blob/master/CHANGELOG.md)
- [Commits](https://github.com/rust-lang/regex/compare/1.7.0...1.8.1)

---
updated-dependencies:
- dependency-name: regex
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-05-12 19:19:19 +02:00
8aac5acc0a Bump serde from 1.0.159 to 1.0.160
Bumps [serde](https://github.com/serde-rs/serde) from 1.0.159 to 1.0.160.
- [Release notes](https://github.com/serde-rs/serde/releases)
- [Commits](https://github.com/serde-rs/serde/compare/v1.0.159...v1.0.160)

---
updated-dependencies:
- dependency-name: serde
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-05-12 07:02:58 +02:00
7162e38d50 Bump predicates from 3.0.2 to 3.0.3
Bumps [predicates](https://github.com/assert-rs/predicates-rs) from 3.0.2 to 3.0.3.
- [Release notes](https://github.com/assert-rs/predicates-rs/releases)
- [Changelog](https://github.com/assert-rs/predicates-rs/blob/master/CHANGELOG.md)
- [Commits](https://github.com/assert-rs/predicates-rs/compare/v3.0.2...v3.0.3)

---
updated-dependencies:
- dependency-name: predicates
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-05-12 06:31:39 +02:00
63ac60a3a0 Bump flate2 from 1.0.25 to 1.0.26
Bumps [flate2](https://github.com/rust-lang/flate2-rs) from 1.0.25 to 1.0.26.
- [Release notes](https://github.com/rust-lang/flate2-rs/releases)
- [Commits](https://github.com/rust-lang/flate2-rs/commits)

---
updated-dependencies:
- dependency-name: flate2
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-05-12 06:30:57 +02:00
9683bfdb3f Update clap to 4.2.6 2023-05-12 06:01:47 +02:00
e155f56484 Clean-up bash comletion
"cword" is unset and even is not used in completion for other shells, so it probably shouldn't be here either. If it for some reason should be there add the directive "# shellcheck disable=SC2034" to the line above it.
2023-05-12 05:59:36 +02:00
e828d7840a Use valid SPDX license expression 2023-04-14 06:38:03 +02:00
52f7a5a06f Update plist to 1.4
The version replaced `xml-rs` with the `quick-xml` crate.
That makes -1 warning for an unmaintained crate from `cargo audit`.
2023-04-14 06:37:45 +02:00
baa1476d8d Update predicates to 3.0
This also updates `assert_cmd` to 2.0.10 to avoid duplicate dependencies
because it depends on the new major version since 2.0.9.
2023-04-14 06:37:32 +02:00
6be56972b6 Update serial_test to 2.0 2023-04-14 06:37:32 +02:00
08445eba91 Bump serde from 1.0.152 to 1.0.159
Bumps [serde](https://github.com/serde-rs/serde) from 1.0.152 to 1.0.159.
- [Release notes](https://github.com/serde-rs/serde/releases)
- [Commits](https://github.com/serde-rs/serde/compare/v1.0.152...v1.0.159)

---
updated-dependencies:
- dependency-name: serde
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-04-06 19:06:07 +02:00
2298422e85 Bump bytesize from 1.1.0 to 1.2.0
Bumps [bytesize](https://github.com/hyunsik/bytesize) from 1.1.0 to 1.2.0.
- [Release notes](https://github.com/hyunsik/bytesize/releases)
- [Commits](https://github.com/hyunsik/bytesize/compare/v1.1.0...v1.2.0)

---
updated-dependencies:
- dependency-name: bytesize
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-04-06 19:05:53 +02:00
c5731b9079 Merge pull request from nickelc/deps/use_is_terminal
Use the `is-terminal` crate instead of `atty`
2023-04-05 21:00:18 +02:00
458e818ab4 Bump walkdir from 2.3.2 to 2.3.3
Bumps [walkdir](https://github.com/BurntSushi/walkdir) from 2.3.2 to 2.3.3.
- [Release notes](https://github.com/BurntSushi/walkdir/releases)
- [Commits](https://github.com/BurntSushi/walkdir/compare/2.3.2...2.3.3)

---
updated-dependencies:
- dependency-name: walkdir
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-04-05 20:42:34 +02:00
993b33b5b4 Bump thiserror from 1.0.38 to 1.0.40
Bumps [thiserror](https://github.com/dtolnay/thiserror) from 1.0.38 to 1.0.40.
- [Release notes](https://github.com/dtolnay/thiserror/releases)
- [Commits](https://github.com/dtolnay/thiserror/compare/1.0.38...1.0.40)

---
updated-dependencies:
- dependency-name: thiserror
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-04-05 20:41:49 +02:00
ba95955fe6 Bump tempfile from 3.3.0 to 3.5.0
Bumps [tempfile](https://github.com/Stebalien/tempfile) from 3.3.0 to 3.5.0.
- [Release notes](https://github.com/Stebalien/tempfile/releases)
- [Changelog](https://github.com/Stebalien/tempfile/blob/master/NEWS)
- [Commits](https://github.com/Stebalien/tempfile/commits)

---
updated-dependencies:
- dependency-name: tempfile
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-04-05 20:41:30 +02:00
57cc0d8435 Use the is-terminal crate instead of atty
The crate is already used by `clap` and a similar trait is about to be
stabilized in `std`.
2023-04-05 19:26:52 +02:00
60a9ac041f Add Winget installation method in the readme 2023-03-30 13:41:11 +08:00
33997106da Add Winget Releaser workflow 2023-03-28 08:32:51 +08:00
1b2c69aee8 Merge pull request from sharkdp/big-ci-sync
CI improvements
2023-03-25 21:49:50 +01:00
87e87a349a Extract crate metadata with cargo 2023-03-25 14:47:31 +01:00
e49235e119 Minor CI improvements 2023-03-25 13:44:00 +01:00
1712ec9e73 Merge pull request from tranzystorek-io/custom-asset-gen-dir
Allow customizing output directory for generated assets
2023-03-25 13:18:02 +01:00
3ca8c43a67 Update CHANGELOG.md 2023-03-25 11:56:40 +01:00
01f1b1efe8 Allow customizing output directory for generated assets 2023-03-25 11:47:20 +01:00
c7905a6029 Minor fix in man page 2023-03-25 10:36:14 +01:00
d27aaffead New empty CHANGELOG section 2023-03-25 10:33:49 +01:00
230 changed files with 12222 additions and 2077 deletions
.cargo
.github
.gitignore.gitmodulesCHANGELOG.mdCONTRIBUTING.mdCargo.lockCargo.tomlREADME.md
assets
build.rs
build
doc
examples
src
tests

2
.cargo/audit.toml Normal file

@ -0,0 +1,2 @@
[advisories]
ignore = ["RUSTSEC-2024-0320", "RUSTSEC-2024-0421"]

@ -26,4 +26,4 @@ guidelines for adding new syntaxes:
[Name or description of the syntax/language here] [Name or description of the syntax/language here]
**Guideline Criteria:** **Guideline Criteria:**
[packagecontro.io link here] [packagecontrol.io link here]

@ -0,0 +1,23 @@
# This workflow triggers auto-merge of any PR that dependabot creates so that
# PRs will be merged automatically without maintainer intervention if CI passes
name: Auto-merge dependabot PRs
on:
pull_request_target:
types: [opened]
jobs:
auto-merge:
if: github.repository == 'sharkdp/bat' && startsWith(github.head_ref, 'dependabot/')
runs-on: ubuntu-latest
environment:
name: auto-merge
url: https://github.com/sharkdp/bat/blob/main/.github/workflows/Auto-merge-dependabot-PRs.yml
env:
GITHUB_TOKEN: ${{ secrets.AUTO_MERGE_GITHUB_TOKEN }}
steps:
- uses: actions/checkout@v4
- run: |
gh pr review ${{ github.event.pull_request.number }} --comment --body "If CI passes, this dependabot PR will be [auto-merged](https://github.com/sharkdp/bat/blob/main/.github/workflows/Auto-merge-dependabot-PRs.yml) 🚀"
- run: |
gh pr merge --auto --squash ${{ github.event.pull_request.number }}

@ -2,6 +2,7 @@ name: CICD
env: env:
CICD_INTERMEDIATES_DIR: "_cicd-intermediates" CICD_INTERMEDIATES_DIR: "_cicd-intermediates"
MSRV_FEATURES: --no-default-features --features minimal-application,bugreport,build-assets
on: on:
workflow_dispatch: workflow_dispatch:
@ -13,53 +14,86 @@ on:
- '*' - '*'
jobs: 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
- ensure_cargo_fmt
- 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@v4
- 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 }}
ensure_cargo_fmt: ensure_cargo_fmt:
name: Ensure 'cargo fmt' has been run name: Ensure 'cargo fmt' has been run
runs-on: ubuntu-20.04 runs-on: ubuntu-latest
steps: steps:
- uses: dtolnay/rust-toolchain@stable - uses: dtolnay/rust-toolchain@stable
with: with:
components: rustfmt components: rustfmt
- uses: actions/checkout@v3 - uses: actions/checkout@v4
- run: cargo fmt -- --check - run: cargo fmt -- --check
license_checks:
name: License checks
runs-on: ubuntu-20.04
steps:
- uses: actions/checkout@v3
with:
submodules: true # we especially want to perform license checks on submodules
- run: tests/scripts/license-checks.sh
min_version: min_version:
name: Minimum supported rust version name: Minimum supported rust version
runs-on: ubuntu-20.04 runs-on: ubuntu-latest
env: needs: crate_metadata
MSRV_FEATURES: --no-default-features --features minimal-application,bugreport,build-assets
steps: steps:
- name: Checkout source code - name: Checkout source code
uses: actions/checkout@v3 uses: actions/checkout@v4
- name: Get the MSRV from the package metadata - name: Install rust toolchain (v${{ needs.crate_metadata.outputs.msrv }})
id: msrv
run: cargo metadata --no-deps --format-version 1 | jq -r '"version=" + (.packages[] | select(.name == "bat")).rust_version' >> $GITHUB_OUTPUT
- name: Install rust toolchain (v${{ steps.msrv.outputs.version }})
uses: dtolnay/rust-toolchain@master uses: dtolnay/rust-toolchain@master
with: with:
toolchain: ${{ steps.msrv.outputs.version }} toolchain: ${{ needs.crate_metadata.outputs.msrv }}
components: clippy components: clippy
- name: Run clippy (on minimum supported rust version to prevent warnings we can't fix) - name: Run clippy (on minimum supported rust version to prevent warnings we can't fix)
run: cargo clippy --locked --all-targets ${{ env.MSRV_FEATURES }} run: cargo clippy --locked --all-targets ${{ env.MSRV_FEATURES }}
- name: Run tests - name: Run tests
run: cargo test --locked ${{ env.MSRV_FEATURES }} run: cargo test --locked ${{ env.MSRV_FEATURES }}
license_checks:
name: License checks
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
submodules: true # we especially want to perform license checks on submodules
- run: tests/scripts/license-checks.sh
test_with_new_syntaxes_and_themes: test_with_new_syntaxes_and_themes:
name: Run tests with updated syntaxes and themes name: Run tests with updated syntaxes and themes
runs-on: ubuntu-20.04 runs-on: ubuntu-latest
steps: steps:
- name: Git checkout - name: Git checkout
uses: actions/checkout@v3 uses: actions/checkout@v4
with: with:
submodules: true # we need all syntax and theme submodules submodules: true # we need all syntax and theme submodules
- name: Install Rust toolchain - name: Install Rust toolchain
@ -85,10 +119,10 @@ jobs:
test_with_system_config: test_with_system_config:
name: Run tests with system wide configuration name: Run tests with system wide configuration
runs-on: ubuntu-20.04 runs-on: ubuntu-latest
steps: steps:
- name: Git checkout - name: Git checkout
uses: actions/checkout@v3 uses: actions/checkout@v4
- name: Prepare environment variables - name: Prepare environment variables
run: | run: |
echo "BAT_SYSTEM_CONFIG_PREFIX=$GITHUB_WORKSPACE/tests/examples/system_config" >> $GITHUB_ENV echo "BAT_SYSTEM_CONFIG_PREFIX=$GITHUB_WORKSPACE/tests/examples/system_config" >> $GITHUB_ENV
@ -101,10 +135,10 @@ jobs:
documentation: documentation:
name: Documentation name: Documentation
runs-on: ubuntu-20.04 runs-on: ubuntu-latest
steps: steps:
- name: Git checkout - name: Git checkout
uses: actions/checkout@v3 uses: actions/checkout@v4
- name: Install Rust toolchain - name: Install Rust toolchain
uses: dtolnay/rust-toolchain@stable uses: dtolnay/rust-toolchain@stable
- name: Check documentation - name: Check documentation
@ -114,29 +148,39 @@ jobs:
- name: Show man page - name: Show man page
run: man $(find . -name bat.1) 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@v4
- run: cargo audit
build: build:
name: ${{ matrix.job.target }} (${{ matrix.job.os }}) name: ${{ matrix.job.target }} (${{ matrix.job.os }})
runs-on: ${{ matrix.job.os }} runs-on: ${{ matrix.job.os }}
needs: crate_metadata
strategy: strategy:
fail-fast: false fail-fast: false
matrix: matrix:
job: job:
- { target: aarch64-unknown-linux-gnu , os: ubuntu-20.04, use-cross: true } - { target: aarch64-unknown-linux-musl , os: ubuntu-latest, dpkg_arch: arm64, use-cross: true }
- { target: arm-unknown-linux-gnueabihf , os: ubuntu-20.04, use-cross: true } - { target: aarch64-unknown-linux-gnu , os: ubuntu-latest, dpkg_arch: arm64, use-cross: true }
- { target: arm-unknown-linux-musleabihf, os: ubuntu-20.04, use-cross: true } - { target: arm-unknown-linux-gnueabihf , os: ubuntu-latest, dpkg_arch: armhf, use-cross: true }
- { target: i686-pc-windows-msvc , os: windows-2019 } - { target: arm-unknown-linux-musleabihf, os: ubuntu-latest, dpkg_arch: musl-linux-armhf, use-cross: true }
- { target: i686-unknown-linux-gnu , os: ubuntu-20.04, use-cross: true } - { target: i686-pc-windows-msvc , os: windows-2019, }
- { target: i686-unknown-linux-musl , os: ubuntu-20.04, use-cross: true } - { target: i686-unknown-linux-gnu , os: ubuntu-latest, dpkg_arch: i686, use-cross: true }
- { target: x86_64-apple-darwin , os: macos-10.15 } - { target: i686-unknown-linux-musl , os: ubuntu-latest, dpkg_arch: musl-linux-i686, use-cross: true }
- { target: x86_64-pc-windows-gnu , os: windows-2019 } - { target: x86_64-apple-darwin , os: macos-13, }
- { target: x86_64-pc-windows-msvc , os: windows-2019 } - { target: aarch64-apple-darwin , os: macos-14, }
- { target: x86_64-unknown-linux-gnu , os: ubuntu-20.04, use-cross: true } - { target: x86_64-pc-windows-msvc , os: windows-2019, }
- { target: x86_64-unknown-linux-musl , os: ubuntu-20.04, use-cross: true } - { 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: env:
BUILD_CMD: cargo BUILD_CMD: cargo
steps: steps:
- name: Checkout source code - name: Checkout source code
uses: actions/checkout@v3 uses: actions/checkout@v4
- name: Install prerequisites - name: Install prerequisites
shell: bash shell: bash
@ -146,14 +190,6 @@ jobs:
aarch64-unknown-linux-gnu) sudo apt-get -y update ; sudo apt-get -y install gcc-aarch64-linux-gnu ;; aarch64-unknown-linux-gnu) sudo apt-get -y update ; sudo apt-get -y install gcc-aarch64-linux-gnu ;;
esac esac
- name: Extract crate information
shell: bash
run: |
echo "PROJECT_NAME=$(sed -n 's/^name = "\(.*\)"/\1/p' Cargo.toml | head -n1)" >> $GITHUB_ENV
echo "PROJECT_VERSION=$(sed -n 's/^version = "\(.*\)"/\1/p' Cargo.toml | head -n1)" >> $GITHUB_ENV
echo "PROJECT_MAINTAINER=$(sed -n 's/^authors = \["\(.*\)"\]/\1/p' Cargo.toml)" >> $GITHUB_ENV
echo "PROJECT_HOMEPAGE=$(sed -n 's/^homepage = "\(.*\)"/\1/p' Cargo.toml)" >> $GITHUB_ENV
- name: Install Rust toolchain - name: Install Rust toolchain
uses: dtolnay/rust-toolchain@stable uses: dtolnay/rust-toolchain@stable
with: with:
@ -184,7 +220,7 @@ jobs:
shell: bash shell: bash
run: $BUILD_CMD build --locked --release --target=${{ matrix.job.target }} run: $BUILD_CMD build --locked --release --target=${{ matrix.job.target }}
- name: Set bin name & path - name: Set binary name & path
id: bin id: bin
shell: bash shell: bash
run: | run: |
@ -195,10 +231,10 @@ jobs:
esac; esac;
# Setup paths # Setup paths
BIN_NAME="${{ env.PROJECT_NAME }}${EXE_suffix}" BIN_NAME="${{ needs.crate_metadata.outputs.name }}${EXE_suffix}"
BIN_PATH="target/${{ matrix.job.target }}/release/${BIN_NAME}" BIN_PATH="target/${{ matrix.job.target }}/release/${BIN_NAME}"
# Let subsequent steps know where to find the bin # Let subsequent steps know where to find the binary
echo "BIN_PATH=${BIN_PATH}" >> $GITHUB_OUTPUT echo "BIN_PATH=${BIN_PATH}" >> $GITHUB_OUTPUT
echo "BIN_NAME=${BIN_NAME}" >> $GITHUB_OUTPUT echo "BIN_NAME=${BIN_NAME}" >> $GITHUB_OUTPUT
@ -208,12 +244,18 @@ jobs:
run: | run: |
# test only library unit tests and binary for arm-type targets # test only library unit tests and binary for arm-type targets
unset CARGO_TEST_OPTIONS unset CARGO_TEST_OPTIONS
unset CARGO_TEST_OPTIONS ; case ${{ matrix.job.target }} in arm-* | aarch64-*) CARGO_TEST_OPTIONS="--lib --bin ${PROJECT_NAME}" ;; esac; 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 echo "CARGO_TEST_OPTIONS=${CARGO_TEST_OPTIONS}" >> $GITHUB_OUTPUT
- name: Run tests - name: Run tests
shell: bash shell: bash
run: $BUILD_CMD test --locked --target=${{ matrix.job.target }} ${{ steps.test-options.outputs.CARGO_TEST_OPTIONS}} 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 - name: Run bat
shell: bash shell: bash
@ -248,7 +290,7 @@ jobs:
shell: bash shell: bash
run: | run: |
PKG_suffix=".tar.gz" ; case ${{ matrix.job.target }} in *-pc-windows-*) PKG_suffix=".zip" ;; esac; PKG_suffix=".tar.gz" ; case ${{ matrix.job.target }} in *-pc-windows-*) PKG_suffix=".zip" ;; esac;
PKG_BASENAME=${PROJECT_NAME}-v${PROJECT_VERSION}-${{ matrix.job.target }} PKG_BASENAME=${{ needs.crate_metadata.outputs.name }}-v${{ needs.crate_metadata.outputs.version }}-${{ matrix.job.target }}
PKG_NAME=${PKG_BASENAME}${PKG_suffix} PKG_NAME=${PKG_BASENAME}${PKG_suffix}
echo "PKG_NAME=${PKG_NAME}" >> $GITHUB_OUTPUT echo "PKG_NAME=${PKG_NAME}" >> $GITHUB_OUTPUT
@ -260,17 +302,17 @@ jobs:
# Binary # Binary
cp "${{ steps.bin.outputs.BIN_PATH }}" "$ARCHIVE_DIR" cp "${{ steps.bin.outputs.BIN_PATH }}" "$ARCHIVE_DIR"
# Man page
cp 'target/${{ matrix.job.target }}/release/build/${{ env.PROJECT_NAME }}'-*/out/assets/manual/bat.1 "$ARCHIVE_DIR"
# README, LICENSE and CHANGELOG files # README, LICENSE and CHANGELOG files
cp "README.md" "LICENSE-MIT" "LICENSE-APACHE" "CHANGELOG.md" "$ARCHIVE_DIR" 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 # Autocompletion files
cp 'target/${{ matrix.job.target }}/release/build/${{ env.PROJECT_NAME }}'-*/out/assets/completions/bat.bash "$ARCHIVE_DIR/autocomplete/${{ env.PROJECT_NAME }}.bash" 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/${{ env.PROJECT_NAME }}'-*/out/assets/completions/bat.fish "$ARCHIVE_DIR/autocomplete/${{ env.PROJECT_NAME }}.fish" 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/${{ env.PROJECT_NAME }}'-*/out/assets/completions/_bat.ps1 "$ARCHIVE_DIR/autocomplete/_${{ env.PROJECT_NAME }}.ps1" 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/${{ env.PROJECT_NAME }}'-*/out/assets/completions/bat.zsh "$ARCHIVE_DIR/autocomplete/${{ env.PROJECT_NAME }}.zsh" 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 # base compressed package
pushd "${PKG_STAGING}/" >/dev/null pushd "${PKG_STAGING}/" >/dev/null
@ -293,20 +335,11 @@ jobs:
DPKG_DIR="${DPKG_STAGING}/dpkg" DPKG_DIR="${DPKG_STAGING}/dpkg"
mkdir -p "${DPKG_DIR}" mkdir -p "${DPKG_DIR}"
DPKG_BASENAME=${PROJECT_NAME} DPKG_BASENAME=${{ needs.crate_metadata.outputs.name }}
DPKG_CONFLICTS=${PROJECT_NAME}-musl DPKG_CONFLICTS=${{ needs.crate_metadata.outputs.name }}-musl
case ${{ matrix.job.target }} in *-musl) DPKG_BASENAME=${PROJECT_NAME}-musl ; DPKG_CONFLICTS=${PROJECT_NAME} ;; esac; case ${{ matrix.job.target }} in *-musl) DPKG_BASENAME=${{ needs.crate_metadata.outputs.name }}-musl ; DPKG_CONFLICTS=${{ needs.crate_metadata.outputs.name }} ;; esac;
DPKG_VERSION=${PROJECT_VERSION} DPKG_VERSION=${{ needs.crate_metadata.outputs.version }}
DPKG_ARCH="${{ matrix.job.dpkg_arch }}"
unset DPKG_ARCH
case ${{ matrix.job.target }} in
aarch64-*-linux-*) DPKG_ARCH=arm64 ;;
arm-*-linux-*hf) DPKG_ARCH=armhf ;;
i686-*-linux-*) DPKG_ARCH=i686 ;;
x86_64-*-linux-*) DPKG_ARCH=amd64 ;;
*) DPKG_ARCH=notset ;;
esac;
DPKG_NAME="${DPKG_BASENAME}_${DPKG_VERSION}_${DPKG_ARCH}.deb" DPKG_NAME="${DPKG_BASENAME}_${DPKG_VERSION}_${DPKG_ARCH}.deb"
echo "DPKG_NAME=${DPKG_NAME}" >> $GITHUB_OUTPUT echo "DPKG_NAME=${DPKG_NAME}" >> $GITHUB_OUTPUT
@ -314,13 +347,13 @@ jobs:
install -Dm755 "${{ steps.bin.outputs.BIN_PATH }}" "${DPKG_DIR}/usr/bin/${{ steps.bin.outputs.BIN_NAME }}" install -Dm755 "${{ steps.bin.outputs.BIN_PATH }}" "${DPKG_DIR}/usr/bin/${{ steps.bin.outputs.BIN_NAME }}"
# Man page # Man page
install -Dm644 'target/${{ matrix.job.target }}/release/build/${{ env.PROJECT_NAME }}'-*/out/assets/manual/bat.1 "${DPKG_DIR}/usr/share/man/man1/${{ env.PROJECT_NAME }}.1" 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/${{ env.PROJECT_NAME }}.1" gzip -n --best "${DPKG_DIR}/usr/share/man/man1/${{ needs.crate_metadata.outputs.name }}.1"
# Autocompletion files # Autocompletion files
install -Dm644 'target/${{ matrix.job.target }}/release/build/${{ env.PROJECT_NAME }}'-*/out/assets/completions/bat.bash "${DPKG_DIR}/usr/share/bash-completion/completions/${{ env.PROJECT_NAME }}" 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/${{ env.PROJECT_NAME }}'-*/out/assets/completions/bat.fish "${DPKG_DIR}/usr/share/fish/vendor_completions.d/${{ env.PROJECT_NAME }}.fish" 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/${{ env.PROJECT_NAME }}'-*/out/assets/completions/bat.zsh "${DPKG_DIR}/usr/share/zsh/vendor-completions/_${{ env.PROJECT_NAME }}" 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 # README and LICENSE
install -Dm644 "README.md" "${DPKG_DIR}/usr/share/doc/${DPKG_BASENAME}/README.md" install -Dm644 "README.md" "${DPKG_DIR}/usr/share/doc/${DPKG_BASENAME}/README.md"
@ -331,12 +364,12 @@ jobs:
cat > "${DPKG_DIR}/usr/share/doc/${DPKG_BASENAME}/copyright" <<EOF cat > "${DPKG_DIR}/usr/share/doc/${DPKG_BASENAME}/copyright" <<EOF
Format: http://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ Format: http://www.debian.org/doc/packaging-manuals/copyright-format/1.0/
Upstream-Name: ${{ env.PROJECT_NAME }} Upstream-Name: ${{ needs.crate_metadata.outputs.name }}
Source: ${{ env.PROJECT_HOMEPAGE }} Source: ${{ needs.crate_metadata.outputs.homepage }}
Files: * Files: *
Copyright: ${{ env.PROJECT_MAINTAINER }} Copyright: ${{ needs.crate_metadata.outputs.maintainer }}
Copyright: $COPYRIGHT_YEARS ${{ env.PROJECT_MAINTAINER }} Copyright: $COPYRIGHT_YEARS ${{ needs.crate_metadata.outputs.maintainer }}
License: Apache-2.0 or MIT License: Apache-2.0 or MIT
License: Apache-2.0 License: Apache-2.0
@ -377,10 +410,10 @@ jobs:
Version: ${DPKG_VERSION} Version: ${DPKG_VERSION}
Section: utils Section: utils
Priority: optional Priority: optional
Maintainer: ${{ env.PROJECT_MAINTAINER }} Maintainer: ${{ needs.crate_metadata.outputs.maintainer }}
Homepage: ${{ env.PROJECT_HOMEPAGE }} Homepage: ${{ needs.crate_metadata.outputs.homepage }}
Architecture: ${DPKG_ARCH} Architecture: ${DPKG_ARCH}
Provides: ${{ env.PROJECT_NAME }} Provides: ${{ needs.crate_metadata.outputs.name }}
Conflicts: ${DPKG_CONFLICTS} Conflicts: ${DPKG_CONFLICTS}
Description: cat(1) clone with wings. Description: cat(1) clone with wings.
A cat(1) clone with syntax highlighting and Git integration. A cat(1) clone with syntax highlighting and Git integration.
@ -413,7 +446,7 @@ jobs:
echo "IS_RELEASE=${IS_RELEASE}" >> $GITHUB_OUTPUT echo "IS_RELEASE=${IS_RELEASE}" >> $GITHUB_OUTPUT
- name: Publish archives and packages - name: Publish archives and packages
uses: softprops/action-gh-release@v1 uses: softprops/action-gh-release@v2
if: steps.is-release.outputs.IS_RELEASE if: steps.is-release.outputs.IS_RELEASE
with: with:
files: | files: |
@ -421,3 +454,15 @@ jobs:
${{ steps.debian-package.outputs.DPKG_PATH }} ${{ steps.debian-package.outputs.DPKG_PATH }}
env: env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 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: vedantmgoyal2009/winget-releaser@v2
with:
identifier: sharkdp.bat
installers-regex: '-pc-windows-msvc\.zip$'
token: ${{ secrets.WINGET_TOKEN }}

@ -0,0 +1,33 @@
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@v4
- 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"

1
.gitignore vendored

@ -2,6 +2,7 @@
**/*.rs.bk **/*.rs.bk
# Generated files # Generated files
/assets/completions/_bat.ps1
/assets/completions/bat.bash /assets/completions/bat.bash
/assets/completions/bat.fish /assets/completions/bat.fish
/assets/completions/bat.zsh /assets/completions/bat.zsh

35
.gitmodules vendored

@ -65,7 +65,7 @@
path = assets/themes/onehalf path = assets/themes/onehalf
url = https://github.com/sonph/onehalf url = https://github.com/sonph/onehalf
[submodule "assets/syntaxes/JavaScript (Babel)"] [submodule "assets/syntaxes/JavaScript (Babel)"]
path = assets/syntaxes/02_Extra/JavaScript (Babel) path = assets/syntaxes/02_Extra/JavaScript_(Babel)
url = https://github.com/babel/babel-sublime url = https://github.com/babel/babel-sublime
[submodule "assets/syntaxes/FSharp"] [submodule "assets/syntaxes/FSharp"]
path = assets/syntaxes/02_Extra/FSharp path = assets/syntaxes/02_Extra/FSharp
@ -89,7 +89,7 @@
path = assets/themes/sublime-snazzy path = assets/themes/sublime-snazzy
url = https://github.com/greggb/sublime-snazzy url = https://github.com/greggb/sublime-snazzy
[submodule "assets/syntaxes/Assembly (ARM)"] [submodule "assets/syntaxes/Assembly (ARM)"]
path = assets/syntaxes/02_Extra/Assembly (ARM) path = assets/syntaxes/02_Extra/Assembly_(ARM)
url = https://github.com/tvi/Sublime-ARM-Assembly url = https://github.com/tvi/Sublime-ARM-Assembly
[submodule "assets/syntaxes/protobuf-syntax-highlighting"] [submodule "assets/syntaxes/protobuf-syntax-highlighting"]
path = assets/syntaxes/02_Extra/Protobuf path = assets/syntaxes/02_Extra/Protobuf
@ -108,7 +108,7 @@
path = assets/syntaxes/02_Extra/Fish path = assets/syntaxes/02_Extra/Fish
url = https://github.com/Phidica/sublime-fish.git url = https://github.com/Phidica/sublime-fish.git
[submodule "assets/syntaxes/Org mode"] [submodule "assets/syntaxes/Org mode"]
path = assets/syntaxes/02_Extra/Org mode path = assets/syntaxes/02_Extra/Org_mode
url = https://github.com/jezcope/Org.tmbundle.git url = https://github.com/jezcope/Org.tmbundle.git
[submodule "assets/syntaxes/DotENV"] [submodule "assets/syntaxes/DotENV"]
path = assets/syntaxes/02_Extra/DotENV path = assets/syntaxes/02_Extra/DotENV
@ -142,7 +142,7 @@
path = assets/themes/dracula-sublime path = assets/themes/dracula-sublime
url = https://github.com/dracula/sublime.git url = https://github.com/dracula/sublime.git
[submodule "assets/syntaxes/HTML (Twig)"] [submodule "assets/syntaxes/HTML (Twig)"]
path = assets/syntaxes/02_Extra/HTML (Twig) path = assets/syntaxes/02_Extra/HTML_(Twig)
url = https://github.com/Anomareh/PHP-Twig.tmbundle.git url = https://github.com/Anomareh/PHP-Twig.tmbundle.git
[submodule "assets/themes/Nord-sublime"] [submodule "assets/themes/Nord-sublime"]
path = assets/themes/Nord-sublime path = assets/themes/Nord-sublime
@ -197,9 +197,6 @@
[submodule "assets/syntaxes/02_Extra/Lean"] [submodule "assets/syntaxes/02_Extra/Lean"]
path = assets/syntaxes/02_Extra/Lean path = assets/syntaxes/02_Extra/Lean
url = https://github.com/leanprover/vscode-lean.git url = https://github.com/leanprover/vscode-lean.git
[submodule "assets/syntaxes/02_Extra/LiveScript"]
path = assets/syntaxes/02_Extra/LiveScript
url = https://github.com/paulmillr/LiveScript.tmbundle
[submodule "assets/syntaxes/02_Extra/Zig"] [submodule "assets/syntaxes/02_Extra/Zig"]
path = assets/syntaxes/02_Extra/Zig path = assets/syntaxes/02_Extra/Zig
url = https://github.com/ziglang/sublime-zig-language.git url = https://github.com/ziglang/sublime-zig-language.git
@ -254,3 +251,27 @@
[submodule "assets/syntaxes/02_Extra/Crontab"] [submodule "assets/syntaxes/02_Extra/Crontab"]
path = assets/syntaxes/02_Extra/Crontab path = assets/syntaxes/02_Extra/Crontab
url = https://github.com/michaelblyons/SublimeSyntax-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

@ -1,3 +1,186 @@
# unreleased
## Features
- 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)
## 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)
## 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)
## 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)
## Themes
- Add Catppuccin, see #3317 (@SchweGELBin)
## `bat` as a library
# 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 # v0.23.0
## Features ## Features

@ -6,21 +6,42 @@ Thank you for considering to contribute to `bat`!
## Add an entry to the changelog ## Add an entry to the changelog
If your contribution changes the behavior of `bat` (as opposed to a typo-fix Keeping the [`CHANGELOG.md`](CHANGELOG.md) file up-to-date makes the release
in the documentation), please update the [`CHANGELOG.md`](CHANGELOG.md) file process much easier and therefore helps to get your changes into a new `bat`
and describe your changes. This makes the release process much easier and release faster. However, not every change to the repository requires a
therefore helps to get your changes into a new `bat` release faster. 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 The top of the `CHANGELOG` contains a *"unreleased"* section with a few
subsections (Features, Bugfixes, …). Please add your entry to the subsection subsections (Features, Bugfixes, …). Please add your entry to the subsection
that best describes your change. that best describes your change.
Entries follow this format: Entries must follow this format:
``` ```
- Short description of what has been changed, see #123 (@user) - Short description of what has been changed, see #123 (@user)
``` ```
Here, `#123` is the number of the original issue and/or your pull request. Please replace `#123` with the number of your pull request (not issue) and
Please replace `@user` by your GitHub username. `@user` by your GitHub username.
## Development ## Development

1692
Cargo.lock generated

File diff suppressed because it is too large Load Diff

@ -3,14 +3,15 @@ authors = ["David Peter <mail@david-peter.de>"]
categories = ["command-line-utilities"] categories = ["command-line-utilities"]
description = "A cat(1) clone with wings." description = "A cat(1) clone with wings."
homepage = "https://github.com/sharkdp/bat" homepage = "https://github.com/sharkdp/bat"
license = "MIT/Apache-2.0" license = "MIT OR Apache-2.0"
name = "bat" name = "bat"
repository = "https://github.com/sharkdp/bat" repository = "https://github.com/sharkdp/bat"
version = "0.23.0" version = "0.25.0"
exclude = ["assets/syntaxes/*", "assets/themes/*"] exclude = ["assets/syntaxes/*", "assets/themes/*"]
build = "build.rs" build = "build/main.rs"
edition = '2018' edition = '2021'
rust-version = "1.64" # You are free to bump MSRV as soon as a reason for bumping emerges.
rust-version = "1.74"
[features] [features]
default = ["application"] default = ["application"]
@ -25,15 +26,15 @@ application = [
# Mainly for developers that want to iterate quickly # Mainly for developers that want to iterate quickly
# Be aware that the included features might change in the future # Be aware that the included features might change in the future
minimal-application = [ minimal-application = [
"atty",
"clap", "clap",
"dirs", "etcetera",
"paging", "paging",
"regex-onig", "regex-onig",
"wild", "wild",
] ]
git = ["git2"] # Support indicating git modifications git = ["git2"] # Support indicating git modifications
paging = ["shell-words", "grep-cli"] # Support applying a pager on the output paging = ["shell-words", "grep-cli"] # Support applying a pager on the output
lessopen = ["execute"] # Support $LESSOPEN preprocessor
build-assets = ["syntect/yaml-load", "syntect/plist-load", "regex", "walkdir"] 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: # You need to use one of these if you depend on bat as a library:
@ -41,64 +42,81 @@ regex-onig = ["syntect/regex-onig"] # Use the "oniguruma" regex engine
regex-fancy = ["syntect/regex-fancy"] # Use the rust-only "fancy-regex" engine regex-fancy = ["syntect/regex-fancy"] # Use the rust-only "fancy-regex" engine
[dependencies] [dependencies]
atty = { version = "0.2.14", optional = true } nu-ansi-term = "0.50.0"
nu-ansi-term = "0.47.0"
ansi_colours = "^1.2" ansi_colours = "^1.2"
bincode = "1.0" bincode = "1.0"
console = "0.15.5" console = "0.15.10"
flate2 = "1.0" flate2 = "1.0"
once_cell = "1.17" once_cell = "1.20"
thiserror = "1.0" thiserror = "2.0"
wild = { version = "2.1", optional = true } wild = { version = "2.2", optional = true }
content_inspector = "0.2.4" content_inspector = "0.2.4"
encoding = "0.2"
shell-words = { version = "1.1.0", optional = true } shell-words = { version = "1.1.0", optional = true }
unicode-width = "0.1.10" unicode-width = "0.1.13"
globset = "0.4" globset = "0.4"
serde = { version = "1.0", features = ["derive"] } serde = "1.0"
serde_yaml = "0.8" serde_derive = "1.0"
serde_yaml = "0.9.28"
semver = "1.0" semver = "1.0"
path_abs = { version = "0.5", default-features = false } path_abs = { version = "0.5", default-features = false }
clircle = "0.3" clircle = { version = "0.6.1", default-features = false }
bugreport = { version = "0.5.0", optional = true } bugreport = { version = "0.5.0", optional = true }
dirs = { version = "5.0.0", optional = true } etcetera = { version = "0.10.0", optional = true }
grep-cli = { version = "0.1.7", optional = true } grep-cli = { version = "0.1.11", optional = true }
regex = { version = "1.7.0", optional = true } regex = { version = "1.10.6", optional = true }
walkdir = { version = "2.0", optional = true } walkdir = { version = "2.5", optional = true }
bytesize = { version = "1.1.0" } bytesize = { version = "1.3.0" }
encoding_rs = "0.8.35"
execute = { version = "0.2.13", optional = true }
terminal-colorsaurus = "0.4"
unicode-segmentation = "1.12.0"
itertools = "0.13.0"
[dependencies.git2] [dependencies.git2]
version = "0.16" version = "0.20"
optional = true optional = true
default-features = false default-features = false
[dependencies.syntect] [dependencies.syntect]
version = "5.0.0" version = "5.2.0"
default-features = false default-features = false
features = ["parsing"] features = ["parsing"]
[dependencies.clap] [dependencies.clap]
version = "4.1.8" version = "4.4.12"
optional = true optional = true
features = ["wrap_help", "cargo"] features = ["wrap_help", "cargo"]
[target.'cfg(target_os = "macos")'.dependencies] [target.'cfg(target_os = "macos")'.dependencies]
dirs = "5.0.0" home = "0.5.9"
plist = "1.3" plist = "1.7.0"
[dev-dependencies] [dev-dependencies]
assert_cmd = "2.0.8" assert_cmd = "2.0.12"
expect-test = "1.4.0" expect-test = "1.5.0"
serial_test = "0.6.0" serial_test = { version = "2.0.0", default-features = false }
predicates = "2.1.5" predicates = "3.1.3"
wait-timeout = "0.2.0" wait-timeout = "0.2.0"
tempfile = "3.3.0" tempfile = "3.16.0"
serde = { version = "1.0", features = ["derive"] }
[target.'cfg(unix)'.dev-dependencies] [target.'cfg(unix)'.dev-dependencies]
nix = { version = "0.26.2", default-features = false, features = ["term"] } nix = { version = "0.29", default-features = false, features = ["term"] }
[build-dependencies]
anyhow = "1.0.97"
indexmap = { version = "2.8.0", features = ["serde"] }
itertools = "0.14.0"
once_cell = "1.20"
regex = "1.10.6"
serde = "1.0"
serde_derive = "1.0"
serde_with = { version = "3.12.0", default-features = false, features = ["macros"] }
toml = { version = "0.8.19", features = ["preserve_order"] }
walkdir = "2.5"
[build-dependencies.clap] [build-dependencies.clap]
version = "4.1.8" version = "4.4.12"
optional = true optional = true
features = ["wrap_help", "cargo"] features = ["wrap_help", "cargo"]

190
README.md

@ -22,15 +22,22 @@
### Sponsors ### Sponsors
A special *thank you* goes to our biggest <a href="doc/sponsors.md">sponsors</a>:<br> A special *thank you* goes to our biggest <a href="doc/sponsors.md">sponsors</a>:<br>
<a href="https://workos.com/?utm_campaign=github_repo&utm_medium=referral&utm_content=bat&utm_source=github">
<img src="doc/sponsors/workos-logo-white-bg.svg" width="200" alt="WorkOS"> <p>
<a href="https://www.warp.dev/bat">
<img src="doc/sponsors/warp-logo.png" width="200" alt="Warp">
<br> <br>
<strong>Your app, enterprise-ready.</strong> <strong>Warp, the intelligent terminal</strong>
<br> <br>
<sub>Start selling to enterprise customers with just a few lines of code.</sub> <sub>Available on MacOS, Linux, Windows</sub>
<br>
<sup>Add Single Sign-On (and more) in minutes instead of months.</sup>
</a> </a>
</p><p>
<a href="https://graphite.dev/?utm_source=github&utm_medium=repo&utm_campaign=bat">
<img src="doc/sponsors/graphite-logo.jpeg" width="200" alt="Graphite">
<br>
<strong>Graphite is the AI developer productivity platform helping<br>teams on GitHub ship higher quality software, faster</strong>
</a>
</p>
### Syntax highlighting ### Syntax highlighting
@ -118,7 +125,7 @@ use `bat`s `--color=always` option to force colorized output. You can also use `
option to restrict the load times for long files: option to restrict the load times for long files:
```bash ```bash
fzf --preview 'bat --color=always --style=numbers --line-range=:500 {}' fzf --preview "bat --color=always --style=numbers --line-range=:500 {}"
``` ```
For more information, see [`fzf`'s `README`](https://github.com/junegunn/fzf#preview-window). For more information, see [`fzf`'s `README`](https://github.com/junegunn/fzf#preview-window).
@ -194,24 +201,30 @@ bat main.cpp | xclip
`MANPAGER` environment variable: `MANPAGER` environment variable:
```bash ```bash
export MANPAGER="sh -c 'col -bx | bat -l man -p'" export MANPAGER="sh -c 'sed -u -e \"s/\\x1B\[[0-9;]*m//g; s/.\\x08//g\" | bat -p -lman'"
man 2 select man 2 select
``` ```
(replace `bat` with `batcat` if you are on Debian or Ubuntu) (replace `bat` with `batcat` if you are on Debian or Ubuntu)
It might also be necessary to set `MANROFFOPT="-c"` if you experience
formatting problems.
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). 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. > [!WARNING]
> This will [not work](https://github.com/sharkdp/bat/issues/1145) out of the box with Mandoc's `man` implementation.
>
> Please either use `batman`, or convert the shell script to a [shebang executable](https://en.wikipedia.org/wiki/Shebang_(Unix)) and point `MANPAGER` to that.
Also, note that this will [not work](https://github.com/sharkdp/bat/issues/1145) with Mandocs `man` implementation. 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` #### `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`. 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 #### Highlighting `--help` messages
You can use `bat` to colorize help text: `$ cp --help | bat -plhelp` You can use `bat` to colorize help text: `$ cp --help | bat -plhelp`
@ -228,12 +241,30 @@ help() {
Then you can do `$ help cp` or `$ help git commit`. 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`).
Please report any issues with the help syntax in [this repository](https://github.com/victor-gp/cmd-help-sublime-syntax). Please report any issues with the help syntax in [this repository](https://github.com/victor-gp/cmd-help-sublime-syntax).
## Installation ## Installation
[![Packaging status](https://repology.org/badge/vertical-allrepos/bat-cat.svg)](https://repology.org/project/bat-cat/versions) [![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`) ### On Ubuntu (using `apt`)
*... and other Debian-based Linux distributions.* *... and other Debian-based Linux distributions.*
@ -275,7 +306,7 @@ apk add bat
### On Arch Linux ### On Arch Linux
You can install [the `bat` package](https://www.archlinux.org/packages/community/x86_64/bat/) You can install [the `bat` package](https://www.archlinux.org/packages/extra/x86_64/bat/)
from the official sources: from the official sources:
```bash ```bash
@ -352,6 +383,14 @@ You can install `bat` using the [nix package manager](https://nixos.org/nix):
nix-env -i bat nix-env -i bat
``` ```
### Via flox
You can install `bat` using [Flox](https://flox.dev)
```bash
flox install bat
```
### On openSUSE ### On openSUSE
You can install `bat` with zypper: You can install `bat` with zypper:
@ -388,7 +427,15 @@ take a look at the ["Using `bat` on Windows"](#using-bat-on-windows) section.
#### Prerequisites #### 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. 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 #### With Chocolatey
@ -418,15 +465,32 @@ binaries are also available: look for archives with `musl` in the file name.
### From source ### From source
If you want to build `bat` from source, you need Rust 1.64.0 or If you want to build `bat` from source, you need Rust 1.74.0 or
higher. You can then use `cargo` to build everything: 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 ```bash
cargo install --locked bat cargo install --locked bat
``` ```
Note that additional files like the man page or shell completion Note that additional files like the man page or shell completion
files can not be installed in this way. They will be generated by `cargo` and should be available in the cargo target folder (under `build`). 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 ## Customization
@ -445,8 +509,10 @@ the following command (you need [`fzf`](https://github.com/junegunn/fzf) for thi
bat --list-themes | fzf --preview="bat --theme={} --color=always /path/to/file" bat --list-themes | fzf --preview="bat --theme={} --color=always /path/to/file"
``` ```
`bat` looks good on a dark background by default. However, if your terminal uses a `bat` automatically picks a fitting theme depending on your terminal's background color.
light background, some themes like `GitHub` or `OneHalfLight` will work better for you. 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 You can also use a custom theme by following the
['Adding new themes' section below](https://github.com/sharkdp/bat#adding-new-themes). ['Adding new themes' section below](https://github.com/sharkdp/bat#adding-new-themes).
@ -457,12 +523,12 @@ even when truecolor support is available:
- `ansi` looks decent on any terminal. It uses 3-bit colors: black, red, green, - `ansi` looks decent on any terminal. It uses 3-bit colors: black, red, green,
yellow, blue, magenta, cyan, and white. yellow, blue, magenta, cyan, and white.
- `base16` is designed for [base16](https://github.com/chriskempson/base16) terminal themes. It uses - `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 4-bit colors (3-bit colors plus bright variants) in accordance with the
[base16 styling guidelines](https://github.com/chriskempson/base16/blob/master/styling.md). [base16 styling guidelines](https://github.com/tinted-theming/home/blob/main/styling.md).
- `base16-256` is designed for [base16-shell](https://github.com/chriskempson/base16-shell). - `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 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 base16-shell. 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: Although these themes are more restricted, they have three advantages over truecolor themes. They:
@ -478,6 +544,16 @@ 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 variable to make these changes permanent or use `bat`s
[configuration file](https://github.com/sharkdp/bat#configuration-file). [configuration file](https://github.com/sharkdp/bat#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.
### Adding new syntaxes / language definitions ### Adding new syntaxes / language definitions
Should you find that a particular syntax is not available within `bat`, you can follow these Should you find that a particular syntax is not available within `bat`, you can follow these
@ -573,7 +649,8 @@ set, `less` is used by default. If you want to use a different pager, you can ei
`PAGER` variable or set the `BAT_PAGER` environment variable to override what is specified in `PAGER` variable or set the `BAT_PAGER` environment variable to override what is specified in
`PAGER`. `PAGER`.
**Note**: If `PAGER` is `more` or `most`, `bat` will silently use `less` instead to ensure support for colors. >[!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 If you want to pass command-line arguments to the pager, you can also set them via the
`PAGER`/`BAT_PAGER` variables: `PAGER`/`BAT_PAGER` variables:
@ -584,20 +661,37 @@ export BAT_PAGER="less -RF"
Instead of using environment variables, you can also use `bat`s [configuration file](https://github.com/sharkdp/bat#configuration-file) to configure the pager (`--pager` option). Instead of using environment variables, you can also use `bat`s [configuration file](https://github.com/sharkdp/bat#configuration-file) to configure the pager (`--pager` option).
**Note**: By default, if the pager is set to `less` (and no command-line options are specified),
`bat` will pass the following command line options to the pager: `-R`/`--RAW-CONTROL-CHARS`,
`-F`/`--quit-if-one-screen` and `-X`/`--no-init`. The last option (`-X`) is only used for `less`
versions older than 530.
The `-R` option is needed to interpret ANSI colors correctly. The second option (`-F`) instructs ### Using `less` as a pager
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
third option (`-X`) is needed to fix a bug with the `--quit-if-one-screen` feature in old versions
of `less`. Unfortunately, it also breaks mouse-wheel support in `less`.
If you want to enable mouse-wheel scrolling on older versions of `less`, you can pass just `-R` (as When using `less` as a pager, `bat` will automatically pass extra options along to `less`
in the example above, this will disable the quit-if-one-screen feature). For less 530 or newer, to improve the experience. Specifically, `-R`/`--RAW-CONTROL-CHARS`, `-F`/`--quit-if-one-screen`,
it should work out of the box. 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` option is needed to interpret ANSI colors correctly.
The `-F` 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 `-X` option is needed to fix a bug with the `--quit-if-one-screen` feature in versions
of `less` older than version 530. 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` 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 ### Indentation
@ -616,7 +710,7 @@ theme based on the OS theme. The following snippet uses the `default` theme when
and the `GitHub` theme when in the _light mode_. and the `GitHub` theme when in the _light mode_.
```bash ```bash
alias cat="bat --theme=\$(defaults read -globalDomain AppleInterfaceStyle &> /dev/null && echo default || echo GitHub)" alias cat="bat --theme auto:system --theme-dark default --theme-light GitHub"
``` ```
@ -628,10 +722,11 @@ on your operating system. To get the default path for your system, call
bat --config-file bat --config-file
``` ```
Alternatively, you can use the `BAT_CONFIG_PATH` environment variable to point `bat` to a Alternatively, you can use `BAT_CONFIG_PATH` or `BAT_CONFIG_DIR` environment variables to point `bat`
non-default location of the configuration file: to a non-default location of the configuration file or the configuration directory respectively:
```bash ```bash
export BAT_CONFIG_PATH="/path/to/bat.conf" 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. A default configuration file can be created with the `--generate-config-file` option.
@ -682,11 +777,9 @@ your `PATH` or [define an environment variable](#using-a-different-pager). The [
Windows 10 natively supports colors in both `conhost.exe` (Command Prompt) and PowerShell since 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 [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 well as in newer versions of bash. On earlier versions of Windows, you can use
[Cmder](http://cmder.net/), which includes [ConEmu](https://conemu.github.io/). [Cmder](http://cmder.app/), which includes [ConEmu](https://conemu.github.io/).
**Note:** The Git and MSYS versions of `less` do not correctly interpret colors on Windows. If you **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 dont have any other pagers installed, you can disable paging entirely by passing `--paging=never` or by setting `BAT_PAGER` to an empty string.
dont have any other pagers installed, you can disable paging entirely by passing `--paging=never`
or by setting `BAT_PAGER` to an empty string.
### Cygwin ### Cygwin
@ -714,9 +807,14 @@ bat() {
If an input file contains color codes or other ANSI escape sequences or control characters, `bat` will have problems 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. performing syntax highlighting and text wrapping, and thus the output can become garbled.
When displaying such files it is recommended to disable both syntax highlighting and wrapping by
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`. 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 ### Terminals & colors
`bat` handles terminals *with* and *without* truecolor support. However, the colors in most syntax `bat` handles terminals *with* and *without* truecolor support. However, the colors in most syntax

Binary file not shown.

@ -37,6 +37,8 @@ Register-ArgumentCompleter -Native -CommandName '{{PROJECT_EXECUTABLE}}' -Script
[CompletionResult]::new('-m', 'm', [CompletionResultType]::ParameterName, 'Use the specified syntax for files matching the glob pattern (''*.cpp:C++'').') [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('--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', 'theme', [CompletionResultType]::ParameterName, 'Set the color theme for syntax highlighting.')
[CompletionResult]::new('--theme-dark', 'theme', [CompletionResultType]::ParameterName, 'Set the color theme for syntax highlighting for dark backgrounds.')
[CompletionResult]::new('--theme-light', 'theme', [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('--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('-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('--line-range', 'line-range', [CompletionResultType]::ParameterName, 'Only print the lines from N to M.')
@ -59,6 +61,8 @@ Register-ArgumentCompleter -Native -CommandName '{{PROJECT_EXECUTABLE}}' -Script
[CompletionResult]::new('--unbuffered', 'unbuffered', [CompletionResultType]::ParameterName, 'unbuffered') [CompletionResult]::new('--unbuffered', 'unbuffered', [CompletionResultType]::ParameterName, 'unbuffered')
[CompletionResult]::new('--no-config', 'no-config', [CompletionResultType]::ParameterName, 'Do not use the configuration file') [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('--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('--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('--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('--config-dir', 'config-dir', [CompletionResultType]::ParameterName, 'Show bat''s configuration directory.')

@ -32,7 +32,7 @@ __bat_escape_completions()
} }
_bat() { _bat() {
local cur prev words cword split=false local cur prev words split=false
if declare -F _init_completion >/dev/null 2>&1; then if declare -F _init_completion >/dev/null 2>&1; then
_init_completion -s || return 0 _init_completion -s || return 0
else else
@ -76,8 +76,10 @@ _bat() {
-m | --map-syntax | \ -m | --map-syntax | \
--ignored-suffix | \ --ignored-suffix | \
--list-themes | \ --list-themes | \
--squeeze-limit | \
--line-range | \ --line-range | \
-L | --list-languages | \ -L | --list-languages | \
--lessopen | \
--diagnostic | \ --diagnostic | \
--acknowledgements | \ --acknowledgements | \
-h | --help | \ -h | --help | \
@ -111,6 +113,13 @@ _bat() {
return 0 return 0
;; ;;
--theme) --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' local IFS=$'\n'
COMPREPLY=($(compgen -W "$("$1" --list-themes)" -- "$cur")) COMPREPLY=($(compgen -W "$("$1" --list-themes)" -- "$cur"))
__bat_escape_completions __bat_escape_completions
@ -156,6 +165,7 @@ _bat() {
--diff-context --diff-context
--tabs --tabs
--wrap --wrap
--chop-long-lines
--terminal-width --terminal-width
--number --number
--color --color
@ -167,18 +177,27 @@ _bat() {
--map-syntax --map-syntax
--ignored-suffix --ignored-suffix
--theme --theme
--theme-dark
--theme-light
--list-themes --list-themes
--squeeze-blank
--squeeze-limit
--style --style
--line-range --line-range
--list-languages --list-languages
--lessopen
--diagnostic --diagnostic
--acknowledgements --acknowledgements
--set-terminal-title
--help --help
--version --version
--cache-dir --cache-dir
--config-dir --config-dir
--config-file --config-file
--generate-config-file --generate-config-file
--no-config
--no-custom-assets
--no-lessopen
" -- "$cur")) " -- "$cur"))
return 0 return 0
fi fi

@ -129,10 +129,20 @@ set -l tabs_opts '
8\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: # Completions:
complete -c $bat -l acknowledgements -d "Print acknowledgements" -n __fish_is_first_arg complete -c $bat -l acknowledgements -d "Print acknowledgements" -n __fish_is_first_arg
complete -c $bat -l cache-dir -f -d "Show bat's cache directory" -n __fish_is_first_arg
complete -c $bat -l color -x -a "$color_opts" -d "When to use colored output" -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 config-dir -f -d "Display location of configuration directory" -n __fish_is_first_arg complete -c $bat -l config-dir -f -d "Display location of configuration directory" -n __fish_is_first_arg
@ -147,6 +157,8 @@ complete -c $bat -s d -l diff -d "Only show lines with Git changes" -n __bat_no_
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 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 -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 f -l force-colorization -d "Force color and decorations" -n __bat_no_excl_args
@ -163,6 +175,8 @@ complete -c $bat -l italic-text -x -a "$italic_text_opts" -d "When to use italic
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 -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 -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-languages -f -d "List syntax highlighting languages" -n __fish_is_first_arg
@ -171,6 +185,12 @@ complete -c $bat -l list-themes -f -d "List syntax highlighting themes" -n __fis
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 -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 -s n -l number -d "Only show line numbers, no other decorations" -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 pager -x -a "$pager_opts" -d "Which pager to use" -n __bat_no_excl_args complete -c $bat -l pager -x -a "$pager_opts" -d "Which pager to use" -n __bat_no_excl_args
@ -191,7 +211,11 @@ complete -c $bat -l tabs -x -a "$tabs_opts" -d "Set tab width" -n __bat_no_excl_
complete -c $bat -l terminal-width -x -d "Set terminal <width>, +<offset>, or -<offset>" -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 "(command $bat --list-themes | command cat)" -d "Set the syntax highlighting theme" -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 V -l version -f -d "Show version information" -n __fish_is_first_arg complete -c $bat -s V -l version -f -d "Show version information" -n __fish_is_first_arg

@ -1,19 +1,20 @@
#compdef {{PROJECT_EXECUTABLE}} #compdef {{PROJECT_EXECUTABLE}}
local context state state_descr line local curcontext="$curcontext" ret=1
local -a state state_descr line
typeset -A opt_args typeset -A opt_args
(( $+functions[_{{PROJECT_EXECUTABLE}}_cache_subcommand] )) || (( $+functions[_{{PROJECT_EXECUTABLE}}_cache_subcommand] )) ||
_{{PROJECT_EXECUTABLE}}_cache_subcommand() { _{{PROJECT_EXECUTABLE}}_cache_subcommand() {
local -a args local -a args
args=( args=(
'(-b --build -c --clear)'{-b,--build}'[Initialize or update the syntax/theme cache]' '(-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]' '(-b --build -c --clear)'{-c,--clear}'[remove the cached syntax definitions and themes]'
'(--source)'--source='[Use a different directory to load syntaxes and themes from]:directory:_files -/' --source='[specify directory to load syntaxes and themes from]:directory:_files -/'
'(--target)'--target='[Use a different directory to store the cached syntax and theme set]:directory:_files -/' --target='[specify directory to store the cached syntax and theme set in]:directory:_files -/'
'(--blank)'--blank'[Create completely new syntax and theme sets]' --blank'[create completely new syntax and theme sets]'
'(: -)'{-h,--help}'[Prints help information]' --acknowledgements'[build acknowledgements.bin]'
'*: :' '(: -)'{-h,--help}'[show help information]'
) )
_arguments -S -s $args _arguments -S -s $args
@ -23,67 +24,88 @@ _{{PROJECT_EXECUTABLE}}_cache_subcommand() {
_{{PROJECT_EXECUTABLE}}_main() { _{{PROJECT_EXECUTABLE}}_main() {
local -a args local -a args
args=( args=(
'(-A --show-all)'{-A,--show-all}'[Show non-printable characters (space, tab, newline, ..)]' '(-A --show-all)'{-A,--show-all}'[show non-printable characters (space, tab, newline, ..)]'
'*'{-p,--plain}'[Show plain style (alias for `--style=plain`), repeat twice to disable disable automatic paging (alias for `--paging=never`)]' --nonprintable-notation='[specify how to display non-printable characters when using --show-all]:notation:(caret unicode)'
'(-l --language)'{-l+,--language=}'[Set the language for syntax highlighting]:<language>:->language' \*{-p,--plain}'[show plain style (alias for `--style=plain`), repeat twice to disable automatic paging (alias for `--paging=never`)]'
'(-H --highlight-line)'{-H,--highlight-line}'[Highlight lines N through M]:<N\:M>...' '(-l --language)'{-l+,--language=}'[set the language for syntax highlighting]:language:->languages'
'(--file-name)'--file-name'[Specify the name to display for a file]:<name>...:_files' \*{-H+,--highlight-line=}'[highlight specified block of lines]:start\:end'
'(-d --diff)'--diff'[Only show lines that have been added/removed/modified]' \*--file-name='[specify the name to display for a file]:name:_files'
'(--diff-context)'--diff-context'[Include N lines of context around added/removed/modified lines when using `--diff`]:<N> (lines):()' '(-d --diff)'--diff'[only show lines that have been added/removed/modified]'
'(--tabs)'--tabs'[Set the tab width to T spaces]:<T> (tab width):()' --diff-context='[specify lines of context around added/removed/modified lines when using `--diff`]:lines'
'(--wrap)'--wrap='[Specify the text-wrapping mode]:<when>:(auto never character)' --tabs='[set the tab width]:tab width [4]'
'(--terminal-width)'--terminal-width'[Explicitly set the width of the terminal instead of determining it automatically]:<width>' --wrap='[specify the text-wrapping mode]:mode [auto]:(auto never character)'
'(-n --number)'{-n,--number}'[Show line numbers]' '!(--wrap)'{-S,--chop-long-lines}
'(--color)'--color='[When to use colors]:<when>:(auto never always)' --terminal-width='[explicitly set the width of the terminal instead of determining it automatically]:width'
'(--italic-text)'--italic-text='[Use italics in output]:<when>:(always never)' '(-n --number --diff --diff-context)'{-n,--number}'[show line numbers]'
'(--decorations)'--decorations='[When to show the decorations]:<when>:(auto never always)' --color='[specify when to use colors]:when:(auto never always)'
'(--paging)'--paging='[Specify when to use the pager]:<when>:(auto never always)' --italic-text='[use italics in output]:when:(always never)'
'(-m --map-syntax)'{-m+,--map-syntax=}'[Use the specified syntax for files matching the glob pattern]:<glob\:syntax>...' --decorations='[specify when to show the decorations]:when:(auto never always)'
'(--theme)'--theme='[Set the color theme for syntax highlighting]:<theme>:->theme' --paging='[specify when to use the pager]:when:(auto never always)'
'(: --list-themes --list-languages -L)'--list-themes'[Display all supported highlighting themes]' '(-m --map-syntax)'{-m+,--map-syntax=}'[map a glob pattern to an existing syntax name]: :->syntax-maps'
'(--style)'--style='[Comma-separated list of style elements to display]:<components>:->style' '(--theme)'--theme='[set the color theme for syntax highlighting]:theme:->theme_preferences'
'(-r --line-range)'{-r+,--line-range=}'[Only print the lines from N to M]:<N\:M>...' '(--theme-dark)'--theme-dark='[set the color theme for syntax highlighting for dark backgrounds]:theme:->themes'
'(: --list-themes --list-languages -L)'{-L,--list-languages}'[Display all supported languages]' '(--theme-light)'--theme-light='[set the color theme for syntax highlighting for light backgrounds]:theme:->themes'
'(: --no-config)'--no-config'[Do not use the configuration file]' '(: --list-themes --list-languages -L)'--list-themes'[show all supported highlighting themes]'
'(: --no-custom-assets)'--no-custom-assets'[Do not load custom assets]' --style='[comma-separated list of style elements to display]: : _values "style [default]"
'(: --config-dir)'--config-dir'[Show bat'"'"'s configuration directory]' default auto full plain changes header header-filename header-filesize grid rule numbers snip'
'(: --config-file)'--config-file'[Show path to the configuration file]' \*{-r+,--line-range=}'[only print the specified line range]:start\:end'
'(: --generate-config-file)'--generate-config-file'[Generates a default configuration file]' '(* -)'{-L,--list-languages}'[display all supported languages]'
'(: --cache-dir)'--cache-dir'[Show bat'"'"'s cache directory]' -P'[disable paging]'
'(: -)'{-h,--help}'[Print this help message]' "--no-config[don't use the configuration file]"
'(: -)'{-V,--version}'[Show version information]' "--no-custom-assets[don't load custom assets]"
'*: :_files' '(--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 _arguments -S -s $args && ret=0
case "$state" in case "$state" in
language) syntax-maps)
if ! compset -P '*:'; then
_message -e patterns 'glob pattern:language'
return
fi
;& # fall-through
languages)
local IFS=$'\n' local IFS=$'\n'
local -a languages local -a languages
languages=( $({{PROJECT_EXECUTABLE}} --list-languages | awk -F':|,' '{ for (i = 1; i <= NF; ++i) printf("%s:%s\n", $i, $1) }') ) languages=( $({{PROJECT_EXECUTABLE}} --list-languages | awk -F':|,' '{ for (i = 1; i <= NF; ++i) printf("%s:%s\n", $i, $1) }') )
_describe 'language' languages _describe 'language' languages && ret=0
;; ;;
theme) themes)
local IFS=$'\n' local -a themes expl
local -a themes themes=(${(f)"$(_call_program themes {{PROJECT_EXECUTABLE}} --list-themes)"} )
themes=( $({{PROJECT_EXECUTABLE}} --list-themes | sort) )
_values 'theme' $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)"} )
style) _wanted themes expl 'theme' compadd -a themes && ret=0
_values -s , 'style' default auto full plain changes header header-filename header-filesize grid rule numbers snip
;; ;;
esac esac
return ret
} }
case $words[2] in case $words[2] in
cache) cache)
## Completion of the 'cache' command itself is removed for better UX ## Completion of the 'cache' command itself is removed for better UX
## See https://github.com/sharkdp/bat/issues/2085#issuecomment-1271646802 ## See https://github.com/sharkdp/bat/issues/2085#issuecomment-1271646802
shift words
(( CURRENT-- ))
curcontext="${curcontext%:*}-${words[1]}:"
_{{PROJECT_EXECUTABLE}}_cache_subcommand _{{PROJECT_EXECUTABLE}}_cache_subcommand
;; ;;

119
assets/manual/bat.1.in vendored

@ -25,7 +25,7 @@ either '--language value', '--language=value', '-l value' or '-lvalue'.
Show non\-printable characters like space, tab or newline. Use '\-\-tabs' to Show non\-printable characters like space, tab or newline. Use '\-\-tabs' to
control the width of the tab\-placeholders. control the width of the tab\-placeholders.
.HP .HP
\fB\-\-nonprintable\-notation\fR \fB\-\-nonprintable\-notation\fR <notation>
.IP .IP
Specify how to display non-printable characters when using \-\-show\-all. Specify how to display non-printable characters when using \-\-show\-all.
@ -87,6 +87,10 @@ Set the tab width to T spaces. Use a width of 0 to pass tabs through directly
Specify the text\-wrapping mode (*auto*, never, character). The '\-\-terminal\-width' option Specify the text\-wrapping mode (*auto*, never, character). The '\-\-terminal\-width' option
can be used in addition to control the output width. can be used in addition to control the output width.
.HP .HP
\fB\-S\fR, \fB\-\-chop\-long\-lines\fR
.IP
Truncate all lines longer than screen width. Alias for '\-\-wrap=never'.
.HP
\fB\-\-terminal\-width\fR <width> \fB\-\-terminal\-width\fR <width>
.IP .IP
Explicitly set the width of the terminal instead of determining it automatically. If Explicitly set the width of the terminal instead of determining it automatically. If
@ -141,16 +145,58 @@ use -m '*.build:Python'. To highlight files named '.myignore' with the Git Ignor
syntax, use -m '.myignore:Git Ignore'. syntax, use -m '.myignore:Git Ignore'.
Note that the right-hand side is the *name* of the syntax, not a file extension. Note that the right-hand side is the *name* of the syntax, not a file extension.
.HP .HP
\fB\-\-ignored\-suffix\fR <ignored-suffix>
.IP
Ignore extension. For example: 'bat \-\-ignored-suffix ".dev" my_file.json.dev'
will use JSON syntax, and ignore '.dev'
.HP
\fB\-\-theme\fR <theme> \fB\-\-theme\fR <theme>
.IP .IP
Set the theme for syntax highlighting. Use '\-\-list\-themes' to see all available themes. Set the theme for syntax highlighting. Use \fB\-\-list\-themes\fP to see all available themes.
To set a default theme, add the '\-\-theme="..."' option to the configuration file or To set a default theme, add the \fB\-\-theme="..."\fP option to the configuration file or
export the BAT_THEME environment variable (e.g.: export BAT_THEME="..."). export the \fBBAT_THEME\fP environment variable (e.g.: \fBexport BAT_THEME="..."\fP).
Special values:
.RS
.IP "auto (\fIdefault\fR)"
Picks a dark or light theme depending on the terminal's colors.
Use \fB-\-theme\-light\fR and \fB-\-theme\-dark\fR to customize the selected theme.
.IP "auto:always"
Variation of \fBauto\fR where where the terminal's colors are detected even when the output is redirected.
.IP "auto:system (macOS only)"
Variation of \fBauto\fR where the color scheme is detected from the system-wide preference instead.
.IP "dark"
Use the dark theme specified by \fB-\-theme-dark\fR.
.IP "light"
Use the light theme specified by \fB-\-theme-light\fR.
.RE
.HP
\fB\-\-theme\-dark\fR <theme>
.IP
Sets the theme name for syntax highlighting used when the terminal uses a dark background.
To set a default theme, add the \fB\-\-theme-dark="..."\fP option to the configuration file or
export the \fBBAT_THEME_DARK\fP environment variable (e.g. \fBexport BAT_THEME_DARK="..."\fP).
This option only has an effect when \fB\-\-theme\fP option is set to \fBauto\fR or \fBdark\fR.
.HP
\fB\-\-theme\-light\fR <theme>
.IP
Sets the theme name for syntax highlighting used when the terminal uses a light background.
To set a default theme, add the \fB\-\-theme-light="..."\fP option to the configuration file or
export the \fBBAT_THEME_LIGHT\fP environment variable (e.g. \fBexport BAT_THEME_LIGHT="..."\fP).
This option only has an effect when \fB\-\-theme\fP option is set to \fBauto\fR or \fBlight\fR.
.HP .HP
\fB\-\-list\-themes\fR \fB\-\-list\-themes\fR
.IP .IP
Display a list of supported themes for syntax highlighting. Display a list of supported themes for syntax highlighting.
.HP .HP
\fB\-s\fR, \fB\-\-squeeze\-blank\fR
.IP
Squeeze consecutive empty lines into a single empty line.
.HP
\fB\-\-squeeze\-limit\fR <squeeze-limit>
.IP
Set the maximum number of consecutive empty lines to be printed.
.HP
\fB\-\-style\fR <style\-components> \fB\-\-style\fR <style\-components>
.IP .IP
Configure which elements (line numbers, file headers, grid borders, Git modifications, Configure which elements (line numbers, file headers, grid borders, Git modifications,
@ -184,6 +230,30 @@ Display a list of supported languages for syntax highlighting.
This option exists for POSIX\-compliance reasons ('u' is for 'unbuffered'). The output is This option exists for POSIX\-compliance reasons ('u' is for 'unbuffered'). The output is
always unbuffered \- this option is simply ignored. always unbuffered \- this option is simply ignored.
.HP .HP
\fB\-\-no\-custom\-assets\fR
.IP
Do not load custom assets.
.HP
\fB\-\-config\-dir\fR
.IP
Show bat's configuration directory.
.HP
\fB\-\-cache\-dir\fR
.IP
Show bat's cache directory.
.HP
\fB\-\-diagnostic\fR
.IP
Show diagnostic information for bug reports.
.HP
\fB\-\-acknowledgements\fR
.IP
Show acknowledgements.
.HP
\fB\-\-set\-terminal\-title\fR
.IP
Sets terminal title to filenames when using a pager.
.HP
\fB\-h\fR, \fB\-\-help\fR \fB\-h\fR, \fB\-\-help\fR
.IP .IP
Print this help message. Print this help message.
@ -212,6 +282,20 @@ location of the configuration file.
To generate a default configuration file, call: To generate a default configuration file, call:
\fB{{PROJECT_EXECUTABLE}} --generate-config-file\fR \fB{{PROJECT_EXECUTABLE}} --generate-config-file\fR
These are related options:
.HP
\fB\-\-config\-file\fR
.IP
Show path to the configuration file.
.HP
\fB\-\-generate-config\-file\fR
.IP
Generates a default configuration file.
.HP
\fB\-\-no\-config\fR
.IP
Do not use the configuration file.
.SH "ADDING CUSTOM LANGUAGES" .SH "ADDING CUSTOM LANGUAGES"
{{PROJECT_EXECUTABLE}} supports Sublime Text \fB.sublime-syntax\fR language files, and can be {{PROJECT_EXECUTABLE}} supports Sublime Text \fB.sublime-syntax\fR language files, and can be
customized to add additional languages to your local installation. To do this, add the \fB.sublime-syntax\fR language customized to add additional languages to your local installation. To do this, add the \fB.sublime-syntax\fR language
@ -243,6 +327,33 @@ If you ever want to remove the custom languages, you can clear the cache with `\
Similarly to custom languages, {{PROJECT_EXECUTABLE}} supports Sublime Text \fB.tmTheme\fR themes. Similarly to custom languages, {{PROJECT_EXECUTABLE}} supports Sublime Text \fB.tmTheme\fR themes.
These can be installed to `\fB$({{PROJECT_EXECUTABLE}} --config-dir)/themes\fR`, and are added to the cache with These can be installed to `\fB$({{PROJECT_EXECUTABLE}} --config-dir)/themes\fR`, and are added to the cache with
`\fB{{PROJECT_EXECUTABLE}} cache --build`. `\fB{{PROJECT_EXECUTABLE}} cache --build`.
.SH "INPUT PREPROCESSOR"
Much like less(1) does, {{PROJECT_EXECUTABLE}} supports input preprocessors via the LESSOPEN and LESSCLOSE environment variables.
In addition, {{PROJECT_EXECUTABLE}} attempts to be as compatible with less's preprocessor implementation as possible.
To use the preprocessor, call:
\fB{{PROJECT_EXECUTABLE}} --lessopen\fR
Alternatively, the preprocessor may be enabled by default by adding the '\-\-lessopen' option to the configuration file.
To temporarily disable the preprocessor if it is enabled by default, call:
\fB{{PROJECT_EXECUTABLE}} --no-lessopen\fR
These are related options:
.HP
\fB\-\-lessopen\fR
.IP
Enable the $LESSOPEN preprocessor.
.HP
\fB\-\-no\-lessopen\fR
.IP
Disable the $LESSOPEN preprocessor if enabled (overrides --lessopen)
.PP
For more information, see the "INPUT PREPROCESSOR" section of less(1).
.SH "MORE INFORMATION" .SH "MORE INFORMATION"
For more information and up-to-date documentation, visit the {{PROJECT_EXECUTABLE}} repo: For more information and up-to-date documentation, visit the {{PROJECT_EXECUTABLE}} repo:

22
assets/patches/1337.tmTheme.patch vendored Normal file

@ -0,0 +1,22 @@
diff --git themes/1337-Scheme/1337.tmTheme themes/1337-Scheme/1337.tmTheme
index fdff5bf..8cfc888 100644
--- themes/1337-Scheme/1337.tmTheme
+++ themes/1337-Scheme/1337.tmTheme
@@ -280,7 +280,7 @@ SOFTWARE.
<key>name</key>
<string>PHP Namespaces</string>
<key>scope</key>
- <string>support.other.namespace, entity.name.type.namespace</string>
+ <string>support.other.namespace, entity.name.type.namespace, entity.name</string>
<key>settings</key>
<dict>
<key>foreground</key>
@@ -561,7 +561,7 @@ SOFTWARE.
<key>name</key>
<string>diff.header</string>
<key>scope</key>
- <string>meta.diff, meta.diff.header</string>
+ <string>meta.diff, meta.diff.header, markup.heading</string>
<key>settings</key>
<dict>
<key>foreground</key>

@ -0,0 +1,14 @@
Submodule assets/syntaxes/01_Packages contains modified content
diff --git syntaxes/01_Packages/JavaScript/JavaScript.sublime-syntax syntaxes/01_Packages/JavaScript/JavaScript.sublime-syntax
index 05a4fed6..78a7bf55 100644
--- syntaxes/01_Packages/JavaScript/JavaScript.sublime-syntax
+++ syntaxes/01_Packages/JavaScript/JavaScript.sublime-syntax
@@ -5,7 +5,7 @@ name: JavaScript
file_extensions:
- js
- htc
-first_line_match: ^#!\s*/.*\b(node|js)\b
+first_line_match: ^#!\s*/.*\b(node|bun|js)\b
scope: source.js
variables:
bin_digit: '[01_]'

2365
assets/patches/Lisp.sublime-syntax.patch vendored Normal file

File diff suppressed because one or more lines are too long

@ -1,5 +1,5 @@
diff --git syntaxes/01_Packages/Markdown/Markdown.sublime-syntax syntaxes/01_Packages/Markdown/Markdown.sublime-syntax diff --git syntaxes/01_Packages/Markdown/Markdown.sublime-syntax syntaxes/01_Packages/Markdown/Markdown.sublime-syntax
index 19dc685d..44440c7f 100644 index 19dc685d..3a45ea05 100644
--- syntaxes/01_Packages/Markdown/Markdown.sublime-syntax --- syntaxes/01_Packages/Markdown/Markdown.sublime-syntax
+++ syntaxes/01_Packages/Markdown/Markdown.sublime-syntax +++ syntaxes/01_Packages/Markdown/Markdown.sublime-syntax
@@ -24,7 +24,6 @@ variables: @@ -24,7 +24,6 @@ variables:
@ -166,7 +166,29 @@ index 19dc685d..44440c7f 100644
- match: ^\s*$\n? - match: ^\s*$\n?
scope: invalid.illegal.non-terminated.bold-italic.markdown scope: invalid.illegal.non-terminated.bold-italic.markdown
pop: true pop: true
@@ -1152,7 +1110,7 @@ contexts: @@ -1073,6 +1031,21 @@ contexts:
escape: '{{code_fence_escape}}'
escape_captures:
0: meta.code-fence.definition.end.python.markdown-gfm
+ 1: punctuation.definition.raw.code-fence.end.markdown
+ - match: |-
+ (?x)
+ {{fenced_code_block_start}}
+ ((?i:puppet))
+ {{fenced_code_block_trailing_infostring_characters}}
+ captures:
+ 0: meta.code-fence.definition.begin.puppet.markdown-gfm
+ 2: punctuation.definition.raw.code-fence.begin.markdown
+ 5: constant.other.language-name.markdown
+ embed: scope:source.puppet
+ embed_scope: markup.raw.code-fence.puppet.markdown-gfm
+ escape: '{{code_fence_escape}}'
+ escape_captures:
+ 0: meta.code-fence.definition.end.puppet.markdown-gfm
1: punctuation.definition.raw.code-fence.end.markdown
- match: |-
(?x)
@@ -1152,7 +1125,7 @@ contexts:
- match: |- - match: |-
(?x) (?x)
{{fenced_code_block_start}} {{fenced_code_block_start}}

@ -21,11 +21,26 @@ index 9c2aa3e..180cbbf 100644
<string>Invalid</string> <string>Invalid</string>
<key>scope</key> <key>scope</key>
- <string>invalid</string> - <string>invalid</string>
+ <string>invalid, markup.error</string> + <string>invalid, meta.annotation.error-line</string>
<key>settings</key> <key>settings</key>
<dict> <dict>
<key>background</key> <key>background</key>
@@ -1042,7 +1042,7 @@ @@ -1038,11 +1038,22 @@
<string>#f8f8f0</string>
</dict>
</dict>
+ <dict>
+ <key>name</key>
+ <string>Error</string>
+ <key>scope</key>
+ <string>markup.error</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#dd2020</string>
+ </dict>
+ </dict>
<dict>
<key>name</key> <key>name</key>
<string>Invalid deprecated</string> <string>Invalid deprecated</string>
<key>scope</key> <key>scope</key>

@ -0,0 +1,47 @@
diff --git themes/onehalf/sublimetext/OneHalfDark.tmTheme themes/onehalf/sublimetext/OneHalfDark.tmTheme
index b16050c..b021071 100644
--- themes/onehalf/sublimetext/OneHalfDark.tmTheme
+++ themes/onehalf/sublimetext/OneHalfDark.tmTheme
@@ -28,7 +28,7 @@
<plist version="1.0">
<dict>
<key>name</key>
- <string>OneHalfLight</string>
+ <string>OneHalfDark</string>
<key>semanticClass</key>
<string>theme.dark.one_half_dark</string>
<key>uuid</key>
@@ -155,7 +155,7 @@
<key>name</key>
<string>Classes</string>
<key>scope</key>
- <string>support.class, entity.name.class, entity.name.type.class</string>
+ <string>support.class, entity.name.class, entity.name.type.class, entity.name</string>
<key>settings</key>
<dict>
<key>foreground</key>
@@ -188,7 +188,7 @@
<key>name</key>
<string>Storage</string>
<key>scope</key>
- <string>storage</string>
+ <string>storage, meta.mapping.key string</string>
<key>settings</key>
<dict>
<key>foreground</key>
@@ -309,7 +309,7 @@
<key>name</key>
<string>Markdown: Headings</string>
<key>scope</key>
- <string>markup.heading punctuation.definition.heading, entity.name.section</string>
+ <string>markup.heading punctuation.definition.heading, entity.name.section, markup.heading - text.html.markdown</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
@@ -660,4 +660,4 @@
</dict>
</array>
</dict>
-</plist>
\ No newline at end of file
+</plist>

@ -2,6 +2,24 @@ diff --git themes/TwoDark/TwoDark.tmTheme themes/TwoDark/TwoDark.tmTheme
index 87fd358..56376d3 100644 index 87fd358..56376d3 100644
--- themes/TwoDark/TwoDark.tmTheme --- themes/TwoDark/TwoDark.tmTheme
+++ themes/TwoDark/TwoDark.tmTheme +++ themes/TwoDark/TwoDark.tmTheme
@@ -125,7 +125,7 @@
<key>name</key>
<string>Classes</string>
<key>scope</key>
- <string>support.class, entity.name.class, entity.name.type.class</string>
+ <string>support.class, entity.name.class, entity.name.type.class, entity.name</string>
<key>settings</key>
<dict>
<key>foreground</key>
@@ -290,7 +290,7 @@
<key>name</key>
<string>Headings</string>
<key>scope</key>
- <string>markup.heading punctuation.definition.heading, entity.name.section</string>
+ <string>markup.heading punctuation.definition.heading, entity.name.section, markup.heading - text.html.markdown</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
@@ -533,7 +533,7 @@ @@ -533,7 +533,7 @@
<key>name</key> <key>name</key>
<string>Json key</string> <string>Json key</string>

BIN
assets/syntaxes.bin vendored

Binary file not shown.

@ -2,20 +2,21 @@
--- ---
# See http://www.sublimetext.com/docs/3/syntax.html # See http://www.sublimetext.com/docs/3/syntax.html
name: Comma Separated Values name: Comma Separated Values
file_extensions: scope: text.csv.comma
- csv
- tsv
scope: text.csv
variables: variables:
field_separator: (?:[,;\t]) field_separator: (?:,)
record_separator: (?:$\n?) record_separator: (?:$\n?)
contexts: contexts:
prototype: main:
- match: (?={{record_separator}}) - match: '^'
pop: true push: fields
fields: fields:
- include: record_separator
- match: '' - match: ''
push: push:
- field_or_record_separator
- field5
- field_or_record_separator - field_or_record_separator
- field4 - field4
- field_or_record_separator - field_or_record_separator
@ -24,16 +25,20 @@ contexts:
- field2 - field2
- field_or_record_separator - field_or_record_separator
- field1 - field1
main:
- meta_include_prototype: false
- match: '^'
set: fields
field_or_record_separator: record_separator_pop:
- match: (?={{record_separator}})
pop: true
record_separator:
- meta_include_prototype: false - meta_include_prototype: false
- match: '{{record_separator}}' - match: '{{record_separator}}'
scope: punctuation.terminator.record.csv scope: punctuation.terminator.record.csv
pop: true pop: true
field_or_record_separator:
- meta_include_prototype: false
- include: record_separator_pop
- match: '{{field_separator}}' - match: '{{field_separator}}'
scope: punctuation.separator.sequence.csv scope: punctuation.separator.sequence.csv
pop: true pop: true
@ -41,24 +46,16 @@ contexts:
field_contents: field_contents:
- match: '"' - match: '"'
scope: punctuation.definition.string.begin.csv scope: punctuation.definition.string.begin.csv
push: double_quoted_string push: scope:text.csv#double_quoted_string
- match: (?={{field_separator}}|{{record_separator}}) - include: record_separator_pop
pop: true - match: (?={{field_separator}})
double_quoted_string:
- meta_include_prototype: false
- meta_scope: string.quoted.double.csv
- match: '""'
scope: constant.character.escape.csv
- match: '"'
scope: punctuation.definition.string.end.csv
pop: true pop: true
field1: field1:
- match: '' - match: ''
set: set:
- meta_content_scope: meta.field-1.csv support.type - meta_content_scope: meta.field-1.csv variable.parameter
- include: field_contents - include: field_contents
field2: field2:
- match: '' - match: ''
@ -75,4 +72,8 @@ contexts:
set: set:
- meta_content_scope: meta.field-4.csv keyword.operator - meta_content_scope: meta.field-4.csv keyword.operator
- include: field_contents - include: field_contents
field5:
- match: ''
set:
- meta_content_scope: meta.field-5.csv string.unquoted
- include: field_contents

@ -0,0 +1,80 @@
%YAML 1.2
---
# See http://www.sublimetext.com/docs/3/syntax.html
name: Pipe Separated Values
scope: text.csv.pipe
variables:
field_separator: (?:\|)
record_separator: (?:$\n?)
contexts:
main:
- match: '^'
push: fields
fields:
- include: record_separator
- match: ''
push:
- field_or_record_separator
- field5
- field_or_record_separator
- field4
- field_or_record_separator
- field3
- field_or_record_separator
- field2
- field_or_record_separator
- field1
record_separator_pop:
- match: (?={{record_separator}})
pop: true
record_separator:
- meta_include_prototype: false
- match: '{{record_separator}}'
scope: punctuation.terminator.record.csv
pop: true
field_or_record_separator:
- meta_include_prototype: false
- include: record_separator_pop
- match: '{{field_separator}}'
scope: punctuation.separator.sequence.csv
pop: true
field_contents:
- match: '"'
scope: punctuation.definition.string.begin.csv
push: scope:text.csv#double_quoted_string
- include: record_separator_pop
- match: (?={{field_separator}})
pop: true
field1:
- match: ''
set:
- meta_content_scope: meta.field-1.csv variable.parameter
- include: field_contents
field2:
- match: ''
set:
- meta_content_scope: meta.field-2.csv support.function
- include: field_contents
field3:
- match: ''
set:
- meta_content_scope: meta.field-3.csv constant.numeric
- include: field_contents
field4:
- match: ''
set:
- meta_content_scope: meta.field-4.csv keyword.operator
- include: field_contents
field5:
- match: ''
set:
- meta_content_scope: meta.field-5.csv string.unquoted
- include: field_contents

@ -0,0 +1,79 @@
%YAML 1.2
---
# See http://www.sublimetext.com/docs/3/syntax.html
name: Semi-Colon Separated Values
scope: text.csv.semi-colon
variables:
field_separator: (?:;)
record_separator: (?:$\n?)
contexts:
main:
- match: '^'
push: fields
fields:
- include: record_separator
- match: ''
push:
- field_or_record_separator
- field5
- field_or_record_separator
- field4
- field_or_record_separator
- field3
- field_or_record_separator
- field2
- field_or_record_separator
- field1
record_separator_pop:
- match: (?={{record_separator}})
pop: true
record_separator:
- meta_include_prototype: false
- match: '{{record_separator}}'
scope: punctuation.terminator.record.csv
pop: true
field_or_record_separator:
- meta_include_prototype: false
- include: record_separator_pop
- match: '{{field_separator}}'
scope: punctuation.separator.sequence.csv
pop: true
field_contents:
- match: '"'
scope: punctuation.definition.string.begin.csv
push: scope:text.csv#double_quoted_string
- include: record_separator_pop
- match: (?={{field_separator}})
pop: true
field1:
- match: ''
set:
- meta_content_scope: meta.field-1.csv variable.parameter
- include: field_contents
field2:
- match: ''
set:
- meta_content_scope: meta.field-2.csv support.function
- include: field_contents
field3:
- match: ''
set:
- meta_content_scope: meta.field-3.csv constant.numeric
- include: field_contents
field4:
- match: ''
set:
- meta_content_scope: meta.field-4.csv keyword.operator
- include: field_contents
field5:
- match: ''
set:
- meta_content_scope: meta.field-5.csv string.unquoted
- include: field_contents

@ -0,0 +1,113 @@
%YAML 1.2
---
# See http://www.sublimetext.com/docs/3/syntax.html
name: Separated Values
file_extensions:
- csv
scope: text.csv
variables:
field_separator_chars: ',;\t|'
field_separator: (?:[{{field_separator_chars}}])
record_separator: (?:$\n?)
contexts:
main:
- meta_include_prototype: false
- include: three_field_separators
- include: single_separator_type_on_line
- match: '^'
push: unknown-separated-main
three_field_separators:
- match: ^(?=(?:[^,]*,){3})
set: scope:text.csv.comma
- match: ^(?=(?:[^;]*;){3})
set: scope:text.csv.semi-colon
- match: ^(?=(?:[^\t]*\t){3})
set: scope:text.csv.tab
- match: ^(?=(?:[^|]*\|){3})
set: scope:text.csv.pipe
single_separator_type_on_line:
- match: ^(?=[^{{field_separator_chars}}]*,[^;\t|]*$)
set: scope:text.csv.comma
- match: ^(?=[^{{field_separator_chars}}]*;[^,\t|]*$)
set: scope:text.csv.semi-colon
- match: ^(?=[^{{field_separator_chars}}]*\t[^,;|]*$)
set: scope:text.csv.tab
- match: ^(?=[^{{field_separator_chars}}]*\|[^,;\t]*$)
set: scope:text.csv.pipe
unknown-separated-main:
- include: record_separator
- match: ''
push:
- field_or_record_separator
- field5
- field_or_record_separator
- field4
- field_or_record_separator
- field3
- field_or_record_separator
- field2
- field_or_record_separator
- field1
record_separator_pop:
- match: (?={{record_separator}})
pop: true
record_separator:
- meta_include_prototype: false
- match: '{{record_separator}}'
scope: punctuation.terminator.record.csv
field_or_record_separator:
- meta_include_prototype: false
- include: record_separator_pop
- match: '{{field_separator}}'
scope: punctuation.separator.sequence.csv
pop: true
field_contents:
- match: '"'
scope: punctuation.definition.string.begin.csv
push: double_quoted_string
- include: record_separator_pop
- match: (?={{field_separator}})
pop: true
double_quoted_string:
- meta_include_prototype: false
- meta_scope: string.quoted.double.csv
- match: '""'
scope: constant.character.escape.csv
- match: '"'
scope: punctuation.definition.string.end.csv
pop: true
field1:
- match: ''
set:
- meta_content_scope: meta.field-1.csv variable.parameter
- include: field_contents
field2:
- match: ''
set:
- meta_content_scope: meta.field-2.csv support.function
- include: field_contents
field3:
- match: ''
set:
- meta_content_scope: meta.field-3.csv constant.numeric
- include: field_contents
field4:
- match: ''
set:
- meta_content_scope: meta.field-4.csv keyword.operator
- include: field_contents
field5:
- match: ''
set:
- meta_content_scope: meta.field-5.csv string.unquoted
- include: field_contents

@ -0,0 +1,83 @@
%YAML 1.2
---
# See http://www.sublimetext.com/docs/3/syntax.html
name: Tab Separated Values
scope: text.csv.tab
file_extensions:
- tsv
variables:
field_separator: (?:\t)
record_separator: (?:$\n?)
contexts:
main:
- match: '^'
push: fields
fields:
- include: record_separator
- match: ''
push:
- field_or_record_separator
- field5
- field_or_record_separator
- field4
- field_or_record_separator
- field3
- field_or_record_separator
- field2
- field_or_record_separator
- field1
record_separator_pop:
- match: (?={{record_separator}})
pop: true
record_separator:
- meta_include_prototype: false
- match: '{{record_separator}}'
scope: punctuation.terminator.record.csv
pop: true
field_or_record_separator:
- meta_include_prototype: false
- include: record_separator_pop
- match: '{{field_separator}}'
scope: punctuation.separator.sequence.csv
pop: true
field_contents:
- match: '"'
scope: punctuation.definition.string.begin.csv
push: scope:text.csv#double_quoted_string
- include: record_separator_pop
- match: (?={{field_separator}})
pop: true
field1:
- match: ''
set:
- meta_content_scope: meta.field-1.csv variable.parameter
- include: field_contents
field2:
- match: ''
set:
- meta_content_scope: meta.field-2.csv support.function
- include: field_contents
field3:
- match: ''
set:
- meta_content_scope: meta.field-3.csv constant.numeric
- include: field_contents
field4:
- match: ''
set:
- meta_content_scope: meta.field-4.csv keyword.operator
- include: field_contents
field5:
- match: ''
set:
- meta_content_scope: meta.field-5.csv string.unquoted
- include: field_contents

@ -85,6 +85,9 @@ contexts:
options: options:
# command-line options like --option=value, --some-flag, or -x # command-line options like --option=value, --some-flag, or -x
- match: '^[ ]{7}(-)(?=\s)'
captures:
1: entity.name.command-line-option.man
- match: '^[ ]{7}(?=-|\+)' - match: '^[ ]{7}(?=-|\+)'
push: expect-command-line-option push: expect-command-line-option
- match: '(?:[^a-zA-Z0-9_-]|^|\s){{command_line_option}}' - match: '(?:[^a-zA-Z0-9_-]|^|\s){{command_line_option}}'

@ -0,0 +1,42 @@
%YAML 1.2
---
# See http://www.sublimetext.com/docs/syntax.html
name: debsources
file_extensions:
- sources.list
scope: text.apt-source-list
contexts:
main:
- include: comments
- match: ^[\w-]+
scope: constant.language.apt-source-list
- match: \w+://\S+
scope: markup.underline.link.apt-source-list
push: distribution
- match: \bmain\b
scope: support.class.apt-source-list
- match: \buniverse\b
scope: support.constant.apt-source-list
- match: \brestricted\b
scope: storage.modifier.apt-source-list
- match: \bmultiverse\b
scope: keyword.other.apt-source-list
- match: '[\w-]+'
scope: constant.other.apt-source-list
comments:
- match: '#'
scope: punctuation.definition.comment.apt-source-list
push: line_comment
line_comment:
- meta_scope: comment.line.apt-source-list
- match: $
pop: true
distribution:
- match: \S+
scope: support.type.apt-source-list
pop: 1
- match: $
pop: 1

@ -38,21 +38,21 @@ contexts:
scope: markup.underline.link.scheme.log scope: markup.underline.link.scheme.log
push: url-host push: url-host
log_level_lines: log_level_lines:
- match: ^(?=.*{{error}}) - match: (?=.*{{error}})
push: push:
- error_line - error_line_meta
- main_pop_at_eol - main_pop_at_eol
- match: ^(?=.*{{warning}}) - match: (?=.*{{warning}})
push: push:
- warning_line - warning_line_meta
- main_pop_at_eol - main_pop_at_eol
- match: ^(?=.*{{info}}) - match: (?=.*{{info}})
push: push:
- info_line - info_line_meta
- main_pop_at_eol - main_pop_at_eol
- match: ^(?=.*{{debug}}) - match: (?=.*{{debug}})
push: push:
- debug_line - debug_line_meta
- main_pop_at_eol - main_pop_at_eol
log_levels: log_levels:
- match: '{{error}}' - match: '{{error}}'
@ -63,16 +63,16 @@ contexts:
scope: markup.info.log scope: markup.info.log
- match: '{{debug}}' - match: '{{debug}}'
scope: markup.info.log scope: markup.info.log
error_line: error_line_meta:
- meta_scope: meta.annotation.error-line.log - meta_scope: meta.annotation.error-line.log
- include: immediately_pop - include: immediately_pop
warning_line: warning_line_meta:
- meta_scope: meta.annotation.warning-line.log - meta_scope: meta.annotation.warning-line.log
- include: immediately_pop - include: immediately_pop
info_line: info_line_meta:
- meta_scope: meta.annotation.info-line.log - meta_scope: meta.annotation.info-line.log
- include: immediately_pop - include: immediately_pop
debug_line: debug_line_meta:
- meta_scope: meta.annotation.debug-line.log - meta_scope: meta.annotation.debug-line.log
- include: immediately_pop - include: immediately_pop
immediately_pop: immediately_pop:

@ -131,6 +131,12 @@ OPTIONS
# ^^ - variable # ^^ - variable
output NUM (default 3) lines of copied context output NUM (default 3) lines of copied context
- This is not really a switch, but indicates that standard input
# ^ entity.name.command-line-option.man
# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - entity - variable
is coming from a file or a pipe and not interactively from the
command line.
EXAMPLE EXAMPLE
#include <stdio.h> #include <stdio.h>
# ^^^^^^^^ source.c meta.preprocessor.include keyword.control.import.include # ^^^^^^^^ source.c meta.preprocessor.include keyword.control.import.include

@ -8,10 +8,10 @@ scope: text.log.syslog
contexts: contexts:
main: main:
- match: ^(\w+\s+\d+)\s+(\d{2}:\d{2}:\d{2}) - match: ^(\w+\s+\d+)\s+(\d{2}:\d{2}:\d{2})
scope: meta.datetime.syslog constant.numeric.syslog scope: meta.datetime.syslog
captures: captures:
1: meta.date.syslog 1: meta.date.syslog constant.numeric.syslog
2: meta.time.syslog 2: meta.time.syslog constant.numeric.syslog
push: loghost push: loghost
- match: ^ - match: ^
push: text push: text
@ -31,7 +31,10 @@ contexts:
structured-data: structured-data:
- match: '\[' - match: '\['
scope: punctuation.section.mapping.begin.syslog scope: punctuation.section.mapping.begin.syslog
push: push: structured-data-contents
- match: (?=\S)
set: text
structured-data-contents:
- match: \] - match: \]
scope: punctuation.section.mapping.end.syslog scope: punctuation.section.mapping.end.syslog
pop: true pop: true
@ -39,14 +42,13 @@ contexts:
scope: variable.parameter.syslog scope: variable.parameter.syslog
- match: = - match: =
scope: keyword.operator.assignment.syslog scope: keyword.operator.assignment.syslog
push: push: structured-data-assignment
structured-data-assignment:
- match: '[^\s\]]+' - match: '[^\s\]]+'
scope: constant.other.syslog scope: constant.other.syslog
pop: true pop: true
- match: (?=\]) - match: (?=\])
pop: true pop: true
- match: (?=\S)
set: text
text: text:
- match: $ - match: $
pop: true pop: true

@ -0,0 +1,198 @@
%YAML 1.2
---
# http://www.sublimetext.com/docs/syntax.html
name: WGSL
file_extensions:
- wgsl
scope: source.wgsl
contexts:
main:
- include: line_comments
- include: block_comments
- include: keywords
- include: attributes
- include: functions
- include: function_calls
- include: constants
- include: types
- include: variables
- include: punctuation
attributes:
- match: '(@)([A-Za-z_]+)'
comment: attribute declaration
scope: meta.attribute.wgsl
captures:
1: keyword.operator.attribute.at
2: entity.name.attribute.wgsl
block_comments:
- match: /\*\*/
comment: empty block comments
scope: comment.block.wgsl
- match: /\*\*
comment: block documentation comments
push:
- meta_scope: comment.block.documentation.wgsl
- match: \*/
pop: true
- include: block_comments
- match: /\*(?!\*)
comment: block comments
push:
- meta_scope: comment.block.wgsl
- match: \*/
pop: true
- include: block_comments
constants:
- match: '(-?\b[0-9][0-9]*\.[0-9][0-9]*)([eE][+-]?[0-9]+)?\b'
comment: decimal float literal
scope: constant.numeric.float.wgsl
- match: '-?\b0x[0-9a-fA-F]+\b|\b0\b|-?\b[1-9][0-9]*\b'
comment: int literal
scope: constant.numeric.decimal.wgsl
- match: '\b0x[0-9a-fA-F]+u\b|\b0u\b|\b[1-9][0-9]*u\b'
comment: uint literal
scope: constant.numeric.decimal.wgsl
- match: \b(true|false)\b
comment: boolean constant
scope: constant.language.boolean.wgsl
function_calls:
- match: '([A-Za-z0-9_]+)(\()'
comment: function/method calls
captures:
1: entity.name.function.wgsl
2: punctuation.brackets.round.wgsl
push:
- meta_scope: meta.function.call.wgsl
- match: \)
captures:
0: punctuation.brackets.round.wgsl
pop: true
- include: line_comments
- include: block_comments
- include: keywords
- include: attributes
- include: function_calls
- include: constants
- include: types
- include: variables
- include: punctuation
functions:
- match: '\b(fn)\s+([A-Za-z0-9_]+)((\()|(<))'
comment: function definition
captures:
1: keyword.other.fn.wgsl
2: entity.name.function.wgsl
4: punctuation.brackets.round.wgsl
push:
- meta_scope: meta.function.definition.wgsl
- match: '\{'
captures:
0: punctuation.brackets.curly.wgsl
pop: true
- include: line_comments
- include: block_comments
- include: keywords
- include: attributes
- include: function_calls
- include: constants
- include: types
- include: variables
- include: punctuation
keywords:
- match: \b(bitcast|block|break|case|continue|continuing|default|discard|else|elseif|enable|fallthrough|for|function|if|loop|private|read|read_write|return|storage|switch|uniform|while|workgroup|write)\b
comment: other keywords
scope: keyword.control.wgsl
- match: \b(asm|const|do|enum|handle|mat|premerge|regardless|typedef|unless|using|vec|void)\b
comment: reserved keywords
scope: keyword.control.wgsl
- match: \b(let|var)\b
comment: storage keywords
scope: keyword.other.wgsl storage.type.wgsl
- match: \b(type)\b
comment: type keyword
scope: keyword.declaration.type.wgsl storage.type.wgsl
- match: \b(enum)\b
comment: enum keyword
scope: keyword.declaration.enum.wgsl storage.type.wgsl
- match: \b(struct)\b
comment: struct keyword
scope: keyword.declaration.struct.wgsl storage.type.wgsl
- match: \bfn\b
comment: fn
scope: keyword.other.fn.wgsl
- match: (\^|\||\|\||&&|<<|>>|!)(?!=)
comment: logical operators
scope: keyword.operator.logical.wgsl
- match: '&(?![&=])'
comment: logical AND, borrow references
scope: keyword.operator.borrow.and.wgsl
- match: (\+=|-=|\*=|/=|%=|\^=|&=|\|=|<<=|>>=)
comment: assignment operators
scope: keyword.operator.assignment.wgsl
- match: '(?<![<>])=(?!=|>)'
comment: single equal
scope: keyword.operator.assignment.equal.wgsl
- match: (=(=)?(?!>)|!=|<=|(?<!=)>=)
comment: comparison operators
scope: keyword.operator.comparison.wgsl
- match: '(([+%]|(\*(?!\w)))(?!=))|(-(?!>))|(/(?!/))'
comment: math operators
scope: keyword.operator.math.wgsl
- match: \.(?!\.)
comment: dot access
scope: keyword.operator.access.dot.wgsl
- match: '->'
comment: dashrocket, skinny arrow
scope: keyword.operator.arrow.skinny.wgsl
line_comments:
- match: \s*//.*
comment: single line comment
scope: comment.line.double-slash.wgsl
punctuation:
- match: ','
comment: comma
scope: punctuation.comma.wgsl
- match: '[{}]'
comment: curly braces
scope: punctuation.brackets.curly.wgsl
- match: '[()]'
comment: parentheses, round brackets
scope: punctuation.brackets.round.wgsl
- match: ;
comment: semicolon
scope: punctuation.semi.wgsl
- match: '[\[\]]'
comment: square brackets
scope: punctuation.brackets.square.wgsl
- match: '(?<![=-])[<>]'
comment: angle brackets
scope: punctuation.brackets.angle.wgsl
types:
- match: \b(bool|i32|u32|f32)\b
comment: scalar Types
scope: storage.type.wgsl
- match: \b(i64|u64|f64)\b
comment: reserved scalar Types
scope: storage.type.wgsl
- match: \b(vec2i|vec3i|vec4i|vec2u|vec3u|vec4u|vec2f|vec3f|vec4f|vec2h|vec3h|vec4h)\b
comment: vector type aliasses
scope: storage.type.wgsl
- match: \b(mat2x2f|mat2x3f|mat2x4f|mat3x2f|mat3x3f|mat3x4f|mat4x2f|mat4x3f|mat4x4f|mat2x2h|mat2x3h|mat2x4h|mat3x2h|mat3x3h|mat3x4h|mat4x2h|mat4x3h|mat4x4h)\b
comment: matrix type aliasses
scope: storage.type.wgsl
- match: '\b(vec[2-4]|mat[2-4]x[2-4])\b'
comment: vector/matrix types
scope: storage.type.wgsl
- match: \b(atomic)\b
comment: atomic types
scope: storage.type.wgsl
- match: \b(array)\b
comment: array types
scope: storage.type.wgsl
- match: '\b([A-Z][A-Za-z0-9]*)\b'
comment: Custom type
scope: entity.name.type.wgsl
variables:
- match: '\b(?<!(?<!\.)\.)(?:r#(?!(crate|[Ss]elf|super)))?[a-z0-9_]+\b'
comment: variables
scope: variable.other.wgsl

BIN
assets/themes.bin vendored

Binary file not shown.

1
assets/themes/Catppuccin vendored Submodule

@ -69,7 +69,7 @@
<key>name</key> <key>name</key>
<string>Labels</string> <string>Labels</string>
<key>scope</key> <key>scope</key>
<string>entity.name.label</string> <string>entity.name.label, variable.parameter</string>
<key>settings</key> <key>settings</key>
<dict> <dict>
<key>foreground</key> <key>foreground</key>
@ -80,7 +80,7 @@
<key>name</key> <key>name</key>
<string>Classes</string> <string>Classes</string>
<key>scope</key> <key>scope</key>
<string>support.class, entity.name.class, entity.name.type.class</string> <string>support.class, entity.name.class, entity.name.type.class, entity.name</string>
<key>settings</key> <key>settings</key>
<dict> <dict>
<key>foreground</key> <key>foreground</key>
@ -234,7 +234,7 @@
<key>name</key> <key>name</key>
<string>Headings</string> <string>Headings</string>
<key>scope</key> <key>scope</key>
<string>markup.heading punctuation.definition.heading, entity.name.section</string> <string>markup.heading punctuation.definition.heading, entity.name.section, markup.heading - text.html.markdown</string>
<key>settings</key> <key>settings</key>
<dict> <dict>
<key>fontStyle</key> <key>fontStyle</key>

@ -257,7 +257,7 @@
<key>name</key> <key>name</key>
<string>Tags</string> <string>Tags</string>
<key>scope</key> <key>scope</key>
<string>entity.name.tag</string> <string>entity.name.tag, entity.name</string>
<key>settings</key> <key>settings</key>
<dict> <dict>
<key>foreground</key> <key>foreground</key>
@ -312,7 +312,7 @@
<key>name</key> <key>name</key>
<string>Headings</string> <string>Headings</string>
<key>scope</key> <key>scope</key>
<string>markup.heading punctuation.definition.heading, entity.name.section</string> <string>markup.heading punctuation.definition.heading, entity.name.section, markup.heading - text.html.markdown</string>
<key>settings</key> <key>settings</key>
<dict> <dict>
<key>fontStyle</key> <key>fontStyle</key>

@ -256,7 +256,7 @@
<key>name</key> <key>name</key>
<string>Tags</string> <string>Tags</string>
<key>scope</key> <key>scope</key>
<string>entity.name.tag</string> <string>entity.name.tag, entity.name</string>
<key>settings</key> <key>settings</key>
<dict> <dict>
<key>foreground</key> <key>foreground</key>
@ -311,7 +311,7 @@
<key>name</key> <key>name</key>
<string>Headings</string> <string>Headings</string>
<key>scope</key> <key>scope</key>
<string>markup.heading punctuation.definition.heading, entity.name.section</string> <string>markup.heading punctuation.definition.heading, entity.name.section, markup.heading - text.html.markdown</string>
<key>settings</key> <key>settings</key>
<dict> <dict>
<key>fontStyle</key> <key>fontStyle</key>

106
build.rs

@ -1,106 +0,0 @@
// TODO: Re-enable generation of shell completion files (below) when clap 3 is out.
// For more details, see https://github.com/sharkdp/bat/issues/372
// For bat-as-a-library, no build script is required. The build script is for
// the manpage and completions, which are only relevant to the bat application.
#[cfg(not(feature = "application"))]
fn main() {}
#[cfg(feature = "application")]
fn main() -> Result<(), Box<dyn std::error::Error>> {
use std::collections::HashMap;
use std::error::Error;
use std::fs;
use std::path::Path;
// Read environment variables.
let project_name = option_env!("PROJECT_NAME").unwrap_or("bat");
let executable_name = option_env!("PROJECT_EXECUTABLE").unwrap_or(project_name);
let executable_name_uppercase = executable_name.to_uppercase();
static PROJECT_VERSION: &str = env!("CARGO_PKG_VERSION");
/// Generates a file from a template.
fn template(
variables: &HashMap<&str, &str>,
in_file: &str,
out_file: impl AsRef<Path>,
) -> Result<(), Box<dyn Error>> {
let mut content = fs::read_to_string(in_file)?;
for (variable_name, value) in variables {
// Replace {{variable_name}} by the value
let pattern = format!("{{{{{variable_name}}}}}", variable_name = variable_name);
content = content.replace(&pattern, value);
}
fs::write(out_file, content)?;
Ok(())
}
let mut variables = HashMap::new();
variables.insert("PROJECT_NAME", project_name);
variables.insert("PROJECT_EXECUTABLE", executable_name);
variables.insert("PROJECT_EXECUTABLE_UPPERCASE", &executable_name_uppercase);
variables.insert("PROJECT_VERSION", PROJECT_VERSION);
let out_dir_env = std::env::var_os("OUT_DIR").expect("OUT_DIR to be set in build.rs");
let out_dir = Path::new(&out_dir_env);
fs::create_dir_all(out_dir.join("assets/manual")).unwrap();
fs::create_dir_all(out_dir.join("assets/completions")).unwrap();
template(
&variables,
"assets/manual/bat.1.in",
out_dir.join("assets/manual/bat.1"),
)?;
template(
&variables,
"assets/completions/bat.bash.in",
out_dir.join("assets/completions/bat.bash"),
)?;
template(
&variables,
"assets/completions/bat.fish.in",
out_dir.join("assets/completions/bat.fish"),
)?;
template(
&variables,
"assets/completions/_bat.ps1.in",
out_dir.join("assets/completions/_bat.ps1"),
)?;
template(
&variables,
"assets/completions/bat.zsh.in",
out_dir.join("assets/completions/bat.zsh"),
)?;
Ok(())
}
// #[macro_use]
// extern crate clap;
// use clap::Shell;
// use std::fs;
// include!("src/clap_app.rs");
// const BIN_NAME: &str = "bat";
// fn main() {
// let outdir = std::env::var_os("SHELL_COMPLETIONS_DIR").or(std::env::var_os("OUT_DIR"));
// let outdir = match outdir {
// None => return,
// Some(outdir) => outdir,
// };
// fs::create_dir_all(&outdir).unwrap();
// let mut app = build_app(true);
// app.gen_completions(BIN_NAME, Shell::Bash, &outdir);
// app.gen_completions(BIN_NAME, Shell::Fish, &outdir);
// app.gen_completions(BIN_NAME, Shell::Zsh, &outdir);
// app.gen_completions(BIN_NAME, Shell::PowerShell, &outdir);
// }

84
build/application.rs Normal file

@ -0,0 +1,84 @@
use std::{env, fs, path::PathBuf};
use crate::util::render_template;
/// Generate manpage and shell completions for the bat application.
pub fn gen_man_and_comp() -> anyhow::Result<()> {
println!("cargo:rerun-if-changed=assets/manual/");
println!("cargo:rerun-if-changed=assets/completions/");
println!("cargo:rerun-if-env-changed=PROJECT_NAME");
println!("cargo:rerun-if-env-changed=PROJECT_EXECUTABLE");
println!("cargo:rerun-if-env-changed=CARGO_PKG_VERSION");
println!("cargo:rerun-if-env-changed=BAT_ASSETS_GEN_DIR");
// Read environment variables.
let project_name = env::var("PROJECT_NAME").unwrap_or("bat".into());
let executable_name = env::var("PROJECT_EXECUTABLE").unwrap_or(project_name.clone());
let executable_name_uppercase = executable_name.to_uppercase();
let project_version = env::var("CARGO_PKG_VERSION")?;
let variables = [
("PROJECT_NAME", project_name),
("PROJECT_EXECUTABLE", executable_name),
("PROJECT_EXECUTABLE_UPPERCASE", executable_name_uppercase),
("PROJECT_VERSION", project_version),
]
.into_iter()
.collect();
let Some(out_dir) = env::var_os("BAT_ASSETS_GEN_DIR")
.or_else(|| env::var_os("OUT_DIR"))
.map(PathBuf::from)
else {
anyhow::bail!("BAT_ASSETS_GEN_DIR or OUT_DIR should be set for build.rs");
};
fs::create_dir_all(out_dir.join("assets/manual")).unwrap();
fs::create_dir_all(out_dir.join("assets/completions")).unwrap();
render_template(
&variables,
"assets/manual/bat.1.in",
out_dir.join("assets/manual/bat.1"),
)?;
render_template(
&variables,
"assets/completions/bat.bash.in",
out_dir.join("assets/completions/bat.bash"),
)?;
render_template(
&variables,
"assets/completions/bat.fish.in",
out_dir.join("assets/completions/bat.fish"),
)?;
render_template(
&variables,
"assets/completions/_bat.ps1.in",
out_dir.join("assets/completions/_bat.ps1"),
)?;
render_template(
&variables,
"assets/completions/bat.zsh.in",
out_dir.join("assets/completions/bat.zsh"),
)?;
println!(
"cargo:rustc-env=BAT_GENERATED_COMPLETION_BASH={}",
out_dir.join("assets/completions/bat.bash").display()
);
println!(
"cargo:rustc-env=BAT_GENERATED_COMPLETION_FISH={}",
out_dir.join("assets/completions/bat.fish").display()
);
println!(
"cargo:rustc-env=BAT_GENERATED_COMPLETION_PS1={}",
out_dir.join("assets/completions/_bat.ps1").display()
);
println!(
"cargo:rustc-env=BAT_GENERATED_COMPLETION_ZSH={}",
out_dir.join("assets/completions/bat.zsh").display()
);
Ok(())
}

17
build/main.rs Normal file

@ -0,0 +1,17 @@
#[cfg(feature = "application")]
mod application;
mod syntax_mapping;
mod util;
fn main() -> anyhow::Result<()> {
// only watch manually-designated files
// see: https://doc.rust-lang.org/cargo/reference/build-scripts.html#rerun-if-changed
println!("cargo:rerun-if-changed=build/");
syntax_mapping::build_static_mappings()?;
#[cfg(feature = "application")]
application::gen_man_and_comp()?;
Ok(())
}

300
build/syntax_mapping.rs Normal file

@ -0,0 +1,300 @@
use std::{
convert::Infallible,
env, fs,
path::{Path, PathBuf},
str::FromStr,
};
use anyhow::{anyhow, bail};
use indexmap::IndexMap;
use itertools::Itertools;
use once_cell::sync::Lazy;
use regex::Regex;
use serde_derive::Deserialize;
use serde_with::DeserializeFromStr;
use walkdir::WalkDir;
/// Known mapping targets.
///
/// Corresponds to `syntax_mapping::MappingTarget`.
#[allow(clippy::enum_variant_names)]
#[derive(Clone, Debug, Eq, PartialEq, Hash, DeserializeFromStr)]
pub enum MappingTarget {
MapTo(String),
MapToUnknown,
MapExtensionToUnknown,
}
impl FromStr for MappingTarget {
type Err = Infallible;
fn from_str(s: &str) -> Result<Self, Self::Err> {
match s {
"MappingTarget::MapToUnknown" => Ok(Self::MapToUnknown),
"MappingTarget::MapExtensionToUnknown" => Ok(Self::MapExtensionToUnknown),
syntax => Ok(Self::MapTo(syntax.into())),
}
}
}
impl MappingTarget {
fn codegen(&self) -> String {
match self {
Self::MapTo(syntax) => format!(r###"MappingTarget::MapTo(r#"{syntax}"#)"###),
Self::MapToUnknown => "MappingTarget::MapToUnknown".into(),
Self::MapExtensionToUnknown => "MappingTarget::MapExtensionToUnknown".into(),
}
}
}
#[derive(Clone, Debug, PartialEq, Eq, Hash, DeserializeFromStr)]
/// A single matcher.
///
/// Codegen converts this into a `Lazy<Option<GlobMatcher>>`.
struct Matcher(Vec<MatcherSegment>);
/// Parse a matcher.
///
/// Note that this implementation is rather strict: it will greedily interpret
/// every valid environment variable replacement as such, then immediately
/// hard-error if it finds a '$' anywhere in the remaining text segments.
///
/// The reason for this strictness is I currently cannot think of a valid reason
/// why you would ever need '$' as plaintext in a glob pattern. Therefore any
/// such occurrences are likely human errors.
///
/// If we later discover some edge cases, it's okay to make it more permissive.
///
/// Revision history:
/// - 2024-02-20: allow `{` and `}` (glob brace expansion)
impl FromStr for Matcher {
type Err = anyhow::Error;
fn from_str(s: &str) -> Result<Self, Self::Err> {
use MatcherSegment as Seg;
static VAR_REGEX: Lazy<Regex> = Lazy::new(|| Regex::new(r"\$\{([\w\d_]+)\}").unwrap());
let mut segments = vec![];
let mut text_start = 0;
for capture in VAR_REGEX.captures_iter(s) {
let match_0 = capture.get(0).unwrap();
// text before this var
let text_end = match_0.start();
segments.push(Seg::Text(s[text_start..text_end].into()));
text_start = match_0.end();
// this var
segments.push(Seg::Env(capture.get(1).unwrap().as_str().into()));
}
// possible trailing text
segments.push(Seg::Text(s[text_start..].into()));
// cleanup empty text segments
let non_empty_segments = segments
.into_iter()
.filter(|seg| seg.text().map(|t| !t.is_empty()).unwrap_or(true))
.collect_vec();
// sanity check
if non_empty_segments
.windows(2)
.any(|segs| segs[0].is_text() && segs[1].is_text())
{
unreachable!("Parsed into consecutive text segments: {non_empty_segments:?}");
}
// guard empty case
if non_empty_segments.is_empty() {
bail!(r#"Parsed an empty matcher: "{s}""#);
}
// guard variable syntax leftover fragments
if non_empty_segments
.iter()
.filter_map(Seg::text)
.any(|t| t.contains('$'))
{
bail!(r#"Invalid matcher: "{s}""#);
}
Ok(Self(non_empty_segments))
}
}
impl Matcher {
fn codegen(&self) -> String {
match self.0.len() {
0 => unreachable!("0-length matcher should never be created"),
// if-let guard would be ideal here
// see: https://github.com/rust-lang/rust/issues/51114
1 if self.0[0].is_text() => {
let s = self.0[0].text().unwrap();
format!(r###"Lazy::new(|| Some(build_matcher_fixed(r#"{s}"#)))"###)
}
// parser logic ensures that this case can only happen when there are dynamic segments
_ => {
let segs = self.0.iter().map(MatcherSegment::codegen).join(", ");
format!(r###"Lazy::new(|| build_matcher_dynamic(&[{segs}]))"###)
}
}
}
}
/// A segment in a matcher.
///
/// Corresponds to `syntax_mapping::MatcherSegment`.
#[derive(Debug, Clone, PartialEq, Eq, Hash)]
enum MatcherSegment {
Text(String),
Env(String),
}
#[allow(dead_code)]
impl MatcherSegment {
fn is_text(&self) -> bool {
matches!(self, Self::Text(_))
}
fn is_env(&self) -> bool {
matches!(self, Self::Env(_))
}
fn text(&self) -> Option<&str> {
match self {
Self::Text(t) => Some(t),
Self::Env(_) => None,
}
}
fn env(&self) -> Option<&str> {
match self {
Self::Text(_) => None,
Self::Env(t) => Some(t),
}
}
fn codegen(&self) -> String {
match self {
Self::Text(s) => format!(r###"MatcherSegment::Text(r#"{s}"#)"###),
Self::Env(s) => format!(r###"MatcherSegment::Env(r#"{s}"#)"###),
}
}
}
/// A struct that models a single .toml file in /src/syntax_mapping/builtins/.
#[derive(Clone, Debug, Deserialize)]
struct MappingDefModel {
mappings: IndexMap<MappingTarget, Vec<Matcher>>,
}
impl MappingDefModel {
fn into_mapping_list(self) -> MappingList {
let list = self
.mappings
.into_iter()
.flat_map(|(target, matchers)| {
matchers
.into_iter()
.map(|matcher| (matcher, target.clone()))
.collect::<Vec<_>>()
})
.collect();
MappingList(list)
}
}
#[derive(Clone, Debug)]
struct MappingList(Vec<(Matcher, MappingTarget)>);
impl MappingList {
fn codegen(&self) -> String {
let array_items: Vec<_> = self
.0
.iter()
.map(|(matcher, target)| {
format!("({m}, {t})", m = matcher.codegen(), t = target.codegen())
})
.collect();
let len = array_items.len();
format!(
"/// Generated by build script from /src/syntax_mapping/builtins/.\n\
pub(crate) static BUILTIN_MAPPINGS: [(Lazy<Option<GlobMatcher>>, MappingTarget); {len}] = [\n{items}\n];",
items = array_items.join(",\n")
)
}
}
/// Get the list of paths to all mapping definition files that should be
/// included for the current target platform.
fn get_def_paths() -> anyhow::Result<Vec<PathBuf>> {
let source_subdirs = [
"common",
#[cfg(target_family = "unix")]
"unix-family",
#[cfg(any(
target_os = "freebsd",
target_os = "netbsd",
target_os = "openbsd",
target_os = "macos"
))]
"bsd-family",
#[cfg(target_os = "linux")]
"linux",
#[cfg(target_os = "macos")]
"macos",
#[cfg(target_os = "windows")]
"windows",
];
let mut toml_paths = vec![];
for subdir_name in source_subdirs {
let subdir = Path::new("src/syntax_mapping/builtins").join(subdir_name);
if !subdir.try_exists()? {
// Directory might not exist due to this `cargo vendor` bug:
// https://github.com/rust-lang/cargo/issues/15080
continue;
}
let wd = WalkDir::new(subdir);
let paths = wd
.into_iter()
.filter_map_ok(|entry| {
let path = entry.path();
(path.is_file() && path.extension().map(|ext| ext == "toml").unwrap_or(false))
.then(|| path.to_owned())
})
.collect::<Result<Vec<_>, _>>()?;
toml_paths.extend(paths);
}
toml_paths.sort_by_key(|path| {
path.file_name()
.expect("file name should not terminate in ..")
.to_owned()
});
Ok(toml_paths)
}
fn read_all_mappings() -> anyhow::Result<MappingList> {
let mut all_mappings = vec![];
for path in get_def_paths()? {
let toml_string = fs::read_to_string(path)?;
let mappings = toml::from_str::<MappingDefModel>(&toml_string)?.into_mapping_list();
all_mappings.extend(mappings.0);
}
let duplicates = all_mappings
.iter()
.duplicates_by(|(matcher, _)| matcher)
.collect_vec();
if !duplicates.is_empty() {
bail!("Rules with duplicate matchers found: {duplicates:?}");
}
Ok(MappingList(all_mappings))
}
/// Build the static syntax mappings defined in /src/syntax_mapping/builtins/
/// into a .rs source file, which is to be inserted with `include!`.
pub fn build_static_mappings() -> anyhow::Result<()> {
println!("cargo:rerun-if-changed=src/syntax_mapping/builtins/");
let mappings = read_all_mappings()?;
let codegen_path = Path::new(&env::var_os("OUT_DIR").ok_or(anyhow!("OUT_DIR is unset"))?)
.join("codegen_static_syntax_mappings.rs");
fs::write(codegen_path, mappings.codegen())?;
Ok(())
}

21
build/util.rs Normal file

@ -0,0 +1,21 @@
#![allow(dead_code)]
use std::{collections::HashMap, fs, path::Path};
/// Generates a file from a template.
pub fn render_template(
variables: &HashMap<&str, String>,
in_file: &str,
out_file: impl AsRef<Path>,
) -> anyhow::Result<()> {
let mut content = fs::read_to_string(in_file)?;
for (variable_name, value) in variables {
// Replace {{variable_name}} by the value
let pattern = format!("{{{{{variable_name}}}}}");
content = content.replace(&pattern, value);
}
fs::write(out_file, content)?;
Ok(())
}

@ -181,7 +181,7 @@ man 2 select
## インストール ## インストール
[![Packaging status](https://repology.org/badge/vertical-allrepos/bat-cat.svg)](https://repology.org/project/bat-cat/versions) [![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 (`apt` を使用) ### On Ubuntu (`apt` を使用)
*... や他のDebianベースのLinuxディストリビューション* *... や他のDebianベースのLinuxディストリビューション*
@ -219,7 +219,7 @@ apk add bat
### On Arch Linux ### On Arch Linux
[Arch Linuxの公式リソース](https://www.archlinux.org/packages/community/x86_64/bat/) [Arch Linuxの公式リソース](https://www.archlinux.org/packages/extra/x86_64/bat/)
からインストールできます。 からインストールできます。
```bash ```bash
@ -366,7 +366,7 @@ ansible-galaxy install aeimer.install_bat
### From source ### From source
`bat` をソースからビルドしたいならば、Rust 1.64.0 以上の環境が必要です。 `bat` をソースからビルドしたいならば、Rust 1.74.0 以上の環境が必要です。
`cargo` を使用してビルドすることができます: `cargo` を使用してビルドすることができます:
```bash ```bash

@ -214,7 +214,7 @@ man 2 select
## 설치 ## 설치
[![Packaging status](https://repology.org/badge/vertical-allrepos/bat-cat.svg)](https://repology.org/project/bat-cat/versions) [![Packaging status](https://repology.org/badge/vertical-allrepos/bat-cat.svg?columns=3&exclude_unsupported=1)](https://repology.org/project/bat-cat/versions)
### Ubuntu에서 (`apt` 사용) ### Ubuntu에서 (`apt` 사용)
*... 그리고 다른 Debian 기반의 Linux 배포판들에서.* *... 그리고 다른 Debian 기반의 Linux 배포판들에서.*
@ -264,7 +264,7 @@ apk add bat
### Arch Linux에서 ### Arch Linux에서
공식 소스를 통해 공식 소스를 통해
[`bat` 패키지](https://www.archlinux.org/packages/community/x86_64/bat/)를 [`bat` 패키지](https://www.archlinux.org/packages/extra/x86_64/bat/)를
설치할 수 있습니다: 설치할 수 있습니다:
```bash ```bash
@ -416,7 +416,7 @@ scoop install bat
### 소스에서 ### 소스에서
`bat`의 소스를 빌드하기 위해서는, Rust 1.64.0 이상이 필요합니다. `bat`의 소스를 빌드하기 위해서는, Rust 1.74.0 이상이 필요합니다.
`cargo`를 이용해 전부 빌드할 수 있습니다: `cargo`를 이용해 전부 빌드할 수 있습니다:
```bash ```bash
@ -461,11 +461,11 @@ bat --list-themes | fzf --preview="bat --theme={} --color=always /path/to/file"
- `ansi`는 어떤 터미널에서도 무난하게 보입니다. 이는 3비트 색상을 사용합니다: - `ansi`는 어떤 터미널에서도 무난하게 보입니다. 이는 3비트 색상을 사용합니다:
검정, 빨강, 녹색, 노랑, 파랑, 마젠타, 시안, 하양. 검정, 빨강, 녹색, 노랑, 파랑, 마젠타, 시안, 하양.
- `base16`은 [base16](https://github.com/chriskempson/base16) 터미널 테마를 위해 - `base16`은 [base16](https://github.com/tinted-theming/home) 터미널 테마를 위해
디자인되었습니다. 디자인되었습니다.
이는 [base16 스타일 가이드라인](https://github.com/chriskempson/base16/blob/master/styling.md)에 이는 [base16 스타일 가이드라인](https://github.com/tinted-theming/home/blob/main/styling.md)에
따라 4비트 색상(3비트 색상에 밝은 변형 추가)을 사용합니다. 따라 4비트 색상(3비트 색상에 밝은 변형 추가)을 사용합니다.
- `base16-256`는 [base16-shell](https://github.com/chriskempson/base16-shell)을 - `base16-256`는 [base16-shell](https://github.com/tinted-theming/base16-shell)을
위해 디자인되었습니다. 위해 디자인되었습니다.
이는 16부터 21의 일부 밝은 색상을 8비트 색상으로 대치합니다. 이는 16부터 21의 일부 밝은 색상을 8비트 색상으로 대치합니다.
단지 256-색상 터미널을 쓰지만 base16-shell을 쓰지 않는다고 해서 이것을 단지 256-색상 터미널을 쓰지만 base16-shell을 쓰지 않는다고 해서 이것을

@ -3,27 +3,27 @@
<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> <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"> <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 href="https://crates.io/crates/bat"><img src="https://img.shields.io/crates/v/bat.svg?colorB=319e8c" alt="Version info"></a><br>
Клон утилиты <i>cat(1)</i> с поддержкой выделения синтаксиса и Git Клон утилиты <i>cat(1)</i> с поддержкой подсветки синтаксиса и Git
</p> </p>
<p align="center"> <p align="center">
<a href="#выделение-синтаксиса">Ключевые возможности</a> <a href="#подсветка-синтаксиса">Ключевые возможности</a>
<a href="#как-использовать">Использование</a> <a href="#как-использовать">Использование</a>
<a href="#установка">Установка</a> <a href="#установка">Установка</a>
<a href="#кастомизация">Кастомизация</a> <a href="#кастомизация">Кастомизация</a>
<a href="#цели-и-альтернативы">Цели и альтернативы </a><br> <a href="#цели-и-альтернативы">Цели и альтернативы </a><br>
[<a href="../README.md">English] [<a href="../README.md">English</a>]
[<a href="README-zh.md">中文</a>] [<a href="README-zh.md">中文</a>]
[<a href="README-ja.md">日本語</a>] [<a href="README-ja.md">日本語</a>]
[<a href="README-ko.md">한국어</a>] [<a href="README-ko.md">한국어</a>]
[Русский] [Русский]
</p> </p>
### Выделение синтаксиса ### Подсветка синтаксиса
`bat` поддерживает выделение синтаксиса для огромного количества языков программирования и разметки: `bat` поддерживает подсветку синтаксиса для огромного количества языков программирования и разметки:
![Пример выделения синтаксиса](https://i.imgur.com/3FGy5tW.png) ![Пример подсветки синтаксиса](https://i.imgur.com/3FGy5tW.png)
### Интеграция с Git ### Интеграция с Git
`bat` использует `git`, чтобы показать изменения в коде `bat` использует `git`, чтобы показать изменения в коде
@ -31,15 +31,17 @@
![Пример интеграции с Git](https://i.imgur.com/azUAzdx.png) ![Пример интеграции с Git](https://i.imgur.com/azUAzdx.png)
### Показать непечатаемые символы ### Показ непечатных символов
Вы можете использовать `-A` / `--show-all` флаг, чтобы показать символы, которые невозможно напечатать: Вы можете использовать флаг `-A` / `--show-all`, чтобы показать непечатные символы:
![Строка с неотображемыми символами](https://i.imgur.com/X0orYY9.png) ![Строка с неотображемыми символами](https://i.imgur.com/X0orYY9.png)
### Автоматическое разделение текста ### Автоматический пейджинг терминала
`bat` умеет перенаправлять вывод в `less`, если вывод не помещается на экране полностью. `bat` умеет перенаправлять вывод в пейджер терминала (например, в `less`), если вывод не помещается на экране полностью.
Если вы хотите, чтобы `bat` работал как `cat` всё время, вы можете установить опцию `--paging=never` в командной строке или в конфигурационном файле.
Если вы намерены использовать `bat` в качестве алиаса для `cat`, вы можете установить `alias cat='bat --paging=never'`, чтобы сохранить изначальное поведение.
### Объединение файлов ### Объединение файлов
@ -86,11 +88,23 @@ bat header.md content.md footer.md > document.md
bat -n main.rs # показываем только количество строк bat -n main.rs # показываем только количество строк
bat f - g # выводит 'f' в stdin, а потом 'g'. bat f - g # выводит 'f', потом stdin, а потом 'g'.
``` ```
### Интеграция с другими утилитами ### Интеграция с другими утилитами
#### `fzf`
Вы можете использовать `bat` как просмотрщик для [`fzf`](https://github.com/junegunn/fzf).
Чтобы это заработало, используйте опцию `--color=always`, чтобы вывод был всегда цветным.
Вы можете также использовать опцию `--line-range`, чтобы уменьшить время загрузки для больших файлов:
```bash
fzf --preview "bat --color=always --style=numbers --line-range=:500 {}"
```
Больше деталей смотрите в [`README` программы `fzf`](https://github.com/junegunn/fzf#preview-window).
#### `find` или `fd` #### `find` или `fd`
Вы можете использовать флаг `-exec` в `find`, чтобы посмотреть превью всех файлов в `bat` Вы можете использовать флаг `-exec` в `find`, чтобы посмотреть превью всех файлов в `bat`
@ -121,31 +135,42 @@ tail -f /var/log/pacman.log | bat --paging=never -l log
#### `git` #### `git`
Вы можете использовать `bat` с `git show`, чтобы просмотреть старую версию файла с выделением синтаксиса: Вы можете использовать `bat` с `git show`, чтобы просмотреть старую версию файла с подсветкой синтаксиса:
```bash ```bash
git show v0.6.0:src/main.rs | bat -l rs git show v0.6.0:src/main.rs | bat -l rs
``` ```
Обратите внимание, что выделение синтаксиса не работает в `git diff` на данный момент. Если вам это нужно, посмотрите [`delta`](https://github.com/dandavison/delta). #### `git diff`
Вы можете использовать `bat` с `git diff` для просмотра строк кода вокруг изменений с подсветкой синтаксиса:
```bash
batdiff() {
git diff --name-only --relative --diff-filter=d | xargs bat --diff
}
```
Если вы хотите использовать это как отдельную программу, посмотрите `batdiff` из [`bat-extras`](https://github.com/eth-p/bat-extras).
Если вам это нужна более полная поддержка для операций с git и diff, посмотрите [`delta`](https://github.com/dandavison/delta).
#### `xclip` #### `xclip`
Нумерация стро и отображение изменений затрудняет копирование содержимого файлов в буфер обмена. Нумерация строк и отображение изменений затрудняет копирование содержимого файлов в буфер обмена.
Чтобы спроваиться с этим, используйте флаг `-p`/`--plain` или просто перенаправьте стандартный вывод в `xclip`: Чтобы справиться с этим, используйте флаг `-p`/`--plain` или просто перенаправьте стандартный вывод в `xclip`:
```bash ```bash
bat main.cpp | xclip bat main.cpp | xclip
``` ```
`bat` обнаружит перенаправление вывода и выведет обычный текст без выделения синтаксиса. `bat` обнаружит перенаправление вывода и выведет обычный текст без подсветки синтаксиса.
#### `man` #### `man`
`bat` может быть использован в виде выделения цвета для `man`, для этого установите переменную окружения `bat` может быть использован для раскрашивания вывода `man`, для этого установите переменную окружения
`MANPAGER`: `MANPAGER`:
```bash ```bash
export MANPAGER="sh -c 'col -bx | bat -l man -p'" export MANPAGER="sh -c 'col -bx | bat -l man -p'"
man 2 select man 2 select
``` ```
(замените `bat` на `batcat`, если у вас Debian или Ubuntu)
Возможно вам понадобится также установить `MANROFFOPT="-c"`, если у вас есть проблемы с форматированием. Возможно вам понадобится также установить `MANROFFOPT="-c"`, если у вас есть проблемы с форматированием.
@ -153,20 +178,49 @@ man 2 select
Обратите внимание, что [синтаксис manpage](assets/syntaxes/02_Extra/Manpage.sublime-syntax) разрабатывается в этом репозитории и все еще находится в разработке. Обратите внимание, что [синтаксис manpage](assets/syntaxes/02_Extra/Manpage.sublime-syntax) разрабатывается в этом репозитории и все еще находится в разработке.
Также заметьте, что это [не заработает](https://github.com/sharkdp/bat/issues/1145) с реализацией `man` через Mandocs.
#### `prettier` / `shfmt` / `rustfmt` #### `prettier` / `shfmt` / `rustfmt`
[`Prettybat`](https://github.com/eth-p/bat-extras/blob/master/doc/prettybat.md) — скрипт, который форматирует код и выводит его с помощью `bat`. [`Prettybat`](https://github.com/eth-p/bat-extras/blob/master/doc/prettybat.md) — скрипт, который форматирует код и выводит его с помощью `bat`.
#### Подсветка сообщений `--help`
Вы можете использовать `bat`, чтобы подсвечивать текст справки комманд: `$ cp --help | bat -plhelp`
Вы можете сделать такую вспомогательную команду для этого:
```bash
# in your .bashrc/.zshrc/*rc
alias bathelp='bat --plain --language=help'
help() {
"$@" --help 2>&1 | bathelp
}
```
В этом случае, вы можете просто писать `$ help cp` или `$ help git commit`.
Если вы используете `zsh`, вы можете объявить глобальные алиасы для `-h` и `--help`:
```bash
alias -g -- -h='-h 2>&1 | bat --language=help --style=plain'
alias -g -- --help='--help 2>&1 | bat --language=help --style=plain'
```
В этом случае, вы можете продолжать использовать `cp --help`, но при этом получать подцвеченный вывод.
Обратите внимание, что не всегда опция `-h` является краткой формы опции `--help` (например, у `ls`).
Пожалуйста, сообщайте о проблемах с подсветкой справки в [этот репозиторий](https://github.com/victor-gp/cmd-help-sublime-syntax).
## Установка ## Установка
[![Packaging status](https://repology.org/badge/vertical-allrepos/bat-cat.svg)](https://repology.org/project/bat-cat/versions) [![Packaging status](https://repology.org/badge/vertical-allrepos/bat-cat.svg?columns=3&exclude_unsupported=1)](https://repology.org/project/bat-cat/versions)
### Ubuntu (с помощью `apt`) ### Ubuntu (с помощью `apt`)
*... и другие дистрибутивы основанные на Debian.* *... и другие дистрибутивы основанные на Debian.*
`bat` есть в репозиториях [Ubuntu](https://packages.ubuntu.com/eoan/bat) и `bat` доступен на [Ubuntu since 20.04 ("Focal")](https://packages.ubuntu.com/search?keywords=bat&exact=1) и [Debian since August 2021 (Debian 11 - "Bullseye")](https://packages.debian.org/bullseye/bat).
[Debian](https://packages.debian.org/sid/bat) и доступен начиная с Ubuntu Eoan 19.10. На Debian `bat` пока что доступен только с нестабильной веткой "Sid".
Если ваша версия Ubuntu/Debian достаточно новая, вы можете установить `bat` так: Если ваша версия Ubuntu/Debian достаточно новая, вы можете установить `bat` так:
@ -201,7 +255,7 @@ apk add bat
### Arch Linux ### Arch Linux
Вы можете установить [`bat`](https://www.archlinux.org/packages/community/x86_64/bat/) из официального источника: Вы можете установить [`bat`](https://www.archlinux.org/packages/extra/x86_64/bat/) из официального источника:
```bash ```bash
pacman -S bat pacman -S bat
@ -245,6 +299,14 @@ cd /usr/ports/textproc/bat
make install make install
``` ```
### On OpenBSD
Вы можете установить `bat` с помощью [`pkg_add(1)`](https://man.openbsd.org/pkg_add.1):
```bash
pkg_add bat
```
### С помощью nix ### С помощью nix
Вы можете установить `bat`, используя [nix package manager](https://nixos.org/nix): Вы можете установить `bat`, используя [nix package manager](https://nixos.org/nix):
@ -253,6 +315,14 @@ make install
nix-env -i bat nix-env -i bat
``` ```
### Через flox
Вы можете установить `bat` используя [Flox](https://flox.dev)
```bash
flox install bat
```
### openSUSE ### openSUSE
Вы можете установить `bat` с помощью `zypper`: Вы можете установить `bat` с помощью `zypper`:
@ -261,7 +331,7 @@ nix-env -i bat
zypper install bat zypper install bat
``` ```
### macOS ### На macOS (или Linux) через Homebrew
Вы можете установить `bat` с помощью [Homebrew](http://braumeister.org/formula/bat): Вы можете установить `bat` с помощью [Homebrew](http://braumeister.org/formula/bat):
@ -269,6 +339,8 @@ zypper install bat
brew install bat brew install bat
``` ```
### На macOS через MacPorts
Или же установить его с помощью [MacPorts](https://ports.macports.org/port/bat/summary): Или же установить его с помощью [MacPorts](https://ports.macports.org/port/bat/summary):
```bash ```bash
@ -277,7 +349,19 @@ port install bat
### Windows ### Windows
Есть несколько способов установить `bat`. Как только вы установили его, посмотрите на секцию ["Использование `bat` в Windows"](#using-bat-on-windows). Есть несколько способов установить `bat`. Как только вы установили его, посмотрите на секцию ["Использование `bat` в Windows"](#использование-bat-в-windows).
#### Пререквитизы
Вам нужно установить пакет [Visual C++ Redistributable](https://support.microsoft.com/en-us/help/2977003/the-latest-supported-visual-c-downloads).
#### С помощью WinGet
Вы можете установить `bat` через [WinGet](https://learn.microsoft.com/en-us/windows/package-manager/winget):
```bash
winget install sharkdp.bat
```
#### С помощью Chocolatey #### С помощью Chocolatey
@ -293,50 +377,10 @@ choco install bat
scoop install bat scoop install bat
``` ```
Для этого у вас должен быть установлен [Visual C++ Redistributable](https://support.microsoft.com/en-us/help/2977003/the-latest-supported-visual-c-downloads).
#### Из заранее скомпилированных файлов: #### Из заранее скомпилированных файлов:
Их вы можете скачать на [странице релизов](https://github.com/sharkdp/bat/releases). Их вы можете скачать на [странице релизов](https://github.com/sharkdp/bat/releases).
Для этого у вас должен быть установлен [Visual C++ Redistributable](https://support.microsoft.com/en-us/help/2977003/the-latest-supported-visual-c-downloads).
### С помощью Docker
Вы можете использовать [Docker image](https://hub.docker.com/r/danlynn/bat/), чтобы запустить `bat` в контейнере:
```bash
docker pull danlynn/bat
alias bat='docker run -it --rm -e BAT_THEME -e BAT_STYLE -e BAT_TABS -v "$(pwd):/myapp" danlynn/bat'
```
### С помощью Ansible
Вы можете установить `bat` с [Ansible](https://www.ansible.com/):
```bash
# Устанавливаем роль на устройстве
ansible-galaxy install aeimer.install_bat
```
```yaml
---
# Playbook для установки bat
- host: all
roles:
- aeimer.install_bat
```
- [Ansible Galaxy](https://galaxy.ansible.com/aeimer/install_bat)
- [GitHub](https://github.com/aeimer/ansible-install-bat)
Этот способ должен сработать со следующими дистрибутивами:
- Debian/Ubuntu
- ARM (например Raspberry PI)
- Arch Linux
- Void Linux
- FreeBSD
- macOS
### Из скомпилированных файлов ### Из скомпилированных файлов
Перейдите на [страницу релизов](https://github.com/sharkdp/bat/releases) для Перейдите на [страницу релизов](https://github.com/sharkdp/bat/releases) для
@ -344,15 +388,24 @@ ansible-galaxy install aeimer.install_bat
### Из исходников ### Из исходников
Если вы желаете установить `bat` из исходников, вам понадобится Rust 1.64.0 или выше. После этого используйте `cargo`, чтобы все скомпилировать: Если вы желаете установить `bat` из исходников, вам понадобится Rust 1.74.0 или выше. После этого используйте `cargo`, чтобы всё скомпилировать:
```bash ```bash
cargo install --locked bat cargo install --locked bat
``` ```
Заметьте, что дополнительные файлы, такие как документация man и подсказки командной строки, не могут быть установлены таким способом.
Они будут сгенерированы командой `cargo` должны быть доступны в папке сборки (в `build`).
Подсказки командной строки также доступны при таком запуске:
```bash
bat --completion <shell>
# see --help for supported shells
```
## Кастомизация ## Кастомизация
### Темы для выделения текста ### Темы для подсветки синтаксиса
Используйте `bat --list-themes`, чтобы вывести список всех доступных тем. Для выбора темы `TwoDark` используйте `bat` с флагом Используйте `bat --list-themes`, чтобы вывести список всех доступных тем. Для выбора темы `TwoDark` используйте `bat` с флагом
`--theme=TwoDark` или выставьте переменную окружения `BAT_THEME` в `TwoDark`. Используйте `export BAT_THEME="TwoDark"` в конфигурационном файле вашей оболочки, чтобы изменить ее навсегда. Или же используйте [конфигурационный файл](https://github.com/sharkdp/bat#configuration-file) `bat`. `--theme=TwoDark` или выставьте переменную окружения `BAT_THEME` в `TwoDark`. Используйте `export BAT_THEME="TwoDark"` в конфигурационном файле вашей оболочки, чтобы изменить ее навсегда. Или же используйте [конфигурационный файл](https://github.com/sharkdp/bat#configuration-file) `bat`.
@ -372,7 +425,7 @@ bat --list-themes | fzf --preview="bat --theme={} --color=always /путь/к/ф
### Добавление новых синтаксисов ### Добавление новых синтаксисов
`bat` использует [`syntect`](https://github.com/trishume/syntect/) для выделения синтаксиса. `syntect` может читать `bat` использует [`syntect`](https://github.com/trishume/syntect/) для подсветки синтаксиса. `syntect` может читать
[файл `.sublime-syntax`](https://www.sublimetext.com/docs/3/syntax.html) [файл `.sublime-syntax`](https://www.sublimetext.com/docs/3/syntax.html)
и темы. Чтобы добавить новый синтаксис, сделайте следующее: и темы. Чтобы добавить новый синтаксис, сделайте следующее:
@ -403,7 +456,7 @@ bat cache --clear
### Добавление новых тем ### Добавление новых тем
Это работает похожим образом, так же как и добавление новых тем выделения синтаксиса Это работает похожим образом, так же как и добавление новых тем подсветки синтаксиса
Во-первых, создайте каталог с новыми темами для синтаксиса: Во-первых, создайте каталог с новыми темами для синтаксиса:
```bash ```bash
@ -487,7 +540,7 @@ bat --generate-config-file
# Использовать синтаксис C++ для всех Arduino .ino файлов # Использовать синтаксис C++ для всех Arduino .ino файлов
--map-syntax "*.ino:C++" --map-syntax "*.ino:C++"
# Использовать синтаксик Git Ignore для всех файлов .ignore # Использовать синтаксис Git Ignore для всех файлов .ignore
--map-syntax ".ignore:Git Ignore" --map-syntax ".ignore:Git Ignore"
``` ```
@ -535,7 +588,7 @@ bat() {
`bat` поддерживает терминалы *с* и *без* поддержки truecolor. Однако подсветка синтаксиса не оптимизирована для терминалов с 8-битными цветами, и рекомендуется использовать терминалы с поддержкой 24-битных цветов (`terminator`, `konsole`, `iTerm2`, ...). `bat` поддерживает терминалы *с* и *без* поддержки truecolor. Однако подсветка синтаксиса не оптимизирована для терминалов с 8-битными цветами, и рекомендуется использовать терминалы с поддержкой 24-битных цветов (`terminator`, `konsole`, `iTerm2`, ...).
Смотрите [эту статью](https://gist.github.com/XVilka/8346728) для полного списка терминалов. Смотрите [эту статью](https://gist.github.com/XVilka/8346728) для полного списка терминалов.
Удостовертесь, что переменная `COLORTERM` равна `truecolor` или Удостоверьтесь, что переменная `COLORTERM` равна `truecolor` или
`24bit`. Иначе `bat` не сможет определить поддержку 24-битных цветов (и будет использовать 8-битные). `24bit`. Иначе `bat` не сможет определить поддержку 24-битных цветов (и будет использовать 8-битные).
### Текст и номера строк плохо видны ### Текст и номера строк плохо видны
@ -550,7 +603,7 @@ bat() {
``` bash ``` bash
iconv -f ISO-8859-1 -t UTF-8 my-file.php | bat iconv -f ISO-8859-1 -t UTF-8 my-file.php | bat
``` ```
Внимание: вам может понадобится флаг `-l`/`--language`, если `bat` не сможет автоматически определить синтаксис. Внимание: вам может понадобиться флаг `-l`/`--language`, если `bat` не сможет автоматически определить синтаксис.
## Разработка ## Разработка
@ -568,7 +621,7 @@ cargo test
# Установка (релизная версия) # Установка (релизная версия)
cargo install --locked cargo install --locked
# Компилирование исполняего файла bat с другим синтаксисом и темами # Компилирование исполняемого файла bat с другим синтаксисом и темами
bash assets/create.sh bash assets/create.sh
cargo install --locked --force cargo install --locked --force
``` ```
@ -590,8 +643,8 @@ cargo install --locked --force
Есть очень много альтернатив `bat`. Смотрите [этот документ](doc/alternatives.md) для сравнения. Есть очень много альтернатив `bat`. Смотрите [этот документ](doc/alternatives.md) для сравнения.
## Лицензия ## Лицензия
Copyright (c) 2018-2021 [Разработчики bat](https://github.com/sharkdp/bat). Copyright (c) 2018-2024 [Разработчики bat](https://github.com/sharkdp/bat).
`bat` распостраняется под лицензями MIT License и Apache License 2.0 (на выбор пользователя). `bat` распространяется под лицензиями MIT License и Apache License 2.0 (на выбор пользователя).
Смотрите [LICENSE-APACHE](LICENSE-APACHE) и [LICENSE-MIT](LICENSE-MIT) для более подробного ознакомления. Смотрите [LICENSE-APACHE](LICENSE-APACHE) и [LICENSE-MIT](LICENSE-MIT) для более подробного ознакомления.

@ -191,7 +191,7 @@ man 2 select
## 安装 ## 安装
[![Packaging status](https://repology.org/badge/vertical-allrepos/bat-cat.svg)](https://repology.org/project/bat-cat/versions) [![Packaging status](https://repology.org/badge/vertical-allrepos/bat-cat.svg?columns=3&exclude_unsupported=1)](https://repology.org/project/bat-cat/versions)
### Ubuntu (使用 `apt`) ### Ubuntu (使用 `apt`)
@ -232,7 +232,7 @@ apk add bat
### Arch Linux ### Arch Linux
你可以用下面下列命令从官方源中安装[`bat`包](https://www.archlinux.org/packages/community/x86_64/bat/) 你可以用下面下列命令从官方源中安装[`bat`包](https://www.archlinux.org/packages/extra/x86_64/bat/)
```bash ```bash
pacman -S bat pacman -S bat
@ -372,7 +372,7 @@ scoop install bat
### 从源码编译 ### 从源码编译
如果你想要自己构建`bat`那么你需要安装有高于1.64.0版本的 Rust。 如果你想要自己构建`bat`那么你需要安装有高于1.74.0版本的 Rust。
使用以下命令编译。 使用以下命令编译。
@ -401,8 +401,8 @@ bat --list-themes | fzf --preview="bat --theme={} --color=always /path/to/file"
`bat` 自带三个 [8-bit 色彩](https://en.wikipedia.org/wiki/ANSI_escape_code#Colors) 主题: `bat` 自带三个 [8-bit 色彩](https://en.wikipedia.org/wiki/ANSI_escape_code#Colors) 主题:
- `ansi` 适应于大部分终端。它使用 3-bit 色彩:黑红绿黄蓝洋红靛青白。 - `ansi` 适应于大部分终端。它使用 3-bit 色彩:黑红绿黄蓝洋红靛青白。
- `base16`专为 [base16](https://github.com/chriskempson/base16) 终端设计。它使用 4-bit 色彩(带有亮度的 3-bit 色彩)。根据 [base16 styling guidelines](https://github.com/chriskempson/base16/blob/master/styling.md) 制作。 - `base16`专为 [base16](https://github.com/tinted-theming/home) 终端设计。它使用 4-bit 色彩(带有亮度的 3-bit 色彩)。根据 [base16 styling guidelines](https://github.com/tinted-theming/home/blob/main/styling.md) 制作。
- `base16-25`专为 [base16-shell](https://github.com/chriskempson/base16-shell) 设计。它把部分亮色替换为 8-bit 色彩。请不要直接使用该主题除非你清楚你的256色终端是否使用 base16-shell。 - `base16-25`专为 [base16-shell](https://github.com/tinted-theming/base16-shell) 设计。它把部分亮色替换为 8-bit 色彩。请不要直接使用该主题除非你清楚你的256色终端是否使用 base16-shell。
尽管这些主题具有诸多限制,但具有一些 truecolor 主题不具有的三个优点: 尽管这些主题具有诸多限制,但具有一些 truecolor 主题不具有的三个优点:
@ -412,7 +412,7 @@ bat --list-themes | fzf --preview="bat --theme={} --color=always /path/to/file"
### 输出样式 ### 输出样式
你可以用`--style`参数来控制`bat`输出的样式。使用`--style=numbers,chanegs`可以只开启 Git 修改和行号显示而不添加其他内容。`BAT_STYLE`环境变量具有相同功能。 你可以用`--style`参数来控制`bat`输出的样式。使用`--style=numbers,changes`可以只开启 Git 修改和行号显示而不添加其他内容。`BAT_STYLE`环境变量具有相同功能。
### 添加新的语言和语法 ### 添加新的语言和语法
@ -616,63 +616,59 @@ iconv -f ISO-8859-1 -t UTF-8 my-file.php | bat
注意: 当`bat`无法识别语言时你可能会需要`-l`/`--language`参数。 注意: 当`bat`无法识别语言时你可能会需要`-l`/`--language`参数。
## Development ## 开发
```bash ```bash
# Recursive clone to retrieve all submodules # 递归 clone 以获取所有子模块
git clone --recursive https://github.com/sharkdp/bat git clone --recursive https://github.com/sharkdp/bat
# Build (debug version) # 构建(调试版本)
cd bat cd bat
cargo build --bins cargo build --bins
# Run unit tests and integration tests # 运行单元测试和集成测试
cargo test cargo test
# Install (release version) # 安装(发布版本)
cargo install --path . --locked cargo install --path . --locked
# Build a bat binary with modified syntaxes and themes # 使用修改后的语法和主题构建一个 bat 二进制文件
bash assets/create.sh bash assets/create.sh
cargo install --path . --locked --force cargo install --path . --locked --force
``` ```
If you want to build an application that uses `bat`s pretty-printing 如果你想构建一个使用 `bat` 美化打印功能的应用程序,请查看 [API 文档](https://docs.rs/bat/)。请注意,当你依赖 `bat` 作为库时,必须使用 `regex-onig` 或 `regex-fancy` 作为特性。
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. 请查看 [`CONTRIBUTING.md`](CONTRIBUTING.md) 指南。
## Maintainers ## 维护者
- [sharkdp](https://github.com/sharkdp) - [sharkdp](https://github.com/sharkdp)
- [eth-p](https://github.com/eth-p) - [eth-p](https://github.com/eth-p)
- [keith-hall](https://github.com/keith-hall) - [keith-hall](https://github.com/keith-hall)
- [Enselic](https://github.com/Enselic) - [Enselic](https://github.com/Enselic)
## Security vulnerabilities ## 安全漏洞
Please contact [David Peter](https://david-peter.de/) via email if you want to report a vulnerability in `bat`. 如果你想报告 `bat` 中的漏洞,请通过邮件联系 [David Peter](https://david-peter.de/)
## Project goals and alternatives ## 项目目标和替代方案
`bat` tries to achieve the following goals: `bat` 试图实现以下目标:
- Provide beautiful, advanced syntax highlighting - 提供美观的高级语法高亮
- Integrate with Git to show file modifications - 与 Git 集成以显示文件修改
- Be a drop-in replacement for (POSIX) `cat` - 成为 (POSIX) `cat` 的替代品
- Offer a user-friendly command-line interface - 提供用户友好的命令行界面
There are a lot of alternatives, if you are looking for similar programs. See 如果你在寻找类似的程序,有很多替代方案。请参阅[本文档](doc/alternatives.md)进行比较。
[this document](doc/alternatives.md) for a comparison.
## License ## 许可证
Copyright (c) 2018-2021 [bat-developers](https://github.com/sharkdp/bat). 版权所有 (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. `bat` 可根据 MIT 许可证或 Apache 许可证 2.0 的条款使用,任选其一。
See the [LICENSE-APACHE](LICENSE-APACHE) and [LICENSE-MIT](LICENSE-MIT) files for license details. 有关许可证的详细信息,请参阅 [LICENSE-APACHE](LICENSE-APACHE) [LICENSE-MIT](LICENSE-MIT) 文件。

@ -16,6 +16,9 @@ in the `.sublime-syntax` format.
2. If the Sublime Text syntax is only available as a `.tmLanguage` file, open the file in 2. If the Sublime Text syntax is only available as a `.tmLanguage` file, open the file in
Sublime Text and convert it to a `.sublime-syntax` file via *Tools* -> *Developer* -> Sublime Text and convert it to a `.sublime-syntax` file via *Tools* -> *Developer* ->
*New Syntax from XXX.tmLanguage...*. Save the new file in the `assets/syntaxes` folder. *New Syntax from XXX.tmLanguage...*. Save the new file in the `assets/syntaxes` folder.
If only `.tmLanguage.json` or `.tmLanguage.yml` file is available, use
[PackageDev](https://packagecontrol.io/packages/PackageDev) to convert it to `.tmLanguage.plist`
format and then rename the converted file to `.tmLanguage` file.
3. Run the `assets/create.sh` script. It calls `bat cache --build` to parse all available 3. Run the `assets/create.sh` script. It calls `bat cache --build` to parse all available
`.sublime-syntax` files and serialize them to a `syntaxes.bin` file. `.sublime-syntax` files and serialize them to a `syntaxes.bin` file.
@ -23,7 +26,7 @@ in the `.sublime-syntax` format.
4. Re-compile `bat`. At compilation time, the `syntaxes.bin` file will be stored inside the 4. Re-compile `bat`. At compilation time, the `syntaxes.bin` file will be stored inside the
`bat` binary. `bat` binary.
5. Use `bat --list-languages` to check if the new languages are available. 5. Use `bat --list-languages` to check if the new languages are available. You may want to do something like `export PATH="`pwd`/target/debug:$PATH"` to ensure the locally compiled version is the one being used.
6. Add a syntax test for the new language. See [below](#Syntax-tests) for details. 6. Add a syntax test for the new language. See [below](#Syntax-tests) for details.
@ -84,6 +87,7 @@ The following files have been manually modified after converting from a `.tmLang
* `Org mode.sublime-syntax` => removed `task` file type. * `Org mode.sublime-syntax` => removed `task` file type.
* `Robot.sublime_syntax` => changed name to "Robot Framework", added `.resource` extension. * `Robot.sublime_syntax` => changed name to "Robot Framework", added `.resource` extension.
* `SML.sublime_syntax` => removed `ml` file type. * `SML.sublime_syntax` => removed `ml` file type.
* `wgsl.sublime-syntax` => added `wgsl` file extension.
### Non-submodule additions ### Non-submodule additions

@ -20,6 +20,13 @@ Options:
* unicode (␇, ␊, ␀, ..) * unicode (␇, ␊, ␀, ..)
* caret (^G, ^J, ^@, ..) * caret (^G, ^J, ^@, ..)
--binary <behavior>
How to treat binary content. (default: no-printing)
Possible values:
* no-printing: do not print any binary content
* as-text: treat binary content as normal text
-p, --plain... -p, --plain...
Only show plain style, no decorations. This is an alias for '--style=plain'. When '-p' is 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 used twice ('-pp'), it also disables automatic paging (alias for '--style=plain
@ -89,8 +96,8 @@ Options:
--paging <when> --paging <when>
Specify when to use the pager. To disable the pager, use --paging=never' or its Specify when to use the pager. To disable the pager, use --paging=never' or its
alias,'-P'. To disable the pager permanently, set BAT_PAGER to an empty string. To control alias,'-P'. To disable the pager permanently, set BAT_PAGING to 'never'. To control which
which pager is used, see the '--pager' option. Possible values: *auto*, never, always. pager is used, see the '--pager' option. Possible values: *auto*, never, always.
--pager <command> --pager <command>
Determine which pager is used. This option will override the PAGER and BAT_PAGER Determine which pager is used. This option will override the PAGER and BAT_PAGER
@ -113,9 +120,41 @@ Options:
set a default theme, add the '--theme="..."' option to the configuration file or export set a default theme, add the '--theme="..."' option to the configuration file or export
the BAT_THEME environment variable (e.g.: export BAT_THEME="..."). the BAT_THEME environment variable (e.g.: export BAT_THEME="...").
Special values:
* auto: Picks a dark or light theme depending on the terminal's colors (default).
Use '--theme-light' and '--theme-dark' to customize the selected theme.
* auto:always: Detect the terminal's colors even when the output is redirected.
* auto:system: Detect the color scheme from the system-wide preference (macOS only).
* dark: Use the dark theme specified by '--theme-dark'.
* light: Use the light theme specified by '--theme-light'.
--theme-light <theme>
Sets the theme name for syntax highlighting used when the terminal uses a light
background. Use '--list-themes' to see all available themes. To set a default theme, add
the '--theme-light="..." option to the configuration file or export the BAT_THEME_LIGHT
environment variable (e.g. export BAT_THEME_LIGHT="...").
--theme-dark <theme>
Sets the theme name for syntax highlighting used when the terminal uses a dark background.
Use '--list-themes' to see all available themes. To set a default theme, add the
'--theme-dark="..." option to the configuration file or export the BAT_THEME_DARK
environment variable (e.g. export BAT_THEME_DARK="...").
--list-themes --list-themes
Display a list of supported themes for syntax highlighting. Display a list of supported themes for syntax highlighting.
-s, --squeeze-blank
Squeeze consecutive empty lines into a single empty line.
--squeeze-limit <squeeze-limit>
Set the maximum number of consecutive empty lines to be printed.
--strip-ansi <when>
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. Possible values:
auto, always, *never*.
--style <components> --style <components>
Configure which elements (line numbers, file headers, grid borders, Git modifications, ..) Configure which elements (line numbers, file headers, grid borders, Git modifications, ..)
to display in addition to the file contents. The argument is a comma-separated list of to display in addition to the file contents. The argument is a comma-separated list of
@ -123,6 +162,15 @@ Options:
set a default style, add the '--style=".."' option to the configuration file or export the set a default style, add the '--style=".."' option to the configuration file or export the
BAT_STYLE environment variable (e.g.: export BAT_STYLE=".."). BAT_STYLE environment variable (e.g.: export BAT_STYLE="..").
When styles are specified in multiple places, the "nearest" set of styles take precedence.
The command-line arguments are the highest priority, followed by the BAT_STYLE environment
variable, and then the configuration file. If any set of styles consists entirely of
components prefixed with "+" or "-", it will modify the previous set of styles instead of
replacing them.
By default, the following components are enabled:
changes, grid, header-filename, numbers, snip
Possible values: Possible values:
* default: enables recommended style components (default). * default: enables recommended style components (default).
@ -154,12 +202,18 @@ Options:
This option exists for POSIX-compliance reasons ('u' is for 'unbuffered'). The output is This option exists for POSIX-compliance reasons ('u' is for 'unbuffered'). The output is
always unbuffered - this option is simply ignored. always unbuffered - this option is simply ignored.
--completion <SHELL>
Show shell completion for a certain shell. [possible values: bash, fish, zsh, ps1]
--diagnostic --diagnostic
Show diagnostic information for bug reports. Show diagnostic information for bug reports.
--acknowledgements --acknowledgements
Show acknowledgements. Show acknowledgements.
--set-terminal-title
Sets terminal title to filenames when using a pager.
-h, --help -h, --help
Print help (see a summary with '-h') Print help (see a summary with '-h')

@ -9,7 +9,16 @@
- [ ] Update the version and the min. supported Rust version in `README.md` and - [ ] Update the version and the min. supported Rust version in `README.md` and
`doc/README-*.md`. Check with `doc/README-*.md`. Check with
`git grep -i -e 'rust.*1\.' -e '1\..*rust' | grep README | grep -v tests/`. `git grep -i -e 'rust.*1\.' -e '1\..*rust' | grep README | grep -v tests/`.
- [ ] Update `CHANGELOG.md`. Introduce a section for the new release.
## CHANGELOG.md updates
- [ ] Go to https://github.com/sharkdp/bat/releases/new, click "Choose a tag",
type the name of the tag that will be created later, click "Generate release
notes". DO NOT ACTUALLY CREATE ANY RELEASE IN THIS STEP.
- [ ] Compare current `CHANGELOG.md` with auto-generated release notes and add
missing entries. Expect in particular dependabot PRs to not be in
`CHANGELOG.md` since they are [auto-merged] if CI passes.
- [ ] Introduce a section for the new release and perform final touch-ups.
## Update syntaxes and themes (build assets) ## Update syntaxes and themes (build assets)
@ -71,3 +80,5 @@
``` ```
[auto-merged]: https://github.com/sharkdp/bat/blob/master/.github/workflows/Auto-merge-dependabot-PRs.yml

@ -11,6 +11,8 @@ Options:
Show non-printable characters (space, tab, newline, ..). Show non-printable characters (space, tab, newline, ..).
--nonprintable-notation <notation> --nonprintable-notation <notation>
Set notation for non-printable characters. Set notation for non-printable characters.
--binary <behavior>
How to treat binary content. (default: no-printing)
-p, --plain... -p, --plain...
Show plain style (alias for '--style=plain'). Show plain style (alias for '--style=plain').
-l, --language <language> -l, --language <language>
@ -41,8 +43,14 @@ Options:
Use the specified syntax for files matching the glob pattern ('*.cpp:C++'). Use the specified syntax for files matching the glob pattern ('*.cpp:C++').
--theme <theme> --theme <theme>
Set the color theme for syntax highlighting. Set the color theme for syntax highlighting.
--theme-light <theme>
Sets the color theme for syntax highlighting used for light backgrounds.
--theme-dark <theme>
Sets the color theme for syntax highlighting used for dark backgrounds.
--list-themes --list-themes
Display all supported highlighting themes. Display all supported highlighting themes.
-s, --squeeze-blank
Squeeze consecutive empty lines.
--style <components> --style <components>
Comma-separated list of style elements to display (*default*, auto, full, plain, changes, Comma-separated list of style elements to display (*default*, auto, full, plain, changes,
header, header-filename, header-filesize, grid, rule, numbers, snip). header, header-filename, header-filesize, grid, rule, numbers, snip).
@ -50,6 +58,8 @@ Options:
Only print the lines from N to M. Only print the lines from N to M.
-L, --list-languages -L, --list-languages
Display all supported languages. Display all supported languages.
--completion <SHELL>
Show shell completion for a certain shell. [possible values: bash, fish, zsh, ps1]
-h, --help -h, --help
Print help (see more with '--help') Print help (see more with '--help')
-V, --version -V, --version

Binary file not shown.

After

(image error) Size: 28 KiB

BIN
doc/sponsors/warp-logo.png Normal file

Binary file not shown.

After

(image error) Size: 130 KiB

Binary file not shown.

After

(image error) Size: 37 KiB

@ -1,11 +0,0 @@
<svg width="1354" height="420" viewBox="0 0 1354 420" fill="none" xmlns="http://www.w3.org/2000/svg">
<rect width="1354" height="420" rx="20" fill="white"/>
<path d="M434.751 133.122H466.637L489.595 227.729C493.852 245.585 494.697 256.219 494.697 256.219H495.128C495.128 256.219 496.61 245.808 500.867 227.729L522.757 133.122H558.9L582.066 227.729C586.53 246.223 587.598 256.219 587.598 256.219H588.236C588.236 256.219 588.666 246.223 592.907 227.729L615.02 133.122H646.907L606.523 288.313H571.017L546.576 194.344C541.474 173.936 541.044 164.801 541.044 164.801H540.614C540.614 164.801 540.183 173.936 535.512 194.344L512.553 288.313H475.996L434.751 133.122Z" fill="black"/>
<path d="M641.583 231.934C641.583 196.428 664.541 173.47 699.202 173.47C733.639 173.47 756.597 196.428 756.597 231.934C756.597 267.647 733.639 290.828 699.202 290.828C664.557 290.812 641.583 267.647 641.583 231.934ZM726.832 231.934C726.832 208.976 715.783 195.998 699.202 195.998C681.346 195.998 671.349 210.458 671.349 231.934C671.349 255.323 682.398 268.284 699.202 268.284C717.058 268.284 726.832 253.824 726.832 231.934Z" fill="black"/>
<path d="M770.836 175.21H799.103V196.048H799.741C804.635 185.207 816.322 174.365 836.299 174.365C839.695 174.365 841.831 174.796 843.314 175.21V203.478H842.469C842.469 203.478 839.918 202.633 832.903 202.633C811.013 202.633 799.103 215.594 799.103 239.828V288.295H770.836V175.21Z" fill="black"/>
<path d="M856.5 133.122H884.767V182.865C884.767 212.2 884.336 217.509 884.336 217.509H884.767L926.857 175.212H962.139L912.843 224.11L970.031 288.313H936.646L895.401 241.536L884.767 251.946V288.297H856.5V133.122Z" fill="black"/>
<path d="M970.444 211.285C970.444 163.455 1000.21 131.569 1044.85 131.569C1089.49 131.569 1119.26 163.455 1119.26 211.285C1119.26 259.114 1089.49 291.001 1044.85 291.001C1000.21 291.001 970.444 259.114 970.444 211.285ZM1088.42 211.285C1088.42 178.761 1071 156.855 1044.84 156.855C1018.67 156.855 1001.26 178.761 1001.26 211.285C1001.26 243.809 1018.69 265.715 1044.84 265.715C1070.98 265.715 1088.42 243.809 1088.42 211.285Z" fill="black"/>
<path d="M1130.08 236.656H1162.4C1162.4 254.943 1174.95 265.146 1194.08 265.146C1210.23 265.146 1221.29 257.063 1221.29 245.584C1221.29 232.622 1212.79 229.21 1185.79 223.901C1161.12 219.007 1134.98 210.716 1134.98 178.399C1134.98 151.408 1157.93 131 1193.01 131C1229.57 131 1252.11 150.132 1252.11 179.037H1219.79C1219.79 165.007 1208.95 156.286 1193.01 156.286C1176.86 156.286 1166.86 164.146 1166.86 175.625C1166.86 187.742 1173.88 192.413 1195.56 196.878C1227.65 203.685 1254.02 207.288 1254.02 243.001C1254.02 271.3 1229.36 290.432 1193.01 290.432C1156.02 290.432 1130.08 268.957 1130.08 236.656Z" fill="black"/>
<path d="M100 210C100 214.824 101.269 219.647 103.723 223.793L148.231 300.878C152.8 308.747 159.739 315.178 168.369 318.055C185.377 323.724 202.977 316.447 211.354 301.893L222.1 283.278L179.708 210L224.47 132.408L235.216 113.792C238.431 108.208 242.747 103.638 247.824 100H243.17H178.777C166.677 100 155.508 106.431 149.5 116.923L103.723 196.208C101.269 200.354 100 205.177 100 210Z" fill="#6363F1"/>
<path d="M353.847 210C353.847 205.177 352.578 200.353 350.124 196.207L305.024 118.107C296.647 103.638 279.047 96.3608 262.039 101.945C253.409 104.822 246.47 111.253 241.901 119.122L231.747 136.638L274.139 210L229.378 287.592L218.632 306.208C215.416 311.708 211.101 316.362 206.024 320H210.678H275.07C287.17 320 298.34 313.569 304.347 303.077L350.124 223.792C352.578 219.646 353.847 214.823 353.847 210Z" fill="#6363F1"/>
</svg>

Before

(image error) Size: 3.4 KiB

22
examples/buffer.rs Normal file

@ -0,0 +1,22 @@
use bat::{
assets::HighlightingAssets, config::Config, controller::Controller, output::OutputHandle, Input,
};
fn main() {
let mut buffer = String::new();
let config = Config {
colored_output: true,
..Default::default()
};
let assets = HighlightingAssets::from_binary();
let controller = Controller::new(&config, &assets);
let input = Input::from_file(file!());
controller
.run(
vec![input.into()],
Some(OutputHandle::FmtWrite(&mut buffer)),
)
.unwrap();
println!("{buffer}");
}

@ -13,6 +13,6 @@ fn main() {
println!("Themes:"); println!("Themes:");
for theme in printer.themes() { for theme in printer.themes() {
println!("- {}", theme); println!("- {theme}");
} }
} }

@ -23,7 +23,8 @@ fn main() {
}], }],
}; };
let bytes = serde_yaml::to_vec(&person).unwrap(); let mut bytes = Vec::with_capacity(128);
serde_yaml::to_writer(&mut bytes, &person).unwrap();
PrettyPrinter::new() PrettyPrinter::new()
.language("yaml") .language("yaml")
.line_numbers(true) .line_numbers(true)

@ -13,6 +13,7 @@ use crate::error::*;
use crate::input::{InputReader, OpenedInput}; use crate::input::{InputReader, OpenedInput};
use crate::syntax_mapping::ignored_suffixes::IgnoredSuffixes; use crate::syntax_mapping::ignored_suffixes::IgnoredSuffixes;
use crate::syntax_mapping::MappingTarget; use crate::syntax_mapping::MappingTarget;
use crate::theme::{default_theme, ColorScheme};
use crate::{bat_warning, SyntaxMapping}; use crate::{bat_warning, SyntaxMapping};
use lazy_theme_set::LazyThemeSet; use lazy_theme_set::LazyThemeSet;
@ -69,57 +70,6 @@ impl HighlightingAssets {
} }
} }
/// The default theme.
///
/// ### Windows and Linux
///
/// Windows and most Linux distributions has a dark terminal theme by
/// default. On these platforms, this function always returns a theme that
/// looks good on a dark background.
///
/// ### macOS
///
/// On macOS the default terminal background is light, but it is common that
/// Dark Mode is active, which makes the terminal background dark. On this
/// platform, the default theme depends on
/// ```bash
/// defaults read -globalDomain AppleInterfaceStyle
/// ```
/// To avoid the overhead of the check on macOS, simply specify a theme
/// explicitly via `--theme`, `BAT_THEME`, or `~/.config/bat`.
///
/// See <https://github.com/sharkdp/bat/issues/1746> and
/// <https://github.com/sharkdp/bat/issues/1928> for more context.
pub fn default_theme() -> &'static str {
#[cfg(not(target_os = "macos"))]
{
Self::default_dark_theme()
}
#[cfg(target_os = "macos")]
{
if macos_dark_mode_active() {
Self::default_dark_theme()
} else {
Self::default_light_theme()
}
}
}
/**
* The default theme that looks good on a dark background.
*/
fn default_dark_theme() -> &'static str {
"Monokai Extended"
}
/**
* The default theme that looks good on a light background.
*/
#[cfg(target_os = "macos")]
fn default_light_theme() -> &'static str {
"Monokai Extended Light"
}
pub fn from_cache(cache_path: &Path) -> Result<Self> { pub fn from_cache(cache_path: &Path) -> Result<Self> {
Ok(HighlightingAssets::new( Ok(HighlightingAssets::new(
SerializedSyntaxSet::FromFile(cache_path.join("syntaxes.bin")), SerializedSyntaxSet::FromFile(cache_path.join("syntaxes.bin")),
@ -248,7 +198,10 @@ impl HighlightingAssets {
bat_warning!("Unknown theme '{}', using default.", theme) bat_warning!("Unknown theme '{}', using default.", theme)
} }
self.get_theme_set() self.get_theme_set()
.get(self.fallback_theme.unwrap_or_else(Self::default_theme)) .get(
self.fallback_theme
.unwrap_or_else(|| default_theme(ColorScheme::Dark)),
)
.expect("something is very wrong if the default theme is missing") .expect("something is very wrong if the default theme is missing")
} }
} }
@ -345,7 +298,11 @@ impl HighlightingAssets {
let syntax_set = self.get_syntax_set()?; let syntax_set = self.get_syntax_set()?;
Ok(String::from_utf8(reader.first_line.clone()) Ok(String::from_utf8(reader.first_line.clone())
.ok() .ok()
.and_then(|l| syntax_set.find_syntax_by_first_line(&l)) .and_then(|l| {
// Strip UTF-8 BOM if present
let line = l.strip_prefix('\u{feff}').unwrap_or(&l);
syntax_set.find_syntax_by_first_line(line)
})
.map(|syntax| SyntaxReferenceInSet { syntax, syntax_set })) .map(|syntax| SyntaxReferenceInSet { syntax, syntax_set }))
} }
} }
@ -380,7 +337,7 @@ fn asset_from_contents<T: serde::de::DeserializeOwned>(
} else { } else {
bincode::deserialize_from(contents) bincode::deserialize_from(contents)
} }
.map_err(|_| format!("Could not parse {}", description).into()) .map_err(|_| format!("Could not parse {description}").into())
} }
fn asset_from_cache<T: serde::de::DeserializeOwned>( fn asset_from_cache<T: serde::de::DeserializeOwned>(
@ -396,27 +353,7 @@ fn asset_from_cache<T: serde::de::DeserializeOwned>(
) )
})?; })?;
asset_from_contents(&contents[..], description, compressed) asset_from_contents(&contents[..], description, compressed)
.map_err(|_| format!("Could not parse cached {}", description).into()) .map_err(|_| format!("Could not parse cached {description}").into())
}
#[cfg(target_os = "macos")]
fn macos_dark_mode_active() -> bool {
const PREFERENCES_FILE: &str = "Library/Preferences/.GlobalPreferences.plist";
const STYLE_KEY: &str = "AppleInterfaceStyle";
let preferences_file = dirs::home_dir()
.map(|home| home.join(PREFERENCES_FILE))
.expect("Could not get home directory");
match plist::Value::from_file(preferences_file).map(|file| file.into_dictionary()) {
Ok(Some(preferences)) => match preferences.get(STYLE_KEY).and_then(|val| val.as_string()) {
Some(value) => value == "Dark",
// If the key does not exist, then light theme is currently in use.
None => false,
},
// Unreachable, in theory. All macOS users have a home directory and preferences file setup.
Ok(None) | Err(_) => true,
}
} }
#[cfg(test)] #[cfg(test)]
@ -437,11 +374,11 @@ mod tests {
pub temp_dir: TempDir, pub temp_dir: TempDir,
} }
impl<'a> SyntaxDetectionTest<'a> { impl SyntaxDetectionTest<'_> {
fn new() -> Self { fn new() -> Self {
SyntaxDetectionTest { SyntaxDetectionTest {
assets: HighlightingAssets::from_binary(), assets: HighlightingAssets::from_binary(),
syntax_mapping: SyntaxMapping::builtin(), syntax_mapping: SyntaxMapping::new(),
temp_dir: TempDir::new().expect("creation of temporary directory"), temp_dir: TempDir::new().expect("creation of temporary directory"),
} }
} }
@ -466,7 +403,7 @@ mod tests {
let file_path = self.temp_dir.path().join(file_name); let file_path = self.temp_dir.path().join(file_name);
{ {
let mut temp_file = File::create(&file_path).unwrap(); let mut temp_file = File::create(&file_path).unwrap();
writeln!(temp_file, "{}", first_line).unwrap(); writeln!(temp_file, "{first_line}").unwrap();
} }
let input = Input::ordinary_file(&file_path); let input = Input::ordinary_file(&file_path);
@ -514,8 +451,7 @@ mod tests {
if !consistent { if !consistent {
eprintln!( eprintln!(
"Inconsistent syntax detection:\nFor File: {}\nFor Reader: {}", "Inconsistent syntax detection:\nFor File: {as_file}\nFor Reader: {as_reader}"
as_file, as_reader
) )
} }
@ -601,6 +537,41 @@ mod tests {
); );
} }
#[test]
fn syntax_detection_first_line_with_utf8_bom() {
let test = SyntaxDetectionTest::new();
// Test that XML files are detected correctly even with UTF-8 BOM
// The BOM should be stripped before first-line syntax detection
let xml_with_bom = "\u{feff}<?xml version=\"1.0\" encoding=\"utf-8\"?>";
assert_eq!(
test.syntax_for_file_with_content("unknown_file", xml_with_bom),
"XML"
);
// Test the specific .csproj case mentioned in the issue
// Even if .csproj has extension mapping, this tests first-line fallback
let csproj_content_with_bom = "\u{feff}<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"15.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">";
assert_eq!(
test.syntax_for_file_with_content("test.csproj", csproj_content_with_bom),
"XML"
);
// Test that shell scripts are detected correctly even with UTF-8 BOM
let script_with_bom = "\u{feff}#!/bin/bash";
assert_eq!(
test.syntax_for_file_with_content("unknown_script", script_with_bom),
"Bourne Again Shell (bash)"
);
// Test that PHP files are detected correctly even with UTF-8 BOM
let php_with_bom = "\u{feff}<?php";
assert_eq!(
test.syntax_for_file_with_content("unknown_php", php_with_bom),
"PHP"
);
}
#[test] #[test]
fn syntax_detection_with_custom_mapping() { fn syntax_detection_with_custom_mapping() {
let mut test = SyntaxDetectionTest::new(); let mut test = SyntaxDetectionTest::new();

@ -3,7 +3,7 @@ use std::path::Path;
use std::time::SystemTime; use std::time::SystemTime;
use semver::Version; use semver::Version;
use serde::{Deserialize, Serialize}; use serde_derive::{Deserialize, Serialize};
use crate::error::*; use crate::error::*;

@ -93,7 +93,7 @@ fn print_unlinked_contexts(syntax_set: &SyntaxSet) {
if !missing_contexts.is_empty() { if !missing_contexts.is_empty() {
println!("Some referenced contexts could not be found!"); println!("Some referenced contexts could not be found!");
for context in missing_contexts { for context in missing_contexts {
println!("- {}", context); println!("- {context}");
} }
} }
} }
@ -152,7 +152,7 @@ pub(crate) fn asset_to_contents<T: serde::Serialize>(
} else { } else {
bincode::serialize_into(&mut contents, asset) bincode::serialize_into(&mut contents, asset)
} }
.map_err(|_| format!("Could not serialize {}", description))?; .map_err(|_| format!("Could not serialize {description}"))?;
Ok(contents) Ok(contents)
} }

@ -60,7 +60,7 @@ fn to_path_and_stem(source_dir: &Path, entry: DirEntry) -> Option<PathAndStem> {
fn handle_file(path_and_stem: &PathAndStem) -> Result<Option<String>> { fn handle_file(path_and_stem: &PathAndStem) -> Result<Option<String>> {
if path_and_stem.stem == "NOTICE" { if path_and_stem.stem == "NOTICE" {
handle_notice(&path_and_stem.path) handle_notice(&path_and_stem.path)
} else if path_and_stem.stem.to_ascii_uppercase() == "LICENSE" { } else if path_and_stem.stem.eq_ignore_ascii_case("LICENSE") {
handle_license(&path_and_stem.path) handle_license(&path_and_stem.path)
} else { } else {
Ok(None) Ok(None)
@ -80,7 +80,7 @@ fn handle_license(path: &Path) -> Result<Option<String>> {
} else if license_not_needed_in_acknowledgements(&license_text) { } else if license_not_needed_in_acknowledgements(&license_text) {
Ok(None) Ok(None)
} else { } else {
Err(format!("ERROR: License is of unknown type: {:?}", path).into()) Err(format!("ERROR: License is of unknown type: {path:?}").into())
} }
} }
@ -125,7 +125,7 @@ fn append_to_acknowledgements(
relative_path: &str, relative_path: &str,
license_text: &str, license_text: &str,
) { ) {
write!(acknowledgements, "## {}\n\n{}", relative_path, license_text).ok(); write!(acknowledgements, "## {relative_path}\n\n{license_text}").ok();
// Make sure the last char is a newline to not mess up formatting later // Make sure the last char is a newline to not mess up formatting later
if acknowledgements if acknowledgements

@ -3,8 +3,7 @@ use super::*;
use std::collections::BTreeMap; use std::collections::BTreeMap;
use std::convert::TryFrom; use std::convert::TryFrom;
use serde::Deserialize; use serde_derive::{Deserialize, Serialize};
use serde::Serialize;
use once_cell::unsync::OnceCell; use once_cell::unsync::OnceCell;
@ -89,7 +88,7 @@ impl TryFrom<ThemeSet> for LazyThemeSet {
let lazy_theme = LazyTheme { let lazy_theme = LazyTheme {
serialized: crate::assets::build_assets::asset_to_contents( serialized: crate::assets::build_assets::asset_to_contents(
&theme, &theme,
&format!("theme {}", name), &format!("theme {name}"),
COMPRESS_LAZY_THEMES, COMPRESS_LAZY_THEMES,
)?, )?,
deserialized: OnceCell::new(), deserialized: OnceCell::new(),

@ -1,20 +1,23 @@
use std::collections::HashSet; use std::collections::HashSet;
use std::env; use std::env;
use std::io::IsTerminal;
use std::path::{Path, PathBuf}; use std::path::{Path, PathBuf};
use std::str::FromStr;
use atty::{self, Stream};
use crate::{ use crate::{
clap_app, clap_app,
config::{get_args_from_config_file, get_args_from_env_opts_var, get_args_from_env_vars}, config::{get_args_from_config_file, get_args_from_env_opts_var, get_args_from_env_vars},
}; };
use bat::style::StyleComponentList;
use bat::theme::{theme, ThemeName, ThemeOptions, ThemePreference};
use bat::BinaryBehavior;
use bat::StripAnsiMode;
use clap::ArgMatches; use clap::ArgMatches;
use console::Term; use console::Term;
use crate::input::{new_file_input, new_stdin_input}; use crate::input::{new_file_input, new_stdin_input};
use bat::{ use bat::{
assets::HighlightingAssets,
bat_warning, bat_warning,
config::{Config, VisibleLines}, config::{Config, VisibleLines},
error::*, error::*,
@ -30,6 +33,10 @@ fn is_truecolor_terminal() -> bool {
.unwrap_or(false) .unwrap_or(false)
} }
pub fn env_no_color() -> bool {
env::var_os("NO_COLOR").is_some_and(|x| !x.is_empty())
}
pub struct App { pub struct App {
pub matches: ArgMatches, pub matches: ArgMatches,
interactive_output: bool, interactive_output: bool,
@ -40,7 +47,7 @@ impl App {
#[cfg(windows)] #[cfg(windows)]
let _ = nu_ansi_term::enable_ansi_support(); let _ = nu_ansi_term::enable_ansi_support();
let interactive_output = atty::is(Stream::Stdout); let interactive_output = std::io::stdout().is_terminal();
Ok(App { Ok(App {
matches: Self::matches(interactive_output)?, matches: Self::matches(interactive_output)?,
@ -82,7 +89,6 @@ impl App {
// .. and the rest at the end // .. and the rest at the end
cli_args.for_each(|a| args.push(a)); cli_args.for_each(|a| args.push(a));
args args
}; };
@ -92,19 +98,40 @@ impl App {
pub fn config(&self, inputs: &[Input]) -> Result<Config> { pub fn config(&self, inputs: &[Input]) -> Result<Config> {
let style_components = self.style_components()?; let style_components = self.style_components()?;
let extra_plain = self.matches.get_count("plain") > 1;
let plain_last_index = self
.matches
.indices_of("plain")
.and_then(Iterator::max)
.unwrap_or_default();
let paging_last_index = self
.matches
.indices_of("paging")
.and_then(Iterator::max)
.unwrap_or_default();
let paging_mode = match self.matches.get_one::<String>("paging").map(|s| s.as_str()) { let paging_mode = match self.matches.get_one::<String>("paging").map(|s| s.as_str()) {
Some("always") => PagingMode::Always, Some("always") => {
// Disable paging if the second -p (or -pp) is specified after --paging=always
if extra_plain && plain_last_index > paging_last_index {
PagingMode::Never
} else {
PagingMode::Always
}
}
Some("never") => PagingMode::Never, Some("never") => PagingMode::Never,
Some("auto") | None => { Some("auto") | None => {
// If we have -pp as an option when in auto mode, the pager should be disabled. // If we have -pp as an option when in auto mode, the pager should be disabled.
let extra_plain = self.matches.get_count("plain") > 1;
if extra_plain || self.matches.get_flag("no-paging") { if extra_plain || self.matches.get_flag("no-paging") {
PagingMode::Never PagingMode::Never
} else if inputs.iter().any(Input::is_stdin) { } else if inputs.iter().any(Input::is_stdin)
// ignore stdin when --list-themes is used because in that case no input will be read anyways
&& !self.matches.get_flag("list-themes")
{
// If we are reading from stdin, only enable paging if we write to an // If we are reading from stdin, only enable paging if we write to an
// interactive terminal and if we do not *read* from an interactive // interactive terminal and if we do not *read* from an interactive
// terminal. // terminal.
if self.interactive_output && !atty::is(Stream::Stdin) { if self.interactive_output && !std::io::stdin().is_terminal() {
PagingMode::QuitIfOneScreen PagingMode::QuitIfOneScreen
} else { } else {
PagingMode::Never PagingMode::Never
@ -118,7 +145,11 @@ impl App {
_ => unreachable!("other values for --paging are not allowed"), _ => unreachable!("other values for --paging are not allowed"),
}; };
let mut syntax_mapping = SyntaxMapping::builtin(); let mut syntax_mapping = SyntaxMapping::new();
// start building glob matchers for builtin mappings immediately
// this is an appropriate approach because it's statistically likely that
// all the custom mappings need to be checked
syntax_mapping.start_offload_build_all();
if let Some(values) = self.matches.get_many::<String>("ignored-suffix") { if let Some(values) = self.matches.get_many::<String>("ignored-suffix") {
for suffix in values { for suffix in values {
@ -127,7 +158,9 @@ impl App {
} }
if let Some(values) = self.matches.get_many::<String>("map-syntax") { if let Some(values) = self.matches.get_many::<String>("map-syntax") {
for from_to in values { // later args take precedence over earlier ones, hence `.rev()`
// see: https://github.com/sharkdp/bat/pull/2755#discussion_r1456416875
for from_to in values.rev() {
let parts: Vec<_> = from_to.split(':').collect(); let parts: Vec<_> = from_to.split(':').collect();
if parts.len() != 2 { if parts.len() != 2 {
@ -182,6 +215,11 @@ impl App {
Some("caret") => NonprintableNotation::Caret, Some("caret") => NonprintableNotation::Caret,
_ => unreachable!("other values for --nonprintable-notation are not allowed"), _ => unreachable!("other values for --nonprintable-notation are not allowed"),
}, },
binary: match self.matches.get_one::<String>("binary").map(|s| s.as_str()) {
Some("as-text") => BinaryBehavior::AsText,
Some("no-printing") => BinaryBehavior::NoPrinting,
_ => unreachable!("other values for --binary are not allowed"),
},
wrapping_mode: if self.interactive_output || maybe_term_width.is_some() { wrapping_mode: if self.interactive_output || maybe_term_width.is_some() {
if !self.matches.get_flag("chop-long-lines") { if !self.matches.get_flag("chop-long-lines") {
match self.matches.get_one::<String>("wrap").map(|s| s.as_str()) { match self.matches.get_one::<String>("wrap").map(|s| s.as_str()) {
@ -208,7 +246,7 @@ impl App {
|| match self.matches.get_one::<String>("color").map(|s| s.as_str()) { || match self.matches.get_one::<String>("color").map(|s| s.as_str()) {
Some("always") => true, Some("always") => true,
Some("never") => false, Some("never") => false,
Some("auto") => env::var_os("NO_COLOR").is_none() && self.interactive_output, Some("auto") => !env_no_color() && self.interactive_output,
_ => unreachable!("other values for --color are not allowed"), _ => unreachable!("other values for --color are not allowed"),
}, },
paging_mode, paging_mode,
@ -233,18 +271,17 @@ impl App {
4 4
}, },
), ),
theme: self strip_ansi: match self
.matches .matches
.get_one::<String>("theme") .get_one::<String>("strip-ansi")
.map(String::from) .map(|s| s.as_str())
.map(|s| { {
if s == "default" { Some("never") => StripAnsiMode::Never,
String::from(HighlightingAssets::default_theme()) Some("always") => StripAnsiMode::Always,
} else { Some("auto") => StripAnsiMode::Auto,
s _ => unreachable!("other values for --strip-ansi are not allowed"),
} },
}) theme: theme(self.theme_options()).to_string(),
.unwrap_or_else(|| String::from(HighlightingAssets::default_theme())),
visible_lines: match self.matches.try_contains_id("diff").unwrap_or_default() visible_lines: match self.matches.try_contains_id("diff").unwrap_or_default()
&& self.matches.get_flag("diff") && self.matches.get_flag("diff")
{ {
@ -282,6 +319,19 @@ impl App {
.map(HighlightedLineRanges) .map(HighlightedLineRanges)
.unwrap_or_default(), .unwrap_or_default(),
use_custom_assets: !self.matches.get_flag("no-custom-assets"), use_custom_assets: !self.matches.get_flag("no-custom-assets"),
#[cfg(feature = "lessopen")]
use_lessopen: self.matches.get_flag("lessopen"),
set_terminal_title: self.matches.get_flag("set-terminal-title"),
squeeze_lines: if self.matches.get_flag("squeeze-blank") {
Some(
self.matches
.get_one::<usize>("squeeze-limit")
.map(|limit| limit.to_owned())
.unwrap_or(1),
)
} else {
None
},
}) })
} }
@ -331,34 +381,57 @@ impl App {
Ok(file_input) Ok(file_input)
} }
fn forced_style_components(&self) -> Option<StyleComponents> {
// No components if `--decorations=never``.
if self
.matches
.get_one::<String>("decorations")
.map(|s| s.as_str())
== Some("never")
{
return Some(StyleComponents(HashSet::new()));
}
// Only line numbers if `--number`.
if self.matches.get_flag("number") {
return Some(StyleComponents(HashSet::from([
StyleComponent::LineNumbers,
])));
}
// Plain if `--plain` is specified at least once.
if self.matches.get_count("plain") > 0 {
return Some(StyleComponents(HashSet::from([StyleComponent::Plain])));
}
// Default behavior.
None
}
fn style_components(&self) -> Result<StyleComponents> { fn style_components(&self) -> Result<StyleComponents> {
let matches = &self.matches; let matches = &self.matches;
let mut styled_components = StyleComponents( let mut styled_components = match self.forced_style_components() {
if matches.get_one::<String>("decorations").map(|s| s.as_str()) == Some("never") { Some(forced_components) => forced_components,
HashSet::new()
} else if matches.get_flag("number") { // Parse the `--style` arguments and merge them.
[StyleComponent::LineNumbers].iter().cloned().collect() None if matches.contains_id("style") => {
} else if 0 < matches.get_count("plain") { let lists = matches
[StyleComponent::Plain].iter().cloned().collect() .get_many::<String>("style")
} else { .expect("styles present")
matches .map(|v| StyleComponentList::from_str(v))
.get_one::<String>("style") .collect::<Result<Vec<StyleComponentList>>>()?;
.map(|styles| {
styles StyleComponentList::to_components(lists, self.interactive_output, true)
.split(',') }
.map(|style| style.parse::<StyleComponent>())
.filter_map(|style| style.ok()) // Use the default.
.collect::<Vec<_>>() None => StyleComponents(HashSet::from_iter(
}) StyleComponent::Default
.unwrap_or_else(|| vec![StyleComponent::Default]) .components(self.interactive_output)
.into_iter() .iter()
.map(|style| style.components(self.interactive_output)) .cloned(),
.fold(HashSet::new(), |mut acc, components| { )),
acc.extend(components.iter().cloned()); };
acc
})
},
);
// If `grid` is set, remove `rule` as it is a subset of `grid`, and print a warning. // If `grid` is set, remove `rule` as it is a subset of `grid`, and print a warning.
if styled_components.grid() && styled_components.0.remove(&StyleComponent::Rule) { if styled_components.grid() && styled_components.0.remove(&StyleComponent::Rule) {
@ -367,4 +440,25 @@ impl App {
Ok(styled_components) Ok(styled_components)
} }
fn theme_options(&self) -> ThemeOptions {
let theme = self
.matches
.get_one::<String>("theme")
.map(|t| ThemePreference::from_str(t).unwrap())
.unwrap_or_default();
let theme_dark = self
.matches
.get_one::<String>("theme-dark")
.map(|t| ThemeName::from_str(t).unwrap());
let theme_light = self
.matches
.get_one::<String>("theme-light")
.map(|t| ThemeName::from_str(t).unwrap());
ThemeOptions {
theme,
theme_dark,
theme_light,
}
}
} }

@ -44,7 +44,7 @@ pub fn assets_from_cache_or_binary(
} }
fn clear_asset(path: PathBuf, description: &str) { fn clear_asset(path: PathBuf, description: &str) {
print!("Clearing {} ... ", description); print!("Clearing {description} ... ");
match fs::remove_file(&path) { match fs::remove_file(&path) {
Err(err) if err.kind() == io::ErrorKind::NotFound => { Err(err) if err.kind() == io::ErrorKind::NotFound => {
println!("skipped (not present)"); println!("skipped (not present)");

@ -1,9 +1,11 @@
use bat::style::StyleComponentList;
use clap::{ use clap::{
crate_name, crate_version, value_parser, Arg, ArgAction, ArgGroup, ColorChoice, Command, crate_name, crate_version, value_parser, Arg, ArgAction, ArgGroup, ColorChoice, Command,
}; };
use once_cell::sync::Lazy; use once_cell::sync::Lazy;
use std::env; use std::env;
use std::path::{Path, PathBuf}; use std::path::{Path, PathBuf};
use std::str::FromStr;
static VERSION: Lazy<String> = Lazy::new(|| { static VERSION: Lazy<String> = Lazy::new(|| {
#[cfg(feature = "bugreport")] #[cfg(feature = "bugreport")]
@ -19,7 +21,7 @@ static VERSION: Lazy<String> = Lazy::new(|| {
}); });
pub fn build_app(interactive_output: bool) -> Command { pub fn build_app(interactive_output: bool) -> Command {
let color_when = if interactive_output && env::var_os("NO_COLOR").is_none() { let color_when = if interactive_output && !crate::app::env_no_color() {
ColorChoice::Auto ColorChoice::Auto
} else { } else {
ColorChoice::Never ColorChoice::Never
@ -75,6 +77,22 @@ pub fn build_app(interactive_output: bool) -> Command {
* caret (^G, ^J, ^@, ..)", * caret (^G, ^J, ^@, ..)",
), ),
) )
.arg(
Arg::new("binary")
.long("binary")
.action(ArgAction::Set)
.default_value("no-printing")
.value_parser(["no-printing", "as-text"])
.value_name("behavior")
.hide_default_value(true)
.help("How to treat binary content. (default: no-printing)")
.long_help(
"How to treat binary content. (default: no-printing)\n\n\
Possible values:\n \
* no-printing: do not print any binary content\n \
* as-text: treat binary content as normal text",
),
)
.arg( .arg(
Arg::new("plain") Arg::new("plain")
.overrides_with("plain") .overrides_with("plain")
@ -311,7 +329,7 @@ pub fn build_app(interactive_output: bool) -> Command {
.long_help( .long_help(
"Specify when to use the pager. To disable the pager, use \ "Specify when to use the pager. To disable the pager, use \
--paging=never' or its alias,'-P'. To disable the pager permanently, \ --paging=never' or its alias,'-P'. To disable the pager permanently, \
set BAT_PAGER to an empty string. To control which pager is used, see the \ set BAT_PAGING to 'never'. To control which pager is used, see the \
'--pager' option. Possible values: *auto*, never, always." '--pager' option. Possible values: *auto*, never, always."
), ),
) )
@ -375,9 +393,40 @@ pub fn build_app(interactive_output: bool) -> Command {
see all available themes. To set a default theme, add the \ see all available themes. To set a default theme, add the \
'--theme=\"...\"' option to the configuration file or export the \ '--theme=\"...\"' option to the configuration file or export the \
BAT_THEME environment variable (e.g.: export \ BAT_THEME environment variable (e.g.: export \
BAT_THEME=\"...\").", BAT_THEME=\"...\").\n\n\
Special values:\n\n \
* auto: Picks a dark or light theme depending on the terminal's colors (default).\n \
Use '--theme-light' and '--theme-dark' to customize the selected theme.\n \
* auto:always: Detect the terminal's colors even when the output is redirected.\n \
* auto:system: Detect the color scheme from the system-wide preference (macOS only).\n \
* dark: Use the dark theme specified by '--theme-dark'.\n \
* light: Use the light theme specified by '--theme-light'.",
), ),
) )
.arg(
Arg::new("theme-light")
.long("theme-light")
.overrides_with("theme-light")
.value_name("theme")
.help("Sets the color theme for syntax highlighting used for light backgrounds.")
.long_help(
"Sets the theme name for syntax highlighting used when the terminal uses a light background. \
Use '--list-themes' to see all available themes. To set a default theme, add the \
'--theme-light=\"...\" option to the configuration file or export the BAT_THEME_LIGHT \
environment variable (e.g. export BAT_THEME_LIGHT=\"...\")."),
)
.arg(
Arg::new("theme-dark")
.long("theme-dark")
.overrides_with("theme-dark")
.value_name("theme")
.help("Sets the color theme for syntax highlighting used for dark backgrounds.")
.long_help(
"Sets the theme name for syntax highlighting used when the terminal uses a dark background. \
Use '--list-themes' to see all available themes. To set a default theme, add the \
'--theme-dark=\"...\" option to the configuration file or export the BAT_THEME_DARK \
environment variable (e.g. export BAT_THEME_DARK=\"...\")."),
)
.arg( .arg(
Arg::new("list-themes") Arg::new("list-themes")
.long("list-themes") .long("list-themes")
@ -385,37 +434,45 @@ pub fn build_app(interactive_output: bool) -> Command {
.help("Display all supported highlighting themes.") .help("Display all supported highlighting themes.")
.long_help("Display a list of supported themes for syntax highlighting."), .long_help("Display a list of supported themes for syntax highlighting."),
) )
.arg(
Arg::new("squeeze-blank")
.long("squeeze-blank")
.short('s')
.action(ArgAction::SetTrue)
.help("Squeeze consecutive empty lines.")
.long_help("Squeeze consecutive empty lines into a single empty line.")
)
.arg(
Arg::new("squeeze-limit")
.long("squeeze-limit")
.value_parser(|s: &str| s.parse::<usize>().map_err(|_| "Requires a non-negative number".to_owned()))
.long_help("Set the maximum number of consecutive empty lines to be printed.")
.hide_short_help(true)
)
.arg(
Arg::new("strip-ansi")
.long("strip-ansi")
.overrides_with("strip-ansi")
.value_name("when")
.value_parser(["auto", "always", "never"])
.default_value("never")
.hide_default_value(true)
.help("Strip colors from the input (auto, always, *never*)")
.long_help("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. Possible values: auto, always, *never*.")
.hide_short_help(true)
)
.arg( .arg(
Arg::new("style") Arg::new("style")
.long("style") .long("style")
.action(ArgAction::Append)
.value_name("components") .value_name("components")
.overrides_with("style")
.overrides_with("plain")
.overrides_with("number")
// Cannot use claps built in validation because we have to turn off clap's delimiters // Cannot use claps built in validation because we have to turn off clap's delimiters
.value_parser(|val: &str| { .value_parser(|val: &str| {
let mut invalid_vals = val.split(',').filter(|style| { match StyleComponentList::from_str(val) {
!&[ Err(err) => Err(err),
"auto", Ok(_) => Ok(val.to_owned()),
"full",
"default",
"plain",
"header",
"header-filename",
"header-filesize",
"grid",
"rule",
"numbers",
"snip",
#[cfg(feature = "git")]
"changes",
].contains(style)
});
if let Some(invalid) = invalid_vals.next() {
Err(format!("Unknown style, '{}'", invalid))
} else {
Ok(val.to_owned())
} }
}) })
.help( .help(
@ -430,6 +487,14 @@ pub fn build_app(interactive_output: bool) -> Command {
pre-defined style ('full'). To set a default style, add the \ pre-defined style ('full'). To set a default style, add the \
'--style=\"..\"' option to the configuration file or export the \ '--style=\"..\"' option to the configuration file or export the \
BAT_STYLE environment variable (e.g.: export BAT_STYLE=\"..\").\n\n\ BAT_STYLE environment variable (e.g.: export BAT_STYLE=\"..\").\n\n\
When styles are specified in multiple places, the \"nearest\" set \
of styles take precedence. The command-line arguments are the highest \
priority, followed by the BAT_STYLE environment variable, and then \
the configuration file. If any set of styles consists entirely of \
components prefixed with \"+\" or \"-\", it will modify the \
previous set of styles instead of replacing them.\n\n\
By default, the following components are enabled:\n \
changes, grid, header-filename, numbers, snip\n\n\
Possible values:\n\n \ Possible values:\n\n \
* default: enables recommended style components (default).\n \ * default: enables recommended style components (default).\n \
* full: enables all available components.\n \ * full: enables all available components.\n \
@ -497,7 +562,39 @@ pub fn build_app(interactive_output: bool) -> Command {
.action(ArgAction::SetTrue) .action(ArgAction::SetTrue)
.hide(true) .hide(true)
.help("Do not load custom assets"), .help("Do not load custom assets"),
);
#[cfg(feature = "application")]
{
app = app.arg(
Arg::new("completion")
.long("completion")
.value_name("SHELL")
.value_parser(["bash", "fish", "ps1", "zsh"])
.help("Show shell completion for a certain shell. [possible values: bash, fish, zsh, ps1]"),
);
}
#[cfg(feature = "lessopen")]
{
app = app
.arg(
Arg::new("lessopen")
.long("lessopen")
.action(ArgAction::SetTrue)
.help("Enable the $LESSOPEN preprocessor"),
) )
.arg(
Arg::new("no-lessopen")
.long("no-lessopen")
.action(ArgAction::SetTrue)
.overrides_with("lessopen")
.hide(true)
.help("Disable the $LESSOPEN preprocessor if enabled (overrides --lessopen)"),
)
}
app = app
.arg( .arg(
Arg::new("config-file") Arg::new("config-file")
.long("config-file") .long("config-file")
@ -536,7 +633,7 @@ pub fn build_app(interactive_output: bool) -> Command {
.alias("diagnostics") .alias("diagnostics")
.action(ArgAction::SetTrue) .action(ArgAction::SetTrue)
.hide_short_help(true) .hide_short_help(true)
.help("Show diagnostic information for bug reports.") .help("Show diagnostic information for bug reports."),
) )
.arg( .arg(
Arg::new("acknowledgements") Arg::new("acknowledgements")
@ -544,6 +641,13 @@ pub fn build_app(interactive_output: bool) -> Command {
.action(ArgAction::SetTrue) .action(ArgAction::SetTrue)
.hide_short_help(true) .hide_short_help(true)
.help("Show acknowledgements."), .help("Show acknowledgements."),
)
.arg(
Arg::new("set-terminal-title")
.long("set-terminal-title")
.action(ArgAction::SetTrue)
.hide_short_help(true)
.help("Sets terminal title to filenames when using a pager."),
); );
// Check if the current directory contains a file name cache. Otherwise, // Check if the current directory contains a file name cache. Otherwise,

@ -0,0 +1,6 @@
use std::env;
pub const BASH_COMPLETION: &str = include_str!(env!("BAT_GENERATED_COMPLETION_BASH"));
pub const FISH_COMPLETION: &str = include_str!(env!("BAT_GENERATED_COMPLETION_FISH"));
pub const PS1_COMPLETION: &str = include_str!(env!("BAT_GENERATED_COMPLETION_PS1"));
pub const ZSH_COMPLETION: &str = include_str!(env!("BAT_GENERATED_COMPLETION_ZSH"));

@ -140,13 +140,19 @@ fn get_args_from_str(content: &str) -> Result<Vec<OsString>, shell_words::ParseE
pub fn get_args_from_env_vars() -> Vec<OsString> { pub fn get_args_from_env_vars() -> Vec<OsString> {
[ [
("--tabs", "BAT_TABS"), ("--tabs", "BAT_TABS"),
("--theme", "BAT_THEME"), ("--theme", bat::theme::env::BAT_THEME),
("--theme-dark", bat::theme::env::BAT_THEME_DARK),
("--theme-light", bat::theme::env::BAT_THEME_LIGHT),
("--pager", "BAT_PAGER"), ("--pager", "BAT_PAGER"),
("--paging", "BAT_PAGING"),
("--style", "BAT_STYLE"), ("--style", "BAT_STYLE"),
] ]
.iter() .iter()
.filter_map(|(flag, key)| env::var(key).ok().map(|var| [flag.to_string(), var])) .filter_map(|(flag, key)| {
.flatten() env::var(key)
.ok()
.map(|var| [flag.to_string(), var].join("="))
})
.map(|a| a.into()) .map(|a| a.into())
.collect() .collect()
} }

@ -1,12 +1,11 @@
use std::env; use std::env;
use std::path::{Path, PathBuf}; use std::path::{Path, PathBuf};
use etcetera::BaseStrategy;
use once_cell::sync::Lazy; use once_cell::sync::Lazy;
/// Wrapper for 'dirs' that treats MacOS more like Linux, by following the XDG specification. /// Wrapper for 'etcetera' that checks BAT_CACHE_PATH and BAT_CONFIG_DIR and falls back to the
/// The `XDG_CACHE_HOME` environment variable is checked first. `BAT_CONFIG_DIR` /// Windows known folder locations on Windows & the XDG Base Directory Specification everywhere else.
/// is then checked before the `XDG_CONFIG_HOME` environment variable.
/// The fallback directories are `~/.cache/bat` and `~/.config/bat`, respectively.
pub struct BatProjectDirs { pub struct BatProjectDirs {
cache_dir: PathBuf, cache_dir: PathBuf,
config_dir: PathBuf, config_dir: PathBuf,
@ -14,24 +13,23 @@ pub struct BatProjectDirs {
impl BatProjectDirs { impl BatProjectDirs {
fn new() -> Option<BatProjectDirs> { fn new() -> Option<BatProjectDirs> {
let cache_dir = BatProjectDirs::get_cache_dir()?; let basedirs = etcetera::choose_base_strategy().ok()?;
// Checks whether or not $BAT_CONFIG_DIR exists. If it doesn't, set our config dir // Checks whether or not `$BAT_CACHE_PATH` exists. If it doesn't, set the cache dir to our
// to our system's default configuration home. // system's default cache home.
let config_dir = let cache_dir = if let Some(cache_dir) = env::var_os("BAT_CACHE_PATH").map(PathBuf::from) {
if let Some(config_dir_op) = env::var_os("BAT_CONFIG_DIR").map(PathBuf::from) { cache_dir
config_dir_op
} else { } else {
#[cfg(target_os = "macos")] basedirs.cache_dir().join("bat")
let config_dir_op = env::var_os("XDG_CONFIG_HOME") };
.map(PathBuf::from)
.filter(|p| p.is_absolute())
.or_else(|| dirs::home_dir().map(|d| d.join(".config")));
#[cfg(not(target_os = "macos"))] // Checks whether or not `$BAT_CONFIG_DIR` exists. If it doesn't, set the config dir to our
let config_dir_op = dirs::config_dir(); // system's default configuration home.
let config_dir = if let Some(config_dir) = env::var_os("BAT_CONFIG_DIR").map(PathBuf::from)
config_dir_op.map(|d| d.join("bat"))? {
config_dir
} else {
basedirs.config_dir().join("bat")
}; };
Some(BatProjectDirs { Some(BatProjectDirs {
@ -40,25 +38,6 @@ impl BatProjectDirs {
}) })
} }
fn get_cache_dir() -> Option<PathBuf> {
// on all OS prefer BAT_CACHE_PATH if set
let cache_dir_op = env::var_os("BAT_CACHE_PATH").map(PathBuf::from);
if cache_dir_op.is_some() {
return cache_dir_op;
}
#[cfg(target_os = "macos")]
let cache_dir_op = env::var_os("XDG_CACHE_HOME")
.map(PathBuf::from)
.filter(|p| p.is_absolute())
.or_else(|| dirs::home_dir().map(|d| d.join(".cache")));
#[cfg(not(target_os = "macos"))]
let cache_dir_op = dirs::cache_dir();
cache_dir_op.map(|d| d.join("bat"))
}
pub fn cache_dir(&self) -> &Path { pub fn cache_dir(&self) -> &Path {
&self.cache_dir &self.cache_dir
} }

Some files were not shown because too many files have changed in this diff Show More