1
0
mirror of https://github.com/sharkdp/bat synced 2026-08-03 18:51:44 +00:00

Compare commits

...

40 Commits

Author SHA1 Message Date
sharkdp 2596bfe7a7 Bump version to v0.15.1 2020-05-11 20:30:45 +02:00
sharkdp 406bffa8c8 Update syntaxes and themes 2020-05-11 20:29:49 +02:00
sharkdp 48441b99ef Patch Markdown syntax
closes #963
see #977
2020-05-11 20:22:50 +02:00
sharkdp ce4717144a Update CHANGELOG 2020-05-11 19:33:13 +02:00
Mitchell Kember f59d00d4c7 Fix base16, and combine 00 and 0f alpha encodings
This changes the base16 theme back from #RRGGBB0f to #RRGGBB00,
reverting part of #934. That PR used the 0f encoding to produce ANSI
escape sequences 30-37 and 40-47 rather than 38;5 and 48;5 which require
256-color support. Unfortunately, it resulted in base16 using the wrong
colors becuase ansi_term does not support the bright variants (90-97 and
100-107) so it simply mapped them to the non-bright colors.

This PR makes combines the 00 and 0f alpha encodings into 00, and makes
them use the Color enum for the first 8 colors and Fixed otherwise. This
means the ansi-light and ansi-dark themes will work on terminals without
256-color support, and base16 will render bright colors correctly.
2020-05-11 19:29:19 +02:00
Ethan P dcfdbf82dd Do not warn if both 'bat' and 'batcat' are available in info.sh 2020-05-02 10:39:58 +02:00
Ethan P 0cb884d501 Prevent batcat warning from being in output of info.sh 2020-05-02 10:39:58 +02:00
Ethan P 7bc4020a92 Check for 'batcat' in info.sh 2020-05-02 10:39:58 +02:00
sharkdp 0792195156 Properly add QML submodule 2020-05-01 10:24:19 +02:00
dependabot-preview[bot] 83f24ffcfb Bump git2 from 0.13.3 to 0.13.5
Bumps [git2](https://github.com/rust-lang/git2-rs) from 0.13.3 to 0.13.5.
- [Release notes](https://github.com/rust-lang/git2-rs/releases)
- [Commits](https://github.com/rust-lang/git2-rs/compare/0.13.3...0.13.5)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-05-01 10:21:19 +02:00
pylipp 74ec390770 Add QML syntax
QML.sublime-syntax file generated from Support/QML.tmLanguage using
Sublime's built-in converter.
Fix sharkdp/bat#962
2020-04-30 09:59:14 +02:00
Mario Zaizar 9014ffcfd8 Adds Email (https://github.com/mariozaizar/email.sublime-syntax) 2020-04-29 19:38:39 +02:00
sharkdp 81af375289 Use console 0.11.2, see #955 2020-04-28 21:18:48 +02:00
sharkdp d707eab95c Revert "Use console 0.11.1, see #955"
This reverts commit d64c55ef11.
The build on Windows failed due to two broken tests:

    line_numbers
    tabs_numbers
2020-04-28 09:22:19 +02:00
sharkdp d64c55ef11 Use console 0.11.1, see #955 2020-04-28 00:00:59 +02:00
sharkdp 2b1d53fb27 Add '--locked' flag to all 'cargo install' commands 2020-04-27 23:43:18 +02:00
sharkdp bf696f58c8 Pin version of console to 0.10.0 2020-04-27 23:37:06 +02:00
sharkdp 296bad8ffd Update CHANGELOG 2020-04-27 22:01:41 +02:00
sharkdp 94310af30c Add Fortran syntax, closes #957 2020-04-27 21:45:36 +02:00
sharkdp 38c096bf79 Update CHANGELOG 2020-04-25 15:19:42 +02:00
sharkdp 696d1b3ed3 Update CHANGELOG 2020-04-25 13:17:07 +02:00
sharkdp 17d98724a5 Bump version to v0.15.0 2020-04-25 13:09:24 +02:00
sharkdp 7d7ee1b594 Update cached verison of themes 2020-04-25 13:08:30 +02:00
sharkdp 682b4209f2 Update solarized themes to braver/Solarized, closes #941 2020-04-25 13:08:30 +02:00
sharkdp 41ddcbd240 Remove old Sublime themes 2020-04-25 13:08:30 +02:00
sharkdp 48a7ce3bf2 Write error messages to pager, if attached
closes #946
2020-04-25 13:08:00 +02:00
Lzu Tao 3bcc4d0d55 lto=true and codegen-units=1 together 2020-04-24 17:39:25 +02:00
Lzu Tao 8821bca656 appveyor: Use rustup minimal profile 2020-04-24 17:39:25 +02:00
Lzu Tao 56111aa20d simplify build.rs 2020-04-24 17:39:25 +02:00
sharkdp 5fe8a8342b Add annotations again 2020-04-24 16:51:11 +02:00
sharkdp 989109145a Add '-d' for '--diff' 2020-04-24 16:12:38 +02:00
sharkdp 23afc8e90c Skip non-file inputs when using --diff 2020-04-24 16:12:38 +02:00
sharkdp 8e18786556 Run 'cargo fmt' 2020-04-24 16:11:05 +02:00
sharkdp 81488adf8b Use unreachable!(…) 2020-04-24 16:11:05 +02:00
Lzu Tao e37e9c1214 Fix some clippy lints
Some might actually improve perf
2020-04-24 16:11:05 +02:00
Lzu Tao a4828387c1 simplify build.rs 2020-04-24 16:11:05 +02:00
sharkdp abeac8b12e Bump min. required Rust version to 1.40 2020-04-24 09:57:57 +02:00
sharkdp 82e7786e74 Implementation of 'bat --diff'
This adds a new `--diff` option that can be used to only show lines
close to Git changes (added/removed/modified lines). The amount of
additional context can be controlled with `--diff-context=N`.

closes #23
2020-04-24 09:57:57 +02:00
sharkdp 0064321323 cargo fmt 2020-04-23 00:56:35 +02:00
sharkdp 9e622a1a5f Update version in README 2020-04-23 00:56:27 +02:00
39 changed files with 734 additions and 241 deletions
+12 -3
View File
@@ -166,9 +166,6 @@
[submodule "assets/themes/Nord-sublime"]
path = assets/themes/Nord-sublime
url = https://github.com/crabique/Nord-plist.git
[submodule "assets/themes/solarized-sublime"]
path = assets/themes/solarized-sublime
url = https://github.com/paulcpederson/solarized-sublime.git
[submodule "assets/syntaxes/Vue"]
path = assets/syntaxes/02_Extra/Vue
url = https://github.com/vuejs/vue-syntax-highlight.git
@@ -179,3 +176,15 @@
[submodule "assets/syntaxes/02_Extra/Stylus"]
path = assets/syntaxes/02_Extra/Stylus
url = https://github.com/billymoon/Stylus
[submodule "assets/themes/Solarized"]
path = assets/themes/Solarized
url = https://github.com/braver/Solarized
[submodule "assets/syntaxes/02_Extra/Fortran"]
path = assets/syntaxes/02_Extra/Fortran
url = https://github.com/315234/SublimeFortran
[submodule "assets/syntaxes/02_Extra/Email"]
path = assets/syntaxes/02_Extra/Email
url = https://github.com/mariozaizar/email.sublime-syntax.git
[submodule "assets/syntaxes/02_Extra/QML"]
path = assets/syntaxes/02_Extra/QML
url = https://github.com/skozlovf/Sublime-QML
+3 -3
View File
@@ -32,15 +32,15 @@ matrix:
# Minimum Rust supported channel.
- os: linux
rust: 1.37.0
rust: 1.40.0
env: TARGET=x86_64-unknown-linux-gnu
- os: linux
rust: 1.37.0
rust: 1.40.0
env:
- TARGET=x86_64-unknown-linux-musl
- CC_x86_64_unknown_linux_musl=/usr/bin/musl-gcc
- os: osx
rust: 1.37.0
rust: 1.40.0
env: TARGET=x86_64-apple-darwin
# Disable nightly for now
+45 -11
View File
@@ -1,15 +1,49 @@
# Upcoming release
# unreleased
## Features
## Bugfixes
## Other
## `bat` as a library
## New syntaxes
## New themes
## `bat` as a library
## Packaging
# v0.15.1
## Bugfixes
- Fix highlighting of Markdown files, see #963 and #977
- Fix `base16` theme (was broken since in v0.14), see #972, #934 and #979 (@mk12).
Users suffering from #865 ("no color for bat in ssh from a Windows client") can use the `ansi-dark` and `ansi-light` themes from now on.
## New syntaxes
- Fortran, see #957
- Email (@mariozaizar)
- QML, see #962 (@pylipp)
# v0.15.0
## Features
- Add a new `--diff`/`-d` option that can be used to only show lines surrounding
Git changes, i.e. added, removed or modified lines. The amount of additional
context can be controlled with `--diff-context=N`. See #23 and #940
## Bugfixes
- Error message printed in the middle of the output for another file, see #946
- Performance improvements when using custom caches (via `bat cache --build`): the `bat` startup time should now be twice as fast (@lzutao).
## Themes
- Updated version of the Solarized dark/light themes, see #941
## `bat` as a library
- There are a few changes in the "low level" API (the `Config` struct has changed and
the error handler needs a new `&mut dyn Write` argument). The high-level API is not
affected.
# v0.14.0
@@ -414,7 +448,7 @@ You can see the API documentation here: https://docs.rs/bat/
## Bugfixes
- Bat Panics on Haskell Source Code, see #314
- Disable wrapping when `--style=plain`/`-p` is used, see #289
- Disable wrapping when `--style=plain`/`-p` is used, see #289
## Other
@@ -469,7 +503,7 @@ You can see the API documentation here: https://docs.rs/bat/
## Bugfixes
- Fixed panic when running `bat --list-languages | head`, see #232 (@mchlrhw)
- Respect `--color` settings for `--list-themes` and `--list-languages`, see #233
- Respect `--color` settings for `--list-themes` and `--list-languages`, see #233
- Git modifications now work on Windows
## Other
@@ -499,7 +533,7 @@ You can see the API documentation here: https://docs.rs/bat/
## Other
* Extended and cleaned-up `--help` text.
* Added initial version of a man page, see #52
* Added initial version of a man page, see #52
* New README sections: *Development* and *Troubleshooting*, see #220
# v0.5.0
@@ -514,18 +548,18 @@ You can see the API documentation here: https://docs.rs/bat/
## Changes
- The customization of syntax sets and theme sets is now separated. Syntax definitions are now loaded *in addition* to the ones that are stored in the `bat` binary by default. Please refer to these new sections in the README: [Adding new syntaxes](https://github.com/sharkdp/bat#adding-new-syntaxes--language-definitions), [Adding new themes](https://github.com/sharkdp/bat#adding-new-themes), also see #172
- The customization of syntax sets and theme sets is now separated. Syntax definitions are now loaded *in addition* to the ones that are stored in the `bat` binary by default. Please refer to these new sections in the README: [Adding new syntaxes](https://github.com/sharkdp/bat#adding-new-syntaxes--language-definitions), [Adding new themes](https://github.com/sharkdp/bat#adding-new-themes), also see #172
- The color for the filename is now the default foreground color. The colors for the grid and the line numbers is now determined from the syntax highlighting theme, which now also works for light backgrounds, see #178.
## Bugfixes
- Escape Sequences get partially stripped, see #182 (@eth-p)
- Use separate Git repository for snapshot testing, see #165 and #161
- Markdown breaking on JavaScript, see #183
- Markdown breaking on JavaScript, see #183
## Other
- Binaries for armv7 are now provided, see #196
- Binaries for armv7 are now provided, see #196
- `bat` is now in the official [Arch package repositories](https://www.archlinux.org/packages/community/x86_64/bat/).
- Optimizations in the RGB => 8-bit conversion (@mina86)
@@ -535,7 +569,7 @@ You can see the API documentation here: https://docs.rs/bat/
## Bugfixes
- Fix problem with `cargo test` when `bat` is not checked out in a Git repository, see #161
- Fix problem with `cargo test` when `bat` is not checked out in a Git repository, see #161
# v0.4.0
Generated
+22 -23
View File
@@ -114,19 +114,19 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]]
name = "bat"
version = "0.14.0"
version = "0.15.1"
dependencies = [
"ansi_colours 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)",
"ansi_term 0.12.1 (registry+https://github.com/rust-lang/crates.io-index)",
"assert_cmd 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)",
"atty 0.2.14 (registry+https://github.com/rust-lang/crates.io-index)",
"clap 2.33.0 (registry+https://github.com/rust-lang/crates.io-index)",
"console 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)",
"console 0.11.2 (registry+https://github.com/rust-lang/crates.io-index)",
"content_inspector 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)",
"dirs 2.0.2 (registry+https://github.com/rust-lang/crates.io-index)",
"encoding 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)",
"error-chain 0.12.2 (registry+https://github.com/rust-lang/crates.io-index)",
"git2 0.13.3 (registry+https://github.com/rust-lang/crates.io-index)",
"git2 0.13.5 (registry+https://github.com/rust-lang/crates.io-index)",
"globset 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)",
"lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
"liquid 0.20.0 (registry+https://github.com/rust-lang/crates.io-index)",
@@ -292,30 +292,20 @@ dependencies = [
"vec_map 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "clicolors-control"
version = "1.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"atty 0.2.14 (registry+https://github.com/rust-lang/crates.io-index)",
"lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
"libc 0.2.69 (registry+https://github.com/rust-lang/crates.io-index)",
"winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "console"
version = "0.10.0"
version = "0.11.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"clicolors-control 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)",
"encode_unicode 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)",
"lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
"libc 0.2.69 (registry+https://github.com/rust-lang/crates.io-index)",
"regex 1.3.7 (registry+https://github.com/rust-lang/crates.io-index)",
"terminal_size 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)",
"termios 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)",
"unicode-width 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)",
"winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
"winapi-util 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
@@ -550,12 +540,12 @@ dependencies = [
[[package]]
name = "git2"
version = "0.13.3"
version = "0.13.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
"libc 0.2.69 (registry+https://github.com/rust-lang/crates.io-index)",
"libgit2-sys 0.12.4+1.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
"libgit2-sys 0.12.5+1.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
"log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)",
"url 2.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
]
@@ -676,7 +666,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]]
name = "libgit2-sys"
version = "0.12.4+1.0.0"
version = "0.12.5+1.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"cc 1.0.52 (registry+https://github.com/rust-lang/crates.io-index)",
@@ -1267,6 +1257,15 @@ dependencies = [
"winapi-util 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "terminal_size"
version = "0.1.12"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"libc 0.2.69 (registry+https://github.com/rust-lang/crates.io-index)",
"winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "termios"
version = "0.3.2"
@@ -1515,8 +1514,7 @@ dependencies = [
"checksum chrono 0.4.11 (registry+https://github.com/rust-lang/crates.io-index)" = "80094f509cf8b5ae86a4966a39b3ff66cd7e2a3e594accec3743ff3fabeab5b2"
"checksum clang-sys 0.28.1 (registry+https://github.com/rust-lang/crates.io-index)" = "81de550971c976f176130da4b2978d3b524eaa0fd9ac31f3ceb5ae1231fb4853"
"checksum clap 2.33.0 (registry+https://github.com/rust-lang/crates.io-index)" = "5067f5bb2d80ef5d68b4c87db81601f0b75bca627bc2ef76b141d7b846a3c6d9"
"checksum clicolors-control 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = "90082ee5dcdd64dc4e9e0d37fbf3ee325419e39c0092191e0393df65518f741e"
"checksum console 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)" = "6728a28023f207181b193262711102bfbaf47cc9d13bc71d0736607ef8efe88c"
"checksum console 0.11.2 (registry+https://github.com/rust-lang/crates.io-index)" = "dea0f3e2e8d7dba335e913b97f9e1992c86c4399d54f8be1d31c8727d0652064"
"checksum constant_time_eq 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "245097e9a4535ee1e3e3931fcfcd55a796a44c643e8596ff6566d68f09b87bbc"
"checksum content_inspector 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)" = "b7bda66e858c683005a53a9a60c69a4aca7eeaa45d124526e389f7aec8e62f38"
"checksum crc32fast 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ba125de2af0df55319f41944744ad91c71113bf74a4646efff39afe1f6842db1"
@@ -1547,7 +1545,7 @@ dependencies = [
"checksum fxhash 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "c31b6d751ae2c7f11320402d34e41349dd1016f8d5d45e48c4312bc8625af50c"
"checksum generic-array 0.12.3 (registry+https://github.com/rust-lang/crates.io-index)" = "c68f0274ae0e023facc3c97b2e00f076be70e254bc851d972503b328db79b2ec"
"checksum getrandom 0.1.14 (registry+https://github.com/rust-lang/crates.io-index)" = "7abc8dd8451921606d809ba32e95b6111925cd2906060d2dcc29c070220503eb"
"checksum git2 0.13.3 (registry+https://github.com/rust-lang/crates.io-index)" = "bdfc6e264105ef4bf1f5c9a0907f285b43ed2ede987b4876556d0478359f0a0f"
"checksum git2 0.13.5 (registry+https://github.com/rust-lang/crates.io-index)" = "e1e02a51cd90229028c9bd8be0a0364f85b6b3199cccaa0ef39005ddbd5ac165"
"checksum glob 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "9b919933a397b79c37e33b77bb2aa3dc8eb6e165ad809e58ff75bc7db2e34574"
"checksum globset 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)" = "7ad1da430bd7281dde2576f44c84cc3f0f7b475e7202cd503042dff01a8c8120"
"checksum hermit-abi 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)" = "8a0d737e0f947a1864e93d33fdef4af8445a00d1ed8dc0c8ddb73139ea6abf15"
@@ -1563,7 +1561,7 @@ dependencies = [
"checksum lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
"checksum lazycell 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "b294d6fa9ee409a054354afc4352b0b9ef7ca222c69b8812cbea9e7d2bf3783f"
"checksum libc 0.2.69 (registry+https://github.com/rust-lang/crates.io-index)" = "99e85c08494b21a9054e7fe1374a732aeadaff3980b6990b94bfd3a70f690005"
"checksum libgit2-sys 0.12.4+1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ef2870ecd7b50a76391b108edc2c62283ad2b62e5b1ab4d5263ef1cd04ef1c44"
"checksum libgit2-sys 0.12.5+1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "3eadeec65514971355bf7134967a543f71372f35b53ac6c7143e7bd157f07535"
"checksum libloading 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)" = "f2b111a074963af1d37a139918ac6d49ad1d0d5e47f72fd55388619691a7d753"
"checksum libz-sys 1.0.25 (registry+https://github.com/rust-lang/crates.io-index)" = "2eb5e43362e38e2bca2fd5f5134c4d4564a23a5c28e9b95411652021a8675ebe"
"checksum line-wrap 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "f30344350a2a51da54c1d53be93fade8a237e545dbcc4bdbe635413f2117cab9"
@@ -1634,6 +1632,7 @@ dependencies = [
"checksum tempdir 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)" = "15f2b5fb00ccdf689e0149d1b1b3c03fead81c2b37735d812fa8bddbbf41b6d8"
"checksum term_size 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "9e5b9a66db815dcfd2da92db471106457082577c3c278d4138ab3e3b4e189327"
"checksum termcolor 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "bb6bfa289a4d7c5766392812c0a1f4c1ba45afa1ad47803c11e1f407d846d75f"
"checksum terminal_size 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)" = "8038f95fc7a6f351163f4b964af631bd26c9e828f7db085f2a84aca56f70d13b"
"checksum termios 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)" = "6f0fcee7b24a25675de40d5bb4de6e41b0df07bc9856295e7e2b3a3600c400c2"
"checksum textwrap 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)" = "d326610f408c7a4eb6f51c37c330e496b08506c9457c9d34287ecc38809fb060"
"checksum thread_local 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = "d40c6d1b69745a6ec6fb1ca717914848da4b44ae29d9b3080cbee91d72a69b14"
+3 -3
View File
@@ -7,7 +7,7 @@ license = "MIT/Apache-2.0"
name = "bat"
readme = "README.md"
repository = "https://github.com/sharkdp/bat"
version = "0.14.0"
version = "0.15.1"
exclude = [
"assets/syntaxes/*",
"assets/themes/*",
@@ -39,7 +39,7 @@ regex-fancy = ["syntect/regex-fancy"] # Use the rust-only "fancy-regex" engine
atty = { version = "0.2.14", optional = true }
ansi_term = "^0.12.1"
ansi_colours = "^1.0"
console = "0.10"
console = "0.11.2"
dirs = { version = "2.0", optional = true }
lazy_static = { version = "1.4", optional = true }
wild = { version = "2.0", optional = true }
@@ -79,7 +79,7 @@ assert_cmd = "1.0.1"
[build-dependencies]
clap = { version = "2.33", optional = true }
liquid = { version = "0.20", optional = true }
lazy_static = { version = "1.4", optional = true }
[profile.release]
lto = true
codegen-units = 1
+5 -5
View File
@@ -187,7 +187,7 @@ the most recent release of `bat`, download the latest `.deb` package from the
[release page](https://github.com/sharkdp/bat/releases) and install it via:
```bash
sudo dpkg -i bat_0.13.0_amd64.deb # adapt version number and architecture
sudo dpkg -i bat_0.15.1_amd64.deb # adapt version number and architecture
```
### On Alpine Linux
@@ -348,11 +348,11 @@ binaries are also available: look for archives with `musl` in the file name.
### From source
If you want to build `bat` from source, you need Rust 1.37 or
If you want to build `bat` from source, you need Rust 1.40 or
higher. You can then use `cargo` to build everything:
```bash
cargo install bat
cargo install --locked bat
```
On some platforms, you might need to install `llvm` and/or `libclang-dev`.
@@ -606,11 +606,11 @@ cargo build --bins
cargo test
# Install (release version)
cargo install
cargo install --locked
# Build a bat binary with modified syntaxes and themes
bash assets/create.sh
cargo install -f
cargo install --locked --force
```
## Maintainers
+1 -1
View File
@@ -8,7 +8,7 @@ environment:
install:
- appveyor DownloadFile https://win.rustup.rs/ -FileName rustup-init.exe
- rustup-init.exe -y --default-host %TARGET%
- rustup-init.exe -y --default-host %TARGET% --profile minimal
- set PATH=%PATH%;C:\cargo\bin
- rustc -Vv
- cargo -V
+168
View File
@@ -0,0 +1,168 @@
diff --git syntaxes/01_Packages/Markdown/Markdown.sublime-syntax syntaxes/01_Packages/Markdown/Markdown.sublime-syntax
index 19dc685d..6afd87ae 100644
--- syntaxes/01_Packages/Markdown/Markdown.sublime-syntax
+++ syntaxes/01_Packages/Markdown/Markdown.sublime-syntax
@@ -24,7 +24,6 @@ variables:
)
[ \t]*$ # followed by any number of tabs or spaces, followed by the end of the line
)
- setext_escape: ^(?=\s{0,3}(?:---+|===+)\s*$)
block_quote: (?:[ ]{,3}>(?:.|$)) # between 0 and 3 spaces, followed by a greater than sign, followed by any character or the end of the line
atx_heading: (?:[#]{1,6}\s*) # between 1 and 6 hashes, followed by any amount of whitespace
indented_code_block: (?:[ ]{4}|\t) # 4 spaces or a tab
@@ -277,69 +276,40 @@ contexts:
8: markup.underline.link.markdown
push: [link-ref-def, after-link-title, link-title]
- match: '^(?=\S)(?![=-]{3,}\s*$)'
- branch_point: heading2-branch
- branch:
- - not-heading2
- - heading2
-
- not-paragraph:
- - match: |-
- (?x) # pop out of this context when one of the following conditions are met:
- ^(?:
- \s*$ # the line is blank (or only contains whitespace)
- | (?=
- {{block_quote}} # a block quote begins the line
- | [ ]{,3}[*+-][ ] # an unordered list item begins the line
- | [ ]{,3}1[.][ ] # an ordered list item with number "1" begins the line
- | \# # an ATX heading begins the line
- | [ ]{,3}<( # all types of HTML blocks except type 7 may interrupt a paragraph
- {{html_tag_block_end_at_close_tag}} # 1
- | !-- # 2
- | \? # 3
- | ![A-Z] # 4
- | !\[CDATA\[ # 5
- | {{html_tag_block_end_at_blank_line}} # 6
+ push:
+ - meta_scope: meta.paragraph.markdown
+ - match: |-
+ (?x) # pop out of this context when one of the following conditions are met:
+ ^(?:
+ \s*$ # the line is blank (or only contains whitespace)
+ | (?=
+ {{block_quote}} # a block quote begins the line
+ | [ ]{,3}[*+-][ ] # an unordered list item begins the line
+ | [ ]{,3}1[.][ ] # an ordered list item with number "1" begins the line
+ | \# # an ATX heading begins the line
+ | [ ]{,3}<( # all types of HTML blocks except type 7 may interrupt a paragraph
+ {{html_tag_block_end_at_close_tag}} # 1
+ | !-- # 2
+ | \? # 3
+ | ![A-Z] # 4
+ | !\[CDATA\[ # 5
+ | {{html_tag_block_end_at_blank_line}} # 6
+ )
)
)
- )
- pop: true
-
- not-heading2:
- - include: not-paragraph
- - match: (?=\S)
- branch_point: heading1-branch
- branch:
- - paragraph
- - heading1
- - match: ''
- pop: true
-
- paragraph:
- - meta_scope: meta.paragraph.markdown
- - match: ^\s{0,3}===+\s*$
- fail: heading1-branch
- - match: ^\s{0,3}---+\s*$
- fail: heading2-branch
- - include: not-paragraph
- - include: inline-bold-italic-linebreak
- - include: scope:text.html.basic
-
- heading1:
- - meta_scope: markup.heading.1.markdown
- - include: inline-bold-italic-linebreak
- - match: '^[ \t]{0,3}(={3,})(?=[ \t]*$)'
- captures:
- 1: markup.heading.1.setext.markdown punctuation.definition.heading.setext.markdown
- pop: true
-
- heading2:
- - meta_scope: markup.heading.2.markdown
- - include: inline-bold-italic-linebreak
- - match: '^[ \t]{0,3}(-{3,})(?=[ \t]*$)'
- captures:
- 1: markup.heading.2.setext.markdown punctuation.definition.heading.setext.markdown
- pop: true
-
+ pop: true
+ - include: inline-bold-italic-linebreak
+ - include: scope:text.html.basic
+ - match: '^(={3,})(?=[ \t]*$)'
+ scope: markup.heading.1.setext.markdown
+ captures:
+ 1: punctuation.definition.heading.setext.markdown
+ pop: true
+ - match: '^(-{3,})(?=[ \t]*$)'
+ scope: markup.heading.2.setext.markdown
+ captures:
+ 1: punctuation.definition.heading.setext.markdown
+ pop: true
link-ref-def:
- meta_scope: meta.link.reference.def.markdown
- match: ''
@@ -430,8 +400,6 @@ contexts:
push:
- meta_scope: markup.bold.markdown
- meta_content_scope: markup.italic.markdown
- - match: '{{setext_escape}}'
- pop: true
- match: |-
(?x)
[ \t]*\*{4,} # if there are more than 3 its not applicable to be bold or italic
@@ -446,8 +414,6 @@ contexts:
scope: punctuation.definition.bold.end.markdown
set:
- meta_content_scope: markup.italic.markdown
- - match: '{{setext_escape}}'
- pop: true
- match: |-
(?x)
[ \t]*\*{3,} # if there are more than 3 its not applicable to be bold or italic
@@ -463,8 +429,6 @@ contexts:
scope: punctuation.definition.italic.end.markdown
set:
- meta_content_scope: markup.bold.markdown
- - match: '{{setext_escape}}'
- pop: true
- match: |-
(?x)
[ \t]*\*{3,} # if there are more than 3 its not applicable to be bold or italic
@@ -727,8 +691,6 @@ contexts:
scope: punctuation.definition.italic.begin.markdown
push:
- meta_scope: markup.italic.markdown
- - match: '{{setext_escape}}'
- pop: true
- match: |-
(?x)
[ \t]*\*{4,} # if there are more than 3 its not applicable to be bold or italic
@@ -745,8 +707,6 @@ contexts:
scope: punctuation.definition.italic.begin.markdown
push:
- meta_scope: markup.italic.markdown
- - match: '{{setext_escape}}'
- pop: true
- match: |-
(?x)
[ \t]*_{4,} # if there are more than 3 its not applicable to be bold or italic
@@ -773,8 +733,6 @@ contexts:
- include: bold-italic-trailing
bold-italic-trailing:
- include: scope:text.html.basic
- - match: '{{setext_escape}}'
- pop: true
- match: ^\s*$\n?
scope: invalid.illegal.non-terminated.bold-italic.markdown
pop: true
BIN
View File
Binary file not shown.
+103
View File
@@ -0,0 +1,103 @@
%YAML 1.2
---
# http://www.sublimetext.com/docs/3/syntax.html
name: QML
file_extensions:
- qml
- qmlproject
scope: source.qml
contexts:
main:
- match: /\*(?!/)
comment: Block comment.
push:
- meta_scope: comment.block.documentation.qml
- match: \*/
pop: true
- match: //.*$
comment: Line comment.
scope: comment.line.double-slash.qml
- match: \b(import)\s+
comment: import statement.
captures:
1: keyword.other.import.qml
push:
- meta_scope: meta.import.qml
- match: $
pop: true
- match: '([\w\d\.]+)\s+(\d+\.\d+)(?:\s+(as)\s+([A-Z][\w\d]*))?'
comment: "import Namespace VersionMajor.VersionMinor [as SingletonTypeIdentifier]"
scope: meta.import.namespace.qml
captures:
1: entity.name.class.qml
2: constant.numeric.qml
3: keyword.other.import.qml
4: entity.name.class.qml
- match: '(\"[^\"]+\")(?:\s+(as)\s+([A-Z][\w\d]*))?'
comment: "import <string> [as Script]"
scope: meta.import.dirjs.qml
captures:
1: string.quoted.double.qml
2: keyword.other.import.qml
3: entity.name.class.qml
- match: '\b[A-Z]\w*\b'
comment: Capitalized word (class or enum).
scope: support.class.qml
- match: '(((^|\{)\s*)|\b)on[A-Z]\w*\b'
comment: onSomething - handler.
scope: support.class.qml
- match: '(?:^|\{)\s*(id)\s*\:\s*([^;\s]+)\b'
comment: "id: <something>"
scope: meta.id.qml
captures:
1: keyword.other.qml
2: storage.modifier.qml
- match: '^\s*(?:(default|readonly)\s+)?(property)\s+(?:(alias)|([\w\<\>]+))\s+(\w+)'
comment: property definition.
scope: meta.propertydef.qml
captures:
1: keyword.other.qml
2: keyword.other.qml
3: keyword.other.qml
4: storage.type.qml
5: entity.other.attribute-name.qml
- match: \b(signal)\s+(\w+)\s*
comment: "signal <signalName>[([<type> <parameter>[, ...]])]"
captures:
1: keyword.other.qml
2: support.function.qml
push:
- meta_scope: meta.signal.qml
- match: ;|(?=/)|$
pop: true
- match: (\w+)\s+(\w+)
scope: meta.signal.parameters.qml
captures:
1: storage.type.qml
2: variable.parameter.qml
- match: (?:\b|\s+)(?:(true|false|null|undefined)|(var|void)|(on|as|enum|connect|break|case|catch|continue|debugger|default|delete|do|else|finally|for|if|in|instanceof|new|return|switch|this|throw|try|typeof|while|with))\b
comment: js keywords.
scope: meta.keyword.qml
captures:
1: constant.language.qml
2: storage.type.qml
3: keyword.control.qml
- match: '\b(function)\s+([\w_]+)\s*(?=\()'
comment: function definition.
scope: meta.function.qml
captures:
1: storage.type.qml
2: entity.name.function.untitled
- match: '\b[\w_]+\s*(?=\()'
comment: function call.
scope: support.function.qml
- match: '(?:^|\{|;)\s*[a-z][\w\.]*\s*(?=\:)'
comment: "property (property: <something>)."
scope: entity.other.attribute-name.qml
- match: (?<=\.)\b\w*
comment: property of the variable (name.property).
scope: entity.other.attribute-name.qml
- match: '\b([a-z_]\w*)\b'
comment: All non colored words are assumed to be variables.
scope: variable.parameter
- include: scope:source.js
BIN
View File
Binary file not shown.
Vendored Submodule
+1
Submodule assets/themes/Solarized added at 87e01090cf
+59 -59
View File
@@ -3,8 +3,8 @@
<plist version="1.0">
<dict>
<!--
The colors in this theme are encoded as #RRGGBBAA where RR is an base16
color number from 00 to 0f, and AA is the special value 0f to indicate
The colors in this theme are encoded as #RRGGBBAA where RR is an ANSI
palette number from 00 to 0f, and AA is the special value 00 to indicate
that this encoding is being used.
-->
<key>author</key>
@@ -19,21 +19,21 @@
<key>settings</key>
<dict>
<key>background</key>
<string>#0000000f</string>
<string>#00000000</string>
<key>caret</key>
<string>#0700000f</string>
<string>#07000000</string>
<key>foreground</key>
<string>#0700000f</string>
<string>#07000000</string>
<key>invisibles</key>
<string>#0800000f</string>
<string>#08000000</string>
<key>lineHighlight</key>
<string>#0800000f</string>
<string>#08000000</string>
<key>selection</key>
<string>#0b00000f</string>
<string>#0b000000</string>
<key>gutter</key>
<string>#0a00000f</string>
<string>#0a000000</string>
<key>gutterForeground</key>
<string>#0800000f</string>
<string>#08000000</string>
</dict>
</dict>
<dict>
@@ -44,7 +44,7 @@
<key>settings</key>
<dict>
<key>foreground</key>
<string>#0700000f</string>
<string>#07000000</string>
</dict>
</dict>
<dict>
@@ -55,7 +55,7 @@
<key>settings</key>
<dict>
<key>foreground</key>
<string>#0800000f</string>
<string>#08000000</string>
</dict>
</dict>
<dict>
@@ -66,7 +66,7 @@
<key>settings</key>
<dict>
<key>foreground</key>
<string>#0700000f</string>
<string>#07000000</string>
</dict>
</dict>
<dict>
@@ -77,7 +77,7 @@
<key>settings</key>
<dict>
<key>foreground</key>
<string>#0700000f</string>
<string>#07000000</string>
</dict>
</dict>
<dict>
@@ -88,7 +88,7 @@
<key>settings</key>
<dict>
<key>foreground</key>
<string>#0700000f</string>
<string>#07000000</string>
</dict>
</dict>
<dict>
@@ -99,7 +99,7 @@
<key>settings</key>
<dict>
<key>foreground</key>
<string>#0500000f</string>
<string>#05000000</string>
</dict>
</dict>
<dict>
@@ -110,7 +110,7 @@
<key>settings</key>
<dict>
<key>foreground</key>
<string>#0700000f</string>
<string>#07000000</string>
</dict>
</dict>
<dict>
@@ -121,7 +121,7 @@
<key>settings</key>
<dict>
<key>foreground</key>
<string>#0400000f</string>
<string>#04000000</string>
</dict>
</dict>
<dict>
@@ -132,7 +132,7 @@
<key>settings</key>
<dict>
<key>foreground</key>
<string>#0e00000f</string>
<string>#0e000000</string>
</dict>
</dict>
<dict>
@@ -143,7 +143,7 @@
<key>settings</key>
<dict>
<key>foreground</key>
<string>#0300000f</string>
<string>#03000000</string>
</dict>
</dict>
<dict>
@@ -154,7 +154,7 @@
<key>settings</key>
<dict>
<key>foreground</key>
<string>#0f00000f</string>
<string>#0f000000</string>
</dict>
</dict>
<dict>
@@ -165,7 +165,7 @@
<key>settings</key>
<dict>
<key>foreground</key>
<string>#0400000f</string>
<string>#04000000</string>
</dict>
</dict>
<dict>
@@ -176,7 +176,7 @@
<key>settings</key>
<dict>
<key>foreground</key>
<string>#0500000f</string>
<string>#05000000</string>
</dict>
</dict>
<dict>
@@ -187,7 +187,7 @@
<key>settings</key>
<dict>
<key>foreground</key>
<string>#0600000f</string>
<string>#06000000</string>
</dict>
</dict>
<dict>
@@ -198,7 +198,7 @@
<key>settings</key>
<dict>
<key>foreground</key>
<string>#0200000f</string>
<string>#02000000</string>
</dict>
</dict>
<dict>
@@ -209,7 +209,7 @@
<key>settings</key>
<dict>
<key>foreground</key>
<string>#0900000f</string>
<string>#09000000</string>
</dict>
</dict>
<dict>
@@ -220,7 +220,7 @@
<key>settings</key>
<dict>
<key>foreground</key>
<string>#0900000f</string>
<string>#09000000</string>
</dict>
</dict>
<dict>
@@ -231,7 +231,7 @@
<key>settings</key>
<dict>
<key>foreground</key>
<string>#0900000f</string>
<string>#09000000</string>
</dict>
</dict>
<dict>
@@ -242,7 +242,7 @@
<key>settings</key>
<dict>
<key>foreground</key>
<string>#0900000f</string>
<string>#09000000</string>
</dict>
</dict>
<dict>
@@ -253,7 +253,7 @@
<key>settings</key>
<dict>
<key>foreground</key>
<string>#0100000f</string>
<string>#01000000</string>
</dict>
</dict>
<dict>
@@ -264,7 +264,7 @@
<key>settings</key>
<dict>
<key>foreground</key>
<string>#0900000f</string>
<string>#09000000</string>
</dict>
</dict>
<dict>
@@ -275,7 +275,7 @@
<key>settings</key>
<dict>
<key>foreground</key>
<string>#0400000f</string>
<string>#04000000</string>
</dict>
</dict>
<dict>
@@ -286,7 +286,7 @@
<key>settings</key>
<dict>
<key>foreground</key>
<string>#0500000f</string>
<string>#05000000</string>
</dict>
</dict>
<dict>
@@ -297,7 +297,7 @@
<key>settings</key>
<dict>
<key>foreground</key>
<string>#0900000f</string>
<string>#09000000</string>
</dict>
</dict>
<dict>
@@ -310,7 +310,7 @@
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#0400000f</string>
<string>#04000000</string>
</dict>
</dict>
<dict>
@@ -321,7 +321,7 @@
<key>settings</key>
<dict>
<key>foreground</key>
<string>#0900000f</string>
<string>#09000000</string>
</dict>
</dict>
<dict>
@@ -334,7 +334,7 @@
<key>fontStyle</key>
<string>bold</string>
<key>foreground</key>
<string>#0300000f</string>
<string>#03000000</string>
</dict>
</dict>
<dict>
@@ -347,7 +347,7 @@
<key>fontStyle</key>
<string>italic</string>
<key>foreground</key>
<string>#0500000f</string>
<string>#05000000</string>
</dict>
</dict>
<dict>
@@ -358,7 +358,7 @@
<key>settings</key>
<dict>
<key>foreground</key>
<string>#0200000f</string>
<string>#02000000</string>
</dict>
</dict>
<dict>
@@ -369,7 +369,7 @@
<key>settings</key>
<dict>
<key>foreground</key>
<string>#0100000f</string>
<string>#01000000</string>
</dict>
</dict>
<dict>
@@ -380,7 +380,7 @@
<key>settings</key>
<dict>
<key>foreground</key>
<string>#0900000f</string>
<string>#09000000</string>
</dict>
</dict>
<dict>
@@ -391,7 +391,7 @@
<key>settings</key>
<dict>
<key>foreground</key>
<string>#0900000f</string>
<string>#09000000</string>
</dict>
</dict>
<dict>
@@ -402,9 +402,9 @@
<key>settings</key>
<dict>
<key>background</key>
<string>#0b00000f</string>
<string>#0b000000</string>
<key>foreground</key>
<string>#0700000f</string>
<string>#07000000</string>
</dict>
</dict>
<dict>
@@ -415,7 +415,7 @@
<key>settings</key>
<dict>
<key>foreground</key>
<string>#0200000f</string>
<string>#02000000</string>
</dict>
</dict>
<dict>
@@ -426,7 +426,7 @@
<key>settings</key>
<dict>
<key>foreground</key>
<string>#0100000f</string>
<string>#01000000</string>
</dict>
</dict>
<dict>
@@ -437,7 +437,7 @@
<key>settings</key>
<dict>
<key>foreground</key>
<string>#0500000f</string>
<string>#05000000</string>
</dict>
</dict>
<dict>
@@ -448,7 +448,7 @@
<key>settings</key>
<dict>
<key>foreground</key>
<string>#0600000f</string>
<string>#06000000</string>
</dict>
</dict>
<dict>
@@ -459,7 +459,7 @@
<key>settings</key>
<dict>
<key>foreground</key>
<string>#0600000f</string>
<string>#06000000</string>
</dict>
</dict>
<dict>
@@ -470,7 +470,7 @@
<key>settings</key>
<dict>
<key>foreground</key>
<string>#0600000f</string>
<string>#06000000</string>
</dict>
</dict>
<dict>
@@ -481,7 +481,7 @@
<key>settings</key>
<dict>
<key>foreground</key>
<string>#0500000f</string>
<string>#05000000</string>
</dict>
</dict>
<dict>
@@ -492,9 +492,9 @@
<key>settings</key>
<dict>
<key>background</key>
<string>#0100000f</string>
<string>#01000000</string>
<key>foreground</key>
<string>#0f00000f</string>
<string>#0f000000</string>
</dict>
</dict>
<dict>
@@ -505,9 +505,9 @@
<key>settings</key>
<dict>
<key>background</key>
<string>#0900000f</string>
<string>#09000000</string>
<key>foreground</key>
<string>#0000000f</string>
<string>#00000000</string>
</dict>
</dict>
<dict>
@@ -518,9 +518,9 @@
<key>settings</key>
<dict>
<key>background</key>
<string>#0e00000f</string>
<string>#0e000000</string>
<key>foreground</key>
<string>#0f00000f</string>
<string>#0f000000</string>
</dict>
</dict>
<dict>
@@ -531,9 +531,9 @@
<key>settings</key>
<dict>
<key>background</key>
<string>#0800000f</string>
<string>#08000000</string>
<key>foreground</key>
<string>#0f00000f</string>
<string>#0f000000</string>
</dict>
</dict>
</array>
+8 -14
View File
@@ -12,16 +12,10 @@ fn main() -> Result<(), Box<dyn std::error::Error>> {
use std::fs;
use std::path::Path;
use lazy_static::lazy_static;
// Read environment variables.
lazy_static! {
static ref PROJECT_NAME: &'static str = option_env!("PROJECT_NAME").unwrap_or("bat");
static ref PROJECT_VERSION: &'static str = option_env!("CARGO_PKG_VERSION").unwrap();
static ref EXECUTABLE_NAME: &'static str = option_env!("PROJECT_EXECUTABLE")
.or(option_env!("PROJECT_NAME"))
.unwrap_or("bat");
}
let project_name = option_env!("PROJECT_NAME").unwrap_or("bat");
let executable_name = option_env!("PROJECT_EXECUTABLE").unwrap_or(project_name);
static PROJECT_VERSION: &str = env!("CARGO_PKG_VERSION");
/// Generates a file from a liquid template.
fn template(
@@ -38,16 +32,16 @@ fn main() -> Result<(), Box<dyn std::error::Error>> {
}
let variables = liquid::object!({
"PROJECT_NAME": PROJECT_NAME.to_owned(),
"PROJECT_EXECUTABLE": EXECUTABLE_NAME.to_owned(),
"PROJECT_VERSION": PROJECT_VERSION.to_owned(),
"PROJECT_NAME": project_name,
"PROJECT_EXECUTABLE": executable_name,
"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);
std::fs::create_dir_all(out_dir.join("assets/manual")).unwrap();
std::fs::create_dir_all(out_dir.join("assets/completions")).unwrap();
fs::create_dir_all(out_dir.join("assets/manual")).unwrap();
fs::create_dir_all(out_dir.join("assets/completions")).unwrap();
template(
&variables,
+56 -14
View File
@@ -7,6 +7,20 @@ set -o pipefail
export LC_ALL=C
export LANG=C
BAT="bat"
if ! command -v bat &>/dev/null; then
if command -v batcat &> /dev/null; then
BAT="batcat"
else
tput setaf 1
printf "%s\n%s\n" \
"Unable to find a bat executable on your PATH." \
"Please ensure that 'bat' exists and is not named something else."
tput sgr0
exit 1
fi
fi
# -----------------------------------------------------------------------------
# Modules:
# -----------------------------------------------------------------------------
@@ -41,33 +55,42 @@ _tool_:description() {
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
_bat_:run() {
_out bat --version
_out "$BAT" --version
_out env | grep '^BAT_\|^PAGER='
local cache_dir="$(bat --cache-dir)"
if [[ -f "${cache_dir}/syntaxes.bin" ]]; then
_print_command "bat" "--list-languages"
_print_command "$BAT" "--list-languages"
echo "Found custom syntax set."
fi
if [[ -f "${cache_dir}/themes.bin" ]]; then
_print_command "bat" "--list-themes"
_print_command "$BAT" "--list-themes"
echo "Found custom theme set."
fi
}
_bat_config_:run() {
if [[ -f "$(bat --config-file)" ]]; then
_out_fence cat "$(bat --config-file)"
if [[ -f "$("$BAT" --config-file)" ]]; then
_out_fence cat "$("$BAT" --config-file)"
fi
}
_bat_wrapper_:run() {
if file "$(which bat)" | grep "text executable" &> /dev/null; then
_out_fence cat "$(which bat)"
return
_bat_wrapper_:detect_wrapper() {
local bat="$1"
if file "$(which "${bat}")" | grep "text executable" &> /dev/null; then
_out_fence cat "$(which "${bat}")"
return
fi
printf "\nNo wrapper script for '%s'.\n" "${bat}"
}
_bat_wrapper_:detect_wrapper bat
if [[ "$BAT" != "bat" ]]; then
_bat_wrapper_:detect_wrapper "$BAT"
fi
printf "\nNo wrapper script.\n"
}
_bat_wrapper_function_:run() {
@@ -75,17 +98,17 @@ _bat_wrapper_function_:run() {
local command="$1"
case "$("$SHELL" --version | head -n 1)" in
*fish*)
if "$SHELL" --login -i -c "type ${command}" 2>&1 | grep 'function' &>/dev/null; then
if "$SHELL" --login -i -c "type ${command}" 2>&1 | grep 'function' &> /dev/null; then
_out_fence "$SHELL" --login -i -c "functions ${command}"
return
fi ;;
*bash*|*zsh*)
*bash* | *zsh*)
local type="$("$SHELL" --login -i -c "type ${command}" 2>&1)"
if grep 'function' <<< "$type" &>/dev/null; then
if grep 'function' <<< "$type" &> /dev/null; then
_out_fence "$SHELL" --login -i -c "declare -f ${command}"
return
elif grep 'alias' <<< "$type" &>/dev/null; then
elif grep 'alias' <<< "$type" &> /dev/null; then
_out_fence "$SHELL" --login -i -c "type ${command}"
return
fi ;;
@@ -99,6 +122,9 @@ _bat_wrapper_function_:run() {
_bat_wrapper_function_:detect_wrapper bat
_bat_wrapper_function_:detect_wrapper cat
if [[ "$BAT" != "bat" ]]; then
_bat_wrapper_function_:detect_wrapper "$BAT"
fi
}
_system_:run() {
@@ -169,7 +195,8 @@ EOF
declare -f "_$1_:run" \
| sed 's/^ *//; s/;$//' \
| grep '^_out[^ ]* ' \
| sed 's/^_out[^ ]* //' 1>&2
| sed 's/^_out[^ ]* //' \
| sed "s/\"\$BAT\"/$BAT/" 1>&2
# Prompt
printf "\n" 1>&2
@@ -196,6 +223,21 @@ _run_module() {
# Functions:
# -----------------------------------------------------------------------------
# Tell the user if their executable isn't named "bat".
if [[ "$BAT" != "bat" ]] && [[ "$1" != '-y' ]]; then
trap '_tput rmcup; exit 1' INT
_tput smcup
_tput clear
_tput cup 0 0
_tput setaf 1
printf "The %s executable on your system is named '%s'.\n%s\n" "bat" "$BAT" \
"If your issue is related to installation, please check that this isn't the issue."
_tput sgr0
printf "Press any key to continue...\n"
read -rsn1
_tput rmcup
fi
# Ask for consent.
if [[ "$1" == '-y' ]]; then
_modules_consented=("${_modules[@]}")
+4 -4
View File
@@ -180,7 +180,7 @@ apt install bat
batの最新リリースを実行する場合、または Ubuntu/Debian の古いバージョンを使用している場合は、[release page](https://github.com/sharkdp/bat/releases) から最新の `.deb` パッケージをダウンロードし、
次の方法でインストールします:
```bash
sudo dpkg -i bat_0.13.0_amd64.deb # adapt version number and architecture
sudo dpkg -i bat_0.15.1_amd64.deb # adapt version number and architecture
```
### On Alpine Linux
@@ -345,7 +345,7 @@ ansible-galaxy install aeimer.install_bat
そして `cargo` をビルドに対して使用します:
```bash
cargo install bat
cargo install --locked bat
```
一部のプラットフォームでは `llvm` および/または `libclang-dev` のインストールが必要になる場合があります。
@@ -594,11 +594,11 @@ cargo build --bins
cargo test
# Install (release version)
cargo install
cargo install --locked
# Build a bat binary with modified syntaxes and themes
bash assets/create.sh
cargo install -f
cargo install --locked --force
```
## Maintainers
+4 -4
View File
@@ -170,7 +170,7 @@ apt install bat
만약 최근 릴리즈된 bat을 사용을 원하거나 buntu/Debian 예전 버전을 사용하는 경우, [릴리즈 페이지](https://github.com/sharkdp/bat/releases)에서 다음과 같이 `.deb` 패키지를 받아 설치 할 수도 있습니다:
```bash
sudo dpkg -i bat_0.13.0_amd64.deb # adapt version number and architecture
sudo dpkg -i bat_0.15.1_amd64.deb # adapt version number and architecture
```
### On Alpine Linux
@@ -327,7 +327,7 @@ ansible-galaxy install aeimer.install_bat
`bat`의 소스를 직접 빌드하기 위해서는, Rust 1.36 이상이 필요하며 `cargo`를 이용해 빌드할 수 있습니다.
```bash
cargo install bat
cargo install --locked bat
```
일부 플랫폼에서는 `llvm` 그리고/또는 `libclang-dev` 설치가 필요할 수도 있습니다.
@@ -528,11 +528,11 @@ cargo build --bins
cargo test
# Install (release version)
cargo install
cargo install --locked
# Build a bat binary with modified syntaxes and themes
bash assets/create.sh
cargo install -f
cargo install --locked --force
```
## 메인테이너들
+3 -3
View File
@@ -180,7 +180,7 @@ impl HighlightingAssets {
theme
);
}
&self.theme_set.themes[self.fallback_theme.unwrap_or(Self::default_theme())]
&self.theme_set.themes[self.fallback_theme.unwrap_or_else(|| Self::default_theme())]
}
}
}
@@ -204,7 +204,7 @@ impl HighlightingAssets {
let path = Path::new(path_str);
let line_syntax = self.get_first_line_syntax(&mut input.reader);
let absolute_path = path.canonicalize().ok().unwrap_or(path.to_owned());
let absolute_path = path.canonicalize().ok().unwrap_or_else(|| path.to_owned());
match mapping.get_syntax_for(absolute_path) {
Some(MappingTarget::MapTo(syntax_name)) => {
// TODO: we should probably return an error here if this syntax can not be
@@ -221,7 +221,7 @@ impl HighlightingAssets {
OpenedInputKind::StdIn | OpenedInputKind::CustomReader => {
if let Some(ref name) = input.metadata.user_provided_name {
self.get_extension_syntax(&name)
.or(self.get_first_line_syntax(&mut input.reader))
.or_else(|| self.get_first_line_syntax(&mut input.reader))
} else {
self.get_first_line_syntax(&mut input.reader)
}
+1 -1
View File
@@ -13,7 +13,7 @@ pub struct AssetsMetadata {
creation_time: Option<SystemTime>,
}
const FILENAME: &'static str = "metadata.yaml";
const FILENAME: &str = "metadata.yaml";
impl AssetsMetadata {
pub(crate) fn new(current_version: &str) -> AssetsMetadata {
+26 -16
View File
@@ -15,7 +15,7 @@ use console::Term;
use bat::{
assets::HighlightingAssets,
config::Config,
config::{Config, VisibleLines},
error::*,
input::Input,
line_range::{HighlightedLineRanges, LineRange, LineRanges},
@@ -80,7 +80,7 @@ impl App {
let paging_mode = match self.matches.value_of("paging") {
Some("always") => PagingMode::Always,
Some("never") => PagingMode::Never,
Some("auto") | _ => {
Some("auto") | None => {
if self.matches.occurrences_of("plain") > 1 {
// If we have -pp as an option when in auto mode, the pager should be disabled.
PagingMode::Never
@@ -99,6 +99,7 @@ impl App {
PagingMode::Never
}
}
_ => unreachable!("other values for --paging are not allowed"),
};
let mut syntax_mapping = SyntaxMapping::builtin();
@@ -147,13 +148,14 @@ impl App {
match self.matches.value_of("wrap") {
Some("character") => WrappingMode::Character,
Some("never") => WrappingMode::NoWrapping,
Some("auto") | _ => {
Some("auto") | None => {
if style_components.plain() {
WrappingMode::NoWrapping
} else {
WrappingMode::Character
}
}
_ => unreachable!("other values for --paging are not allowed"),
}
} else {
// We don't have the tty width when piping to another program.
@@ -196,13 +198,23 @@ impl App {
}
})
.unwrap_or_else(|| String::from(HighlightingAssets::default_theme())),
line_ranges: self
.matches
.values_of("line-range")
.map(|vs| vs.map(LineRange::from).collect())
.transpose()?
.map(LineRanges::from)
.unwrap_or_default(),
visible_lines: if self.matches.is_present("diff") {
VisibleLines::DiffContext(
self.matches
.value_of("diff-context")
.and_then(|t| t.parse().ok())
.unwrap_or(2),
)
} else {
VisibleLines::Ranges(
self.matches
.values_of("line-range")
.map(|vs| vs.map(LineRange::from).collect())
.transpose()?
.map(LineRanges::from)
.unwrap_or_default(),
)
},
style_components,
syntax_mapping,
pager: self.matches.value_of("pager"),
@@ -238,19 +250,17 @@ impl App {
.map(|values| values.collect());
let mut filenames_or_none: Box<dyn Iterator<Item = _>> = match filenames {
Some(ref filenames) => {
Box::new(filenames.into_iter().map(|name| Some(OsStr::new(*name))))
}
Some(ref filenames) => Box::new(filenames.iter().map(|name| Some(OsStr::new(*name)))),
None => Box::new(std::iter::repeat(None)),
};
let files: Option<Vec<&OsStr>> = self.matches.values_of_os("FILE").map(|vs| vs.collect());
if files.is_none() {
let input = Input::stdin().with_name(filenames_or_none.nth(0).unwrap_or(None));
let input = Input::stdin().with_name(filenames_or_none.next().unwrap_or(None));
return Ok(vec![input]);
}
let files_or_none: Box<dyn Iterator<Item = _>> = match files {
Some(ref files) => Box::new(files.into_iter().map(|name| Some(*name))),
Some(ref files) => Box::new(files.iter().map(|name| Some(*name))),
None => Box::new(std::iter::repeat(None)),
};
@@ -264,7 +274,7 @@ impl App {
}
}
}
return Ok(file_input);
Ok(file_input)
}
fn style_components(&self) -> Result<StyleComponents> {
+2 -1
View File
@@ -53,5 +53,6 @@ pub fn assets_from_cache_or_binary() -> Result<HighlightingAssets> {
}
}
Ok(HighlightingAssets::from_cache(&cache_dir).unwrap_or(HighlightingAssets::from_binary()))
Ok(HighlightingAssets::from_cache(&cache_dir)
.unwrap_or_else(|_| HighlightingAssets::from_binary()))
}
+31 -1
View File
@@ -105,6 +105,35 @@ pub fn build_app(interactive_output: bool) -> ClapApp<'static, 'static> {
data to bat from STDIN when bat does not otherwise know \
the filename."),
)
.arg(
Arg::with_name("diff")
.long("diff")
.short("d")
.help("Only show lines that have been added/removed/modified.")
.long_help(
"Only show lines that have been added/removed/modified with respect \
to the Git index. Use --diff-context=N to control how much context you want to see.",
),
)
.arg(
Arg::with_name("diff-context")
.long("diff-context")
.overrides_with("diff-context")
.takes_value(true)
.value_name("N")
.validator(
|n| {
n.parse::<usize>()
.map_err(|_| "must be a number")
.map(|_| ()) // Convert to Result<(), &str>
.map_err(|e| e.to_string())
}, // Convert to Result<(), String>
)
.hidden_short_help(true)
.long_help(
"Include N lines of context around added/removed/modified lines when using '--diff'.",
),
)
.arg(
Arg::with_name("tabs")
.long("tabs")
@@ -152,7 +181,7 @@ pub fn build_app(interactive_output: bool) -> ClapApp<'static, 'static> {
t.parse::<i32>()
.map_err(|_e| "must be an offset or number")
.and_then(|v| if v == 0 && !is_offset {
Err("terminal width cannot be zero".into())
Err("terminal width cannot be zero")
} else {
Ok(())
})
@@ -339,6 +368,7 @@ pub fn build_app(interactive_output: bool) -> ClapApp<'static, 'static> {
.takes_value(true)
.number_of_values(1)
.value_name("N:M")
.conflicts_with("diff")
.help("Only print the lines from N to M.")
.long_help(
"Only print the specified range of lines for each file. \
+4 -3
View File
@@ -35,10 +35,11 @@ pub fn generate_config_file() -> bat::error::Result<()> {
match config_dir {
Some(path) => fs::create_dir_all(path)?,
None => {
return Ok(Err(format!(
return Err(format!(
"Unable to write config file to: {}",
config_file.to_string_lossy()
))?)
)
.into());
}
}
}
@@ -77,7 +78,7 @@ pub fn generate_config_file() -> bat::error::Result<()> {
config_file.to_string_lossy()
);
return Ok(());
Ok(())
}
pub fn get_args_from_config_file() -> Result<Vec<OsString>, shell_words::ParseError> {
+3 -2
View File
@@ -70,7 +70,7 @@ pub fn list_languages(config: &Config) -> Result<()> {
if config.loop_through {
for lang in languages {
write!(stdout, "{}:{}\n", lang.name, lang.file_extensions.join(","))?;
writeln!(stdout, "{}:{}", lang.name, lang.file_extensions.join(","))?;
}
} else {
let longest = languages
@@ -210,7 +210,8 @@ fn main() {
match result {
Err(error) => {
default_error_handler(&error);
let stderr = std::io::stderr();
default_error_handler(&error, &mut stderr.lock());
process::exit(1);
}
Ok(false) => {
+29 -6
View File
@@ -5,6 +5,32 @@ use crate::style::StyleComponents;
use crate::syntax_mapping::SyntaxMapping;
use crate::wrapping::WrappingMode;
#[derive(Debug, Clone)]
pub enum VisibleLines {
/// Show all lines which are included in the line ranges
Ranges(LineRanges),
#[cfg(feature = "git")]
/// Only show lines surrounding added/deleted/modified lines
DiffContext(usize),
}
impl VisibleLines {
pub fn diff_mode(&self) -> bool {
match self {
Self::Ranges(_) => false,
#[cfg(feature = "git")]
Self::DiffContext(_) => true,
}
}
}
impl Default for VisibleLines {
fn default() -> Self {
VisibleLines::Ranges(LineRanges::default())
}
}
#[derive(Debug, Clone, Default)]
pub struct Config<'a> {
/// The explicitly configured language, if any
@@ -39,8 +65,8 @@ pub struct Config<'a> {
#[cfg(feature = "paging")]
pub paging_mode: PagingMode,
/// Specifies the lines that should be printed
pub line_ranges: LineRanges,
/// Specifies which lines should be printed
pub visible_lines: VisibleLines,
/// The syntax highlighting theme
pub theme: String,
@@ -62,10 +88,7 @@ pub struct Config<'a> {
fn default_config_should_include_all_lines() {
use crate::line_range::RangeCheckResult;
assert_eq!(
Config::default().line_ranges.check(17),
RangeCheckResult::InRange
);
assert_eq!(LineRanges::default().check(17), RangeCheckResult::InRange);
}
#[test]
+78 -8
View File
@@ -1,9 +1,13 @@
use std::io::{self, Write};
use crate::assets::HighlightingAssets;
use crate::config::Config;
use crate::config::{Config, VisibleLines};
#[cfg(feature = "git")]
use crate::diff::{get_git_diff, LineChanges};
use crate::error::*;
use crate::input::{Input, InputReader, OpenedInput};
#[cfg(feature = "git")]
use crate::line_range::LineRange;
use crate::line_range::{LineRanges, RangeCheckResult};
use crate::output::OutputType;
#[cfg(feature = "paging")]
@@ -27,7 +31,7 @@ impl<'b> Controller<'b> {
pub fn run_with_error_handler(
&self,
inputs: Vec<Input>,
handle_error: impl Fn(&Error),
handle_error: impl Fn(&Error, &mut dyn Write),
) -> Result<bool> {
let mut output_type;
@@ -41,9 +45,9 @@ impl<'b> Controller<'b> {
if self.config.paging_mode != PagingMode::Never {
let call_pager = inputs.iter().any(|ref input| {
if let InputKind::OrdinaryFile(ref path) = input.kind {
return Path::new(path).exists();
Path::new(path).exists()
} else {
return true;
true
}
});
if !call_pager {
@@ -58,16 +62,56 @@ impl<'b> Controller<'b> {
output_type = OutputType::stdout();
}
let attached_to_pager = output_type.is_pager();
let writer = output_type.handle()?;
let mut no_errors: bool = true;
let stderr = io::stderr();
let print_error = |error: &Error, write: &mut dyn Write| {
if attached_to_pager {
handle_error(error, write);
} else {
handle_error(error, &mut stderr.lock());
}
};
for input in inputs.into_iter() {
match input.open(io::stdin().lock()) {
Err(error) => {
handle_error(&error);
print_error(&error, writer);
no_errors = false;
}
Ok(mut opened_input) => {
#[cfg(feature = "git")]
let line_changes = if self.config.visible_lines.diff_mode()
|| (!self.config.loop_through && self.config.style_components.changes())
{
match opened_input.kind {
crate::input::OpenedInputKind::OrdinaryFile(ref path) => {
let diff = get_git_diff(path);
// Skip files without Git modifications
if self.config.visible_lines.diff_mode()
&& diff
.as_ref()
.map(|changes| changes.is_empty())
.unwrap_or(false)
{
continue;
}
diff
}
_ if self.config.visible_lines.diff_mode() => {
// Skip non-file inputs in diff mode
continue;
}
_ => None,
}
} else {
None
};
let mut printer: Box<dyn Printer> = if self.config.loop_through {
Box::new(SimplePrinter::new())
} else {
@@ -75,13 +119,21 @@ impl<'b> Controller<'b> {
&self.config,
&self.assets,
&mut opened_input,
#[cfg(feature = "git")]
&line_changes,
))
};
let result = self.print_file(&mut *printer, writer, &mut opened_input);
let result = self.print_file(
&mut *printer,
writer,
&mut opened_input,
#[cfg(feature = "git")]
&line_changes,
);
if let Err(error) = result {
handle_error(&error);
print_error(&error, writer);
no_errors = false;
}
}
@@ -96,13 +148,31 @@ impl<'b> Controller<'b> {
printer: &mut dyn Printer,
writer: &mut dyn Write,
input: &mut OpenedInput,
#[cfg(feature = "git")] line_changes: &Option<LineChanges>,
) -> Result<()> {
if !input.reader.first_line.is_empty() || self.config.style_components.header() {
printer.print_header(writer, input)?;
}
if !input.reader.first_line.is_empty() {
self.print_file_ranges(printer, writer, &mut input.reader, &self.config.line_ranges)?;
let line_ranges = match self.config.visible_lines {
VisibleLines::Ranges(ref line_ranges) => line_ranges.clone(),
#[cfg(feature = "git")]
VisibleLines::DiffContext(context) => {
let mut line_ranges: Vec<LineRange> = vec![];
if let Some(line_changes) = line_changes {
for line in line_changes.keys() {
let line = *line as usize;
line_ranges.push(LineRange::new(line - context, line + context));
}
}
LineRanges::from(line_ranges)
}
};
self.print_file_ranges(printer, writer, &mut input.reader, &line_ranges)?;
}
printer.print_footer(writer, input)?;
+7 -4
View File
@@ -1,4 +1,5 @@
use error_chain::error_chain;
use std::io::Write;
error_chain! {
foreign_links {
@@ -11,7 +12,7 @@ error_chain! {
}
}
pub fn default_error_handler(error: &Error) {
pub fn default_error_handler(error: &Error, output: &mut dyn Write) {
use ansi_term::Colour::Red;
match error {
@@ -21,14 +22,16 @@ pub fn default_error_handler(error: &Error) {
::std::process::exit(0);
}
Error(ErrorKind::SerdeYamlError(_), _) => {
eprintln!(
writeln!(
output,
"{}: Error while parsing metadata.yaml file: {}",
Red.paint("[bat error]"),
error
);
)
.ok();
}
_ => {
eprintln!("{}: {}", Red.paint("[bat error]"), error);
writeln!(output, "{}: {}", Red.paint("[bat error]"), error).ok();
}
};
}
+1 -1
View File
@@ -30,7 +30,7 @@ impl LineRange {
fn parse_range(range_raw: &str) -> Result<LineRange> {
let mut new_range = LineRange::default();
if range_raw.bytes().nth(0).ok_or("Empty line range")? == b':' {
if range_raw.bytes().next().ok_or("Empty line range")? == b':' {
new_range.upper = range_raw[1..].parse()?;
return Ok(new_range);
} else if range_raw.bytes().last().ok_or("Empty line range")? == b':' {
+14
View File
@@ -125,6 +125,20 @@ impl OutputType {
OutputType::Stdout(io::stdout())
}
#[cfg(feature = "paging")]
pub(crate) fn is_pager(&self) -> bool {
if let OutputType::Pager(_) = self {
true
} else {
false
}
}
#[cfg(not(feature = "paging"))]
pub(crate) fn is_pager(&self) -> bool {
false
}
pub fn handle(&mut self) -> Result<&mut dyn Write> {
Ok(match *self {
#[cfg(feature = "paging")]
+8 -8
View File
@@ -36,15 +36,15 @@ pub fn expand_tabs(line: &str, width: usize, cursor: &mut usize) -> String {
fn try_parse_utf8_char(input: &[u8]) -> Option<(char, usize)> {
let str_from_utf8 = |seq| std::str::from_utf8(seq).ok();
let decoded = None
.or(input.get(0..1).and_then(str_from_utf8).map(|c| (c, 1)))
.or(input.get(0..2).and_then(str_from_utf8).map(|c| (c, 2)))
.or(input.get(0..3).and_then(str_from_utf8).map(|c| (c, 3)))
.or(input.get(0..4).and_then(str_from_utf8).map(|c| (c, 4)));
let decoded = input
.get(0..1)
.and_then(str_from_utf8)
.map(|c| (c, 1))
.or_else(|| input.get(0..2).and_then(str_from_utf8).map(|c| (c, 2)))
.or_else(|| input.get(0..3).and_then(str_from_utf8).map(|c| (c, 3)))
.or_else(|| input.get(0..4).and_then(str_from_utf8).map(|c| (c, 4)));
let decoded_char = decoded.map(|(seq, n)| (seq.chars().next().unwrap(), n));
decoded_char
decoded.map(|(seq, n)| (seq.chars().next().unwrap(), n))
}
pub fn replace_nonprintable(input: &[u8], tab_width: usize) -> String {
+2 -2
View File
@@ -6,7 +6,7 @@ use syntect::parsing::SyntaxReference;
use crate::{
assets::HighlightingAssets,
config::Config,
config::{Config, VisibleLines},
controller::Controller,
error::Result,
input::Input,
@@ -205,7 +205,7 @@ impl<'a> PrettyPrinter<'a> {
/// Specify the lines that should be printed (default: all)
pub fn line_ranges(&mut self, ranges: LineRanges) -> &mut Self {
self.config.line_ranges = ranges;
self.config.visible_lines = VisibleLines::Ranges(ranges);
self
}
+9 -24
View File
@@ -24,7 +24,7 @@ use crate::config::Config;
use crate::decorations::LineChangesDecoration;
use crate::decorations::{Decoration, GridBorderDecoration, LineNumberDecoration};
#[cfg(feature = "git")]
use crate::diff::{get_git_diff, LineChanges};
use crate::diff::LineChanges;
use crate::error::*;
use crate::input::OpenedInput;
use crate::line_range::RangeCheckResult;
@@ -90,7 +90,7 @@ pub(crate) struct InteractivePrinter<'a> {
ansi_prefix_sgr: String,
content_type: Option<ContentType>,
#[cfg(feature = "git")]
pub line_changes: Option<LineChanges>,
pub line_changes: &'a Option<LineChanges>,
highlighter: Option<HighlightLines<'a>>,
syntax_set: &'a SyntaxSet,
background_color_highlight: Option<Color>,
@@ -101,6 +101,8 @@ impl<'a> InteractivePrinter<'a> {
config: &'a Config,
assets: &'a HighlightingAssets,
input: &mut OpenedInput,
#[cfg(feature = "git")]
line_changes: &'a Option<LineChanges>,
) -> Self {
let theme = assets.get_theme(&config.theme);
@@ -145,9 +147,6 @@ impl<'a> InteractivePrinter<'a> {
panel_width = 0;
}
#[cfg(feature = "git")]
let mut line_changes = None;
let highlighter = if input
.reader
.content_type
@@ -155,18 +154,6 @@ impl<'a> InteractivePrinter<'a> {
{
None
} else {
// Get the Git modifications
#[cfg(feature = "git")]
{
use crate::input::OpenedInputKind;
if config.style_components.changes() {
if let OpenedInputKind::OrdinaryFile(ref path) = input.kind {
line_changes = get_git_diff(path);
}
}
}
// Determine the type of syntax for highlighting
let syntax = assets.get_syntax(config.language, input, &config.syntax_mapping);
Some(HighlightLines::new(syntax, theme))
@@ -216,7 +203,7 @@ impl<'a> InteractivePrinter<'a> {
if self.config.style_components.grid() {
format!("{}", text_filled)
} else {
format!("{}", text_filled)
text_filled
}
}
}
@@ -243,10 +230,8 @@ impl<'a> Printer for InteractivePrinter<'a> {
Yellow.paint("[bat warning]"),
input.description().full,
)?;
} else {
if self.config.style_components.grid() {
self.print_horizontal_line(handle, '┬')?;
}
} else if self.config.style_components.grid() {
self.print_horizontal_line(handle, '┬')?;
}
return Ok(());
}
@@ -318,9 +303,9 @@ impl<'a> Printer for InteractivePrinter<'a> {
let snip_right =
"".repeat((self.config.term_width - panel_count - snip_left_count - title_count) / 2);
write!(
writeln!(
handle,
"{}\n",
"{}",
self.colors
.grid
.paint(format!("{}{}{}{}", panel, snip_left, title, snip_right))
+4 -1
View File
@@ -30,7 +30,10 @@ impl<'a> SyntaxMapping<'a> {
.insert("**/.ssh/config", MappingTarget::MapTo("SSH Config"))
.unwrap();
mapping
.insert("**/bat/config", MappingTarget::MapTo("Bourne Again Shell (bash)"))
.insert(
"**/bat/config",
MappingTarget::MapTo("Bourne Again Shell (bash)"),
)
.unwrap();
mapping
.insert(
+14 -14
View File
@@ -7,11 +7,13 @@ pub fn to_ansi_color(color: highlighting::Color, true_color: bool) -> ansi_term:
if color.a == 0 {
// Themes can specify one of the user-configurable terminal colors by
// encoding them as #RRGGBBAA with AA set to 00 (transparent) and RR set
// to the color palette number. The built-in themes ansi-light,
// to the 8-bit color palette number. The built-in themes ansi-light,
// ansi-dark, and base16 use this.
Fixed(color.r)
} else if color.a == 0x0f {
match color.r {
// For the first 8 colors, use the Color enum to produce ANSI escape
// sequences using codes 30-37 (foreground) and 40-47 (background).
// For example, red foreground is \x1b[31m. This works on terminals
// without 256-color support.
0x00 => Color::Black,
0x01 => Color::Red,
0x02 => Color::Green,
@@ -20,17 +22,15 @@ pub fn to_ansi_color(color: highlighting::Color, true_color: bool) -> ansi_term:
0x05 => Color::Purple,
0x06 => Color::Cyan,
0x07 => Color::White,
// TODO: the following should be high-intensity variants of
// these colors ("bright black", "bright red", ...).
0x08 => Color::Black,
0x09 => Color::Red,
0x0a => Color::Green,
0x0b => Color::Yellow,
0x0c => Color::Blue,
0x0d => Color::Purple,
0x0e => Color::Cyan,
0x0f => Color::White,
_ => unreachable!("The 0x0f color encoding does not allow for codes higher than 0x0f")
// For all other colors, use Fixed to produce escape sequences using
// codes 38;5 (foreground) and 48;5 (background). For example,
// bright red foreground is \x1b[38;5;9m. This only works on
// terminals with 256-color support.
//
// TODO: When ansi_term adds support for bright variants using codes
// 90-97 (foreground) and 100-107 (background), we should use those
// for values 0x08 to 0x0f and only use Fixed for 0x10 to 0xff.
n => Fixed(n),
}
} else if true_color {
RGB(color.r, color.g, color.b)
+1 -1
View File
@@ -4,7 +4,7 @@ use bat::assets::HighlightingAssets;
#[test]
fn no_duplicate_extensions() {
const KNOWN_EXCEPTIONS: &[&'static str] = &[
const KNOWN_EXCEPTIONS: &[&str] = &[
// The '.h' extension currently appears in multiple syntaxes: C, C++, Objective C,
// Objective C++
"h",