mirror of
https://github.com/sharkdp/bat.git
synced 2025-09-01 10:52:24 +01:00
Compare commits
863 Commits
v0.23.0
...
dependabot
Author | SHA1 | Date | |
---|---|---|---|
|
869deabcc9 | ||
|
d291b3e5fa | ||
|
6772225477 | ||
|
339e7df0bc | ||
|
297e8280d9 | ||
|
d397bea6dc | ||
|
3d174b8c09 | ||
|
d9dd9729b8 | ||
|
c657b18efd | ||
|
c9b41b1df7 | ||
|
45efc4117e | ||
|
6a74283289 | ||
|
120c39429f | ||
|
1c6ad4d514 | ||
|
36d25c8642 | ||
|
caf6fa369f | ||
|
503c50b1ec | ||
|
d9fbd18541 | ||
|
9824090654 | ||
|
bdaf25793d | ||
|
96ce80d0e2 | ||
|
40c4c8e542 | ||
|
6675153460 | ||
|
76e6a49a2e | ||
|
1bcf760d90 | ||
|
94f1035c08 | ||
|
3516a3311a | ||
|
f79adaf607 | ||
|
d9ac757b6a | ||
|
58bfcd9051 | ||
|
67e3e42531 | ||
|
3fd3f1def8 | ||
|
6d849e53d2 | ||
|
7fc3d6b588 | ||
|
1a931224eb | ||
|
60833ae5ec | ||
|
183def9569 | ||
|
77cfca1aff | ||
|
d9cc01b50c | ||
|
466087156f | ||
|
a8d610c6e8 | ||
|
30b42149aa | ||
|
c25e005c87 | ||
|
c4d7451841 | ||
|
d4fc07a347 | ||
|
0238473868 | ||
|
4363ddf0fb | ||
|
43c5fef70a | ||
|
7e436e307d | ||
|
b4d529402a | ||
|
b47338ec75 | ||
|
bd782ab228 | ||
|
4c2b20fedd | ||
|
9d3245eebe | ||
|
369ea67ad3 | ||
|
c56ce6ad36 | ||
|
4f0a3f5766 | ||
|
bac58be1ee | ||
|
20caaf26c8 | ||
|
3574118e17 | ||
|
847b717cdf | ||
|
3dfb51b25d | ||
|
d0b5dd8977 | ||
|
23d97eb4a8 | ||
|
8bc4e76e47 | ||
|
38762724f5 | ||
|
feb0bc1ae6 | ||
|
872d0baafb | ||
|
35c3f065a3 | ||
|
8b12191bda | ||
|
90b2c57951 | ||
|
f484a9dfce | ||
|
b97c275de5 | ||
|
91c95d8ba7 | ||
|
2015c99e65 | ||
|
eadf15d9c0 | ||
|
bb8c5657e1 | ||
|
dc2eae08a6 | ||
|
6c13a98f01 | ||
|
1ad294dcd3 | ||
|
806df574e7 | ||
|
9b580c7a98 | ||
|
7c8e2324ab | ||
|
555933315d | ||
|
9121746f05 | ||
|
f1d45da676 | ||
|
cf147a440e | ||
|
a3a23e5759 | ||
|
bc7d1cd44a | ||
|
735fb7be0e | ||
|
4661f22e81 | ||
|
bfd8776042 | ||
|
e8ff13cd53 | ||
|
1771f6da8d | ||
|
e888e968b6 | ||
|
68df079c0e | ||
|
563c4c290d | ||
|
ffbcfd53f9 | ||
|
fd12328293 | ||
|
b387abea6b | ||
|
efdd038fa4 | ||
|
94b699d8df | ||
|
226efecdd6 | ||
|
a0b4397ddf | ||
|
c18f5e054e | ||
|
360d43dd4d | ||
|
e0165a2d6a | ||
|
9776ebfa0f | ||
|
eda3ecb0b3 | ||
|
cf7631d469 | ||
|
185a2f3437 | ||
|
bdc971eca3 | ||
|
288b7e9ca3 | ||
|
a9d5880dc8 | ||
|
0918984249 | ||
|
e2aa4bc33c | ||
|
9d3db318e3 | ||
|
5aa123b4f0 | ||
|
f11d34997a | ||
|
510814410c | ||
|
e4bae61393 | ||
|
4cfc50c358 | ||
|
6886cdaace | ||
|
17e6952ab8 | ||
|
0da4084064 | ||
|
4c9a51990c | ||
|
36a86d34e8 | ||
|
fb514ca90f | ||
|
aa5e28bef5 | ||
|
5dc3d8c936 | ||
|
a4ffe2fdbf | ||
|
c32fa662d5 | ||
|
0a9588a866 | ||
|
861b868416 | ||
|
b7f9662097 | ||
|
79ecb11ce2 | ||
|
4e9bb610b3 | ||
|
c88faf8cfa | ||
|
0b48eab7a6 | ||
|
ccfbd1ee31 | ||
|
98c9a5d948 | ||
|
96ea42e5f4 | ||
|
2ff2a818ef | ||
|
dd694c266e | ||
|
c4461f7d78 | ||
|
77de5160ac | ||
|
b9fcc5ae2d | ||
|
e42883bf2c | ||
|
5c41a45931 | ||
|
ba49ba0acd | ||
|
5d75632c8e | ||
|
e202a33ea1 | ||
|
93be82ebc9 | ||
|
0bf4753ff1 | ||
|
fbb07a1494 | ||
|
debb66f8b0 | ||
|
45185b36fb | ||
|
e761d79512 | ||
|
14064dd987 | ||
|
3eef8590f4 | ||
|
3e7ad18fe3 | ||
|
80a38590b8 | ||
|
44a6e29da7 | ||
|
a6e847e267 | ||
|
2f70906665 | ||
|
c4c919aa31 | ||
|
51491c3c08 | ||
|
ea17f6ad28 | ||
|
3691c9945a | ||
|
57629bcaca | ||
|
b38ee77628 | ||
|
b5413cc015 | ||
|
5edaa96164 | ||
|
12a2a451b4 | ||
|
fc7dff50b0 | ||
|
9272e09058 | ||
|
b13c4d5f8d | ||
|
d7b10b4352 | ||
|
05cddff72d | ||
|
a55d23aaa4 | ||
|
18b71743c8 | ||
|
f761ff6824 | ||
|
8e2d233445 | ||
|
59b1f362f6 | ||
|
a73c641a0f | ||
|
3d4c72da0b | ||
|
71547b3fb3 | ||
|
ad8da94d2a | ||
|
5ea762a46c | ||
|
bbb5829ad9 | ||
|
c00b382f13 | ||
|
964e2bdac3 | ||
|
2e7ab99099 | ||
|
4175f28979 | ||
|
207f90f01b | ||
|
5c43ddb56c | ||
|
3838766dd4 | ||
|
a006457a72 | ||
|
0449107230 | ||
|
75313d886b | ||
|
4998f58847 | ||
|
ffc094bd91 | ||
|
343326eacf | ||
|
d31bc4347a | ||
|
adfb951e51 | ||
|
2843a2c0e8 | ||
|
94d3dc254e | ||
|
915eb55779 | ||
|
547bc38118 | ||
|
93fd013aa1 | ||
|
512bfde7ce | ||
|
27ba45ded7 | ||
|
c0898dedb1 | ||
|
b82b920420 | ||
|
ac40f7cfd8 | ||
|
330c51de9f | ||
|
0ed527f0d1 | ||
|
7df1dec65c | ||
|
61d42ee87b | ||
|
a95e65eea1 | ||
|
71dce0e7f3 | ||
|
53af1dc32d | ||
|
52252b15d6 | ||
|
bc24ce9ad4 | ||
|
625e986552 | ||
|
095442191c | ||
|
cc46282866 | ||
|
cbc9c3629d | ||
|
2c49d905e4 | ||
|
f0e2f642e0 | ||
|
3d0f0c0565 | ||
|
3d442cdf98 | ||
|
b009fee5ea | ||
|
6cf747678c | ||
|
db812e1179 | ||
|
995f23b58f | ||
|
ef3830234d | ||
|
4fc55cfcec | ||
|
487ac3bc48 | ||
|
d6cb3ba747 | ||
|
a9a2dceb72 | ||
|
bee08e48ae | ||
|
b14fb9db24 | ||
|
91acb0d16f | ||
|
4f161705a3 | ||
|
f8c6e90647 | ||
|
dd9dc4f76b | ||
|
94f49fd99b | ||
|
498df11a50 | ||
|
db7da314e7 | ||
|
33aabc696a | ||
|
648bedf290 | ||
|
dd3d1b8cdb | ||
|
b39a156d57 | ||
|
b6158c09b4 | ||
|
8a11a46f66 | ||
|
4d73c1e511 | ||
|
280f3eeb4e | ||
|
1321160203 | ||
|
01680e444b | ||
|
2435453c33 | ||
|
6e466e5ab4 | ||
|
25f4f96ea3 | ||
|
5cfd22ee8b | ||
|
ae07586fef | ||
|
96e4882b5c | ||
|
a0a090c307 | ||
|
bc61d84408 | ||
|
de8bb79a6f | ||
|
7bf459f0ff | ||
|
18ed69aff4 | ||
|
c9431933e5 | ||
|
2d3581e8c4 | ||
|
8453bc93cc | ||
|
d1418a9ab0 | ||
|
09bdcde6c5 | ||
|
0d2afe79af | ||
|
5a12f187fa | ||
|
753bfaff49 | ||
|
9744971b19 | ||
|
c8f7787281 | ||
|
26f19703d3 | ||
|
b7b05a3553 | ||
|
caba54efc9 | ||
|
e2528dff6d | ||
|
ad11fb815f | ||
|
305e8a4d84 | ||
|
7e804b27a0 | ||
|
18d963f423 | ||
|
9d91d22e29 | ||
|
3fa9044029 | ||
|
8a9821fa9a | ||
|
75fadb8d1c | ||
|
63560c4733 | ||
|
d660cca8a9 | ||
|
be62a4cea4 | ||
|
874448c112 | ||
|
004d2d5122 | ||
|
3e07483f7a | ||
|
9859077306 | ||
|
0cde7167d6 | ||
|
7eff8b687c | ||
|
04c7d15084 | ||
|
dbe25ba5e6 | ||
|
f81d4dc321 | ||
|
f1c5c02713 | ||
|
6c25c693a8 | ||
|
4be55ead4d | ||
|
8df326aeed | ||
|
f87157d009 | ||
|
0b4fe03ec3 | ||
|
1063264d88 | ||
|
4bee858c78 | ||
|
d832367d95 | ||
|
d89a20f8b4 | ||
|
41ef01f25d | ||
|
7b797fd830 | ||
|
d27064cea5 | ||
|
c9aa8d59ef | ||
|
57a8b10883 | ||
|
e608b33142 | ||
|
6598442d41 | ||
|
822eff6028 | ||
|
da4defad07 | ||
|
9bed8adb16 | ||
|
2e836e9822 | ||
|
07554b0c1d | ||
|
022574314f | ||
|
8a4701f93f | ||
|
08047a6a2e | ||
|
2caeaef14b | ||
|
d00e05643f | ||
|
60693db73f | ||
|
15f2553a3d | ||
|
dbe352d8b8 | ||
|
517ddd8e00 | ||
|
558b487c91 | ||
|
f8f12a7db5 | ||
|
d725443116 | ||
|
dbaa0a6d9e | ||
|
6b2c5645d2 | ||
|
e7bef716c9 | ||
|
c627526f8c | ||
|
95cb705ac0 | ||
|
ca43c7a8f8 | ||
|
0a8bfc52a6 | ||
|
d0ae2e6826 | ||
|
9090fb75e0 | ||
|
50fa25db60 | ||
|
bd3c49d234 | ||
|
ce7a3d9f7d | ||
|
3b71837174 | ||
|
2be3a14a7e | ||
|
8d82402d74 | ||
|
1942d40863 | ||
|
5042844342 | ||
|
649fb05c58 | ||
|
c533a4aa14 | ||
|
b93a41a9a3 | ||
|
937c59fca9 | ||
|
a80d5ea9f7 | ||
|
c11a7d9e41 | ||
|
ac082ab64b | ||
|
c9fd0f3cf0 | ||
|
e667415def | ||
|
fd6c7637e4 | ||
|
9a816c9c68 | ||
|
431344ba67 | ||
|
eca6b8a376 | ||
|
b01ed8d773 | ||
|
3e5f4266ce | ||
|
61c9f312c9 | ||
|
c59dad0cae | ||
|
16a79d38c2 | ||
|
9d635627dc | ||
|
bc69ffb0f0 | ||
|
a0226f5670 | ||
|
ed7789d9b7 | ||
|
b747184788 | ||
|
02ae6ef348 | ||
|
0ebb9cbfe2 | ||
|
f6cbee9e27 | ||
|
10e823c4b7 | ||
|
60e4027332 | ||
|
e075fee5bf | ||
|
16d9b99f6c | ||
|
ffa74a7f49 | ||
|
c1772b7793 | ||
|
5be9d19500 | ||
|
0603f0b844 | ||
|
50958472e5 | ||
|
89ce060183 | ||
|
bc42149a72 | ||
|
0c3b22e0f0 | ||
|
a769a3d813 | ||
|
7cc231b82b | ||
|
7f089ead62 | ||
|
b9b981f657 | ||
|
abf9dada04 | ||
|
5c6974703e | ||
|
1b0a6da4be | ||
|
06b645435a | ||
|
c3b190d45b | ||
|
594b1417f1 | ||
|
e8ca6ec7c3 | ||
|
6498615f5f | ||
|
30b0143ccf | ||
|
ff81cfd584 | ||
|
14ce668a1d | ||
|
9a1bfe946d | ||
|
cea45e05f3 | ||
|
cda363a3f7 | ||
|
de796392cf | ||
|
1423dd9440 | ||
|
60b3428ad7 | ||
|
571970f8ff | ||
|
18a0653ce8 | ||
|
569286055c | ||
|
b662fec214 | ||
|
d8d0b77568 | ||
|
13317b0a3b | ||
|
2616296183 | ||
|
39684b85ad | ||
|
aa3ec109b7 | ||
|
180a77ee99 | ||
|
93b25d75a0 | ||
|
6e91ba83b7 | ||
|
b74c125c43 | ||
|
fd1e0d5876 | ||
|
9a650e8279 | ||
|
d5aa9d8e05 | ||
|
b1cdc06430 | ||
|
83a15ac05f | ||
|
43a77a42f8 | ||
|
44ca1e7df1 | ||
|
23fd200482 | ||
|
9f1c62b013 | ||
|
319b8868fc | ||
|
7bd6cdbebc | ||
|
1488a4a006 | ||
|
56d2823b0e | ||
|
1a11ba11e3 | ||
|
c34bdb5e66 | ||
|
10456e1d51 | ||
|
bbdadc7e38 | ||
|
ff71e32c0f | ||
|
50b01ea8da | ||
|
de697f7717 | ||
|
575457c944 | ||
|
6fc58821a5 | ||
|
7873b473e8 | ||
|
609005a225 | ||
|
b9c74ab859 | ||
|
cee5584daf | ||
|
b265b20721 | ||
|
a7a9727c11 | ||
|
90dfa7f18d | ||
|
3f8d62e7d6 | ||
|
3f22311ec8 | ||
|
9e8176b1c6 | ||
|
70ff93d238 | ||
|
c264ecd26b | ||
|
10a1b24191 | ||
|
243819ecdc | ||
|
9c76b72825 | ||
|
b4fe182960 | ||
|
b7e44c76dc | ||
|
f3cc69733f | ||
|
3625f0ea1c | ||
|
e6e2d4c65d | ||
|
340e873eff | ||
|
3407bf4bf6 | ||
|
25cd4991d2 | ||
|
503b2c5126 | ||
|
026bc05d70 | ||
|
61005f19fa | ||
|
8f8c953ab6 | ||
|
f82487daf8 | ||
|
3a9d574770 | ||
|
b4e3a84e1a | ||
|
f7c39e8353 | ||
|
37d9f0533c | ||
|
d560f2a515 | ||
|
bb4d1cbd2e | ||
|
23ec433167 | ||
|
9eaed3e3f0 | ||
|
d5bd4aa93f | ||
|
66b70dd8ed | ||
|
01731478a6 | ||
|
f8c5429a6c | ||
|
f71226adbb | ||
|
e8d777b73a | ||
|
3cff44b652 | ||
|
26302a8b08 | ||
|
adc5bd0402 | ||
|
e3c3be950a | ||
|
8d92dc2083 | ||
|
a1f85b9e06 | ||
|
424c02dfa7 | ||
|
018a482621 | ||
|
4790def1ef | ||
|
07c26adc35 | ||
|
f29f9387b5 | ||
|
c290bfff1e | ||
|
42153f2b99 | ||
|
6d7537d3ec | ||
|
b30ec9f975 | ||
|
a7074f10d4 | ||
|
d185f0973b | ||
|
071874ea8f | ||
|
46a2c004a2 | ||
|
26ac179548 | ||
|
4c85483486 | ||
|
487bed2d95 | ||
|
6f69682552 | ||
|
bc5beaec5d | ||
|
83b00bc653 | ||
|
f041ff8c5f | ||
|
1fbdbfc4b2 | ||
|
2323aa0def | ||
|
6c2ce63101 | ||
|
13204c46e2 | ||
|
9bb0271e7d | ||
|
0e4e10edb6 | ||
|
0c7e5299bf | ||
|
c36ed32816 | ||
|
e1a3fc5529 | ||
|
1ae9e843ed | ||
|
dbe4cfb763 | ||
|
4549f83689 | ||
|
e6e8f847be | ||
|
b9e249f782 | ||
|
3ffa3648cf | ||
|
5c2cc53882 | ||
|
a6f01af8de | ||
|
85a549e293 | ||
|
b718889ba2 | ||
|
708c74f6af | ||
|
74d666f5c0 | ||
|
7604fe5567 | ||
|
0080b043c4 | ||
|
c7bce46622 | ||
|
2b4339663c | ||
|
6a6b02117b | ||
|
511cd30105 | ||
|
92915e22e7 | ||
|
d499191b0a | ||
|
152d69fe98 | ||
|
81aa24310c | ||
|
75cdabaf13 | ||
|
1f628203e5 | ||
|
1b9fc1d5af | ||
|
bc1ca1a346 | ||
|
f735120978 | ||
|
25b5a41189 | ||
|
c94cf4e14e | ||
|
84d80eebd0 | ||
|
915dd9fbf8 | ||
|
9d77c1373c | ||
|
c3f2ddf509 | ||
|
8a51172b11 | ||
|
875046e4cd | ||
|
a5bd9f51be | ||
|
5a2a20af42 | ||
|
61029c8bd2 | ||
|
1023399c5e | ||
|
6549e26f5d | ||
|
165c495e75 | ||
|
6b9b085be3 | ||
|
2d46d54ae3 | ||
|
3d04699710 | ||
|
054421268f | ||
|
414403b062 | ||
|
c29bf2ff28 | ||
|
ab4e5ed52e | ||
|
1a54c9bf6d | ||
|
02077db53e | ||
|
7ce010d9ed | ||
|
95993cf37e | ||
|
3761df9112 | ||
|
adfaef19da | ||
|
f7bea6de5b | ||
|
65aae5d0a1 | ||
|
e3866b1f7e | ||
|
23de8e093b | ||
|
196a4cb18f | ||
|
695cf1f387 | ||
|
0af1df5258 | ||
|
a8d07333e9 | ||
|
7f12989127 | ||
|
60e32cf823 | ||
|
e9a6aaa30f | ||
|
9be2a36a01 | ||
|
22254936a2 | ||
|
f6d76e0104 | ||
|
c911829771 | ||
|
b33e33fe26 | ||
|
9239b125b1 | ||
|
2086cd2668 | ||
|
1b88267320 | ||
|
e586751208 | ||
|
e7256a624b | ||
|
5c1f47359e | ||
|
45ee2dc4c7 | ||
|
db66e4459b | ||
|
55e02e101d | ||
|
230abfd2bc | ||
|
c0f2d6f934 | ||
|
9f36a7a284 | ||
|
e4d637a3d8 | ||
|
98a2b6bc17 | ||
|
8e66bc8722 | ||
|
cd81c7fa6b | ||
|
b4fdb5dc36 | ||
|
c76ed99db2 | ||
|
06aef22943 | ||
|
128b0d6dd3 | ||
|
15dc20109f | ||
|
5c4bcd6611 | ||
|
ecf4029dc7 | ||
|
c261b41578 | ||
|
6f1cc80d68 | ||
|
3b0ade9cb8 | ||
|
57016f4e04 | ||
|
497342fabb | ||
|
bf56cd90f0 | ||
|
0acb979e9e | ||
|
d7503bfc09 | ||
|
b89dc15be1 | ||
|
15ab4478c9 | ||
|
5b4ce684a1 | ||
|
0027055a83 | ||
|
321b3ec81b | ||
|
1679460f42 | ||
|
907af9e35f | ||
|
12b74dfb4e | ||
|
fd84e4f49f | ||
|
f0a6fe216d | ||
|
d792dc5804 | ||
|
8a08025091 | ||
|
586c804b1e | ||
|
e30161ac3c | ||
|
3865908439 | ||
|
9474b4cf8b | ||
|
b48bda21a3 | ||
|
daf33709a0 | ||
|
36073a3d95 | ||
|
12fa2cb1eb | ||
|
1f10d846a3 | ||
|
22531eab90 | ||
|
0c1b80faab | ||
|
2c9bf229e1 | ||
|
822e81bb24 | ||
|
ad628c0471 | ||
|
f483d2df42 | ||
|
4ad3002543 | ||
|
cfd622d6e1 | ||
|
1c7c9a6b6d | ||
|
0c93ca80f4 | ||
|
de6d418d42 | ||
|
c016b462c0 | ||
|
7e1fbcfe95 | ||
|
4815b6155e | ||
|
075b5b288a | ||
|
7cfd1e0d78 | ||
|
9f7d70f642 | ||
|
0fea82cff9 | ||
|
64840fbbae | ||
|
827b3eca2f | ||
|
9478d2dfe8 | ||
|
d24501ab5e | ||
|
9f4259721a | ||
|
77e491161c | ||
|
97780f987e | ||
|
d1bc0ef0d4 | ||
|
52f94b4623 | ||
|
37fd050100 | ||
|
83286975ff | ||
|
f705fcb984 | ||
|
9ca1f20f43 | ||
|
6ad800e43a | ||
|
069318b139 | ||
|
b9b554248d | ||
|
4863d428dd | ||
|
2e103ee6b3 | ||
|
28990bc451 | ||
|
748e2a681f | ||
|
bfa0b5241f | ||
|
4af4bfc0f1 | ||
|
51203ff750 | ||
|
96cef9a24e | ||
|
b43d31b75a | ||
|
ad3ff26960 | ||
|
86b40993c3 | ||
|
31bed250ba | ||
|
7658334645 | ||
|
491ae70aa9 | ||
|
d64c568196 | ||
|
b5982a6174 | ||
|
04e7d2a313 | ||
|
bcc2de86b4 | ||
|
1296aea836 | ||
|
5498c24c33 | ||
|
79a03b4299 | ||
|
f3a5e9a73c | ||
|
2710a19ecb | ||
|
6d0ef259f6 | ||
|
b1577cc083 | ||
|
28d947fd8b | ||
|
b000db8f32 | ||
|
116a6cc9a8 | ||
|
c8291a36b7 | ||
|
8180c76890 | ||
|
a0f33b1cdc | ||
|
8b60dae81c | ||
|
4b33093f9e | ||
|
3d87b25b19 | ||
|
f2f6902279 | ||
|
c0b17e73e1 | ||
|
94544d963b | ||
|
72abbd22de | ||
|
64e10ffb21 | ||
|
35d8146bba | ||
|
a5a7ede698 | ||
|
b551049706 | ||
|
99cfc13eab | ||
|
4b0b5afa13 | ||
|
d343428441 | ||
|
16e409ec87 | ||
|
94d059f258 | ||
|
c8b9de889d | ||
|
75340d54f9 | ||
|
b28383e0fa | ||
|
8e866db281 | ||
|
0eb157e090 | ||
|
85636c28bc | ||
|
a70e5c6c65 | ||
|
32e01f740b | ||
|
7b20f8fc7b | ||
|
86ac48d68e | ||
|
c42fc810ea | ||
|
6baebd79fa | ||
|
c6cae09f99 | ||
|
fc9546854f | ||
|
32da58e723 | ||
|
63aaa03013 | ||
|
fbe9b6f15f | ||
|
c946ddb012 | ||
|
e5c81ed41e | ||
|
0937d575fd | ||
|
4382be5e7c | ||
|
d89df18de2 | ||
|
9fcc57e496 | ||
|
8e35a56712 | ||
|
9f795dd947 | ||
|
721f956c1c | ||
|
db4cdc1cb8 | ||
|
e455f93a1e | ||
|
d756d6f1ed | ||
|
6568fb775d | ||
|
d376a4b631 | ||
|
6e5fd36882 | ||
|
c7cc4b5c59 | ||
|
db76091a53 | ||
|
506fe65474 | ||
|
69c326fd41 | ||
|
466b275e87 | ||
|
319c675f3e | ||
|
5a240f36b9 | ||
|
e2bf85e749 | ||
|
fe73010a5e | ||
|
150c04acb6 | ||
|
433176ab54 | ||
|
b56021ffa9 | ||
|
ac2953c070 | ||
|
d6e11b59e7 | ||
|
f49278cfaa | ||
|
9b73eda957 | ||
|
ed99a3a104 | ||
|
e32ad0b048 | ||
|
3abc0c0fc4 | ||
|
b06f13f0c5 | ||
|
a721cc31f3 | ||
|
1e52785d35 | ||
|
9ba3b6ed13 | ||
|
72e1a40bab | ||
|
33a89410d4 | ||
|
b2c28cdddb | ||
|
906e774372 | ||
|
d929becefc | ||
|
103a2f0d9b | ||
|
d33b2e158e | ||
|
d295b3a394 | ||
|
81a217b1f3 | ||
|
bb17f74757 | ||
|
75928d20f8 | ||
|
2cc45eea1a | ||
|
7dbc6e3da4 | ||
|
f34b852aa8 | ||
|
4b04f901fe | ||
|
26111950b3 | ||
|
f21d3502e1 | ||
|
5687af8bc7 | ||
|
0f5f51f9ba | ||
|
32c0e1fb45 | ||
|
34440f1b0c | ||
|
f1d6cc7a64 | ||
|
628ba5d31f | ||
|
e24150ca3f | ||
|
d580445aef | ||
|
48dc2b0d90 | ||
|
82664e3c82 | ||
|
1893405cbf | ||
|
00b7e3b864 | ||
|
7826e506f8 | ||
|
6dd8b28b0d | ||
|
b720af8a06 | ||
|
b1fbcc8a6e | ||
|
9bf74d687f | ||
|
783d4877e1 | ||
|
8b187e6997 | ||
|
c46c53320b | ||
|
7f884fa582 | ||
|
8676bbf97f | ||
|
77069b368c | ||
|
70e49bd32b | ||
|
5042f969e5 | ||
|
876f5d4113 | ||
|
39d9d64e1e | ||
|
8e866babfc | ||
|
f8c700027e | ||
|
7639e8b406 | ||
|
149dec6953 | ||
|
b420c42aff | ||
|
3da7adb763 | ||
|
165e5da6b9 | ||
|
c5a9fdff93 | ||
|
8aac5acc0a | ||
|
7162e38d50 | ||
|
63ac60a3a0 | ||
|
9683bfdb3f | ||
|
e155f56484 | ||
|
e828d7840a | ||
|
52f7a5a06f | ||
|
baa1476d8d | ||
|
6be56972b6 | ||
|
08445eba91 | ||
|
2298422e85 | ||
|
c5731b9079 | ||
|
458e818ab4 | ||
|
993b33b5b4 | ||
|
ba95955fe6 | ||
|
57cc0d8435 | ||
|
60a9ac041f | ||
|
33997106da | ||
|
1b2c69aee8 | ||
|
87e87a349a | ||
|
e49235e119 | ||
|
1712ec9e73 | ||
|
3ca8c43a67 | ||
|
01f1b1efe8 | ||
|
c7905a6029 | ||
|
d27aaffead |
2
.cargo/audit.toml
Normal file
2
.cargo/audit.toml
Normal file
@@ -0,0 +1,2 @@
|
||||
[advisories]
|
||||
ignore = ["RUSTSEC-2024-0320", "RUSTSEC-2024-0421"]
|
2
.github/ISSUE_TEMPLATE/syntax_request.md
vendored
2
.github/ISSUE_TEMPLATE/syntax_request.md
vendored
@@ -26,4 +26,4 @@ guidelines for adding new syntaxes:
|
||||
[Name or description of the syntax/language here]
|
||||
|
||||
**Guideline Criteria:**
|
||||
[packagecontro.io link here]
|
||||
[packagecontrol.io link here]
|
||||
|
233
.github/workflows/CICD.yml
vendored
233
.github/workflows/CICD.yml
vendored
@@ -2,6 +2,7 @@ name: CICD
|
||||
|
||||
env:
|
||||
CICD_INTERMEDIATES_DIR: "_cicd-intermediates"
|
||||
MSRV_FEATURES: --no-default-features --features minimal-application,bugreport,build-assets
|
||||
|
||||
on:
|
||||
workflow_dispatch:
|
||||
@@ -13,53 +14,83 @@ on:
|
||||
- '*'
|
||||
|
||||
jobs:
|
||||
ensure_cargo_fmt:
|
||||
name: Ensure 'cargo fmt' has been run
|
||||
runs-on: ubuntu-20.04
|
||||
all-jobs:
|
||||
if: always() # Otherwise this job is skipped if the matrix job fails
|
||||
name: all-jobs
|
||||
runs-on: ubuntu-latest
|
||||
needs:
|
||||
- crate_metadata
|
||||
- lint
|
||||
- min_version
|
||||
- license_checks
|
||||
- test_with_new_syntaxes_and_themes
|
||||
- test_with_system_config
|
||||
- documentation
|
||||
- cargo-audit
|
||||
- build
|
||||
steps:
|
||||
- run: jq --exit-status 'all(.result == "success")' <<< '${{ toJson(needs) }}'
|
||||
|
||||
crate_metadata:
|
||||
name: Extract crate metadata
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v5
|
||||
- name: Extract crate information
|
||||
id: crate_metadata
|
||||
run: |
|
||||
cargo metadata --no-deps --format-version 1 | jq -r '"name=" + .packages[0].name' | tee -a $GITHUB_OUTPUT
|
||||
cargo metadata --no-deps --format-version 1 | jq -r '"version=" + .packages[0].version' | tee -a $GITHUB_OUTPUT
|
||||
cargo metadata --no-deps --format-version 1 | jq -r '"maintainer=" + .packages[0].authors[0]' | tee -a $GITHUB_OUTPUT
|
||||
cargo metadata --no-deps --format-version 1 | jq -r '"homepage=" + .packages[0].homepage' | tee -a $GITHUB_OUTPUT
|
||||
cargo metadata --no-deps --format-version 1 | jq -r '"msrv=" + .packages[0].rust_version' | tee -a $GITHUB_OUTPUT
|
||||
outputs:
|
||||
name: ${{ steps.crate_metadata.outputs.name }}
|
||||
version: ${{ steps.crate_metadata.outputs.version }}
|
||||
maintainer: ${{ steps.crate_metadata.outputs.maintainer }}
|
||||
homepage: ${{ steps.crate_metadata.outputs.homepage }}
|
||||
msrv: ${{ steps.crate_metadata.outputs.msrv }}
|
||||
|
||||
lint:
|
||||
name: Ensure code quality
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: dtolnay/rust-toolchain@stable
|
||||
with:
|
||||
components: rustfmt
|
||||
- uses: actions/checkout@v3
|
||||
components: rustfmt,clippy
|
||||
- uses: actions/checkout@v5
|
||||
- run: cargo fmt -- --check
|
||||
- run: cargo clippy --locked --all-targets --all-features -- -D warnings
|
||||
|
||||
min_version:
|
||||
name: Minimum supported rust version
|
||||
runs-on: ubuntu-latest
|
||||
needs: crate_metadata
|
||||
steps:
|
||||
- name: Checkout source code
|
||||
uses: actions/checkout@v5
|
||||
- name: Install rust toolchain (v${{ needs.crate_metadata.outputs.msrv }})
|
||||
uses: dtolnay/rust-toolchain@master
|
||||
with:
|
||||
toolchain: ${{ needs.crate_metadata.outputs.msrv }}
|
||||
- name: Run tests
|
||||
run: cargo test --locked ${{ env.MSRV_FEATURES }}
|
||||
|
||||
license_checks:
|
||||
name: License checks
|
||||
runs-on: ubuntu-20.04
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
- uses: actions/checkout@v5
|
||||
with:
|
||||
submodules: true # we especially want to perform license checks on submodules
|
||||
- run: tests/scripts/license-checks.sh
|
||||
|
||||
min_version:
|
||||
name: Minimum supported rust version
|
||||
runs-on: ubuntu-20.04
|
||||
env:
|
||||
MSRV_FEATURES: --no-default-features --features minimal-application,bugreport,build-assets
|
||||
steps:
|
||||
- name: Checkout source code
|
||||
uses: actions/checkout@v3
|
||||
|
||||
- name: Get the MSRV from the package metadata
|
||||
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
|
||||
with:
|
||||
toolchain: ${{ steps.msrv.outputs.version }}
|
||||
components: clippy
|
||||
- name: Run clippy (on minimum supported rust version to prevent warnings we can't fix)
|
||||
run: cargo clippy --locked --all-targets ${{ env.MSRV_FEATURES }}
|
||||
- name: Run tests
|
||||
run: cargo test --locked ${{ env.MSRV_FEATURES }}
|
||||
|
||||
test_with_new_syntaxes_and_themes:
|
||||
name: Run tests with updated syntaxes and themes
|
||||
runs-on: ubuntu-20.04
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Git checkout
|
||||
uses: actions/checkout@v3
|
||||
uses: actions/checkout@v5
|
||||
with:
|
||||
submodules: true # we need all syntax and theme submodules
|
||||
- name: Install Rust toolchain
|
||||
@@ -85,10 +116,10 @@ jobs:
|
||||
|
||||
test_with_system_config:
|
||||
name: Run tests with system wide configuration
|
||||
runs-on: ubuntu-20.04
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Git checkout
|
||||
uses: actions/checkout@v3
|
||||
uses: actions/checkout@v5
|
||||
- name: Prepare environment variables
|
||||
run: |
|
||||
echo "BAT_SYSTEM_CONFIG_PREFIX=$GITHUB_WORKSPACE/tests/examples/system_config" >> $GITHUB_ENV
|
||||
@@ -101,10 +132,10 @@ jobs:
|
||||
|
||||
documentation:
|
||||
name: Documentation
|
||||
runs-on: ubuntu-20.04
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Git checkout
|
||||
uses: actions/checkout@v3
|
||||
uses: actions/checkout@v5
|
||||
- name: Install Rust toolchain
|
||||
uses: dtolnay/rust-toolchain@stable
|
||||
- name: Check documentation
|
||||
@@ -114,29 +145,40 @@ jobs:
|
||||
- name: Show man page
|
||||
run: man $(find . -name bat.1)
|
||||
|
||||
cargo-audit:
|
||||
name: cargo audit
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- run: cargo install cargo-audit --locked
|
||||
- uses: actions/checkout@v5
|
||||
- run: cargo audit
|
||||
|
||||
build:
|
||||
name: ${{ matrix.job.target }} (${{ matrix.job.os }})
|
||||
runs-on: ${{ matrix.job.os }}
|
||||
needs: crate_metadata
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
job:
|
||||
- { target: aarch64-unknown-linux-gnu , os: ubuntu-20.04, use-cross: true }
|
||||
- { target: arm-unknown-linux-gnueabihf , os: ubuntu-20.04, use-cross: true }
|
||||
- { target: arm-unknown-linux-musleabihf, os: ubuntu-20.04, use-cross: true }
|
||||
- { target: i686-pc-windows-msvc , os: windows-2019 }
|
||||
- { target: i686-unknown-linux-gnu , os: ubuntu-20.04, use-cross: true }
|
||||
- { target: i686-unknown-linux-musl , os: ubuntu-20.04, use-cross: true }
|
||||
- { target: x86_64-apple-darwin , os: macos-10.15 }
|
||||
- { target: x86_64-pc-windows-gnu , os: windows-2019 }
|
||||
- { target: x86_64-pc-windows-msvc , os: windows-2019 }
|
||||
- { target: x86_64-unknown-linux-gnu , os: ubuntu-20.04, use-cross: true }
|
||||
- { target: x86_64-unknown-linux-musl , os: ubuntu-20.04, use-cross: true }
|
||||
- { target: aarch64-unknown-linux-musl , os: ubuntu-latest, dpkg_arch: arm64, use-cross: true }
|
||||
- { target: aarch64-unknown-linux-gnu , os: ubuntu-latest, dpkg_arch: arm64, use-cross: true }
|
||||
- { target: arm-unknown-linux-gnueabihf , os: ubuntu-latest, dpkg_arch: armhf, use-cross: true }
|
||||
- { target: arm-unknown-linux-musleabihf, os: ubuntu-latest, dpkg_arch: musl-linux-armhf, use-cross: true }
|
||||
- { target: i686-pc-windows-msvc , os: windows-2025, }
|
||||
- { target: i686-unknown-linux-gnu , os: ubuntu-latest, dpkg_arch: i686, use-cross: true }
|
||||
- { target: i686-unknown-linux-musl , os: ubuntu-latest, dpkg_arch: musl-linux-i686, use-cross: true }
|
||||
- { target: x86_64-apple-darwin , os: macos-13, }
|
||||
- { target: aarch64-apple-darwin , os: macos-14, }
|
||||
- { target: x86_64-pc-windows-msvc , os: windows-2025, }
|
||||
- { target: aarch64-pc-windows-msvc , os: windows-11-arm, }
|
||||
- { target: x86_64-unknown-linux-gnu , os: ubuntu-latest, dpkg_arch: amd64, use-cross: true }
|
||||
- { target: x86_64-unknown-linux-musl , os: ubuntu-latest, dpkg_arch: musl-linux-amd64, use-cross: true }
|
||||
env:
|
||||
BUILD_CMD: cargo
|
||||
steps:
|
||||
- name: Checkout source code
|
||||
uses: actions/checkout@v3
|
||||
uses: actions/checkout@v5
|
||||
|
||||
- name: Install prerequisites
|
||||
shell: bash
|
||||
@@ -146,14 +188,6 @@ jobs:
|
||||
aarch64-unknown-linux-gnu) sudo apt-get -y update ; sudo apt-get -y install gcc-aarch64-linux-gnu ;;
|
||||
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
|
||||
uses: dtolnay/rust-toolchain@stable
|
||||
with:
|
||||
@@ -184,7 +218,7 @@ jobs:
|
||||
shell: bash
|
||||
run: $BUILD_CMD build --locked --release --target=${{ matrix.job.target }}
|
||||
|
||||
- name: Set bin name & path
|
||||
- name: Set binary name & path
|
||||
id: bin
|
||||
shell: bash
|
||||
run: |
|
||||
@@ -195,10 +229,10 @@ jobs:
|
||||
esac;
|
||||
|
||||
# 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}"
|
||||
|
||||
# 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_NAME=${BIN_NAME}" >> $GITHUB_OUTPUT
|
||||
|
||||
@@ -208,12 +242,18 @@ jobs:
|
||||
run: |
|
||||
# test only library unit tests and binary for arm-type targets
|
||||
unset CARGO_TEST_OPTIONS
|
||||
unset CARGO_TEST_OPTIONS ; case ${{ matrix.job.target }} in arm-* | aarch64-*) CARGO_TEST_OPTIONS="--lib --bin ${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
|
||||
|
||||
- name: Run tests
|
||||
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
|
||||
shell: bash
|
||||
@@ -248,7 +288,7 @@ jobs:
|
||||
shell: bash
|
||||
run: |
|
||||
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}
|
||||
echo "PKG_NAME=${PKG_NAME}" >> $GITHUB_OUTPUT
|
||||
|
||||
@@ -260,17 +300,17 @@ jobs:
|
||||
# Binary
|
||||
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
|
||||
cp "README.md" "LICENSE-MIT" "LICENSE-APACHE" "CHANGELOG.md" "$ARCHIVE_DIR"
|
||||
|
||||
# Man page
|
||||
cp 'target/${{ matrix.job.target }}/release/build/${{ needs.crate_metadata.outputs.name }}'-*/out/assets/manual/bat.1 "$ARCHIVE_DIR"
|
||||
|
||||
# Autocompletion files
|
||||
cp 'target/${{ matrix.job.target }}/release/build/${{ env.PROJECT_NAME }}'-*/out/assets/completions/bat.bash "$ARCHIVE_DIR/autocomplete/${{ env.PROJECT_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/${{ env.PROJECT_NAME }}'-*/out/assets/completions/_bat.ps1 "$ARCHIVE_DIR/autocomplete/_${{ env.PROJECT_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.bash "$ARCHIVE_DIR/autocomplete/${{ needs.crate_metadata.outputs.name }}.bash"
|
||||
cp 'target/${{ matrix.job.target }}/release/build/${{ needs.crate_metadata.outputs.name }}'-*/out/assets/completions/bat.fish "$ARCHIVE_DIR/autocomplete/${{ needs.crate_metadata.outputs.name }}.fish"
|
||||
cp 'target/${{ matrix.job.target }}/release/build/${{ needs.crate_metadata.outputs.name }}'-*/out/assets/completions/_bat.ps1 "$ARCHIVE_DIR/autocomplete/_${{ needs.crate_metadata.outputs.name }}.ps1"
|
||||
cp 'target/${{ matrix.job.target }}/release/build/${{ needs.crate_metadata.outputs.name }}'-*/out/assets/completions/bat.zsh "$ARCHIVE_DIR/autocomplete/${{ needs.crate_metadata.outputs.name }}.zsh"
|
||||
|
||||
# base compressed package
|
||||
pushd "${PKG_STAGING}/" >/dev/null
|
||||
@@ -293,20 +333,11 @@ jobs:
|
||||
DPKG_DIR="${DPKG_STAGING}/dpkg"
|
||||
mkdir -p "${DPKG_DIR}"
|
||||
|
||||
DPKG_BASENAME=${PROJECT_NAME}
|
||||
DPKG_CONFLICTS=${PROJECT_NAME}-musl
|
||||
case ${{ matrix.job.target }} in *-musl) DPKG_BASENAME=${PROJECT_NAME}-musl ; DPKG_CONFLICTS=${PROJECT_NAME} ;; esac;
|
||||
DPKG_VERSION=${PROJECT_VERSION}
|
||||
|
||||
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_BASENAME=${{ needs.crate_metadata.outputs.name }}
|
||||
DPKG_CONFLICTS=${{ needs.crate_metadata.outputs.name }}-musl
|
||||
case ${{ matrix.job.target }} in *-musl) DPKG_BASENAME=${{ needs.crate_metadata.outputs.name }}-musl ; DPKG_CONFLICTS=${{ needs.crate_metadata.outputs.name }} ;; esac;
|
||||
DPKG_VERSION=${{ needs.crate_metadata.outputs.version }}
|
||||
DPKG_ARCH="${{ matrix.job.dpkg_arch }}"
|
||||
DPKG_NAME="${DPKG_BASENAME}_${DPKG_VERSION}_${DPKG_ARCH}.deb"
|
||||
echo "DPKG_NAME=${DPKG_NAME}" >> $GITHUB_OUTPUT
|
||||
|
||||
@@ -314,13 +345,13 @@ jobs:
|
||||
install -Dm755 "${{ steps.bin.outputs.BIN_PATH }}" "${DPKG_DIR}/usr/bin/${{ steps.bin.outputs.BIN_NAME }}"
|
||||
|
||||
# Man page
|
||||
install -Dm644 'target/${{ matrix.job.target }}/release/build/${{ env.PROJECT_NAME }}'-*/out/assets/manual/bat.1 "${DPKG_DIR}/usr/share/man/man1/${{ env.PROJECT_NAME }}.1"
|
||||
gzip -n --best "${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/${{ needs.crate_metadata.outputs.name }}.1"
|
||||
|
||||
# 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/${{ 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/${{ 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.bash "${DPKG_DIR}/usr/share/bash-completion/completions/${{ needs.crate_metadata.outputs.name }}"
|
||||
install -Dm644 'target/${{ matrix.job.target }}/release/build/${{ needs.crate_metadata.outputs.name }}'-*/out/assets/completions/bat.fish "${DPKG_DIR}/usr/share/fish/vendor_completions.d/${{ needs.crate_metadata.outputs.name }}.fish"
|
||||
install -Dm644 'target/${{ matrix.job.target }}/release/build/${{ needs.crate_metadata.outputs.name }}'-*/out/assets/completions/bat.zsh "${DPKG_DIR}/usr/share/zsh/vendor-completions/_${{ needs.crate_metadata.outputs.name }}"
|
||||
|
||||
# README and LICENSE
|
||||
install -Dm644 "README.md" "${DPKG_DIR}/usr/share/doc/${DPKG_BASENAME}/README.md"
|
||||
@@ -331,12 +362,12 @@ jobs:
|
||||
|
||||
cat > "${DPKG_DIR}/usr/share/doc/${DPKG_BASENAME}/copyright" <<EOF
|
||||
Format: http://www.debian.org/doc/packaging-manuals/copyright-format/1.0/
|
||||
Upstream-Name: ${{ env.PROJECT_NAME }}
|
||||
Source: ${{ env.PROJECT_HOMEPAGE }}
|
||||
Upstream-Name: ${{ needs.crate_metadata.outputs.name }}
|
||||
Source: ${{ needs.crate_metadata.outputs.homepage }}
|
||||
|
||||
Files: *
|
||||
Copyright: ${{ env.PROJECT_MAINTAINER }}
|
||||
Copyright: $COPYRIGHT_YEARS ${{ env.PROJECT_MAINTAINER }}
|
||||
Copyright: ${{ needs.crate_metadata.outputs.maintainer }}
|
||||
Copyright: $COPYRIGHT_YEARS ${{ needs.crate_metadata.outputs.maintainer }}
|
||||
License: Apache-2.0 or MIT
|
||||
|
||||
License: Apache-2.0
|
||||
@@ -377,10 +408,10 @@ jobs:
|
||||
Version: ${DPKG_VERSION}
|
||||
Section: utils
|
||||
Priority: optional
|
||||
Maintainer: ${{ env.PROJECT_MAINTAINER }}
|
||||
Homepage: ${{ env.PROJECT_HOMEPAGE }}
|
||||
Maintainer: ${{ needs.crate_metadata.outputs.maintainer }}
|
||||
Homepage: ${{ needs.crate_metadata.outputs.homepage }}
|
||||
Architecture: ${DPKG_ARCH}
|
||||
Provides: ${{ env.PROJECT_NAME }}
|
||||
Provides: ${{ needs.crate_metadata.outputs.name }}
|
||||
Conflicts: ${DPKG_CONFLICTS}
|
||||
Description: cat(1) clone with wings.
|
||||
A cat(1) clone with syntax highlighting and Git integration.
|
||||
@@ -413,7 +444,7 @@ jobs:
|
||||
echo "IS_RELEASE=${IS_RELEASE}" >> $GITHUB_OUTPUT
|
||||
|
||||
- name: Publish archives and packages
|
||||
uses: softprops/action-gh-release@v1
|
||||
uses: softprops/action-gh-release@v2
|
||||
if: steps.is-release.outputs.IS_RELEASE
|
||||
with:
|
||||
files: |
|
||||
@@ -421,3 +452,15 @@ jobs:
|
||||
${{ steps.debian-package.outputs.DPKG_PATH }}
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
||||
winget:
|
||||
name: Publish to Winget
|
||||
runs-on: ubuntu-latest
|
||||
needs: build
|
||||
if: startsWith(github.ref, 'refs/tags/v')
|
||||
steps:
|
||||
- uses: vedantmgoyal9/winget-releaser@19e706d4c9121098010096f9c495a70a7518b30f
|
||||
with:
|
||||
identifier: sharkdp.bat
|
||||
installers-regex: '-pc-windows-msvc\.zip$'
|
||||
token: ${{ secrets.WINGET_TOKEN }}
|
||||
|
33
.github/workflows/require-changelog-for-PRs.yml
vendored
Normal file
33
.github/workflows/require-changelog-for-PRs.yml
vendored
Normal file
@@ -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
1
.gitignore
vendored
@@ -2,6 +2,7 @@
|
||||
**/*.rs.bk
|
||||
|
||||
# Generated files
|
||||
/assets/completions/_bat.ps1
|
||||
/assets/completions/bat.bash
|
||||
/assets/completions/bat.fish
|
||||
/assets/completions/bat.zsh
|
||||
|
48
.gitmodules
vendored
48
.gitmodules
vendored
@@ -65,7 +65,7 @@
|
||||
path = assets/themes/onehalf
|
||||
url = https://github.com/sonph/onehalf
|
||||
[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
|
||||
[submodule "assets/syntaxes/FSharp"]
|
||||
path = assets/syntaxes/02_Extra/FSharp
|
||||
@@ -89,7 +89,7 @@
|
||||
path = assets/themes/sublime-snazzy
|
||||
url = https://github.com/greggb/sublime-snazzy
|
||||
[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
|
||||
[submodule "assets/syntaxes/protobuf-syntax-highlighting"]
|
||||
path = assets/syntaxes/02_Extra/Protobuf
|
||||
@@ -108,14 +108,11 @@
|
||||
path = assets/syntaxes/02_Extra/Fish
|
||||
url = https://github.com/Phidica/sublime-fish.git
|
||||
[submodule "assets/syntaxes/Org mode"]
|
||||
path = assets/syntaxes/02_Extra/Org mode
|
||||
path = assets/syntaxes/02_Extra/Org_mode
|
||||
url = https://github.com/jezcope/Org.tmbundle.git
|
||||
[submodule "assets/syntaxes/DotENV"]
|
||||
path = assets/syntaxes/02_Extra/DotENV
|
||||
url = https://github.com/zaynali53/DotENV
|
||||
[submodule "assets/syntaxes/hosts"]
|
||||
path = assets/syntaxes/02_Extra/hosts
|
||||
url = https://github.com/brandonwamboldt/sublime-hosts
|
||||
[submodule "assets/syntaxes/ssh-config"]
|
||||
path = assets/syntaxes/02_Extra/ssh-config
|
||||
url = https://github.com/robballou/sublimetext-sshconfig.git
|
||||
@@ -142,7 +139,7 @@
|
||||
path = assets/themes/dracula-sublime
|
||||
url = https://github.com/dracula/sublime.git
|
||||
[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
|
||||
[submodule "assets/themes/Nord-sublime"]
|
||||
path = assets/themes/Nord-sublime
|
||||
@@ -177,7 +174,7 @@
|
||||
url = https://github.com/euler0/sublime-glsl
|
||||
[submodule "assets/syntaxes/02_Extra/Nginx"]
|
||||
path = assets/syntaxes/02_Extra/Nginx
|
||||
url = https://github.com/brandonwamboldt/sublime-nginx
|
||||
url = https://github.com/SublimeText/nginx
|
||||
[submodule "assets/syntaxes/02_Extra/Apache"]
|
||||
path = assets/syntaxes/02_Extra/Apache
|
||||
url = https://github.com/colinta/ApacheConf.tmLanguage
|
||||
@@ -196,10 +193,7 @@
|
||||
branch = bat-source
|
||||
[submodule "assets/syntaxes/02_Extra/Lean"]
|
||||
path = assets/syntaxes/02_Extra/Lean
|
||||
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
|
||||
url = https://github.com/leanprover/vscode-lean4.git
|
||||
[submodule "assets/syntaxes/02_Extra/Zig"]
|
||||
path = assets/syntaxes/02_Extra/Zig
|
||||
url = https://github.com/ziglang/sublime-zig-language.git
|
||||
@@ -254,3 +248,33 @@
|
||||
[submodule "assets/syntaxes/02_Extra/Crontab"]
|
||||
path = assets/syntaxes/02_Extra/Crontab
|
||||
url = https://github.com/michaelblyons/SublimeSyntax-Crontab
|
||||
[submodule "assets/syntaxes/02_Extra/NSIS"]
|
||||
path = assets/syntaxes/02_Extra/NSIS
|
||||
url = https://github.com/SublimeText/NSIS
|
||||
[submodule "assets/syntaxes/02_Extra/vscode-wgsl"]
|
||||
path = assets/syntaxes/02_Extra/vscode-wgsl
|
||||
url = https://github.com/PolyMeilex/vscode-wgsl.git
|
||||
[submodule "assets/syntaxes/02_Extra/CFML"]
|
||||
path = assets/syntaxes/02_Extra/CFML
|
||||
url = https://github.com/jcberquist/sublimetext-cfml.git
|
||||
[submodule "assets/syntaxes/02_Extra/Idris2"]
|
||||
path = assets/syntaxes/02_Extra/Idris2
|
||||
url = https://github.com/buzden/sublime-syntax-idris2
|
||||
[submodule "assets/syntaxes/02_Extra/GDScript-sublime"]
|
||||
path = assets/syntaxes/02_Extra/GDScript-sublime
|
||||
url = https://github.com/beefsack/GDScript-sublime
|
||||
[submodule "assets/syntaxes/02_Extra/sublime-odin"]
|
||||
path = assets/syntaxes/02_Extra/sublime-odin
|
||||
url = https://github.com/odin-lang/sublime-odin
|
||||
[submodule "assets/syntaxes/02_Extra/typst-syntax-highlight"]
|
||||
path = assets/syntaxes/02_Extra/typst-syntax-highlight
|
||||
url = https://github.com/hyrious/typst-syntax-highlight
|
||||
[submodule "assets/themes/Catppuccin"]
|
||||
path = assets/themes/Catppuccin
|
||||
url = https://github.com/SchweGELBin/catppuccin-bat-sub.git
|
||||
[submodule "assets/syntaxes/02_Extra/SmartVHDL"]
|
||||
path = assets/syntaxes/02_Extra/SmartVHDL
|
||||
url = https://github.com/TheClams/SmartVHDL
|
||||
[submodule "assets/syntaxes/02_Extra/hosts"]
|
||||
path = assets/syntaxes/02_Extra/hosts
|
||||
url = https://github.com/tijn/hosts.tmLanguage
|
||||
|
203
CHANGELOG.md
203
CHANGELOG.md
@@ -1,3 +1,206 @@
|
||||
# unreleased
|
||||
|
||||
## Features
|
||||
- Add build for windows/ARM64 platform. #3190 (@alcroito)
|
||||
|
||||
- Add paging to `--list-themes`, see PR #3239 (@einfachIrgendwer0815)
|
||||
- Support negative relative line ranges, e.g. `bat -r :-10` / `bat -r='-10:'`, see #3068 (@ajesipow)
|
||||
- Support context in line ranges, e.g. `bat -r 30::5` / `bat -r 30:40:5`, see #3345 (@cavanaug)
|
||||
|
||||
## Bugfixes
|
||||
|
||||
- Fix UTF-8 BOM not being stripped for syntax detection, see #3314 (@krikera)
|
||||
- Fix `BAT_THEME_DARK` and `BAT_THEME_LIGHT` being ignored, see issue #3171 and PR #3168 (@bash)
|
||||
- Prevent `--list-themes` from outputting default theme info to stdout when it is piped, see #3189 (@einfachIrgendwer0815)
|
||||
- Rename some submodules to fix Dependabot submodule updates, see issue #3198 and PR #3201 (@victor-gp)
|
||||
- Make highlight tests fail when new syntaxes don't have fixtures PR #3255 (@dan-hipschman)
|
||||
- Fix crash for multibyte characters in file path, see issue #3230 and PR #3245 (@HSM95)
|
||||
- Add missing mappings for various bash/zsh files, see PR #3262 (@AdamGaskins)
|
||||
- Send all bat errors to stderr by default, see #3336 (@JerryImMouse)
|
||||
- Make --map-syntax target case insensitive to match --language, see #3206 (@keith-hall)
|
||||
- Correctly determine the end of the line in UTF16LE/BE input #3369 (@keith-hall)
|
||||
|
||||
## Other
|
||||
|
||||
- Update base16 README links to community driven base16 work #2871 (@JamyGolden)
|
||||
- Work around build failures when building `bat` from vendored sources #3179 (@dtolnay)
|
||||
- CICD: Stop building for x86_64-pc-windows-gnu which fails #3261 (Enselic)
|
||||
- CICD: CICD: replace windows-2019 runners with windows-2025 #3339 (@cyqsimon)
|
||||
- Build script: replace string-based codegen with quote-based codegen #3340 (@cyqsimon)
|
||||
- Improve code coverage of `--list-languages` parameter #2942 (@sblondon)
|
||||
- Only start offload worker thread when there's more than 1 core #2956 (@cyqsimon)
|
||||
- Update terminal-colorsaurus (the library used for dark/light detection) to 1.0, see #3347 (@bash)
|
||||
- Update console dependency to 0.16, see #3351 (@musicinmybrain)
|
||||
- Fixed some typos #3244 (@ssbarnea)
|
||||
|
||||
## Syntaxes
|
||||
|
||||
- Add syntax mapping for `paru` configuration files #3182 (@cyqsimon)
|
||||
- Add support for [Idris 2 programming language](https://www.idris-lang.org/) #3150 (@buzden)
|
||||
- Add syntax mapping for `nix`'s '`flake.lock` lockfiles #3196 (@odilf)
|
||||
- Improvements to CSV/TSV highlighting, with autodetection of delimiter and support for TSV files, see #3186 (@keith-
|
||||
- Improve (Sys)log error highlighting, see #3205 (@keith-hall)
|
||||
- Map `ndjson` extension to JSON syntax, see #3209 (@keith-hall)
|
||||
- Map files with `csproj`, `vbproj`, `props` and `targets` extensions to XML syntax, see #3213 (@keith-hall)
|
||||
- Add debsources syntax to highlight `/etc/apt/sources.list` files, see #3215 (@keith-hall)
|
||||
- Add syntax definition and test file for GDScript highlighting, see #3236 (@chetanjangir0)
|
||||
- Add syntax test file for Odin highlighting, see #3241 (@chetanjangir0)
|
||||
- Update quadlet syntax mapping rules to cover quadlets in subdirectories #3299 (@cyqsimon)
|
||||
- Add syntax Typst #3300 (@cskeeters)
|
||||
- Map `.mill` files to Scala syntax for Mill build tool configuration files #3311 (@krikera)
|
||||
- Add syntax highlighting for VHDL, see #3337 (@JerryImMouse)
|
||||
- Add syntax mapping for certbot certificate configuration #3338 (@cyqsimon)
|
||||
- Update Lean syntax from Lean 3 to Lean 4 #3322 (@YDX-2147483647)
|
||||
- Map `.flatpakref` and `.flatpakrepo` files to INI syntax #3353 (@Ferenc-)
|
||||
- Update hosts syntax #3368 (@keith-hall)
|
||||
|
||||
## Themes
|
||||
|
||||
- Add Catppuccin, see #3317 (@SchweGELBin)
|
||||
- Updated Catppuccin, see #3333 (@SchweGELBin)
|
||||
- Updated gruvbox, see #3372 (@Nicholas42)
|
||||
- Updated GitHub theme, see #3382 (@CosmicHorrorDev)
|
||||
|
||||
## `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
|
||||
|
||||
## Features
|
||||
|
@@ -6,21 +6,42 @@ Thank you for considering to contribute to `bat`!
|
||||
|
||||
## Add an entry to the changelog
|
||||
|
||||
If your contribution changes the behavior of `bat` (as opposed to a typo-fix
|
||||
in the documentation), please update the [`CHANGELOG.md`](CHANGELOG.md) file
|
||||
and describe your changes. This makes the release process much easier and
|
||||
therefore helps to get your changes into a new `bat` release faster.
|
||||
Keeping the [`CHANGELOG.md`](CHANGELOG.md) file up-to-date makes the release
|
||||
process much easier and therefore helps to get your changes into a new `bat`
|
||||
release faster. However, not every change to the repository requires a
|
||||
changelog entry. Below are a few examples of that.
|
||||
|
||||
Please update the changelog if your contribution contains changes regarding
|
||||
any of the following:
|
||||
- the behavior of `bat`
|
||||
- syntax mappings
|
||||
- syntax definitions
|
||||
- themes
|
||||
- the build system, linting, or CI workflows
|
||||
|
||||
A changelog entry is not necessary when:
|
||||
- updating documentation
|
||||
- fixing typos
|
||||
|
||||
>[!NOTE]
|
||||
> For PRs, a CI workflow verifies that a suitable changelog entry is
|
||||
> added. If such an entry is missing, the workflow will fail. If your
|
||||
> changes do not need an entry to the changelog (see above), that
|
||||
> workflow failure can be disregarded.
|
||||
|
||||
|
||||
### Changelog entry format
|
||||
|
||||
The top of the `CHANGELOG` contains a *"unreleased"* section with a few
|
||||
subsections (Features, Bugfixes, …). Please add your entry to the subsection
|
||||
that best describes your change.
|
||||
|
||||
Entries follow this format:
|
||||
Entries must follow this format:
|
||||
```
|
||||
- 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 `@user` by your GitHub username.
|
||||
Please replace `#123` with the number of your pull request (not issue) and
|
||||
`@user` by your GitHub username.
|
||||
|
||||
|
||||
## Development
|
||||
|
1779
Cargo.lock
generated
1779
Cargo.lock
generated
File diff suppressed because it is too large
Load Diff
94
Cargo.toml
94
Cargo.toml
@@ -3,14 +3,15 @@ authors = ["David Peter <mail@david-peter.de>"]
|
||||
categories = ["command-line-utilities"]
|
||||
description = "A cat(1) clone with wings."
|
||||
homepage = "https://github.com/sharkdp/bat"
|
||||
license = "MIT/Apache-2.0"
|
||||
license = "MIT OR Apache-2.0"
|
||||
name = "bat"
|
||||
repository = "https://github.com/sharkdp/bat"
|
||||
version = "0.23.0"
|
||||
version = "0.25.0"
|
||||
exclude = ["assets/syntaxes/*", "assets/themes/*"]
|
||||
build = "build.rs"
|
||||
edition = '2018'
|
||||
rust-version = "1.64"
|
||||
build = "build/main.rs"
|
||||
edition = '2021'
|
||||
# You are free to bump MSRV as soon as a reason for bumping emerges.
|
||||
rust-version = "1.74"
|
||||
|
||||
[features]
|
||||
default = ["application"]
|
||||
@@ -25,15 +26,15 @@ application = [
|
||||
# Mainly for developers that want to iterate quickly
|
||||
# Be aware that the included features might change in the future
|
||||
minimal-application = [
|
||||
"atty",
|
||||
"clap",
|
||||
"dirs",
|
||||
"etcetera",
|
||||
"paging",
|
||||
"regex-onig",
|
||||
"wild",
|
||||
]
|
||||
git = ["git2"] # Support indicating git modifications
|
||||
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"]
|
||||
|
||||
# You need to use one of these if you depend on bat as a library:
|
||||
@@ -41,64 +42,85 @@ regex-onig = ["syntect/regex-onig"] # Use the "oniguruma" regex engine
|
||||
regex-fancy = ["syntect/regex-fancy"] # Use the rust-only "fancy-regex" engine
|
||||
|
||||
[dependencies]
|
||||
atty = { version = "0.2.14", optional = true }
|
||||
nu-ansi-term = "0.47.0"
|
||||
nu-ansi-term = "0.50.0"
|
||||
ansi_colours = "^1.2"
|
||||
bincode = "1.0"
|
||||
console = "0.15.5"
|
||||
flate2 = "1.0"
|
||||
once_cell = "1.17"
|
||||
thiserror = "1.0"
|
||||
wild = { version = "2.1", optional = true }
|
||||
console = "0.16.0"
|
||||
flate2 = "1.1"
|
||||
once_cell = "1.20"
|
||||
thiserror = "2.0"
|
||||
wild = { version = "2.2", optional = true }
|
||||
content_inspector = "0.2.4"
|
||||
encoding = "0.2"
|
||||
shell-words = { version = "1.1.0", optional = true }
|
||||
unicode-width = "0.1.10"
|
||||
unicode-width = "0.2.1"
|
||||
globset = "0.4"
|
||||
serde = { version = "1.0", features = ["derive"] }
|
||||
serde_yaml = "0.8"
|
||||
serde = "1.0"
|
||||
serde_derive = "1.0"
|
||||
serde_yaml = "0.9.28"
|
||||
semver = "1.0"
|
||||
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 }
|
||||
dirs = { version = "5.0.0", optional = true }
|
||||
grep-cli = { version = "0.1.7", optional = true }
|
||||
regex = { version = "1.7.0", optional = true }
|
||||
walkdir = { version = "2.0", optional = true }
|
||||
bytesize = { version = "1.1.0" }
|
||||
etcetera = { version = "0.10.0", optional = true }
|
||||
grep-cli = { version = "0.1.11", optional = true }
|
||||
regex = { version = "1.10.6", optional = true }
|
||||
walkdir = { version = "2.5", optional = true }
|
||||
bytesize = { version = "1.3.0" }
|
||||
encoding_rs = "0.8.35"
|
||||
execute = { version = "0.2.13", optional = true }
|
||||
terminal-colorsaurus = "1.0"
|
||||
unicode-segmentation = "1.12.0"
|
||||
itertools = "0.13.0"
|
||||
|
||||
[dependencies.git2]
|
||||
version = "0.16"
|
||||
version = "0.20"
|
||||
optional = true
|
||||
default-features = false
|
||||
|
||||
[dependencies.syntect]
|
||||
version = "5.0.0"
|
||||
version = "5.2.0"
|
||||
default-features = false
|
||||
features = ["parsing"]
|
||||
|
||||
[dependencies.clap]
|
||||
version = "4.1.8"
|
||||
version = "4.4.12"
|
||||
optional = true
|
||||
features = ["wrap_help", "cargo"]
|
||||
|
||||
[target.'cfg(target_os = "macos")'.dependencies]
|
||||
dirs = "5.0.0"
|
||||
plist = "1.3"
|
||||
home = "0.5.9"
|
||||
plist = "1.7.0"
|
||||
|
||||
[dev-dependencies]
|
||||
assert_cmd = "2.0.8"
|
||||
expect-test = "1.4.0"
|
||||
serial_test = "0.6.0"
|
||||
predicates = "2.1.5"
|
||||
assert_cmd = "2.0.12"
|
||||
expect-test = "1.5.0"
|
||||
serial_test = { version = "2.0.0", default-features = false }
|
||||
predicates = "3.1.3"
|
||||
wait-timeout = "0.2.0"
|
||||
tempfile = "3.3.0"
|
||||
tempfile = "3.16.0"
|
||||
serde = { version = "1.0", features = ["derive"] }
|
||||
|
||||
[target.'cfg(unix)'.dev-dependencies]
|
||||
nix = { version = "0.26.2", default-features = false, features = ["term"] }
|
||||
nix = { version = "0.30", 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"
|
||||
prettyplease = "0.2.35"
|
||||
proc-macro2 = "1.0.95"
|
||||
quote = "1.0.40"
|
||||
regex = "1.10.6"
|
||||
serde = "1.0"
|
||||
serde_derive = "1.0"
|
||||
serde_with = { version = "3.12.0", default-features = false, features = ["macros"] }
|
||||
syn = { version = "2.0.104", features = ["full"] }
|
||||
toml = { version = "0.9.1", features = ["preserve_order"] }
|
||||
walkdir = "2.5"
|
||||
|
||||
[build-dependencies.clap]
|
||||
version = "4.1.8"
|
||||
version = "4.4.12"
|
||||
optional = true
|
||||
features = ["wrap_help", "cargo"]
|
||||
|
||||
|
285
README.md
285
README.md
@@ -22,15 +22,22 @@
|
||||
### Sponsors
|
||||
|
||||
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>
|
||||
<strong>Your app, enterprise-ready.</strong>
|
||||
<strong>Warp, the intelligent terminal</strong>
|
||||
<br>
|
||||
<sub>Start selling to enterprise customers with just a few lines of code.</sub>
|
||||
<br>
|
||||
<sup>Add Single Sign-On (and more) in minutes instead of months.</sup>
|
||||
<sub>Available on MacOS, Linux, Windows</sub>
|
||||
</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
|
||||
|
||||
@@ -114,11 +121,11 @@ bat f - g # output 'f', then stdin, then 'g'.
|
||||
#### `fzf`
|
||||
|
||||
You can use `bat` as a previewer for [`fzf`](https://github.com/junegunn/fzf). To do this,
|
||||
use `bat`s `--color=always` option to force colorized output. You can also use `--line-range`
|
||||
use `bat`'s `--color=always` option to force colorized output. You can also use `--line-range`
|
||||
option to restrict the load times for long files:
|
||||
|
||||
```bash
|
||||
fzf --preview 'bat --color=always --style=numbers --line-range=:500 {}'
|
||||
fzf --preview "bat --color=always --style=numbers --line-range=:500 {}"
|
||||
```
|
||||
|
||||
For more information, see [`fzf`'s `README`](https://github.com/junegunn/fzf#preview-window).
|
||||
@@ -171,7 +178,7 @@ You can combine `bat` with `git diff` to view lines around code changes with pro
|
||||
highlighting:
|
||||
```bash
|
||||
batdiff() {
|
||||
git diff --name-only --relative --diff-filter=d | xargs bat --diff
|
||||
git diff --name-only --relative --diff-filter=d -z | xargs -0 bat --diff
|
||||
}
|
||||
```
|
||||
If you prefer to use this as a separate tool, check out `batdiff` in [`bat-extras`](https://github.com/eth-p/bat-extras).
|
||||
@@ -194,24 +201,30 @@ bat main.cpp | xclip
|
||||
`MANPAGER` environment variable:
|
||||
|
||||
```bash
|
||||
export MANPAGER="sh -c 'col -bx | bat -l man -p'"
|
||||
export MANPAGER="sh -c 'awk '\''{ gsub(/\x1B\[[0-9;]*m/, \"\", \$0); gsub(/.\x08/, \"\", \$0); print }'\'' | bat -p -lman'"
|
||||
man 2 select
|
||||
```
|
||||
(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).
|
||||
|
||||
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`
|
||||
|
||||
The [`prettybat`](https://github.com/eth-p/bat-extras/blob/master/doc/prettybat.md) script is a wrapper that will format code and print it with `bat`.
|
||||
|
||||
#### `Warp`
|
||||
|
||||
<a href="https://app.warp.dev/drive/folder/-Bat-Warp-Pack-lxhe7HrEwgwpG17mvrFSz1">
|
||||
<img src="doc/sponsors/warp-pack-header.png" alt="Warp">
|
||||
</a>
|
||||
|
||||
#### Highlighting `--help` messages
|
||||
|
||||
You can use `bat` to colorize help text: `$ cp --help | bat -plhelp`
|
||||
@@ -228,12 +241,40 @@ help() {
|
||||
|
||||
Then you can do `$ help cp` or `$ help git commit`.
|
||||
|
||||
When you are using `zsh`, you can also use global aliases to override `-h` and `--help` entirely:
|
||||
|
||||
```bash
|
||||
alias -g -- -h='-h 2>&1 | bat --language=help --style=plain'
|
||||
alias -g -- --help='--help 2>&1 | bat --language=help --style=plain'
|
||||
```
|
||||
|
||||
For `fish`, you can use abbreviations:
|
||||
|
||||
```fish
|
||||
abbr -a --position anywhere -- --help '--help | bat -plhelp'
|
||||
abbr -a --position anywhere -- -h '-h | bat -plhelp'
|
||||
```
|
||||
|
||||
This way, you can keep on using `cp --help`, but get colorized help pages.
|
||||
|
||||
Be aware that in some cases, `-h` may not be a shorthand of `--help` (for example with `ls`). In cases where you need to use `-h`
|
||||
as a command argument you can prepend `\` to the arguement (eg. `ls \-h`) to escape the aliasing defined above.
|
||||
|
||||
Please report any issues with the help syntax in [this repository](https://github.com/victor-gp/cmd-help-sublime-syntax).
|
||||
|
||||
|
||||
## Installation
|
||||
|
||||
[](https://repology.org/project/bat-cat/versions)
|
||||
<!--
|
||||
|
||||
Installation instructions need to:
|
||||
* be for widely used systems
|
||||
* be non-obvious
|
||||
* be from somewhat official sources
|
||||
|
||||
-->
|
||||
|
||||
[](https://repology.org/project/bat-cat/versions)
|
||||
|
||||
### On Ubuntu (using `apt`)
|
||||
*... and other Debian-based Linux distributions.*
|
||||
@@ -253,6 +294,11 @@ mkdir -p ~/.local/bin
|
||||
ln -s /usr/bin/batcat ~/.local/bin/bat
|
||||
```
|
||||
|
||||
an example alias for `batcat` as `bat`:
|
||||
```bash
|
||||
alias bat="batcat"
|
||||
```
|
||||
|
||||
### On Ubuntu (using most recent `.deb` packages)
|
||||
*... and other Debian-based Linux distributions.*
|
||||
|
||||
@@ -275,7 +321,7 @@ apk add bat
|
||||
|
||||
### 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:
|
||||
|
||||
```bash
|
||||
@@ -290,14 +336,6 @@ You can install [the `bat` package](https://koji.fedoraproject.org/koji/packagei
|
||||
dnf install bat
|
||||
```
|
||||
|
||||
### On Funtoo Linux
|
||||
|
||||
You can install [the `bat` package](https://github.com/funtoo/dev-kit/tree/1.4-release/sys-apps/bat) from dev-kit.
|
||||
|
||||
```bash
|
||||
emerge sys-apps/bat
|
||||
```
|
||||
|
||||
### On Gentoo Linux
|
||||
|
||||
You can install [the `bat` package](https://packages.gentoo.org/packages/sys-apps/bat)
|
||||
@@ -307,20 +345,6 @@ from the official sources:
|
||||
emerge sys-apps/bat
|
||||
```
|
||||
|
||||
### On Void Linux
|
||||
|
||||
You can install `bat` via xbps-install:
|
||||
```bash
|
||||
xbps-install -S bat
|
||||
```
|
||||
|
||||
### On Termux
|
||||
|
||||
You can install `bat` via pkg:
|
||||
```bash
|
||||
pkg install bat
|
||||
```
|
||||
|
||||
### On FreeBSD
|
||||
|
||||
You can install a precompiled [`bat` package](https://www.freshports.org/textproc/bat) with pkg:
|
||||
@@ -388,7 +412,15 @@ take a look at the ["Using `bat` on Windows"](#using-bat-on-windows) section.
|
||||
|
||||
#### Prerequisites
|
||||
|
||||
You will need to install the [Visual C++ Redistributable](https://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
|
||||
|
||||
@@ -418,26 +450,44 @@ 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.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:
|
||||
|
||||
#### From local source
|
||||
```bash
|
||||
cargo install --path . --locked
|
||||
```
|
||||
> [!NOTE]
|
||||
> The `--path .` above specifies the directory of the source code and NOT where `bat` will be installed.
|
||||
> For more information see the docs for [`cargo install`](https://doc.rust-lang.org/cargo/commands/cargo-install.html).
|
||||
|
||||
#### From `crates.io`
|
||||
```bash
|
||||
cargo install --locked bat
|
||||
```
|
||||
|
||||
Note that additional files like the man page or shell completion
|
||||
files can not be installed 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
|
||||
|
||||
### Highlighting theme
|
||||
|
||||
Use `bat --list-themes` to get a list of all available themes for syntax
|
||||
highlighting. To select the `TwoDark` theme, call `bat` with the
|
||||
`--theme=TwoDark` option or set the `BAT_THEME` environment variable to
|
||||
highlighting. By default, `bat` uses `Monokai Extended` or `Monokai Extended Light`
|
||||
for dark and light themes respectively. To select the `TwoDark` theme, call `bat`
|
||||
with the `--theme=TwoDark` option or set the `BAT_THEME` environment variable to
|
||||
`TwoDark`. Use `export BAT_THEME="TwoDark"` in your shell's startup file to
|
||||
make the change permanent. Alternatively, use `bat`s
|
||||
[configuration file](https://github.com/sharkdp/bat#configuration-file).
|
||||
make the change permanent. Alternatively, use `bat`'s
|
||||
[configuration file](#configuration-file).
|
||||
|
||||
If you want to preview the different themes on a custom file, you can use
|
||||
the following command (you need [`fzf`](https://github.com/junegunn/fzf) for this):
|
||||
@@ -445,10 +495,12 @@ 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` looks good on a dark background by default. However, if your terminal uses a
|
||||
light background, some themes like `GitHub` or `OneHalfLight` will work better for you.
|
||||
`bat` automatically picks a fitting theme depending on your terminal's background color.
|
||||
You can use the `--theme-dark` / `--theme-light` options or the `BAT_THEME_DARK` / `BAT_THEME_LIGHT` environment variables
|
||||
to customize the themes used. This is especially useful if you frequently switch between dark and light mode.
|
||||
|
||||
You can also use a custom theme by following the
|
||||
['Adding new themes' section below](https://github.com/sharkdp/bat#adding-new-themes).
|
||||
['Adding new themes' section below](#adding-new-themes).
|
||||
|
||||
### 8-bit themes
|
||||
|
||||
@@ -457,12 +509,12 @@ even when truecolor support is available:
|
||||
|
||||
- `ansi` looks decent on any terminal. It uses 3-bit colors: black, red, green,
|
||||
yellow, blue, magenta, cyan, and white.
|
||||
- `base16` is designed for [base16](https://github.com/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
|
||||
[base16 styling guidelines](https://github.com/chriskempson/base16/blob/master/styling.md).
|
||||
- `base16-256` is designed for [base16-shell](https://github.com/chriskempson/base16-shell).
|
||||
[base16 styling guidelines](https://github.com/tinted-theming/home/blob/main/styling.md).
|
||||
- `base16-256` is designed for [tinted-shell](https://github.com/tinted-theming/tinted-shell).
|
||||
It replaces certain bright colors with 8-bit colors from 16 to 21. **Do not** use this simply
|
||||
because you have a 256-color terminal but are not using 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:
|
||||
|
||||
@@ -472,11 +524,21 @@ Although these themes are more restricted, they have three advantages over truec
|
||||
|
||||
### Output style
|
||||
|
||||
You can use the `--style` option to control the appearance of `bat`s output.
|
||||
You can use the `--style` option to control the appearance of `bat`'s output.
|
||||
You can use `--style=numbers,changes`, for example, to show only Git changes
|
||||
and line numbers but no grid and no file header. Set the `BAT_STYLE` environment
|
||||
variable to make these changes permanent or use `bat`s
|
||||
[configuration file](https://github.com/sharkdp/bat#configuration-file).
|
||||
variable to make these changes permanent or use `bat`'s
|
||||
[configuration file](#configuration-file).
|
||||
|
||||
>[!tip]
|
||||
> If you specify a default style in `bat`'s config file, you can change which components
|
||||
> are displayed during a single run of `bat` using the `--style` command-line argument.
|
||||
> By prefixing a component with `+` or `-`, it can be added or removed from the current style.
|
||||
>
|
||||
> For example, if your config contains `--style=full,-snip`, you can run bat with
|
||||
> `--style=-grid,+snip` to remove the grid and add back the `snip` component.
|
||||
> Or, if you want to override the styles completely, you use `--style=numbers` to
|
||||
> only show the line numbers.
|
||||
|
||||
### Adding new syntaxes / language definitions
|
||||
|
||||
@@ -523,6 +585,8 @@ syntax:
|
||||
### Adding new themes
|
||||
|
||||
This works very similar to how we add new syntax definitions.
|
||||
> [!NOTE]
|
||||
> Themes are stored in [`.tmTheme` files](https://www.sublimetext.com/docs/color_schemes_tmtheme.html).
|
||||
|
||||
First, create a folder with the new syntax highlighting themes:
|
||||
```bash
|
||||
@@ -537,6 +601,8 @@ bat cache --build
|
||||
```
|
||||
|
||||
Finally, use `bat --list-themes` to check if the new themes are available.
|
||||
> [!NOTE]
|
||||
> `bat` uses the name of the `.tmTheme` file for the theme's name.
|
||||
|
||||
### Adding or changing file type associations
|
||||
|
||||
@@ -573,31 +639,52 @@ 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`.
|
||||
|
||||
**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
|
||||
`PAGER`/`BAT_PAGER` variables:
|
||||
|
||||
```bash
|
||||
export BAT_PAGER="less -RF"
|
||||
export BAT_PAGER="less -RFK"
|
||||
```
|
||||
|
||||
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](#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
|
||||
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`.
|
||||
### Using `less` as a pager
|
||||
|
||||
If you want to enable mouse-wheel scrolling on older versions of `less`, you can pass just `-R` (as
|
||||
in the example above, this will disable the quit-if-one-screen feature). For less 530 or newer,
|
||||
it should work out of the box.
|
||||
When using `less` as a pager, `bat` will automatically pass extra options along to `less`
|
||||
to improve the experience. Specifically, `-R`/`--RAW-CONTROL-CHARS`, `-F`/`--quit-if-one-screen`,
|
||||
`-K`/`--quit-on-intr` and under certain conditions, `-X`/`--no-init` and/or `-S`/`--chop-long-lines`.
|
||||
|
||||
>[!IMPORTANT]
|
||||
> These options will not be added if:
|
||||
> - The pager is not named `less`.
|
||||
> - The `--pager` argument contains any command-line arguments (e.g. `--pager="less -R"`).
|
||||
> - The `BAT_PAGER` environment variable contains any command-line arguments (e.g. `export BAT_PAGER="less -R"`)
|
||||
>
|
||||
> The `--quit-if-one-screen` option will not be added when:
|
||||
> - The `--paging=always` argument is used.
|
||||
> - The `BAT_PAGING` environment is set to `always`.
|
||||
|
||||
The `-R` 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 `-K` option instructs `less` to exit immediately when an interrupt signal is received.
|
||||
This is useful to ensure that `less` quits together with `bat` on SIGINT.
|
||||
|
||||
The `-X` 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
|
||||
|
||||
@@ -611,12 +698,40 @@ sidebar. Calling `bat` with `--tabs=0` will override it and let tabs be consumed
|
||||
|
||||
### Dark mode
|
||||
|
||||
If you make use of the dark mode feature in macOS, you might want to configure `bat` to use a different
|
||||
If you make use of the dark mode feature in **macOS**, you might want to configure `bat` to use a different
|
||||
theme based on the OS theme. The following snippet uses the `default` theme when in the _dark mode_
|
||||
and the `GitHub` theme when in the _light mode_.
|
||||
|
||||
```bash
|
||||
alias cat="bat --theme=\$(defaults read -globalDomain AppleInterfaceStyle &> /dev/null && echo default || echo GitHub)"
|
||||
alias cat="bat --theme auto:system --theme-dark default --theme-light GitHub"
|
||||
```
|
||||
|
||||
The same dark mode feature is now available in **GNOME** and affects the `org.gnome.desktop.interface color-scheme` setting. The following code converts the above to use said setting.
|
||||
|
||||
```bash
|
||||
# .bashrc
|
||||
sys_color_scheme_is_dark() {
|
||||
condition=$(gsettings get org.gnome.desktop.interface color-scheme)
|
||||
condition=$(echo "$condition" | tr -d "[:space:]'")
|
||||
if [ $condition == "prefer-dark" ]; then
|
||||
return 0
|
||||
else
|
||||
return 1
|
||||
fi
|
||||
}
|
||||
|
||||
bat_alias_wrapper() {
|
||||
#get color scheme
|
||||
sys_color_scheme_is_dark
|
||||
if [[ $? -eq 0 ]]; then
|
||||
# bat command with dark color scheme
|
||||
bat --theme=default "$@"
|
||||
else
|
||||
# bat command with light color scheme
|
||||
bat --theme=GitHub "$@"
|
||||
fi
|
||||
}
|
||||
alias cat='bat_alias_wrapper'
|
||||
```
|
||||
|
||||
|
||||
@@ -628,10 +743,11 @@ on your operating system. To get the default path for your system, call
|
||||
bat --config-file
|
||||
```
|
||||
|
||||
Alternatively, you can use the `BAT_CONFIG_PATH` environment variable to point `bat` to a
|
||||
non-default location of the configuration file:
|
||||
Alternatively, you can use `BAT_CONFIG_PATH` or `BAT_CONFIG_DIR` environment variables to point `bat`
|
||||
to a non-default location of the configuration file or the configuration directory respectively:
|
||||
```bash
|
||||
export BAT_CONFIG_PATH="/path/to/bat.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.
|
||||
@@ -682,11 +798,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
|
||||
[v1511](https://en.wikipedia.org/wiki/Windows_10_version_history#Version_1511_(November_Update)), as
|
||||
well as in newer versions of bash. On earlier versions of Windows, you can use
|
||||
[Cmder](http://cmder.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
|
||||
don’t have any other pagers installed, you can disable paging entirely by passing `--paging=never`
|
||||
or by setting `BAT_PAGER` to an empty string.
|
||||
**Note:** Old versions of `less` do not correctly interpret colors on Windows. To fix this, you can add the optional Unix tools to your PATH when installing Git. If you don’t have any other pagers installed, you can disable paging entirely by passing `--paging=never` or by setting `BAT_PAGER` to an empty string.
|
||||
|
||||
### Cygwin
|
||||
|
||||
@@ -714,9 +828,14 @@ bat() {
|
||||
|
||||
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.
|
||||
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`.
|
||||
|
||||
> [!NOTE]
|
||||
> The `auto` option of `--strip-ansi` avoids removing escape sequences when the syntax is plain text.
|
||||
|
||||
### Terminals & colors
|
||||
|
||||
`bat` handles terminals *with* and *without* truecolor support. However, the colors in most syntax
|
||||
@@ -768,7 +887,7 @@ bash assets/create.sh
|
||||
cargo install --path . --locked --force
|
||||
```
|
||||
|
||||
If you want to build an application that uses `bat`s pretty-printing
|
||||
If you want to build an application that uses `bat`'s pretty-printing
|
||||
features as a library, check out the [the API documentation](https://docs.rs/bat/).
|
||||
Note that you have to use either `regex-onig` or `regex-fancy` as a feature
|
||||
when you depend on `bat` as a library.
|
||||
@@ -786,7 +905,7 @@ Take a look at the [`CONTRIBUTING.md`](CONTRIBUTING.md) guide.
|
||||
|
||||
## Security vulnerabilities
|
||||
|
||||
Please contact [David Peter](https://david-peter.de/) via email if you want to report a vulnerability in `bat`.
|
||||
See [`SECURITY.md`](SECURITY.md).
|
||||
|
||||
## Project goals and alternatives
|
||||
|
||||
|
3
SECURITY.md
Normal file
3
SECURITY.md
Normal file
@@ -0,0 +1,3 @@
|
||||
# Security Vulnerabilities
|
||||
|
||||
To report a security vulnerability, please contact [David Peter](https://david-peter.de/) via email.
|
BIN
assets/acknowledgements.bin
vendored
BIN
assets/acknowledgements.bin
vendored
Binary file not shown.
233
assets/completions/_bat.ps1.in
vendored
233
assets/completions/_bat.ps1.in
vendored
@@ -5,6 +5,24 @@ using namespace System.Management.Automation.Language
|
||||
Register-ArgumentCompleter -Native -CommandName '{{PROJECT_EXECUTABLE}}' -ScriptBlock {
|
||||
param($wordToComplete, $commandAst, $cursorPosition)
|
||||
|
||||
$ArrayStyle = @('default', 'auto', 'full', 'plain', 'changes', 'header', 'header-filename', 'header-filesize', 'grid', 'rule', 'numbers', 'snip')
|
||||
$ArrayCompletion = @('bash', 'fish', 'zsh', 'ps1')
|
||||
$ArrayWhen = @('auto', 'never', 'always')
|
||||
$ArrayYesNo = @('never', 'always')
|
||||
$ArrayWrap = @('always', 'never', 'character')
|
||||
$ArrayBinary = @('no-printing', 'as-text')
|
||||
$ArrayPrint = @('unicode', 'caret')
|
||||
|
||||
function Get-MyThemes(){
|
||||
$themes = {{PROJECT_EXECUTABLE}} --list-themes | ForEach-Object {$_ -replace "^(.*)$", '''$1'''} | select-object
|
||||
return $themes
|
||||
}
|
||||
|
||||
function Get-MyLanguages(){
|
||||
$themes = {{PROJECT_EXECUTABLE}} --list-languages | ForEach-Object{[pscustomobject]@{MyParameter=$_.Substring(0,$_.IndexOf(":")).Trim();MyDescription=$_.Substring($_.IndexOf(":")+1)}} | select-object
|
||||
return $themes
|
||||
}
|
||||
|
||||
$commandElements = $commandAst.CommandElements
|
||||
$command = @(
|
||||
'{{PROJECT_EXECUTABLE}}'
|
||||
@@ -12,82 +30,167 @@ Register-ArgumentCompleter -Native -CommandName '{{PROJECT_EXECUTABLE}}' -Script
|
||||
$element = $commandElements[$i]
|
||||
if ($element -isnot [StringConstantExpressionAst] -or
|
||||
$element.StringConstantType -ne [StringConstantType]::BareWord -or
|
||||
$element.Value.StartsWith('-')) {
|
||||
#$element.Value.StartsWith('-') -or
|
||||
$element.Value -eq $wordToComplete) {
|
||||
break
|
||||
}
|
||||
$element.Value
|
||||
}) -join ';'
|
||||
|
||||
$completions = @(switch ($command) {
|
||||
'{{PROJECT_EXECUTABLE}}' {
|
||||
[CompletionResult]::new('-l', 'l', [CompletionResultType]::ParameterName, 'Set the language for syntax highlighting.')
|
||||
[CompletionResult]::new('--language', 'language', [CompletionResultType]::ParameterName, 'Set the language for syntax highlighting.')
|
||||
[CompletionResult]::new('-H', 'H', [CompletionResultType]::ParameterName, 'Highlight lines N through M.')
|
||||
[CompletionResult]::new('--highlight-line', 'highlight-line', [CompletionResultType]::ParameterName, 'Highlight lines N through M.')
|
||||
[CompletionResult]::new('--file-name', 'file-name', [CompletionResultType]::ParameterName, 'Specify the name to display for a file.')
|
||||
[CompletionResult]::new('--diff-context', 'diff-context', [CompletionResultType]::ParameterName, 'diff-context')
|
||||
[CompletionResult]::new('--tabs', 'tabs', [CompletionResultType]::ParameterName, 'Set the tab width to T spaces.')
|
||||
[CompletionResult]::new('--wrap', 'wrap', [CompletionResultType]::ParameterName, 'Specify the text-wrapping mode (*auto*, never, character).')
|
||||
[CompletionResult]::new('--terminal-width', 'terminal-width', [CompletionResultType]::ParameterName, 'Explicitly set the width of the terminal instead of determining it automatically. If prefixed with ''+'' or ''-'', the value will be treated as an offset to the actual terminal width. See also: ''--wrap''.')
|
||||
[CompletionResult]::new('--color', 'color', [CompletionResultType]::ParameterName, 'When to use colors (*auto*, never, always).')
|
||||
[CompletionResult]::new('--italic-text', 'italic-text', [CompletionResultType]::ParameterName, 'Use italics in output (always, *never*)')
|
||||
[CompletionResult]::new('--decorations', 'decorations', [CompletionResultType]::ParameterName, 'When to show the decorations (*auto*, never, always).')
|
||||
[CompletionResult]::new('--paging', 'paging', [CompletionResultType]::ParameterName, 'Specify when to use the pager, or use `-P` to disable (*auto*, never, always).')
|
||||
[CompletionResult]::new('--pager', 'pager', [CompletionResultType]::ParameterName, 'Determine which pager to use.')
|
||||
[CompletionResult]::new('-m', 'm', [CompletionResultType]::ParameterName, 'Use the specified syntax for files matching the glob pattern (''*.cpp:C++'').')
|
||||
[CompletionResult]::new('--map-syntax', 'map-syntax', [CompletionResultType]::ParameterName, 'Use the specified syntax for files matching the glob pattern (''*.cpp:C++'').')
|
||||
[CompletionResult]::new('--theme', 'theme', [CompletionResultType]::ParameterName, 'Set the color theme for syntax highlighting.')
|
||||
[CompletionResult]::new('--style', 'style', [CompletionResultType]::ParameterName, 'Comma-separated list of style elements to display (*default*, auto, full, plain, changes, header, header-filename, header-filesize, grid, rule, numbers, snip).')
|
||||
[CompletionResult]::new('-r', 'r', [CompletionResultType]::ParameterName, 'Only print the lines from N to M.')
|
||||
[CompletionResult]::new('--line-range', 'line-range', [CompletionResultType]::ParameterName, 'Only print the lines from N to M.')
|
||||
[CompletionResult]::new('-A', 'A', [CompletionResultType]::ParameterName, 'Show non-printable characters (space, tab, newline, ..).')
|
||||
[CompletionResult]::new('--show-all', 'show-all', [CompletionResultType]::ParameterName, 'Show non-printable characters (space, tab, newline, ..).')
|
||||
[CompletionResult]::new('-p', 'p', [CompletionResultType]::ParameterName, 'Show plain style (alias for ''--style=plain'').')
|
||||
[CompletionResult]::new('--plain', 'plain', [CompletionResultType]::ParameterName, 'Show plain style (alias for ''--style=plain'').')
|
||||
[CompletionResult]::new('-d', 'd', [CompletionResultType]::ParameterName, 'Only show lines that have been added/removed/modified.')
|
||||
[CompletionResult]::new('--diff', 'diff', [CompletionResultType]::ParameterName, 'Only show lines that have been added/removed/modified.')
|
||||
[CompletionResult]::new('-n', 'n', [CompletionResultType]::ParameterName, 'Show line numbers (alias for ''--style=numbers'').')
|
||||
[CompletionResult]::new('--number', 'number', [CompletionResultType]::ParameterName, 'Show line numbers (alias for ''--style=numbers'').')
|
||||
[CompletionResult]::new('-f', 'f', [CompletionResultType]::ParameterName, 'f')
|
||||
[CompletionResult]::new('--force-colorization', 'force-colorization', [CompletionResultType]::ParameterName, 'force-colorization')
|
||||
[CompletionResult]::new('-P', 'P', [CompletionResultType]::ParameterName, 'Alias for ''--paging=never''')
|
||||
[CompletionResult]::new('--no-paging', 'no-paging', [CompletionResultType]::ParameterName, 'Alias for ''--paging=never''')
|
||||
[CompletionResult]::new('--list-themes', 'list-themes', [CompletionResultType]::ParameterName, 'Display all supported highlighting themes.')
|
||||
[CompletionResult]::new('-L', 'L', [CompletionResultType]::ParameterName, 'Display all supported languages.')
|
||||
[CompletionResult]::new('--list-languages', 'list-languages', [CompletionResultType]::ParameterName, 'Display all supported languages.')
|
||||
[CompletionResult]::new('-u', 'u', [CompletionResultType]::ParameterName, 'u')
|
||||
[CompletionResult]::new('--unbuffered', 'unbuffered', [CompletionResultType]::ParameterName, 'unbuffered')
|
||||
[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('--config-file', 'config-file', [CompletionResultType]::ParameterName, 'Show path to the configuration file.')
|
||||
[CompletionResult]::new('--generate-config-file', 'generate-config-file', [CompletionResultType]::ParameterName, 'Generates a default configuration file.')
|
||||
[CompletionResult]::new('--config-dir', 'config-dir', [CompletionResultType]::ParameterName, 'Show bat''s configuration directory.')
|
||||
[CompletionResult]::new('--cache-dir', 'cache-dir', [CompletionResultType]::ParameterName, 'Show bat''s cache directory.')
|
||||
[CompletionResult]::new('--diagnostic', 'diagnostic', [CompletionResultType]::ParameterName, 'Show diagnostic information for bug reports.')
|
||||
[CompletionResult]::new('-h', 'h', [CompletionResultType]::ParameterName, 'Print this help message.')
|
||||
[CompletionResult]::new('--help', 'help', [CompletionResultType]::ParameterName, 'Print this help message.')
|
||||
[CompletionResult]::new('-V', 'V', [CompletionResultType]::ParameterName, 'Show version information.')
|
||||
[CompletionResult]::new('--version', 'version', [CompletionResultType]::ParameterName, 'Show version information.')
|
||||
## Completion of the 'cache' command itself is removed for better UX
|
||||
## See https://github.com/sharkdp/bat/issues/2085#issuecomment-1271646802
|
||||
$completions = @(switch -Wildcard ($command) {
|
||||
'*;--help' {
|
||||
break
|
||||
}
|
||||
'*;--version' {
|
||||
break
|
||||
}
|
||||
'*;--acknowledgements' {
|
||||
break
|
||||
}
|
||||
'*;--language' {
|
||||
Get-MyLanguages |
|
||||
ForEach-Object {[CompletionResult]::new(($_.MyParameter -replace "^(.*)$", '''$1'''), $_.MyParameter, [CompletionResultType]::ParameterName, $_.MyDescription ?? '_no value_')}
|
||||
break
|
||||
}
|
||||
'*;--theme' {
|
||||
Get-MyThemes |
|
||||
ForEach-Object {[System.Management.Automation.CompletionResult]::new($_, $_, [CompletionResultType]::ParameterName, $_)}
|
||||
break
|
||||
}
|
||||
'*;--binary' {
|
||||
$ArrayBinary |
|
||||
ForEach-Object {[System.Management.Automation.CompletionResult]::new($_, $_, [CompletionResultType]::ParameterValue, $_)}
|
||||
break
|
||||
}
|
||||
'*;--style' {
|
||||
$ArrayStyle |
|
||||
ForEach-Object {[System.Management.Automation.CompletionResult]::new($_, $_, [CompletionResultType]::ParameterValue, $_)}
|
||||
break
|
||||
}
|
||||
'*;--wrap' {
|
||||
$ArrayWrap |
|
||||
ForEach-Object {[System.Management.Automation.CompletionResult]::new($_, $_, [CompletionResultType]::ParameterValue, $_)}
|
||||
break
|
||||
}
|
||||
'*;--color' {
|
||||
$ArrayWhen |
|
||||
ForEach-Object {[System.Management.Automation.CompletionResult]::new($_, $_, [CompletionResultType]::ParameterValue, $_)}
|
||||
break
|
||||
}
|
||||
'*;--italic-text' {
|
||||
$ArrayYesNo |
|
||||
ForEach-Object {[System.Management.Automation.CompletionResult]::new($_, $_, [CompletionResultType]::ParameterValue, $_)}
|
||||
break
|
||||
}
|
||||
'*;--paging' {
|
||||
$ArrayWhen |
|
||||
ForEach-Object {[System.Management.Automation.CompletionResult]::new($_, $_, [CompletionResultType]::ParameterValue, $_)}
|
||||
break
|
||||
}
|
||||
'*;--decorations' {
|
||||
$ArrayWhen |
|
||||
ForEach-Object {[System.Management.Automation.CompletionResult]::new($_, $_, [CompletionResultType]::ParameterValue, $_)}
|
||||
break
|
||||
}
|
||||
'*;--completion' {
|
||||
$ArrayCompletion |
|
||||
ForEach-Object {[System.Management.Automation.CompletionResult]::new($_, $_, [CompletionResultType]::ParameterValue, $_)}
|
||||
break
|
||||
}
|
||||
'*;--strip-ansi' {
|
||||
$ArrayWhen |
|
||||
ForEach-Object {[System.Management.Automation.CompletionResult]::new($_, $_, [CompletionResultType]::ParameterValue, $_)}
|
||||
break
|
||||
}
|
||||
'*;--nonprintable-notation' {
|
||||
$ArrayPrint |
|
||||
ForEach-Object {[System.Management.Automation.CompletionResult]::new($_, $_, [CompletionResultType]::ParameterValue, $_)}
|
||||
break
|
||||
}
|
||||
'*;--generate-config-file' {
|
||||
break
|
||||
}
|
||||
'{{PROJECT_EXECUTABLE}};cache' {
|
||||
[CompletionResult]::new('--source', 'source', [CompletionResultType]::ParameterName, 'Use a different directory to load syntaxes and themes from.')
|
||||
[CompletionResult]::new('--target', 'target', [CompletionResultType]::ParameterName, 'Use a different directory to store the cached syntax and theme set.')
|
||||
[CompletionResult]::new('-b', 'b', [CompletionResultType]::ParameterName, 'Initialize (or update) the syntax/theme cache.')
|
||||
[CompletionResult]::new('--build', 'build', [CompletionResultType]::ParameterName, 'Initialize (or update) the syntax/theme cache.')
|
||||
[CompletionResult]::new('-c', 'c', [CompletionResultType]::ParameterName, 'Remove the cached syntax definitions and themes.')
|
||||
[CompletionResult]::new('--clear', 'clear', [CompletionResultType]::ParameterName, 'Remove the cached syntax definitions and themes.')
|
||||
[CompletionResult]::new('--blank', 'blank', [CompletionResultType]::ParameterName, 'Create completely new syntax and theme sets (instead of appending to the default sets).')
|
||||
[CompletionResult]::new('-h', 'h', [CompletionResultType]::ParameterName, 'Prints help information')
|
||||
[CompletionResult]::new('--help', 'help', [CompletionResultType]::ParameterName, 'Prints help information')
|
||||
[CompletionResult]::new('-V', 'V', [CompletionResultType]::ParameterName, 'Prints version information')
|
||||
[CompletionResult]::new('--version', 'version', [CompletionResultType]::ParameterName, 'Prints version information')
|
||||
[CompletionResult]::new('--source' , 'source' , [CompletionResultType]::ParameterName, 'Use a different directory to load syntaxes and themes from.')
|
||||
[CompletionResult]::new('--target' , 'target' , [CompletionResultType]::ParameterName, 'Use a different directory to store the cached syntax and theme set.')
|
||||
# [CompletionResult]::new('-b' , 'b' , [CompletionResultType]::ParameterName, 'Initialize (or update) the syntax/theme cache.')
|
||||
[CompletionResult]::new('--build' , 'build' , [CompletionResultType]::ParameterName, 'Initialize (or update) the syntax/theme cache.')
|
||||
# [CompletionResult]::new('-c' , 'c' , [CompletionResultType]::ParameterName, 'Remove the cached syntax definitions and themes.')
|
||||
[CompletionResult]::new('--clear' , 'clear' , [CompletionResultType]::ParameterName, 'Remove the cached syntax definitions and themes.')
|
||||
[CompletionResult]::new('--blank' , 'blank' , [CompletionResultType]::ParameterName, 'Create completely new syntax and theme sets (instead of appending to the default sets).')
|
||||
# [CompletionResult]::new('-h' , 'h' , [CompletionResultType]::ParameterName, 'Prints help information')
|
||||
[CompletionResult]::new('--help' , 'help' , [CompletionResultType]::ParameterName, 'Prints help information')
|
||||
# [CompletionResult]::new('-V' , 'V' , [CompletionResultType]::ParameterName, 'Prints version information')
|
||||
# [CompletionResult]::new('--version' , 'version' , [CompletionResultType]::ParameterName, 'Prints version information')
|
||||
break
|
||||
}
|
||||
default {
|
||||
# [CompletionResult]::new('-l' , 'l' , [CompletionResultType]::ParameterName, 'Set the language for syntax highlighting.')
|
||||
[CompletionResult]::new('--language' , 'language' , [CompletionResultType]::ParameterName, 'Set the language for syntax highlighting.')
|
||||
# [CompletionResult]::new('-H' , 'H' , [CompletionResultType]::ParameterName, 'Highlight lines N through M.')
|
||||
[CompletionResult]::new('--highlight-line' , 'highlight-line' , [CompletionResultType]::ParameterName, 'Highlight lines N through M.')
|
||||
[CompletionResult]::new('--file-name' , 'file-name' , [CompletionResultType]::ParameterName, 'Specify the name to display for a file.')
|
||||
[CompletionResult]::new('--diff-context' , 'diff-context' , [CompletionResultType]::ParameterName, 'diff-context')
|
||||
[CompletionResult]::new('--tabs' , 'tabs' , [CompletionResultType]::ParameterName, 'Set the tab width to T spaces.')
|
||||
[CompletionResult]::new('--wrap' , 'wrap' , [CompletionResultType]::ParameterName, 'Specify the text-wrapping mode (*auto*, character).')
|
||||
[CompletionResult]::new('--terminal-width' , 'terminal-width' , [CompletionResultType]::ParameterName, 'Explicitly set the width of the terminal instead of determining it automatically. If prefixed with ''+'' or ''-'', the value will be treated as an offset to the actual terminal width. See also: ''--wrap''.')
|
||||
[CompletionResult]::new('--color' , 'color' , [CompletionResultType]::ParameterName, 'When to use colors (*auto*, never, always).')
|
||||
[CompletionResult]::new('--italic-text' , 'italic-text' , [CompletionResultType]::ParameterName, 'Use italics in output (always, *never*)')
|
||||
[CompletionResult]::new('--decorations' , 'decorations' , [CompletionResultType]::ParameterName, 'When to show the decorations (*auto*, never, always).')
|
||||
[CompletionResult]::new('--paging' , 'paging' , [CompletionResultType]::ParameterName, 'Specify when to use the pager, or use ''-P'' to disable (*auto*, never, always).')
|
||||
[CompletionResult]::new('--pager' , 'pager' , [CompletionResultType]::ParameterName, 'Determine which pager to use.')
|
||||
# [CompletionResult]::new('-m' , 'm' , [CompletionResultType]::ParameterName, 'Use the specified syntax for files matching the glob pattern (''*.cpp:C++'').')
|
||||
[CompletionResult]::new('--map-syntax' , 'map-syntax' , [CompletionResultType]::ParameterName, 'Use the specified syntax for files matching the glob pattern (''*.cpp:C++'').')
|
||||
[CompletionResult]::new('--theme' , 'theme' , [CompletionResultType]::ParameterName, 'Set the color theme for syntax highlighting.')
|
||||
[CompletionResult]::new('--theme-dark' , 'themedark' , [CompletionResultType]::ParameterName, 'Set the color theme for syntax highlighting for dark backgrounds.')
|
||||
[CompletionResult]::new('--theme-light' , 'themelight' , [CompletionResultType]::ParameterName, 'Set the color theme for syntax highlighting for light backgrounds.')
|
||||
[CompletionResult]::new('--style' , 'style' , [CompletionResultType]::ParameterName, 'Comma-separated list of style elements to display (*default*, auto, full, plain, changes, header, header-filename, header-filesize, grid, rule, numbers, snip).')
|
||||
# [CompletionResult]::new('-r' , 'r' , [CompletionResultType]::ParameterName, 'Only print the lines from N to M.')
|
||||
[CompletionResult]::new('--line-range' , 'line-range' , [CompletionResultType]::ParameterName, 'Only print the lines from N to M.')
|
||||
# [CompletionResult]::new('-A' , 'A' , [CompletionResultType]::ParameterName, 'Show non-printable characters (space, tab, newline, ..).')
|
||||
[CompletionResult]::new('--show-all' , 'show-all' , [CompletionResultType]::ParameterName, 'Show non-printable characters (space, tab, newline, ..).')
|
||||
[CompletionResult]::new('--nonprintable-notation' , 'nonprintable-notation' , [CompletionResultType]::ParameterName, 'Set notation for non-printable characters. (unicode, caret)')
|
||||
[CompletionResult]::new('--chop-long-lines' , 'chop-long-lines' , [CompletionResultType]::ParameterName, 'Truncate all lines longer than screen width. Alias for ''--wrap=never''.')
|
||||
[CompletionResult]::new('--binary' , 'binary' , [CompletionResultType]::ParameterName, 'How to treat binary content. (*no-printing*, as-text)')
|
||||
[CompletionResult]::new('--ignored-suffix' , 'ignored-suffix' , [CompletionResultType]::ParameterName, 'Ignore extension. For example: ''bat --ignored-suffix ".dev" my_file.json.dev'' will use JSON syntax, and ignore ''.dev''')
|
||||
[CompletionResult]::new('--squeeze-blank' , 'squeeze-blank' , [CompletionResultType]::ParameterName, 'Squeeze consecutive empty lines into a single empty line.')
|
||||
[CompletionResult]::new('--squeeze-limit' , 'squeeze-limit' , [CompletionResultType]::ParameterName, 'Set the maximum number of consecutive empty lines to be printed.')
|
||||
[CompletionResult]::new('--strip-ansi' , 'strip-ansi' , [CompletionResultType]::ParameterName, 'Specify when to strip ANSI escape sequences from the input. The automatic mode will remove escape sequences unless the syntax highlighting language is plain text. (auto, always, *never*).')
|
||||
# [CompletionResult]::new('-p' , 'p' , [CompletionResultType]::ParameterName, 'Show plain style (alias for ''--style=plain'').')
|
||||
[CompletionResult]::new('--plain' , 'plain' , [CompletionResultType]::ParameterName, 'Show plain style (alias for ''--style=plain'').')
|
||||
# [CompletionResult]::new('-d' , 'd' , [CompletionResultType]::ParameterName, 'Only show lines that have been added/removed/modified.')
|
||||
[CompletionResult]::new('--diff' , 'diff' , [CompletionResultType]::ParameterName, 'Only show lines that have been added/removed/modified.')
|
||||
# [CompletionResult]::new('-n' , 'n' , [CompletionResultType]::ParameterName, 'Show line numbers (alias for ''--style=numbers'').')
|
||||
[CompletionResult]::new('--number' , 'number' , [CompletionResultType]::ParameterName, 'Show line numbers (alias for ''--style=numbers'').')
|
||||
# [CompletionResult]::new('-f' , 'f' , [CompletionResultType]::ParameterName, 'f')
|
||||
[CompletionResult]::new('--force-colorization' , 'force-colorization' , [CompletionResultType]::ParameterName, 'force-colorization')
|
||||
# [CompletionResult]::new('-P' , 'P' , [CompletionResultType]::ParameterName, 'Alias for ''--paging=never''')
|
||||
[CompletionResult]::new('--no-paging' , 'no-paging' , [CompletionResultType]::ParameterName, 'Alias for ''--paging=never''')
|
||||
[CompletionResult]::new('--list-themes' , 'list-themes' , [CompletionResultType]::ParameterName, 'Display all supported highlighting themes.')
|
||||
# [CompletionResult]::new('-L' , 'L' , [CompletionResultType]::ParameterName, 'Display all supported languages.')
|
||||
[CompletionResult]::new('--list-languages' , 'list-languages' , [CompletionResultType]::ParameterName, 'Display all supported languages.')
|
||||
# [CompletionResult]::new('-u' , 'u' , [CompletionResultType]::ParameterName, 'u')
|
||||
[CompletionResult]::new('--unbuffered' , 'unbuffered' , [CompletionResultType]::ParameterName, 'unbuffered')
|
||||
[CompletionResult]::new('--completion' , 'completion' , [CompletionResultType]::ParameterName, 'Show shell completion for a certain shell. [possible values: bash, fish, zsh, ps1]')
|
||||
[CompletionResult]::new('--no-config' , 'no-config' , [CompletionResultType]::ParameterName, 'Do not use the configuration file')
|
||||
[CompletionResult]::new('--no-custom-assets' , 'no-custom-assets' , [CompletionResultType]::ParameterName, 'Do not load custom assets')
|
||||
[CompletionResult]::new('--lessopen' , 'lessopen' , [CompletionResultType]::ParameterName, 'Enable the $LESSOPEN preprocessor')
|
||||
[CompletionResult]::new('--no-lessopen' , 'no-lessopen' , [CompletionResultType]::ParameterName, 'Disable the $LESSOPEN preprocessor if enabled (overrides --lessopen)')
|
||||
[CompletionResult]::new('--config-file' , 'config-file' , [CompletionResultType]::ParameterName, 'Show path to the configuration file.')
|
||||
[CompletionResult]::new('--generate-config-file' , 'generate-config-file' , [CompletionResultType]::ParameterName, 'Generates a default configuration file.')
|
||||
[CompletionResult]::new('--config-dir' , 'config-dir' , [CompletionResultType]::ParameterName, 'Show bat''s configuration directory.')
|
||||
[CompletionResult]::new('--cache-dir' , 'cache-dir' , [CompletionResultType]::ParameterName, 'Show bat''s cache directory.')
|
||||
[CompletionResult]::new('--acknowledgements' , 'acknowledgements' , [CompletionResultType]::ParameterName, 'Show acknowledgements.')
|
||||
[CompletionResult]::new('--set-terminal-title' , 'set-terminal-title' , [CompletionResultType]::ParameterName, 'Sets terminal title to filenames when using a pager.')
|
||||
[CompletionResult]::new('--diagnostic' , 'diagnostic' , [CompletionResultType]::ParameterName, 'Show diagnostic information for bug reports.')
|
||||
# [CompletionResult]::new('-h' , 'h' , [CompletionResultType]::ParameterName, 'Print this help message.')
|
||||
[CompletionResult]::new('--help' , 'help' , [CompletionResultType]::ParameterName, 'Print this help message.')
|
||||
# [CompletionResult]::new('-V' , 'V' , [CompletionResultType]::ParameterName, 'Show version information.')
|
||||
[CompletionResult]::new('--version' , 'version' , [CompletionResultType]::ParameterName, 'Show version information.')
|
||||
break
|
||||
}
|
||||
})
|
||||
|
||||
$completions.Where{ $_.CompletionText -like "$wordToComplete*" } |
|
||||
Sort-Object -Property ListItemText
|
||||
Sort-Object -Property CompletionText
|
||||
}
|
||||
|
21
assets/completions/bat.bash.in
vendored
21
assets/completions/bat.bash.in
vendored
@@ -32,7 +32,7 @@ __bat_escape_completions()
|
||||
}
|
||||
|
||||
_bat() {
|
||||
local cur prev words cword split=false
|
||||
local cur prev words split=false
|
||||
if declare -F _init_completion >/dev/null 2>&1; then
|
||||
_init_completion -s || return 0
|
||||
else
|
||||
@@ -76,8 +76,10 @@ _bat() {
|
||||
-m | --map-syntax | \
|
||||
--ignored-suffix | \
|
||||
--list-themes | \
|
||||
--squeeze-limit | \
|
||||
--line-range | \
|
||||
-L | --list-languages | \
|
||||
--lessopen | \
|
||||
--diagnostic | \
|
||||
--acknowledgements | \
|
||||
-h | --help | \
|
||||
@@ -111,6 +113,13 @@ _bat() {
|
||||
return 0
|
||||
;;
|
||||
--theme)
|
||||
local IFS=$'\n'
|
||||
COMPREPLY=($(compgen -W "auto${IFS}auto:always${IFS}auto:system${IFS}dark${IFS}light${IFS}$("$1" --list-themes)" -- "$cur"))
|
||||
__bat_escape_completions
|
||||
return 0
|
||||
;;
|
||||
--theme-dark | \
|
||||
--theme-light)
|
||||
local IFS=$'\n'
|
||||
COMPREPLY=($(compgen -W "$("$1" --list-themes)" -- "$cur"))
|
||||
__bat_escape_completions
|
||||
@@ -156,6 +165,7 @@ _bat() {
|
||||
--diff-context
|
||||
--tabs
|
||||
--wrap
|
||||
--chop-long-lines
|
||||
--terminal-width
|
||||
--number
|
||||
--color
|
||||
@@ -167,18 +177,27 @@ _bat() {
|
||||
--map-syntax
|
||||
--ignored-suffix
|
||||
--theme
|
||||
--theme-dark
|
||||
--theme-light
|
||||
--list-themes
|
||||
--squeeze-blank
|
||||
--squeeze-limit
|
||||
--style
|
||||
--line-range
|
||||
--list-languages
|
||||
--lessopen
|
||||
--diagnostic
|
||||
--acknowledgements
|
||||
--set-terminal-title
|
||||
--help
|
||||
--version
|
||||
--cache-dir
|
||||
--config-dir
|
||||
--config-file
|
||||
--generate-config-file
|
||||
--no-config
|
||||
--no-custom-assets
|
||||
--no-lessopen
|
||||
" -- "$cur"))
|
||||
return 0
|
||||
fi
|
||||
|
26
assets/completions/bat.fish.in
vendored
26
assets/completions/bat.fish.in
vendored
@@ -129,10 +129,20 @@ set -l tabs_opts '
|
||||
8\t
|
||||
'
|
||||
|
||||
set -l special_themes '
|
||||
auto\tdefault,\ Choose\ a\ theme\ based\ on\ dark\ or\ light\ mode
|
||||
auto:always\tChoose\ a\ theme\ based\ on\ dark\ or\ light\ mode
|
||||
auto:system\tChoose\ a\ theme\ based\ on\ dark\ or\ light\ mode
|
||||
dark\tUse\ the\ theme\ specified\ by\ --theme-dark
|
||||
light\tUse\ the\ theme\ specified\ by\ --theme-light
|
||||
'
|
||||
|
||||
# Completions:
|
||||
|
||||
complete -c $bat -l acknowledgements -d "Print acknowledgements" -n __fish_is_first_arg
|
||||
|
||||
complete -c $bat -l 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 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 generate-config-file -f -d "Generates a default configuration file" -n __fish_is_first_arg
|
||||
|
||||
complete -c $bat -l file-name -x -d "Specify the display name" -n __bat_no_excl_args
|
||||
|
||||
complete -c $bat -s f -l force-colorization -d "Force color and decorations" -n __bat_no_excl_args
|
||||
@@ -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 -l lessopen -d "Enable the $LESSOPEN preprocessor" -n __fish_is_first_arg
|
||||
|
||||
complete -c $bat -s r -l line-range -x -d "Only print lines [M]:[N] (either optional)" -n __bat_no_excl_args
|
||||
|
||||
complete -c $bat -l list-languages -f -d "List syntax highlighting languages" -n __fish_is_first_arg
|
||||
@@ -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 -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 -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 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
|
||||
|
||||
|
118
assets/completions/bat.zsh.in
vendored
118
assets/completions/bat.zsh.in
vendored
@@ -1,19 +1,20 @@
|
||||
#compdef {{PROJECT_EXECUTABLE}}
|
||||
|
||||
local context state state_descr line
|
||||
local curcontext="$curcontext" ret=1
|
||||
local -a state state_descr line
|
||||
typeset -A opt_args
|
||||
|
||||
(( $+functions[_{{PROJECT_EXECUTABLE}}_cache_subcommand] )) ||
|
||||
_{{PROJECT_EXECUTABLE}}_cache_subcommand() {
|
||||
local -a args
|
||||
args=(
|
||||
'(-b --build -c --clear)'{-b,--build}'[Initialize or update the syntax/theme cache]'
|
||||
'(-b --build -c --clear)'{-c,--clear}'[Remove the cached syntax definitions and themes]'
|
||||
'(--source)'--source='[Use a different 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 -/'
|
||||
'(--blank)'--blank'[Create completely new syntax and theme sets]'
|
||||
'(: -)'{-h,--help}'[Prints help information]'
|
||||
'*: :'
|
||||
'(-b --build -c --clear)'{-b,--build}'[initialize or update the syntax/theme cache]'
|
||||
'(-b --build -c --clear)'{-c,--clear}'[remove the cached syntax definitions and themes]'
|
||||
--source='[specify directory to load syntaxes and themes from]:directory:_files -/'
|
||||
--target='[specify directory to store the cached syntax and theme set in]:directory:_files -/'
|
||||
--blank'[create completely new syntax and theme sets]'
|
||||
--acknowledgements'[build acknowledgements.bin]'
|
||||
'(: -)'{-h,--help}'[show help information]'
|
||||
)
|
||||
|
||||
_arguments -S -s $args
|
||||
@@ -23,67 +24,88 @@ _{{PROJECT_EXECUTABLE}}_cache_subcommand() {
|
||||
_{{PROJECT_EXECUTABLE}}_main() {
|
||||
local -a args
|
||||
args=(
|
||||
'(-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`)]'
|
||||
'(-l --language)'{-l+,--language=}'[Set the language for syntax highlighting]:<language>:->language'
|
||||
'(-H --highlight-line)'{-H,--highlight-line}'[Highlight lines N through M]:<N\:M>...'
|
||||
'(--file-name)'--file-name'[Specify the name to display for a file]:<name>...:_files'
|
||||
'(-d --diff)'--diff'[Only show lines that have been added/removed/modified]'
|
||||
'(--diff-context)'--diff-context'[Include N lines of context around added/removed/modified lines when using `--diff`]:<N> (lines):()'
|
||||
'(--tabs)'--tabs'[Set the tab width to T spaces]:<T> (tab width):()'
|
||||
'(--wrap)'--wrap='[Specify the text-wrapping mode]:<when>:(auto never character)'
|
||||
'(--terminal-width)'--terminal-width'[Explicitly set the width of the terminal instead of determining it automatically]:<width>'
|
||||
'(-n --number)'{-n,--number}'[Show line numbers]'
|
||||
'(--color)'--color='[When to use colors]:<when>:(auto never always)'
|
||||
'(--italic-text)'--italic-text='[Use italics in output]:<when>:(always never)'
|
||||
'(--decorations)'--decorations='[When to show the decorations]:<when>:(auto never always)'
|
||||
'(--paging)'--paging='[Specify when to use the pager]:<when>:(auto never always)'
|
||||
'(-m --map-syntax)'{-m+,--map-syntax=}'[Use the specified syntax for files matching the glob pattern]:<glob\:syntax>...'
|
||||
'(--theme)'--theme='[Set the color theme for syntax highlighting]:<theme>:->theme'
|
||||
'(: --list-themes --list-languages -L)'--list-themes'[Display all supported highlighting themes]'
|
||||
'(--style)'--style='[Comma-separated list of style elements to display]:<components>:->style'
|
||||
'(-r --line-range)'{-r+,--line-range=}'[Only print the lines from N to M]:<N\:M>...'
|
||||
'(: --list-themes --list-languages -L)'{-L,--list-languages}'[Display all supported languages]'
|
||||
'(: --no-config)'--no-config'[Do not use the configuration file]'
|
||||
'(: --no-custom-assets)'--no-custom-assets'[Do not load custom assets]'
|
||||
'(: --config-dir)'--config-dir'[Show bat'"'"'s configuration directory]'
|
||||
'(: --config-file)'--config-file'[Show path to the configuration file]'
|
||||
'(: --generate-config-file)'--generate-config-file'[Generates a default configuration file]'
|
||||
'(: --cache-dir)'--cache-dir'[Show bat'"'"'s cache directory]'
|
||||
'(: -)'{-h,--help}'[Print this help message]'
|
||||
'(: -)'{-V,--version}'[Show version information]'
|
||||
'*: :_files'
|
||||
'(-A --show-all)'{-A,--show-all}'[show non-printable characters (space, tab, newline, ..)]'
|
||||
--nonprintable-notation='[specify how to display non-printable characters when using --show-all]:notation:(caret unicode)'
|
||||
\*{-p,--plain}'[show plain style (alias for `--style=plain`), repeat twice to disable automatic paging (alias for `--paging=never`)]'
|
||||
'(-l --language)'{-l+,--language=}'[set the language for syntax highlighting]:language:->languages'
|
||||
\*{-H+,--highlight-line=}'[highlight specified block of lines]:start\:end'
|
||||
\*--file-name='[specify the name to display for a file]:name:_files'
|
||||
'(-d --diff)'--diff'[only show lines that have been added/removed/modified]'
|
||||
--diff-context='[specify lines of context around added/removed/modified lines when using `--diff`]:lines'
|
||||
--tabs='[set the tab width]:tab width [4]'
|
||||
--wrap='[specify the text-wrapping mode]:mode [auto]:(auto never character)'
|
||||
'!(--wrap)'{-S,--chop-long-lines}
|
||||
--terminal-width='[explicitly set the width of the terminal instead of determining it automatically]:width'
|
||||
'(-n --number --diff --diff-context)'{-n,--number}'[show line numbers]'
|
||||
--color='[specify when to use colors]:when:(auto never always)'
|
||||
--italic-text='[use italics in output]:when:(always never)'
|
||||
--decorations='[specify when to show the decorations]:when:(auto never always)'
|
||||
--paging='[specify when to use the pager]:when:(auto never always)'
|
||||
'(-m --map-syntax)'{-m+,--map-syntax=}'[map a glob pattern to an existing syntax name]: :->syntax-maps'
|
||||
'(--theme)'--theme='[set the color theme for syntax highlighting]:theme:->theme_preferences'
|
||||
'(--theme-dark)'--theme-dark='[set the color theme for syntax highlighting for dark backgrounds]:theme:->themes'
|
||||
'(--theme-light)'--theme-light='[set the color theme for syntax highlighting for light backgrounds]:theme:->themes'
|
||||
'(: --list-themes --list-languages -L)'--list-themes'[show all supported highlighting themes]'
|
||||
--style='[comma-separated list of style elements to display]: : _values "style [default]"
|
||||
default auto full plain changes header header-filename header-filesize grid rule numbers snip'
|
||||
\*{-r+,--line-range=}'[only print the specified line range]:start\:end'
|
||||
'(* -)'{-L,--list-languages}'[display all supported languages]'
|
||||
-P'[disable paging]'
|
||||
"--no-config[don't use the configuration file]"
|
||||
"--no-custom-assets[don't load custom assets]"
|
||||
'(--no-lessopen)'--lessopen'[enable the $LESSOPEN preprocessor]'
|
||||
'(--lessopen)'--no-lessopen'[disable the $LESSOPEN preprocessor if enabled (overrides --lessopen)]'
|
||||
'(* -)'--config-dir"[show bat's configuration directory]"
|
||||
'(* -)'--config-file'[show path to the configuration file]'
|
||||
'(* -)'--generate-config-file'[generate a default configuration file]'
|
||||
'(* -)'--cache-dir"[show bat's cache directory]"
|
||||
'(* -)'{-h,--help}'[show help information]'
|
||||
'(* -)'{-V,--version}'[show version information]'
|
||||
'*: :{ _files || compadd cache }'
|
||||
)
|
||||
|
||||
_arguments -S -s $args
|
||||
_arguments -S -s $args && ret=0
|
||||
|
||||
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 -a languages
|
||||
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)
|
||||
local IFS=$'\n'
|
||||
local -a themes
|
||||
themes=( $({{PROJECT_EXECUTABLE}} --list-themes | sort) )
|
||||
themes)
|
||||
local -a themes expl
|
||||
themes=(${(f)"$(_call_program themes {{PROJECT_EXECUTABLE}} --list-themes)"} )
|
||||
|
||||
_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)
|
||||
_values -s , 'style' default auto full plain changes header header-filename header-filesize grid rule numbers snip
|
||||
_wanted themes expl 'theme' compadd -a themes && ret=0
|
||||
;;
|
||||
esac
|
||||
|
||||
return ret
|
||||
}
|
||||
|
||||
case $words[2] in
|
||||
cache)
|
||||
## Completion of the 'cache' command itself is removed for better UX
|
||||
## See https://github.com/sharkdp/bat/issues/2085#issuecomment-1271646802
|
||||
shift words
|
||||
(( CURRENT-- ))
|
||||
curcontext="${curcontext%:*}-${words[1]}:"
|
||||
_{{PROJECT_EXECUTABLE}}_cache_subcommand
|
||||
;;
|
||||
|
||||
|
156
assets/manual/bat.1.in
vendored
156
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
|
||||
control the width of the tab\-placeholders.
|
||||
.HP
|
||||
\fB\-\-nonprintable\-notation\fR
|
||||
\fB\-\-nonprintable\-notation\fR <notation>
|
||||
.IP
|
||||
Specify how to display non-printable characters when using \-\-show\-all.
|
||||
|
||||
@@ -37,6 +37,23 @@ Use character sequences like ^G, ^J, ^@, .. to identify non-printable characters
|
||||
Use special Unicode code points to identify non-printable characters
|
||||
.RE
|
||||
.HP
|
||||
\fB\-\-binary\fR <behavior>
|
||||
.IP
|
||||
How to treat binary content.
|
||||
|
||||
Possible values:
|
||||
.RS
|
||||
.IP "no\-printing"
|
||||
Do not print any binary content (default)
|
||||
.IP "as\-text"
|
||||
Treat binary content as normal text
|
||||
.RE
|
||||
.HP
|
||||
\fB\-\-completion\fR <SHELL>
|
||||
.IP
|
||||
Show shell completion for a certain shell.
|
||||
Possible values: bash, fish, zsh, ps1
|
||||
.HP
|
||||
\fB\-p\fR, \fB\-\-plain\fR
|
||||
.IP
|
||||
Only show plain style, no decorations. This is an alias for
|
||||
@@ -87,6 +104,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
|
||||
can be used in addition to control the output width.
|
||||
.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>
|
||||
.IP
|
||||
Explicitly set the width of the terminal instead of determining it automatically. If
|
||||
@@ -141,24 +162,82 @@ use -m '*.build:Python'. To highlight files named '.myignore' with the Git Ignor
|
||||
syntax, use -m '.myignore:Git Ignore'.
|
||||
Note that the right-hand side is the *name* of the syntax, not a file extension.
|
||||
.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>
|
||||
.IP
|
||||
Set the theme for syntax highlighting. Use '\-\-list\-themes' to see all available themes.
|
||||
To set a default theme, add the '\-\-theme="..."' option to the configuration file or
|
||||
export the BAT_THEME environment variable (e.g.: export BAT_THEME="...").
|
||||
Set the theme for syntax highlighting. Use \fB\-\-list\-themes\fP to see all available themes.
|
||||
To set a default theme, add the \fB\-\-theme="..."\fP option to the configuration file or
|
||||
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
|
||||
\fB\-\-list\-themes\fR
|
||||
.IP
|
||||
Display a list of supported themes for syntax highlighting.
|
||||
.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\-\-strip\-ansi\fR <when>
|
||||
.IP
|
||||
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*.
|
||||
.HP
|
||||
\fB\-\-style\fR <style\-components>
|
||||
.IP
|
||||
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 components to display (e.g. 'numbers,changes,grid') or a pre\-defined style ('full').
|
||||
To set a default style, add the '\-\-style=".."' option to the configuration file or
|
||||
export the BAT_STYLE environment variable (e.g.: export BAT_STYLE=".."). Possible
|
||||
values: *default*, full, auto, plain, changes, header, header-filename, header-filesize, grid,
|
||||
export the BAT_STYLE environment variable (e.g.: export BAT_STYLE="..").
|
||||
.IP
|
||||
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.
|
||||
.IP
|
||||
By default, the following components are enabled:
|
||||
changes, grid, header\-filename, numbers, snip
|
||||
.IP
|
||||
Possible values: *default*, full, auto, plain, changes, header, header-filename, header-filesize, grid,
|
||||
rule, numbers, snip.
|
||||
.HP
|
||||
\fB\-r\fR, \fB\-\-line\-range\fR <N:M>...
|
||||
@@ -184,6 +263,30 @@ Display a list of supported languages for syntax highlighting.
|
||||
This option exists for POSIX\-compliance reasons ('u' is for 'unbuffered'). The output is
|
||||
always unbuffered \- this option is simply ignored.
|
||||
.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
|
||||
.IP
|
||||
Print this help message.
|
||||
@@ -212,6 +315,20 @@ location of the configuration file.
|
||||
To generate a default configuration file, call:
|
||||
|
||||
\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"
|
||||
{{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
|
||||
@@ -243,6 +360,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.
|
||||
These can be installed to `\fB$({{PROJECT_EXECUTABLE}} --config-dir)/themes\fR`, and are added to the cache with
|
||||
`\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"
|
||||
|
||||
For more information and up-to-date documentation, visit the {{PROJECT_EXECUTABLE}} repo:
|
||||
|
22
assets/patches/1337.tmTheme.patch
vendored
Normal file
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>
|
14
assets/patches/JavaScript.sublime-syntax.patch
vendored
Normal file
14
assets/patches/JavaScript.sublime-syntax.patch
vendored
Normal file
@@ -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
2365
assets/patches/Lisp.sublime-syntax.patch
vendored
Normal file
File diff suppressed because one or more lines are too long
26
assets/patches/Markdown.sublime-syntax.patch
vendored
26
assets/patches/Markdown.sublime-syntax.patch
vendored
@@ -1,5 +1,5 @@
|
||||
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
|
||||
@@ -24,7 +24,6 @@ variables:
|
||||
@@ -166,7 +166,29 @@ index 19dc685d..44440c7f 100644
|
||||
- match: ^\s*$\n?
|
||||
scope: invalid.illegal.non-terminated.bold-italic.markdown
|
||||
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: |-
|
||||
(?x)
|
||||
{{fenced_code_block_start}}
|
||||
|
19
assets/patches/Monokai-Extended.tmTheme.patch
vendored
19
assets/patches/Monokai-Extended.tmTheme.patch
vendored
@@ -21,11 +21,26 @@ index 9c2aa3e..180cbbf 100644
|
||||
<string>Invalid</string>
|
||||
<key>scope</key>
|
||||
- <string>invalid</string>
|
||||
+ <string>invalid, markup.error</string>
|
||||
+ <string>invalid, meta.annotation.error-line</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<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>
|
||||
<string>Invalid deprecated</string>
|
||||
<key>scope</key>
|
||||
|
47
assets/patches/OneHalfDark.tmTheme.patch
vendored
Normal file
47
assets/patches/OneHalfDark.tmTheme.patch
vendored
Normal file
@@ -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>
|
18
assets/patches/TwoDark.tmTheme.patch
vendored
18
assets/patches/TwoDark.tmTheme.patch
vendored
@@ -2,6 +2,24 @@ diff --git themes/TwoDark/TwoDark.tmTheme themes/TwoDark/TwoDark.tmTheme
|
||||
index 87fd358..56376d3 100644
|
||||
--- 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 @@
|
||||
<key>name</key>
|
||||
<string>Json key</string>
|
||||
|
BIN
assets/syntaxes.bin
vendored
BIN
assets/syntaxes.bin
vendored
Binary file not shown.
2
assets/syntaxes/02_Extra/Apache
vendored
2
assets/syntaxes/02_Extra/Apache
vendored
Submodule assets/syntaxes/02_Extra/Apache updated: 163bc03ae8...c438c352db
@@ -1,5 +1,6 @@
|
||||
%YAML 1.2
|
||||
---
|
||||
name: x86_64 Assembly
|
||||
file_extensions: [yasm, nasm, asm, inc, mac]
|
||||
scope: source.asm.x86_64
|
||||
|
||||
@@ -1364,4 +1365,3 @@ contexts:
|
||||
scope: invalid.keyword.operator.word.mnemonic.sse5.packed-arithmetic
|
||||
- match: '(?i)\b(pcmov|permp[ds]|pperm|prot[bdqw]|psh[al][bdqw])\b'
|
||||
scope: invalid.keyword.operator.word.mnemonic.sse5.simd-integer
|
||||
...
|
1
assets/syntaxes/02_Extra/CFML
vendored
Submodule
1
assets/syntaxes/02_Extra/CFML
vendored
Submodule
Submodule assets/syntaxes/02_Extra/CFML added at b91c44a32e
@@ -2,20 +2,21 @@
|
||||
---
|
||||
# See http://www.sublimetext.com/docs/3/syntax.html
|
||||
name: Comma Separated Values
|
||||
file_extensions:
|
||||
- csv
|
||||
- tsv
|
||||
scope: text.csv
|
||||
scope: text.csv.comma
|
||||
variables:
|
||||
field_separator: (?:[,;\t])
|
||||
field_separator: (?:,)
|
||||
record_separator: (?:$\n?)
|
||||
contexts:
|
||||
prototype:
|
||||
- match: (?={{record_separator}})
|
||||
pop: true
|
||||
main:
|
||||
- match: '^'
|
||||
push: fields
|
||||
|
||||
fields:
|
||||
- include: record_separator
|
||||
- match: ''
|
||||
push:
|
||||
- field_or_record_separator
|
||||
- field5
|
||||
- field_or_record_separator
|
||||
- field4
|
||||
- field_or_record_separator
|
||||
@@ -24,16 +25,20 @@ contexts:
|
||||
- field2
|
||||
- field_or_record_separator
|
||||
- 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
|
||||
- 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
|
||||
@@ -41,24 +46,16 @@ contexts:
|
||||
field_contents:
|
||||
- match: '"'
|
||||
scope: punctuation.definition.string.begin.csv
|
||||
push: double_quoted_string
|
||||
push: scope:text.csv#double_quoted_string
|
||||
|
||||
- match: (?={{field_separator}}|{{record_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
|
||||
- include: record_separator_pop
|
||||
- match: (?={{field_separator}})
|
||||
pop: true
|
||||
|
||||
field1:
|
||||
- match: ''
|
||||
set:
|
||||
- meta_content_scope: meta.field-1.csv support.type
|
||||
- meta_content_scope: meta.field-1.csv variable.parameter
|
||||
- include: field_contents
|
||||
field2:
|
||||
- match: ''
|
||||
@@ -75,4 +72,8 @@ contexts:
|
||||
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
|
80
assets/syntaxes/02_Extra/CSV/CSV-pipe.sublime-syntax
vendored
Normal file
80
assets/syntaxes/02_Extra/CSV/CSV-pipe.sublime-syntax
vendored
Normal file
@@ -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
|
79
assets/syntaxes/02_Extra/CSV/CSV-semi-colon.sublime-syntax
vendored
Normal file
79
assets/syntaxes/02_Extra/CSV/CSV-semi-colon.sublime-syntax
vendored
Normal file
@@ -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
|
113
assets/syntaxes/02_Extra/CSV/CSV.sublime-syntax
vendored
Normal file
113
assets/syntaxes/02_Extra/CSV/CSV.sublime-syntax
vendored
Normal file
@@ -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
|
83
assets/syntaxes/02_Extra/CSV/TSV.sublime-syntax
vendored
Normal file
83
assets/syntaxes/02_Extra/CSV/TSV.sublime-syntax
vendored
Normal file
@@ -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
|
2
assets/syntaxes/02_Extra/Docker
vendored
2
assets/syntaxes/02_Extra/Docker
vendored
Submodule assets/syntaxes/02_Extra/Docker updated: 9e9a518aed...c001fb2805
2
assets/syntaxes/02_Extra/Fish
vendored
2
assets/syntaxes/02_Extra/Fish
vendored
Submodule assets/syntaxes/02_Extra/Fish updated: 98316d4332...ef510fd759
1
assets/syntaxes/02_Extra/GDScript-sublime
vendored
Submodule
1
assets/syntaxes/02_Extra/GDScript-sublime
vendored
Submodule
Submodule assets/syntaxes/02_Extra/GDScript-sublime added at 96f5dcf297
23
assets/syntaxes/02_Extra/Hosts.sublime-syntax
vendored
23
assets/syntaxes/02_Extra/Hosts.sublime-syntax
vendored
@@ -1,23 +0,0 @@
|
||||
%YAML 1.2
|
||||
---
|
||||
# http://www.sublimetext.com/docs/3/syntax.html
|
||||
name: hosts
|
||||
file_extensions:
|
||||
- hosts
|
||||
scope: source.hosts
|
||||
|
||||
contexts:
|
||||
main:
|
||||
- scope: comment.line.number-sign
|
||||
match: \#.*
|
||||
comment: comment
|
||||
|
||||
- match: ^\s*([0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}|[0-9a-f:]+)
|
||||
comment: ipaddress
|
||||
scope: constant.numeric.ipaddress
|
||||
|
||||
|
||||
- match: \s(localhost|ip6-loopback|ip6-localhost|ip6-localnet|ip6-mcastprefix|ip6-allnodes|ip6-allrouters|ip6-allhosts|broadcasthost)\b
|
||||
scope: keyword.host.predefined}
|
||||
comment: prefdfined
|
||||
|
1
assets/syntaxes/02_Extra/Idris2
vendored
Submodule
1
assets/syntaxes/02_Extra/Idris2
vendored
Submodule
Submodule assets/syntaxes/02_Extra/Idris2 added at 7c1bf44c4f
2
assets/syntaxes/02_Extra/Julia
vendored
2
assets/syntaxes/02_Extra/Julia
vendored
Submodule assets/syntaxes/02_Extra/Julia updated: 4fde0fdedd...3366b10be9
2
assets/syntaxes/02_Extra/Lean
vendored
2
assets/syntaxes/02_Extra/Lean
vendored
Submodule assets/syntaxes/02_Extra/Lean updated: 29a03a8aba...514362b5c7
151
assets/syntaxes/02_Extra/Lean.sublime-syntax
vendored
151
assets/syntaxes/02_Extra/Lean.sublime-syntax
vendored
@@ -1,125 +1,130 @@
|
||||
%YAML 1.2
|
||||
---
|
||||
# http://www.sublimetext.com/docs/3/syntax.html
|
||||
name: Lean
|
||||
# http://www.sublimetext.com/docs/syntax.html
|
||||
name: Lean 4
|
||||
file_extensions:
|
||||
- lean
|
||||
scope: source.lean
|
||||
scope: source.lean4
|
||||
contexts:
|
||||
main:
|
||||
- include: comments
|
||||
- match: '\b(?<!\.)(inductive|coinductive|structure|theorem|axiom|axioms|abbreviation|lemma|definition|def|instance|class|constant)\b\s+(\{[^}]*\})?'
|
||||
- match: \b(Prop|Type|Sort)\b
|
||||
scope: storage.type.lean4
|
||||
- match: '\battribute\b\s*\[[^\]]*\]'
|
||||
scope: storage.modifier.lean4
|
||||
- match: '@\[[^\]]*\]'
|
||||
scope: storage.modifier.lean4
|
||||
- match: \b(?<!\.)(global|local|scoped|partial|unsafe|private|protected|noncomputable)(?!\.)\b
|
||||
scope: storage.modifier.lean4
|
||||
- match: \b(sorry|admit|stop)\b
|
||||
scope: invalid.illegal.lean4
|
||||
- match: '#(print|eval|reduce|check|check_failure)\b'
|
||||
scope: keyword.other.lean4
|
||||
- match: \bderiving\s+instance\b
|
||||
scope: keyword.other.command.lean4
|
||||
- match: '\b(?<!\.)(inductive|coinductive|structure|theorem|axiom|abbrev|lemma|def|instance|class|constant)\b\s+(\{[^}]*\})?'
|
||||
captures:
|
||||
1: keyword.other.definitioncommand.lean
|
||||
1: keyword.other.definitioncommand.lean4
|
||||
push:
|
||||
- meta_scope: meta.definitioncommand.lean
|
||||
- match: '(?=\bwith\b|\bextends\b|[:\|\(\[\{⦃<>])'
|
||||
- meta_scope: meta.definitioncommand.lean4
|
||||
- match: '(?=\bwith\b|\bextends\b|\bwhere\b|[:\|\(\[\{⦃<>])'
|
||||
pop: true
|
||||
- include: comments
|
||||
- include: definitionName
|
||||
- match: ","
|
||||
- match: \b(Prop|Type|Sort)\b
|
||||
scope: storage.type.lean
|
||||
- match: '\battribute\b\s*\[[^\]]*\]'
|
||||
scope: storage.modifier.lean
|
||||
- match: '@\[[^\]]*\]'
|
||||
scope: storage.modifier.lean
|
||||
- match: \b(?<!\.)(private|meta|mutual|protected|noncomputable)\b
|
||||
scope: keyword.control.definition.modifier.lean
|
||||
- match: \b(sorry)\b
|
||||
scope: invalid.illegal.lean
|
||||
- match: '#print\s+(def|definition|inductive|instance|structure|axiom|axioms|class)\b'
|
||||
scope: keyword.other.command.lean
|
||||
- match: '#(print|eval|reduce|check|help|exit|find|where)\b'
|
||||
scope: keyword.other.command.lean
|
||||
- match: \b(?<!\.)(import|export|prelude|theory|definition|def|abbreviation|instance|renaming|hiding|exposing|parameter|parameters|begin|constant|constants|lemma|variable|variables|theorem|example|open|axiom|inductive|coinductive|with|structure|universe|universes|alias|precedence|reserve|postfix|prefix|infix|infixl|infixr|notation|end|using|namespace|section|local|set_option|extends|include|omit|class|classes|instances|raw|run_cmd|restate_axiom)(?!\.)\b
|
||||
scope: keyword.other.lean
|
||||
- match: \b(?<!\.)(calc|have|this|match|do|suffices|show|by|in|at|let|forall|fun|exists|assume|from|obtain|haveI|λ)(?!\.)\b
|
||||
scope: keyword.other.lean
|
||||
- match: ','
|
||||
- match: \b(?<!\.)(theorem|show|have|from|suffices|nomatch|def|class|structure|instance|set_option|initialize|builtin_initialize|example|inductive|coinductive|axiom|constant|universe|universes|variable|variables|import|open|export|theory|prelude|renaming|hiding|exposing|do|by|let|extends|mutual|mut|where|rec|syntax|macro_rules|macro|deriving|fun|section|namespace|end|infix|infixl|infixr|postfix|prefix|notation|abbrev|if|then|else|calc|match|with|for|in|unless|try|catch|finally|return|continue|break)(?!\.)\b
|
||||
scope: keyword.other.lean4
|
||||
- match: «
|
||||
push:
|
||||
- meta_content_scope: entity.name.lean
|
||||
- meta_content_scope: entity.name.lean4
|
||||
- match: »
|
||||
pop: true
|
||||
- match: \b(?<!\.)(if|then|else)\b
|
||||
scope: keyword.control.lean
|
||||
- match: '"'
|
||||
- match: (s!)"
|
||||
captures:
|
||||
0: punctuation.definition.string.begin.lean
|
||||
1: keyword.other.lean4
|
||||
push:
|
||||
- meta_scope: string.quoted.double.lean
|
||||
- meta_scope: string.interpolated.lean4
|
||||
- match: '"'
|
||||
captures:
|
||||
0: punctuation.definition.string.end.lean
|
||||
pop: true
|
||||
- match: '\\[\\"nt'']'
|
||||
scope: constant.character.escape.lean
|
||||
- match: '\\x[0-9A-Fa-f][0-9A-Fa-f]'
|
||||
scope: constant.character.escape.lean
|
||||
- match: '\\u[0-9A-Fa-f][0-9A-Fa-f][0-9A-Fa-f][0-9A-Fa-f]'
|
||||
scope: constant.character.escape.lean
|
||||
- match: '''[^\\'']'''
|
||||
scope: string.quoted.single.lean
|
||||
- match: '''(\\(x..|u....|.))'''
|
||||
scope: string.quoted.single.lean
|
||||
- match: '(\{)'
|
||||
captures:
|
||||
1: constant.character.escape.lean
|
||||
1: keyword.other.lean4
|
||||
push:
|
||||
- match: '(\})'
|
||||
captures:
|
||||
1: keyword.other.lean4
|
||||
pop: true
|
||||
- include: main
|
||||
- match: '\\[\\"ntr'']'
|
||||
scope: constant.character.escape.lean4
|
||||
- match: '\\x[0-9A-Fa-f][0-9A-Fa-f]'
|
||||
scope: constant.character.escape.lean4
|
||||
- match: '\\u[0-9A-Fa-f][0-9A-Fa-f][0-9A-Fa-f][0-9A-Fa-f]'
|
||||
scope: constant.character.escape.lean4
|
||||
- match: '"'
|
||||
push:
|
||||
- meta_scope: string.quoted.double.lean4
|
||||
- match: '"'
|
||||
pop: true
|
||||
- match: '\\[\\"ntr'']'
|
||||
scope: constant.character.escape.lean4
|
||||
- match: '\\x[0-9A-Fa-f][0-9A-Fa-f]'
|
||||
scope: constant.character.escape.lean4
|
||||
- match: '\\u[0-9A-Fa-f][0-9A-Fa-f][0-9A-Fa-f][0-9A-Fa-f]'
|
||||
scope: constant.character.escape.lean4
|
||||
- match: \b(true|false)\b
|
||||
scope: constant.language.lean4
|
||||
- match: '''[^\\'']'''
|
||||
scope: string.quoted.single.lean4
|
||||
- match: '''(\\(x[0-9A-Fa-f][0-9A-Fa-f]|u[0-9A-Fa-f][0-9A-Fa-f][0-9A-Fa-f][0-9A-Fa-f]|.))'''
|
||||
scope: string.quoted.single.lean4
|
||||
captures:
|
||||
1: constant.character.escape.lean4
|
||||
- match: '`+[^\[(]\S+'
|
||||
scope: entity.name.lean
|
||||
- match: '\b([0-9]+|0([xX][0-9a-fA-F]+))\b'
|
||||
scope: constant.numeric.lean
|
||||
scope: entity.name.lean4
|
||||
- match: '\b([0-9]+|0([xX][0-9a-fA-F]+)|[-]?(0|[1-9][0-9]*)(\.[0-9]+)?([eE][+-]?[0-9]+)?)\b'
|
||||
scope: constant.numeric.lean4
|
||||
blockComment:
|
||||
- match: /-
|
||||
push:
|
||||
- meta_scope: comment.block.lean
|
||||
- match: "-/"
|
||||
- meta_scope: comment.block.lean4
|
||||
- match: '-/'
|
||||
pop: true
|
||||
- include: scope:source.lean.markdown
|
||||
- include: scope:source.lean4.markdown
|
||||
- include: blockComment
|
||||
comments:
|
||||
- include: dashComment
|
||||
- include: docComment
|
||||
- include: stringBlock
|
||||
- include: modDocComment
|
||||
- include: blockComment
|
||||
dashComment:
|
||||
- match: (--)
|
||||
captures:
|
||||
0: punctuation.definition.comment.lean
|
||||
- match: '--'
|
||||
push:
|
||||
- meta_scope: comment.line.double-dash.lean
|
||||
- meta_scope: comment.line.double-dash.lean4
|
||||
- match: $
|
||||
pop: true
|
||||
- include: scope:source.lean.markdown
|
||||
- include: scope:source.lean4.markdown
|
||||
definitionName:
|
||||
- match: '\b[^:«»\(\)\{\}[:space:]=→λ∀?][^:«»\(\)\{\}[:space:]]*'
|
||||
scope: entity.name.function.lean
|
||||
scope: entity.name.function.lean4
|
||||
- match: «
|
||||
push:
|
||||
- meta_content_scope: entity.name.function.lean
|
||||
- meta_content_scope: entity.name.function.lean4
|
||||
- match: »
|
||||
pop: true
|
||||
docComment:
|
||||
- match: /--
|
||||
push:
|
||||
- meta_scope: comment.block.documentation.lean
|
||||
- match: "-/"
|
||||
- meta_scope: comment.block.documentation.lean4
|
||||
- match: '-/'
|
||||
pop: true
|
||||
- include: scope:source.lean.markdown
|
||||
- include: scope:source.lean4.markdown
|
||||
- include: blockComment
|
||||
modDocComment:
|
||||
- match: /-!
|
||||
push:
|
||||
- meta_scope: comment.block.documentation.lean
|
||||
- match: "-/"
|
||||
- meta_scope: comment.block.documentation.lean4
|
||||
- match: '-/'
|
||||
pop: true
|
||||
- include: scope:source.lean.markdown
|
||||
- include: blockComment
|
||||
stringBlock:
|
||||
- match: /-"
|
||||
push:
|
||||
- meta_scope: comment.block.string.lean
|
||||
- match: '"-/'
|
||||
pop: true
|
||||
- include: scope:source.lean.markdown
|
||||
- include: scope:source.lean4.markdown
|
||||
- include: blockComment
|
||||
|
1
assets/syntaxes/02_Extra/LiveScript
vendored
1
assets/syntaxes/02_Extra/LiveScript
vendored
Submodule assets/syntaxes/02_Extra/LiveScript deleted from d82aeb737d
@@ -85,6 +85,9 @@ contexts:
|
||||
|
||||
options:
|
||||
# command-line options like --option=value, --some-flag, or -x
|
||||
- match: '^[ ]{7}(-)(?=\s)'
|
||||
captures:
|
||||
1: entity.name.command-line-option.man
|
||||
- match: '^[ ]{7}(?=-|\+)'
|
||||
push: expect-command-line-option
|
||||
- match: '(?:[^a-zA-Z0-9_-]|^|\s){{command_line_option}}'
|
||||
|
1
assets/syntaxes/02_Extra/NSIS
vendored
Submodule
1
assets/syntaxes/02_Extra/NSIS
vendored
Submodule
Submodule assets/syntaxes/02_Extra/NSIS added at 619a65a04e
2
assets/syntaxes/02_Extra/Nix
vendored
2
assets/syntaxes/02_Extra/Nix
vendored
Submodule assets/syntaxes/02_Extra/Nix updated: 9032bd6137...48c497c709
1
assets/syntaxes/02_Extra/Org mode
vendored
1
assets/syntaxes/02_Extra/Org mode
vendored
Submodule assets/syntaxes/02_Extra/Org mode deleted from 4976d8f84e
1
assets/syntaxes/02_Extra/Org_mode
vendored
Submodule
1
assets/syntaxes/02_Extra/Org_mode
vendored
Submodule
Submodule assets/syntaxes/02_Extra/Org_mode added at bb6e5d8481
2
assets/syntaxes/02_Extra/PowerShell
vendored
2
assets/syntaxes/02_Extra/PowerShell
vendored
Submodule assets/syntaxes/02_Extra/PowerShell updated: c0372a1d2d...a08b55bf11
2
assets/syntaxes/02_Extra/Protobuf
vendored
2
assets/syntaxes/02_Extra/Protobuf
vendored
Submodule assets/syntaxes/02_Extra/Protobuf updated: 726e21d74d...1365331580
1
assets/syntaxes/02_Extra/SmartVHDL
vendored
Submodule
1
assets/syntaxes/02_Extra/SmartVHDL
vendored
Submodule
Submodule assets/syntaxes/02_Extra/SmartVHDL added at b45507ddc8
2
assets/syntaxes/02_Extra/SublimeJQ
vendored
2
assets/syntaxes/02_Extra/SublimeJQ
vendored
Submodule assets/syntaxes/02_Extra/SublimeJQ updated: 687058289c...b7e53e5d86
2
assets/syntaxes/02_Extra/TOML
vendored
2
assets/syntaxes/02_Extra/TOML
vendored
Submodule assets/syntaxes/02_Extra/TOML updated: fd0bf3e5d6...f5a57e8bff
2
assets/syntaxes/02_Extra/Zig
vendored
2
assets/syntaxes/02_Extra/Zig
vendored
Submodule assets/syntaxes/02_Extra/Zig updated: 1a4a38445f...8a4a3fe4a0
42
assets/syntaxes/02_Extra/apt-source-list.sublime-syntax
vendored
Normal file
42
assets/syntaxes/02_Extra/apt-source-list.sublime-syntax
vendored
Normal file
@@ -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
|
2
assets/syntaxes/02_Extra/cmd-help
vendored
2
assets/syntaxes/02_Extra/cmd-help
vendored
Submodule assets/syntaxes/02_Extra/cmd-help updated: f41e5fc838...c71ba410bd
2
assets/syntaxes/02_Extra/hosts
vendored
2
assets/syntaxes/02_Extra/hosts
vendored
Submodule assets/syntaxes/02_Extra/hosts updated: 21250a7117...60ed92c472
24
assets/syntaxes/02_Extra/log.sublime-syntax
vendored
24
assets/syntaxes/02_Extra/log.sublime-syntax
vendored
@@ -38,21 +38,21 @@ contexts:
|
||||
scope: markup.underline.link.scheme.log
|
||||
push: url-host
|
||||
log_level_lines:
|
||||
- match: ^(?=.*{{error}})
|
||||
- match: (?=.*{{error}})
|
||||
push:
|
||||
- error_line
|
||||
- error_line_meta
|
||||
- main_pop_at_eol
|
||||
- match: ^(?=.*{{warning}})
|
||||
- match: (?=.*{{warning}})
|
||||
push:
|
||||
- warning_line
|
||||
- warning_line_meta
|
||||
- main_pop_at_eol
|
||||
- match: ^(?=.*{{info}})
|
||||
- match: (?=.*{{info}})
|
||||
push:
|
||||
- info_line
|
||||
- info_line_meta
|
||||
- main_pop_at_eol
|
||||
- match: ^(?=.*{{debug}})
|
||||
- match: (?=.*{{debug}})
|
||||
push:
|
||||
- debug_line
|
||||
- debug_line_meta
|
||||
- main_pop_at_eol
|
||||
log_levels:
|
||||
- match: '{{error}}'
|
||||
@@ -63,16 +63,16 @@ contexts:
|
||||
scope: markup.info.log
|
||||
- match: '{{debug}}'
|
||||
scope: markup.info.log
|
||||
error_line:
|
||||
error_line_meta:
|
||||
- meta_scope: meta.annotation.error-line.log
|
||||
- include: immediately_pop
|
||||
warning_line:
|
||||
warning_line_meta:
|
||||
- meta_scope: meta.annotation.warning-line.log
|
||||
- include: immediately_pop
|
||||
info_line:
|
||||
info_line_meta:
|
||||
- meta_scope: meta.annotation.info-line.log
|
||||
- include: immediately_pop
|
||||
debug_line:
|
||||
debug_line_meta:
|
||||
- meta_scope: meta.annotation.debug-line.log
|
||||
- include: immediately_pop
|
||||
immediately_pop:
|
||||
|
2
assets/syntaxes/02_Extra/ssh-config
vendored
2
assets/syntaxes/02_Extra/ssh-config
vendored
Submodule assets/syntaxes/02_Extra/ssh-config updated: e1012e9f13...bf49e9181c
1
assets/syntaxes/02_Extra/sublime-odin
vendored
Submodule
1
assets/syntaxes/02_Extra/sublime-odin
vendored
Submodule
Submodule assets/syntaxes/02_Extra/sublime-odin added at 5d6a0ed41e
6
assets/syntaxes/02_Extra/syntax_test_man.man
vendored
6
assets/syntaxes/02_Extra/syntax_test_man.man
vendored
@@ -131,6 +131,12 @@ OPTIONS
|
||||
# ^^ - variable
|
||||
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
|
||||
#include <stdio.h>
|
||||
# ^^^^^^^^ source.c meta.preprocessor.include keyword.control.import.include
|
||||
|
16
assets/syntaxes/02_Extra/syslog.sublime-syntax
vendored
16
assets/syntaxes/02_Extra/syslog.sublime-syntax
vendored
@@ -8,10 +8,10 @@ scope: text.log.syslog
|
||||
contexts:
|
||||
main:
|
||||
- match: ^(\w+\s+\d+)\s+(\d{2}:\d{2}:\d{2})
|
||||
scope: meta.datetime.syslog constant.numeric.syslog
|
||||
scope: meta.datetime.syslog
|
||||
captures:
|
||||
1: meta.date.syslog
|
||||
2: meta.time.syslog
|
||||
1: meta.date.syslog constant.numeric.syslog
|
||||
2: meta.time.syslog constant.numeric.syslog
|
||||
push: loghost
|
||||
- match: ^
|
||||
push: text
|
||||
@@ -31,7 +31,10 @@ contexts:
|
||||
structured-data:
|
||||
- match: '\['
|
||||
scope: punctuation.section.mapping.begin.syslog
|
||||
push:
|
||||
push: structured-data-contents
|
||||
- match: (?=\S)
|
||||
set: text
|
||||
structured-data-contents:
|
||||
- match: \]
|
||||
scope: punctuation.section.mapping.end.syslog
|
||||
pop: true
|
||||
@@ -39,14 +42,13 @@ contexts:
|
||||
scope: variable.parameter.syslog
|
||||
- match: =
|
||||
scope: keyword.operator.assignment.syslog
|
||||
push:
|
||||
push: structured-data-assignment
|
||||
structured-data-assignment:
|
||||
- match: '[^\s\]]+'
|
||||
scope: constant.other.syslog
|
||||
pop: true
|
||||
- match: (?=\])
|
||||
pop: true
|
||||
- match: (?=\S)
|
||||
set: text
|
||||
text:
|
||||
- match: $
|
||||
pop: true
|
||||
|
1
assets/syntaxes/02_Extra/typst-syntax-highlight
vendored
Submodule
1
assets/syntaxes/02_Extra/typst-syntax-highlight
vendored
Submodule
Submodule assets/syntaxes/02_Extra/typst-syntax-highlight added at 4e2e68b0a1
1
assets/syntaxes/02_Extra/vscode-wgsl
vendored
Submodule
1
assets/syntaxes/02_Extra/vscode-wgsl
vendored
Submodule
Submodule assets/syntaxes/02_Extra/vscode-wgsl added at acf26718d7
198
assets/syntaxes/02_Extra/wgsl.sublime-syntax
vendored
Normal file
198
assets/syntaxes/02_Extra/wgsl.sublime-syntax
vendored
Normal file
@@ -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
|
2
assets/theme_preview.rs
vendored
2
assets/theme_preview.rs
vendored
@@ -1,5 +1,5 @@
|
||||
// Output the square of a number.
|
||||
fn print_square(num: f64) {
|
||||
let result = f64::powf(num, 2.0);
|
||||
println!("The square of {:.2} is {:.2}.", num, result);
|
||||
println!("The square of {num:.2} is {result:.2}.");
|
||||
}
|
||||
|
BIN
assets/themes.bin
vendored
BIN
assets/themes.bin
vendored
Binary file not shown.
1
assets/themes/Catppuccin
vendored
Submodule
1
assets/themes/Catppuccin
vendored
Submodule
Submodule assets/themes/Catppuccin added at ccf194fdc9
2
assets/themes/Nord-sublime
vendored
2
assets/themes/Nord-sublime
vendored
Submodule assets/themes/Nord-sublime updated: 0d655b23d6...bf92a9e445
6
assets/themes/ansi.tmTheme
vendored
6
assets/themes/ansi.tmTheme
vendored
@@ -69,7 +69,7 @@
|
||||
<key>name</key>
|
||||
<string>Labels</string>
|
||||
<key>scope</key>
|
||||
<string>entity.name.label</string>
|
||||
<string>entity.name.label, variable.parameter</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
@@ -80,7 +80,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>
|
||||
@@ -234,7 +234,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>
|
||||
|
4
assets/themes/base16-256.tmTheme
vendored
4
assets/themes/base16-256.tmTheme
vendored
@@ -257,7 +257,7 @@
|
||||
<key>name</key>
|
||||
<string>Tags</string>
|
||||
<key>scope</key>
|
||||
<string>entity.name.tag</string>
|
||||
<string>entity.name.tag, entity.name</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
@@ -312,7 +312,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>
|
||||
|
4
assets/themes/base16.tmTheme
vendored
4
assets/themes/base16.tmTheme
vendored
@@ -256,7 +256,7 @@
|
||||
<key>name</key>
|
||||
<string>Tags</string>
|
||||
<key>scope</key>
|
||||
<string>entity.name.tag</string>
|
||||
<string>entity.name.tag, entity.name</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
@@ -311,7 +311,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>
|
||||
|
2
assets/themes/github-sublime-theme
vendored
2
assets/themes/github-sublime-theme
vendored
Submodule assets/themes/github-sublime-theme updated: 508740b243...59e525f638
2
assets/themes/gruvbox
vendored
2
assets/themes/gruvbox
vendored
Submodule assets/themes/gruvbox updated: 64c47250e5...4050347282
2
assets/themes/sublime-snazzy
vendored
2
assets/themes/sublime-snazzy
vendored
Submodule assets/themes/sublime-snazzy updated: 70343201f1...48f43a7350
2
assets/themes/zenburn
vendored
2
assets/themes/zenburn
vendored
Submodule assets/themes/zenburn updated: 43dc527731...4f21745723
106
build.rs
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
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
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(())
|
||||
}
|
303
build/syntax_mapping.rs
Normal file
303
build/syntax_mapping.rs
Normal file
@@ -0,0 +1,303 @@
|
||||
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 proc_macro2::TokenStream;
|
||||
use quote::{quote, ToTokens, TokenStreamExt};
|
||||
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 ToTokens for MappingTarget {
|
||||
fn to_tokens(&self, tokens: &mut TokenStream) {
|
||||
let t = match self {
|
||||
Self::MapTo(syntax) => quote! { MappingTarget::MapTo(#syntax) },
|
||||
Self::MapToUnknown => quote! { MappingTarget::MapToUnknown },
|
||||
Self::MapExtensionToUnknown => quote! { MappingTarget::MapExtensionToUnknown },
|
||||
};
|
||||
tokens.append_all(t);
|
||||
}
|
||||
}
|
||||
|
||||
#[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 ToTokens for Matcher {
|
||||
fn to_tokens(&self, tokens: &mut TokenStream) {
|
||||
let t = match self.0.as_slice() {
|
||||
[] => unreachable!("0-length matcher should never be created"),
|
||||
[MatcherSegment::Text(text)] => {
|
||||
quote! { Lazy::new(|| Some(build_matcher_fixed(#text))) }
|
||||
}
|
||||
// parser logic ensures that this case can only happen when there are dynamic segments
|
||||
segs @ [_, ..] => quote! { Lazy::new(|| build_matcher_dynamic(&[ #(#segs),* ])) },
|
||||
};
|
||||
tokens.append_all(t);
|
||||
}
|
||||
}
|
||||
|
||||
/// A segment in a matcher.
|
||||
///
|
||||
/// Corresponds to `syntax_mapping::MatcherSegment`.
|
||||
#[derive(Debug, Clone, PartialEq, Eq, Hash)]
|
||||
enum MatcherSegment {
|
||||
Text(String),
|
||||
Env(String),
|
||||
}
|
||||
impl ToTokens for MatcherSegment {
|
||||
fn to_tokens(&self, tokens: &mut TokenStream) {
|
||||
let t = match self {
|
||||
Self::Text(text) => quote! { MatcherSegment::Text(#text) },
|
||||
Self::Env(env) => quote! { MatcherSegment::Env(#env) },
|
||||
};
|
||||
tokens.append_all(t);
|
||||
}
|
||||
}
|
||||
#[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),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// 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 ToTokens for MappingList {
|
||||
fn to_tokens(&self, tokens: &mut TokenStream) {
|
||||
let len = self.0.len();
|
||||
let array_items = self
|
||||
.0
|
||||
.iter()
|
||||
.map(|(matcher, target)| quote! { (#matcher, #target) });
|
||||
|
||||
let t = quote! {
|
||||
/// Generated by build script from /src/syntax_mapping/builtins/.
|
||||
pub(crate) static BUILTIN_MAPPINGS: [(Lazy<Option<GlobMatcher>>, MappingTarget); #len] = [#(#array_items),*];
|
||||
};
|
||||
tokens.append_all(t);
|
||||
}
|
||||
}
|
||||
|
||||
/// 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()?;
|
||||
|
||||
// IMPRV: parse + unparse is a bit cringe, but there seems to be no better
|
||||
// option given the limited APIs of `prettyplease`
|
||||
let rs_src = syn::parse_file(&mappings.to_token_stream().to_string())?;
|
||||
let rs_src_pretty = prettyplease::unparse(&rs_src);
|
||||
|
||||
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, rs_src_pretty)?;
|
||||
|
||||
Ok(())
|
||||
}
|
21
build/util.rs
Normal file
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
|
||||
|
||||
## インストール
|
||||
|
||||
[](https://repology.org/project/bat-cat/versions)
|
||||
[](https://repology.org/project/bat-cat/versions)
|
||||
|
||||
### On Ubuntu (`apt` を使用)
|
||||
*... や他のDebianベースのLinuxディストリビューション*
|
||||
@@ -219,7 +219,7 @@ apk add bat
|
||||
|
||||
### 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
|
||||
@@ -366,7 +366,7 @@ ansible-galaxy install aeimer.install_bat
|
||||
### From source
|
||||
|
||||
|
||||
`bat` をソースからビルドしたいならば、Rust 1.64.0 以上の環境が必要です。
|
||||
`bat` をソースからビルドしたいならば、Rust 1.74.0 以上の環境が必要です。
|
||||
`cargo` を使用してビルドすることができます:
|
||||
|
||||
```bash
|
||||
|
@@ -163,7 +163,7 @@ git show v0.6.0:src/main.rs | bat -l rs
|
||||
볼 수 있습니다:
|
||||
```bash
|
||||
batdiff() {
|
||||
git diff --name-only --diff-filter=d | xargs bat --diff
|
||||
git diff --name-only --relative --diff-filter=d -z | xargs -0 bat --diff
|
||||
}
|
||||
```
|
||||
이것을 별도의 도구로 쓰고 싶다면
|
||||
@@ -214,7 +214,7 @@ man 2 select
|
||||
|
||||
## 설치
|
||||
|
||||
[](https://repology.org/project/bat-cat/versions)
|
||||
[](https://repology.org/project/bat-cat/versions)
|
||||
|
||||
### Ubuntu에서 (`apt` 사용)
|
||||
*... 그리고 다른 Debian 기반의 Linux 배포판들에서.*
|
||||
@@ -264,7 +264,7 @@ apk add bat
|
||||
### Arch Linux에서
|
||||
|
||||
공식 소스를 통해
|
||||
[`bat` 패키지](https://www.archlinux.org/packages/community/x86_64/bat/)를
|
||||
[`bat` 패키지](https://www.archlinux.org/packages/extra/x86_64/bat/)를
|
||||
설치할 수 있습니다:
|
||||
|
||||
```bash
|
||||
@@ -416,7 +416,7 @@ scoop install bat
|
||||
|
||||
### 소스에서
|
||||
|
||||
`bat`의 소스를 빌드하기 위해서는, Rust 1.64.0 이상이 필요합니다.
|
||||
`bat`의 소스를 빌드하기 위해서는, Rust 1.74.0 이상이 필요합니다.
|
||||
`cargo`를 이용해 전부 빌드할 수 있습니다:
|
||||
|
||||
```bash
|
||||
@@ -461,11 +461,11 @@ bat --list-themes | fzf --preview="bat --theme={} --color=always /path/to/file"
|
||||
|
||||
- `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비트 색상에 밝은 변형 추가)을 사용합니다.
|
||||
- `base16-256`는 [base16-shell](https://github.com/chriskempson/base16-shell)을
|
||||
- `base16-256`는 [base16-shell](https://github.com/tinted-theming/base16-shell)을
|
||||
위해 디자인되었습니다.
|
||||
이는 16부터 21의 일부 밝은 색상을 8비트 색상으로 대치합니다.
|
||||
단지 256-색상 터미널을 쓰지만 base16-shell을 쓰지 않는다고 해서 이것을
|
||||
|
199
doc/README-ru.md
199
doc/README-ru.md
@@ -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>
|
||||
<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>
|
||||
Клон утилиты <i>cat(1)</i> с поддержкой выделения синтаксиса и Git
|
||||
Клон утилиты <i>cat(1)</i> с поддержкой подсветки синтаксиса и Git
|
||||
</p>
|
||||
|
||||
<p align="center">
|
||||
<a href="#выделение-синтаксиса">Ключевые возможности</a> •
|
||||
<a href="#подсветка-синтаксиса">Ключевые возможности</a> •
|
||||
<a href="#как-использовать">Использование</a> •
|
||||
<a href="#установка">Установка</a> •
|
||||
<a href="#кастомизация">Кастомизация</a> •
|
||||
<a href="#цели-и-альтернативы">Цели и альтернативы </a><br>
|
||||
[<a href="../README.md">English]
|
||||
[<a href="../README.md">English</a>]
|
||||
[<a href="README-zh.md">中文</a>]
|
||||
[<a href="README-ja.md">日本語</a>]
|
||||
[<a href="README-ko.md">한국어</a>]
|
||||
[Русский]
|
||||
</p>
|
||||
|
||||
### Выделение синтаксиса
|
||||
### Подсветка синтаксиса
|
||||
|
||||
`bat` поддерживает выделение синтаксиса для огромного количества языков программирования и разметки:
|
||||
`bat` поддерживает подсветку синтаксиса для огромного количества языков программирования и разметки:
|
||||
|
||||

|
||||

|
||||
|
||||
### Интеграция с Git
|
||||
`bat` использует `git`, чтобы показать изменения в коде
|
||||
@@ -31,15 +31,17 @@
|
||||
|
||||

|
||||
|
||||
### Показать непечатаемые символы
|
||||
### Показ непечатных символов
|
||||
|
||||
Вы можете использовать `-A` / `--show-all` флаг, чтобы показать символы, которые невозможно напечатать:
|
||||
Вы можете использовать флаг `-A` / `--show-all`, чтобы показать непечатные символы:
|
||||
|
||||

|
||||
|
||||
### Автоматическое разделение текста
|
||||
### Автоматический пейджинг терминала
|
||||
|
||||
`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 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`
|
||||
|
||||
Вы можете использовать флаг `-exec` в `find`, чтобы посмотреть превью всех файлов в `bat`
|
||||
@@ -121,31 +135,42 @@ tail -f /var/log/pacman.log | bat --paging=never -l log
|
||||
|
||||
#### `git`
|
||||
|
||||
Вы можете использовать `bat` с `git show`, чтобы просмотреть старую версию файла с выделением синтаксиса:
|
||||
Вы можете использовать `bat` с `git show`, чтобы просмотреть старую версию файла с подсветкой синтаксиса:
|
||||
```bash
|
||||
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 -z | xargs -0 bat --diff
|
||||
}
|
||||
```
|
||||
Если вы хотите использовать это как отдельную программу, посмотрите `batdiff` из [`bat-extras`](https://github.com/eth-p/bat-extras).
|
||||
|
||||
Если вам это нужна более полная поддержка для операций с git и diff, посмотрите [`delta`](https://github.com/dandavison/delta).
|
||||
|
||||
#### `xclip`
|
||||
|
||||
Нумерация стро и отображение изменений затрудняет копирование содержимого файлов в буфер обмена.
|
||||
Чтобы спроваиться с этим, используйте флаг `-p`/`--plain` или просто перенаправьте стандартный вывод в `xclip`:
|
||||
Нумерация строк и отображение изменений затрудняет копирование содержимого файлов в буфер обмена.
|
||||
Чтобы справиться с этим, используйте флаг `-p`/`--plain` или просто перенаправьте стандартный вывод в `xclip`:
|
||||
```bash
|
||||
bat main.cpp | xclip
|
||||
```
|
||||
`bat` обнаружит перенаправление вывода и выведет обычный текст без выделения синтаксиса.
|
||||
`bat` обнаружит перенаправление вывода и выведет обычный текст без подсветки синтаксиса.
|
||||
|
||||
#### `man`
|
||||
|
||||
`bat` может быть использован в виде выделения цвета для `man`, для этого установите переменную окружения
|
||||
`bat` может быть использован для раскрашивания вывода `man`, для этого установите переменную окружения
|
||||
`MANPAGER`:
|
||||
|
||||
```bash
|
||||
export MANPAGER="sh -c 'col -bx | bat -l man -p'"
|
||||
man 2 select
|
||||
```
|
||||
(замените `bat` на `batcat`, если у вас Debian или Ubuntu)
|
||||
|
||||
Возможно вам понадобится также установить `MANROFFOPT="-c"`, если у вас есть проблемы с форматированием.
|
||||
|
||||
@@ -153,20 +178,49 @@ man 2 select
|
||||
|
||||
Обратите внимание, что [синтаксис manpage](assets/syntaxes/02_Extra/Manpage.sublime-syntax) разрабатывается в этом репозитории и все еще находится в разработке.
|
||||
|
||||
Также заметьте, что это [не заработает](https://github.com/sharkdp/bat/issues/1145) с реализацией `man` через Mandocs.
|
||||
|
||||
#### `prettier` / `shfmt` / `rustfmt`
|
||||
|
||||
[`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).
|
||||
|
||||
## Установка
|
||||
|
||||
[](https://repology.org/project/bat-cat/versions)
|
||||
[](https://repology.org/project/bat-cat/versions)
|
||||
|
||||
### Ubuntu (с помощью `apt`)
|
||||
*... и другие дистрибутивы основанные на Debian.*
|
||||
|
||||
`bat` есть в репозиториях [Ubuntu](https://packages.ubuntu.com/eoan/bat) и
|
||||
[Debian](https://packages.debian.org/sid/bat) и доступен начиная с Ubuntu Eoan 19.10. На Debian `bat` пока что доступен только с нестабильной веткой "Sid".
|
||||
`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).
|
||||
|
||||
Если ваша версия Ubuntu/Debian достаточно новая, вы можете установить `bat` так:
|
||||
|
||||
@@ -201,7 +255,7 @@ apk add bat
|
||||
|
||||
### Arch Linux
|
||||
|
||||
Вы можете установить [`bat`](https://www.archlinux.org/packages/community/x86_64/bat/) из официального источника:
|
||||
Вы можете установить [`bat`](https://www.archlinux.org/packages/extra/x86_64/bat/) из официального источника:
|
||||
|
||||
```bash
|
||||
pacman -S bat
|
||||
@@ -245,6 +299,14 @@ cd /usr/ports/textproc/bat
|
||||
make install
|
||||
```
|
||||
|
||||
### On OpenBSD
|
||||
|
||||
Вы можете установить `bat` с помощью [`pkg_add(1)`](https://man.openbsd.org/pkg_add.1):
|
||||
|
||||
```bash
|
||||
pkg_add bat
|
||||
```
|
||||
|
||||
### С помощью nix
|
||||
|
||||
Вы можете установить `bat`, используя [nix package manager](https://nixos.org/nix):
|
||||
@@ -253,6 +315,14 @@ make install
|
||||
nix-env -i bat
|
||||
```
|
||||
|
||||
### Через flox
|
||||
|
||||
Вы можете установить `bat` используя [Flox](https://flox.dev)
|
||||
|
||||
```bash
|
||||
flox install bat
|
||||
```
|
||||
|
||||
### openSUSE
|
||||
|
||||
Вы можете установить `bat` с помощью `zypper`:
|
||||
@@ -261,7 +331,7 @@ nix-env -i bat
|
||||
zypper install bat
|
||||
```
|
||||
|
||||
### macOS
|
||||
### На macOS (или Linux) через Homebrew
|
||||
|
||||
Вы можете установить `bat` с помощью [Homebrew](http://braumeister.org/formula/bat):
|
||||
|
||||
@@ -269,6 +339,8 @@ zypper install bat
|
||||
brew install bat
|
||||
```
|
||||
|
||||
### На macOS через MacPorts
|
||||
|
||||
Или же установить его с помощью [MacPorts](https://ports.macports.org/port/bat/summary):
|
||||
|
||||
```bash
|
||||
@@ -277,7 +349,19 @@ port install bat
|
||||
|
||||
### 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
|
||||
|
||||
@@ -293,50 +377,10 @@ choco 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).
|
||||
|
||||
Для этого у вас должен быть установлен [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) для
|
||||
@@ -344,15 +388,24 @@ ansible-galaxy install aeimer.install_bat
|
||||
|
||||
### Из исходников
|
||||
|
||||
Если вы желаете установить `bat` из исходников, вам понадобится Rust 1.64.0 или выше. После этого используйте `cargo`, чтобы все скомпилировать:
|
||||
Если вы желаете установить `bat` из исходников, вам понадобится Rust 1.74.0 или выше. После этого используйте `cargo`, чтобы всё скомпилировать:
|
||||
|
||||
```bash
|
||||
cargo install --locked bat
|
||||
```
|
||||
|
||||
Заметьте, что дополнительные файлы, такие как документация man и подсказки командной строки, не могут быть установлены таким способом.
|
||||
Они будут сгенерированы командой `cargo` должны быть доступны в папке сборки (в `build`).
|
||||
|
||||
Подсказки командной строки также доступны при таком запуске:
|
||||
```bash
|
||||
bat --completion <shell>
|
||||
# see --help for supported shells
|
||||
```
|
||||
|
||||
## Кастомизация
|
||||
|
||||
### Темы для выделения текста
|
||||
### Темы для подсветки синтаксиса
|
||||
|
||||
Используйте `bat --list-themes`, чтобы вывести список всех доступных тем. Для выбора темы `TwoDark` используйте `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)
|
||||
и темы. Чтобы добавить новый синтаксис, сделайте следующее:
|
||||
|
||||
@@ -403,7 +456,7 @@ bat cache --clear
|
||||
|
||||
### Добавление новых тем
|
||||
|
||||
Это работает похожим образом, так же как и добавление новых тем выделения синтаксиса
|
||||
Это работает похожим образом, так же как и добавление новых тем подсветки синтаксиса
|
||||
|
||||
Во-первых, создайте каталог с новыми темами для синтаксиса:
|
||||
```bash
|
||||
@@ -487,7 +540,7 @@ bat --generate-config-file
|
||||
# Использовать синтаксис C++ для всех Arduino .ino файлов
|
||||
--map-syntax "*.ino:C++"
|
||||
|
||||
# Использовать синтаксик Git Ignore для всех файлов .ignore
|
||||
# Использовать синтаксис Git Ignore для всех файлов .ignore
|
||||
--map-syntax ".ignore:Git Ignore"
|
||||
```
|
||||
|
||||
@@ -535,7 +588,7 @@ bat() {
|
||||
`bat` поддерживает терминалы *с* и *без* поддержки truecolor. Однако подсветка синтаксиса не оптимизирована для терминалов с 8-битными цветами, и рекомендуется использовать терминалы с поддержкой 24-битных цветов (`terminator`, `konsole`, `iTerm2`, ...).
|
||||
Смотрите [эту статью](https://gist.github.com/XVilka/8346728) для полного списка терминалов.
|
||||
|
||||
Удостовертесь, что переменная `COLORTERM` равна `truecolor` или
|
||||
Удостоверьтесь, что переменная `COLORTERM` равна `truecolor` или
|
||||
`24bit`. Иначе `bat` не сможет определить поддержку 24-битных цветов (и будет использовать 8-битные).
|
||||
|
||||
### Текст и номера строк плохо видны
|
||||
@@ -550,7 +603,7 @@ bat() {
|
||||
``` bash
|
||||
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
|
||||
|
||||
# Компилирование исполняего файла bat с другим синтаксисом и темами
|
||||
# Компилирование исполняемого файла bat с другим синтаксисом и темами
|
||||
bash assets/create.sh
|
||||
cargo install --locked --force
|
||||
```
|
||||
@@ -590,8 +643,8 @@ cargo install --locked --force
|
||||
Есть очень много альтернатив `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) для более подробного ознакомления.
|
||||
|
@@ -150,7 +150,7 @@ git show v0.6.0:src/main.rs | bat -l rs
|
||||
|
||||
```bash
|
||||
batdiff() {
|
||||
git diff --name-only --diff-filter=d | xargs bat --diff
|
||||
git diff --name-only --relative --diff-filter=d -z | xargs -0 bat --diff
|
||||
}
|
||||
```
|
||||
|
||||
@@ -170,20 +170,23 @@ bat main.cpp | xclip
|
||||
|
||||
#### `man`
|
||||
|
||||
`bat`也能给`man`的输出上色。这需要设置`MANPAGER`环境变量:
|
||||
`bat` 可以通过设置 `MANPAGER` 环境变量,用作 `man` 的彩色分页器:
|
||||
|
||||
```bash
|
||||
export MANPAGER="sh -c 'col -bx | bat -l man -p'"
|
||||
export MANPAGER="sh -c 'awk '\''{ gsub(/\x1B\[[0-9;]*m/, \"\", \$0); gsub(/.\x08/, \"\", \$0); print }'\'' | bat -p -lman'"
|
||||
man 2 select
|
||||
```
|
||||
|
||||
(如果你使用的是 Debian 或者 Ubuntu,使用`batcat`替换`bat`)
|
||||
(如果你使用 Debian 或 Ubuntu,请将 `batcat` 替换为 `bat`)
|
||||
|
||||
如果你遇到格式化问题,设置`MANROFFOPT="-c"`也许会有帮助。
|
||||
如果你希望将其打包为一个新的命令,也可以使用 [`batman`](https://github.com/eth-p/bat-extras/blob/master/doc/batman.md)。
|
||||
|
||||
`batman`能提供类似功能——作为一个独立的命令。
|
||||
> [!WARNING]
|
||||
> 在使用 Mandoc 的 `man` 实现时,这[无法](https://github.com/sharkdp/bat/issues/1145)直接工作。
|
||||
>
|
||||
> 请使用 `batman`,或将此 Shell 脚本包装为 [Shebang 可执行文件](https://en.wikipedia.org/wiki/Shebang_(Unix)),并将 `MANPAGER` 指向该文件。
|
||||
|
||||
注意:[man page 语法](assets/syntaxes/02_Extra/Manpage.sublime-syntax) 还需要完善。在使用特定的`man`实现时该功能[无法正常工作](https://github.com/sharkdp/bat/issues/1145)。
|
||||
注意,[Manpage 语法](assets/syntaxes/02_Extra/Manpage.sublime-syntax)是在此仓库中开发的,仍需一些改进。
|
||||
|
||||
#### `prettier` / `shfmt` / `rustfmt`
|
||||
|
||||
@@ -191,7 +194,7 @@ man 2 select
|
||||
|
||||
## 安装
|
||||
|
||||
[](https://repology.org/project/bat-cat/versions)
|
||||
[](https://repology.org/project/bat-cat/versions)
|
||||
|
||||
### Ubuntu (使用 `apt`)
|
||||
|
||||
@@ -232,7 +235,7 @@ apk add bat
|
||||
|
||||
### Arch Linux
|
||||
|
||||
你可以用下面下列命令从官方源中安装[`bat`包](https://www.archlinux.org/packages/community/x86_64/bat/):
|
||||
你可以用下面下列命令从官方源中安装[`bat`包](https://www.archlinux.org/packages/extra/x86_64/bat/):
|
||||
|
||||
```bash
|
||||
pacman -S bat
|
||||
@@ -372,7 +375,7 @@ scoop install bat
|
||||
|
||||
### 从源码编译
|
||||
|
||||
如果你想要自己构建`bat`,那么你需要安装有高于1.64.0版本的 Rust。
|
||||
如果你想要自己构建`bat`,那么你需要安装有高于1.74.0版本的 Rust。
|
||||
|
||||
使用以下命令编译。
|
||||
|
||||
@@ -401,8 +404,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) 主题:
|
||||
|
||||
- `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-25`专为 [base16-shell](https://github.com/chriskempson/base16-shell) 设计。它把部分亮色替换为 8-bit 色彩。请不要直接使用该主题,除非你清楚你的256色终端是否使用 base16-shell。
|
||||
- `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/tinted-theming/base16-shell) 设计。它把部分亮色替换为 8-bit 色彩。请不要直接使用该主题,除非你清楚你的256色终端是否使用 base16-shell。
|
||||
|
||||
尽管这些主题具有诸多限制,但具有一些 truecolor 主题不具有的三个优点:
|
||||
|
||||
@@ -412,7 +415,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 +619,59 @@ iconv -f ISO-8859-1 -t UTF-8 my-file.php | bat
|
||||
|
||||
注意: 当`bat`无法识别语言时你可能会需要`-l`/`--language`参数。
|
||||
|
||||
## Development
|
||||
## 开发
|
||||
|
||||
```bash
|
||||
# Recursive clone to retrieve all submodules
|
||||
# 递归 clone 以获取所有子模块
|
||||
git clone --recursive https://github.com/sharkdp/bat
|
||||
|
||||
# Build (debug version)
|
||||
# 构建(调试版本)
|
||||
cd bat
|
||||
cargo build --bins
|
||||
|
||||
# Run unit tests and integration tests
|
||||
# 运行单元测试和集成测试
|
||||
cargo test
|
||||
|
||||
# Install (release version)
|
||||
# 安装(发布版本)
|
||||
cargo install --path . --locked
|
||||
|
||||
# Build a bat binary with modified syntaxes and themes
|
||||
# 使用修改后的语法和主题构建一个 bat 二进制文件
|
||||
bash assets/create.sh
|
||||
cargo install --path . --locked --force
|
||||
```
|
||||
|
||||
If you want to build an application that uses `bat`s pretty-printing
|
||||
features as a library, check out the [the API documentation](https://docs.rs/bat/).
|
||||
Note that you have to use either `regex-onig` or `regex-fancy` as a feature
|
||||
when you depend on `bat` as a library.
|
||||
如果你想构建一个使用 `bat` 美化打印功能的应用程序,请查看 [API 文档](https://docs.rs/bat/)。请注意,当你依赖 `bat` 作为库时,必须使用 `regex-onig` 或 `regex-fancy` 作为特性。
|
||||
|
||||
## Contributing
|
||||
## 贡献指南
|
||||
|
||||
Take a look at the [`CONTRIBUTING.md`](CONTRIBUTING.md) guide.
|
||||
请查看 [`CONTRIBUTING.md`](CONTRIBUTING.md) 指南。
|
||||
|
||||
## Maintainers
|
||||
## 维护者
|
||||
|
||||
- [sharkdp](https://github.com/sharkdp)
|
||||
- [eth-p](https://github.com/eth-p)
|
||||
- [keith-hall](https://github.com/keith-hall)
|
||||
- [Enselic](https://github.com/Enselic)
|
||||
|
||||
## Security vulnerabilities
|
||||
## 安全漏洞
|
||||
|
||||
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
|
||||
- Be a drop-in replacement for (POSIX) `cat`
|
||||
- Offer a user-friendly command-line interface
|
||||
- 提供美观的高级语法高亮
|
||||
- 与 Git 集成以显示文件修改
|
||||
- 成为 (POSIX) `cat` 的替代品
|
||||
- 提供用户友好的命令行界面
|
||||
|
||||
There are a lot of alternatives, if you are looking for similar programs. See
|
||||
[this document](doc/alternatives.md) for a comparison.
|
||||
如果你在寻找类似的程序,有很多替代方案。请参阅[本文档](doc/alternatives.md)进行比较。
|
||||
|
||||
## 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
|
||||
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.
|
||||
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
|
||||
`.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
|
||||
`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.
|
||||
|
||||
@@ -84,6 +87,7 @@ The following files have been manually modified after converting from a `.tmLang
|
||||
* `Org mode.sublime-syntax` => removed `task` file type.
|
||||
* `Robot.sublime_syntax` => changed name to "Robot Framework", added `.resource` extension.
|
||||
* `SML.sublime_syntax` => removed `ml` file type.
|
||||
* `wgsl.sublime-syntax` => added `wgsl` file extension.
|
||||
|
||||
### Non-submodule additions
|
||||
|
||||
@@ -98,4 +102,4 @@ The following files have been manually modified after converting from a `.tmLang
|
||||
https://github.com/seanjames777/SML-Language-Definition/blob/master/sml.tmLanguage
|
||||
* `Cabal.sublime_syntax` has been added manually from
|
||||
https://github.com/SublimeHaskell/SublimeHaskell/ - we don't want to include the whole submodule because it includes other syntaxes ("Haskell improved") as well.
|
||||
* `Lean.sublime-syntax` has been added manually from https://github.com/leanprover/vscode-lean/blob/master/syntaxes/lean.json via conversion.
|
||||
* `Lean.sublime-syntax` has been added manually from https://github.com/leanprover/vscode-lean4/blob/master/vscode-lean4/syntaxes/lean4.json via conversion.
|
||||
|
@@ -20,6 +20,13 @@ Options:
|
||||
* unicode (␇, ␊, ␀, ..)
|
||||
* 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...
|
||||
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
|
||||
@@ -89,8 +96,8 @@ Options:
|
||||
|
||||
--paging <when>
|
||||
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
|
||||
which pager is used, see the '--pager' option. Possible values: *auto*, never, always.
|
||||
alias,'-P'. To disable the pager permanently, set BAT_PAGING to 'never'. To control which
|
||||
pager is used, see the '--pager' option. Possible values: *auto*, never, always.
|
||||
|
||||
--pager <command>
|
||||
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
|
||||
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
|
||||
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>
|
||||
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
|
||||
@@ -123,6 +162,15 @@ Options:
|
||||
set a default style, add the '--style=".."' option to the configuration file or export the
|
||||
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:
|
||||
|
||||
* default: enables recommended style components (default).
|
||||
@@ -146,6 +194,8 @@ Options:
|
||||
'--line-range 40:' prints lines 40 to the end of the file
|
||||
'--line-range 40' only prints line 40
|
||||
'--line-range 30:+10' prints lines 30 to 40
|
||||
'--line-range 35::5' prints lines 30 to 40 (line 35 with 5 lines of context)
|
||||
'--line-range 30:40:2' prints lines 28 to 42 (range 30-40 with 2 lines of context)
|
||||
|
||||
-L, --list-languages
|
||||
Display a list of supported languages for syntax highlighting.
|
||||
@@ -154,12 +204,18 @@ Options:
|
||||
This option exists for POSIX-compliance reasons ('u' is for 'unbuffered'). The output is
|
||||
always unbuffered - this option is simply ignored.
|
||||
|
||||
--completion <SHELL>
|
||||
Show shell completion for a certain shell. [possible values: bash, fish, zsh, ps1]
|
||||
|
||||
--diagnostic
|
||||
Show diagnostic information for bug reports.
|
||||
|
||||
--acknowledgements
|
||||
Show acknowledgements.
|
||||
|
||||
--set-terminal-title
|
||||
Sets terminal title to filenames when using a pager.
|
||||
|
||||
-h, --help
|
||||
Print help (see a summary with '-h')
|
||||
|
||||
|
@@ -9,7 +9,16 @@
|
||||
- [ ] Update the version and the min. supported Rust version in `README.md` and
|
||||
`doc/README-*.md`. Check with
|
||||
`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)
|
||||
|
||||
@@ -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, ..).
|
||||
--nonprintable-notation <notation>
|
||||
Set notation for non-printable characters.
|
||||
--binary <behavior>
|
||||
How to treat binary content. (default: no-printing)
|
||||
-p, --plain...
|
||||
Show plain style (alias for '--style=plain').
|
||||
-l, --language <language>
|
||||
@@ -41,8 +43,14 @@ Options:
|
||||
Use the specified syntax for files matching the glob pattern ('*.cpp:C++').
|
||||
--theme <theme>
|
||||
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
|
||||
Display all supported highlighting themes.
|
||||
-s, --squeeze-blank
|
||||
Squeeze consecutive empty lines.
|
||||
--style <components>
|
||||
Comma-separated list of style elements to display (*default*, auto, full, plain, changes,
|
||||
header, header-filename, header-filesize, grid, rule, numbers, snip).
|
||||
@@ -50,6 +58,8 @@ Options:
|
||||
Only print the lines from N to M.
|
||||
-L, --list-languages
|
||||
Display all supported languages.
|
||||
--completion <SHELL>
|
||||
Show shell completion for a certain shell. [possible values: bash, fish, zsh, ps1]
|
||||
-h, --help
|
||||
Print help (see more with '--help')
|
||||
-V, --version
|
||||
|
BIN
doc/sponsors/graphite-logo.jpeg
Normal file
BIN
doc/sponsors/graphite-logo.jpeg
Normal file
Binary file not shown.
After Width: | Height: | Size: 28 KiB |
BIN
doc/sponsors/warp-logo.png
Normal file
BIN
doc/sponsors/warp-logo.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 130 KiB |
BIN
doc/sponsors/warp-pack-header.png
Normal file
BIN
doc/sponsors/warp-pack-header.png
Normal file
Binary file not shown.
After Width: | Height: | 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 Width: | Height: | Size: 3.4 KiB |
22
examples/buffer.rs
Normal file
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:");
|
||||
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()
|
||||
.language("yaml")
|
||||
.line_numbers(true)
|
||||
|
164
src/assets.rs
164
src/assets.rs
@@ -13,6 +13,7 @@ use crate::error::*;
|
||||
use crate::input::{InputReader, OpenedInput};
|
||||
use crate::syntax_mapping::ignored_suffixes::IgnoredSuffixes;
|
||||
use crate::syntax_mapping::MappingTarget;
|
||||
use crate::theme::{default_theme, ColorScheme};
|
||||
use crate::{bat_warning, SyntaxMapping};
|
||||
|
||||
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> {
|
||||
Ok(HighlightingAssets::new(
|
||||
SerializedSyntaxSet::FromFile(cache_path.join("syntaxes.bin")),
|
||||
@@ -202,7 +152,7 @@ impl HighlightingAssets {
|
||||
&self,
|
||||
path: impl AsRef<Path>,
|
||||
mapping: &SyntaxMapping,
|
||||
) -> Result<SyntaxReferenceInSet> {
|
||||
) -> Result<SyntaxReferenceInSet<'_>> {
|
||||
let path = path.as_ref();
|
||||
|
||||
let syntax_match = mapping.get_syntax_for(path);
|
||||
@@ -213,7 +163,7 @@ impl HighlightingAssets {
|
||||
|
||||
if let Some(MappingTarget::MapTo(syntax_name)) = syntax_match {
|
||||
return self
|
||||
.find_syntax_by_name(syntax_name)?
|
||||
.find_syntax_by_token(syntax_name)?
|
||||
.ok_or_else(|| Error::UnknownSyntax(syntax_name.to_owned()));
|
||||
}
|
||||
|
||||
@@ -241,14 +191,17 @@ impl HighlightingAssets {
|
||||
Some(theme) => theme,
|
||||
None => {
|
||||
if theme == "ansi-light" || theme == "ansi-dark" {
|
||||
bat_warning!("Theme '{}' is deprecated, using 'ansi' instead.", theme);
|
||||
bat_warning!("Theme '{theme}' is deprecated, using 'ansi' instead.");
|
||||
return self.get_theme("ansi");
|
||||
}
|
||||
if !theme.is_empty() {
|
||||
bat_warning!("Unknown theme '{}', using default.", theme)
|
||||
bat_warning!("Unknown theme '{theme}', using default.")
|
||||
}
|
||||
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")
|
||||
}
|
||||
}
|
||||
@@ -259,7 +212,7 @@ impl HighlightingAssets {
|
||||
language: Option<&str>,
|
||||
input: &mut OpenedInput,
|
||||
mapping: &SyntaxMapping,
|
||||
) -> Result<SyntaxReferenceInSet> {
|
||||
) -> Result<SyntaxReferenceInSet<'_>> {
|
||||
if let Some(language) = language {
|
||||
let syntax_set = self.get_syntax_set()?;
|
||||
return syntax_set
|
||||
@@ -291,14 +244,17 @@ impl HighlightingAssets {
|
||||
pub(crate) fn find_syntax_by_name(
|
||||
&self,
|
||||
syntax_name: &str,
|
||||
) -> Result<Option<SyntaxReferenceInSet>> {
|
||||
) -> Result<Option<SyntaxReferenceInSet<'_>>> {
|
||||
let syntax_set = self.get_syntax_set()?;
|
||||
Ok(syntax_set
|
||||
.find_syntax_by_name(syntax_name)
|
||||
.map(|syntax| SyntaxReferenceInSet { syntax, syntax_set }))
|
||||
}
|
||||
|
||||
fn find_syntax_by_extension(&self, e: Option<&OsStr>) -> Result<Option<SyntaxReferenceInSet>> {
|
||||
fn find_syntax_by_extension(
|
||||
&self,
|
||||
e: Option<&OsStr>,
|
||||
) -> Result<Option<SyntaxReferenceInSet<'_>>> {
|
||||
let syntax_set = self.get_syntax_set()?;
|
||||
let extension = e.and_then(|x| x.to_str()).unwrap_or_default();
|
||||
Ok(syntax_set
|
||||
@@ -306,11 +262,18 @@ impl HighlightingAssets {
|
||||
.map(|syntax| SyntaxReferenceInSet { syntax, syntax_set }))
|
||||
}
|
||||
|
||||
fn find_syntax_by_token(&self, token: &str) -> Result<Option<SyntaxReferenceInSet<'_>>> {
|
||||
let syntax_set = self.get_syntax_set()?;
|
||||
Ok(syntax_set
|
||||
.find_syntax_by_token(token)
|
||||
.map(|syntax| SyntaxReferenceInSet { syntax, syntax_set }))
|
||||
}
|
||||
|
||||
fn get_syntax_for_file_name(
|
||||
&self,
|
||||
file_name: &OsStr,
|
||||
ignored_suffixes: &IgnoredSuffixes,
|
||||
) -> Result<Option<SyntaxReferenceInSet>> {
|
||||
) -> Result<Option<SyntaxReferenceInSet<'_>>> {
|
||||
let mut syntax = self.find_syntax_by_extension(Some(file_name))?;
|
||||
if syntax.is_none() {
|
||||
syntax =
|
||||
@@ -326,7 +289,7 @@ impl HighlightingAssets {
|
||||
&self,
|
||||
file_name: &OsStr,
|
||||
ignored_suffixes: &IgnoredSuffixes,
|
||||
) -> Result<Option<SyntaxReferenceInSet>> {
|
||||
) -> Result<Option<SyntaxReferenceInSet<'_>>> {
|
||||
let mut syntax = self.find_syntax_by_extension(Path::new(file_name).extension())?;
|
||||
if syntax.is_none() {
|
||||
syntax =
|
||||
@@ -341,11 +304,15 @@ impl HighlightingAssets {
|
||||
fn get_first_line_syntax(
|
||||
&self,
|
||||
reader: &mut InputReader,
|
||||
) -> Result<Option<SyntaxReferenceInSet>> {
|
||||
) -> Result<Option<SyntaxReferenceInSet<'_>>> {
|
||||
let syntax_set = self.get_syntax_set()?;
|
||||
Ok(String::from_utf8(reader.first_line.clone())
|
||||
.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 }))
|
||||
}
|
||||
}
|
||||
@@ -380,7 +347,7 @@ fn asset_from_contents<T: serde::de::DeserializeOwned>(
|
||||
} else {
|
||||
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>(
|
||||
@@ -390,33 +357,12 @@ fn asset_from_cache<T: serde::de::DeserializeOwned>(
|
||||
) -> Result<T> {
|
||||
let contents = fs::read(path).map_err(|_| {
|
||||
format!(
|
||||
"Could not load cached {} '{}'",
|
||||
description,
|
||||
"Could not load cached {description} '{}'",
|
||||
path.to_string_lossy()
|
||||
)
|
||||
})?;
|
||||
asset_from_contents(&contents[..], description, compressed)
|
||||
.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,
|
||||
}
|
||||
.map_err(|_| format!("Could not parse cached {description}").into())
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
@@ -437,11 +383,11 @@ mod tests {
|
||||
pub temp_dir: TempDir,
|
||||
}
|
||||
|
||||
impl<'a> SyntaxDetectionTest<'a> {
|
||||
impl SyntaxDetectionTest<'_> {
|
||||
fn new() -> Self {
|
||||
SyntaxDetectionTest {
|
||||
assets: HighlightingAssets::from_binary(),
|
||||
syntax_mapping: SyntaxMapping::builtin(),
|
||||
syntax_mapping: SyntaxMapping::new(),
|
||||
temp_dir: TempDir::new().expect("creation of temporary directory"),
|
||||
}
|
||||
}
|
||||
@@ -466,7 +412,7 @@ mod tests {
|
||||
let file_path = self.temp_dir.path().join(file_name);
|
||||
{
|
||||
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);
|
||||
@@ -514,8 +460,7 @@ mod tests {
|
||||
|
||||
if !consistent {
|
||||
eprintln!(
|
||||
"Inconsistent syntax detection:\nFor File: {}\nFor Reader: {}",
|
||||
as_file, as_reader
|
||||
"Inconsistent syntax detection:\nFor File: {as_file}\nFor Reader: {as_reader}"
|
||||
)
|
||||
}
|
||||
|
||||
@@ -601,6 +546,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]
|
||||
fn syntax_detection_with_custom_mapping() {
|
||||
let mut test = SyntaxDetectionTest::new();
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user