From 0648e35fd267b9f03828c97babc015a5caf52f22 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Denys=20S=C3=A9guret?= Date: Sat, 3 Feb 2024 11:11:56 +0100 Subject: support of multi-keys combinations, termimad 0.28 (#826) With this PR comes the ability on terminals implementing [Kitty keyboard extensions](https://sw.kovidgoyal.net/kitty/keyboard-protocol/) to bind verbs to key combinations which are normally not available on simple ANSI terminals, for example `space-n`, `ctrl-enter`, `shift-space`, `ctrl-alt-a-b-c`, etc. --- CHANGELOG.md | 1 + Cargo.lock | 517 ++++++++++++++++++++------------------ Cargo.toml | 26 +- compile-all-targets.sh | 2 +- resources/default-conf/conf.hjson | 11 + src/app/app.rs | 20 +- src/app/app_context.rs | 13 + src/app/panel_state.rs | 1 - src/command/completion.rs | 1 - src/command/panel_input.rs | 30 ++- src/conf/conf.rs | 4 + src/keys.rs | 17 +- src/launchable.rs | 11 +- src/verb/internal_focus.rs | 6 - src/verb/internal_select.rs | 2 +- src/verb/verb.rs | 10 +- website/docs/conf_file.md | 19 ++ 17 files changed, 394 insertions(+), 297 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 2bd6d70..18c6006 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,4 +1,5 @@ ### next +- on terminals supporting the kitty keyboard protocol, you can now define and use key combinations like `space-n`, `ctrl-alt-a-b`, `shift-space-c`, `ctrl-enter`, etc. - new syntax for special paths - Fix #687, #669 ### v1.32.0 - 2024-01-02 diff --git a/Cargo.lock b/Cargo.lock index 23d24a6..a24dc4d 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -16,9 +16,9 @@ checksum = "0453232ace82dee0dd0b4c87a59bd90f7b53b314f3e0f61fe2ee7c8a16482289" [[package]] name = "ahash" -version = "0.8.6" +version = "0.8.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91429305e9f0a25f6205c5b8e0d2db09e0708a7a6df0f42212bb56c32c8ac97a" +checksum = "77c3a9648d43b9cd48db467b3f87fdd6e146bcc88ab0180006cef2179fe11d01" dependencies = [ "cfg-if", "getrandom", @@ -63,9 +63,9 @@ dependencies = [ [[package]] name = "anstream" -version = "0.6.4" +version = "0.6.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2ab91ebe16eb252986481c5b62f6098f3b698a45e34b5b98200cf20dd2484a44" +checksum = "4cd2405b3ac1faab2990b74d728624cd9fd115651fcecc7c2d8daf01376275ba" dependencies = [ "anstyle", "anstyle-parse", @@ -83,37 +83,37 @@ checksum = "7079075b41f533b8c61d2a4d073c4676e1f8b249ff94a393b0595db304e0dd87" [[package]] name = "anstyle-parse" -version = "0.2.2" +version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "317b9a89c1868f5ea6ff1d9539a69f45dffc21ce321ac1fd1160dfa48c8e2140" +checksum = "c75ac65da39e5fe5ab759307499ddad880d724eed2f6ce5b5e8a26f4f387928c" dependencies = [ "utf8parse", ] [[package]] name = "anstyle-query" -version = "1.0.0" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ca11d4be1bab0c8bc8734a9aa7bf4ee8316d462a08c6ac5052f888fef5b494b" +checksum = "e28923312444cdd728e4738b3f9c9cac739500909bb3d3c94b43551b16517648" dependencies = [ - "windows-sys", + "windows-sys 0.52.0", ] [[package]] name = "anstyle-wincon" -version = "3.0.1" +version = "3.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0699d10d2f4d628a98ee7b57b289abbc98ff3bad977cb3152709d4bf2330628" +checksum = "1cd54b81ec8d6180e24654d0b371ad22fc3dd083b6ff8ba325b72e00c87660a7" dependencies = [ "anstyle", - "windows-sys", + "windows-sys 0.52.0", ] [[package]] name = "anyhow" -version = "1.0.75" +version = "1.0.79" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4668cab20f66d8d020e1fbc0ebe47217433c1b6c8f2040faf858554e394ace6" +checksum = "080e9890a082662b09c1ad45f567faeeb47f22b5fb23895fbe1e651e718e25ca" [[package]] name = "argh" @@ -134,7 +134,7 @@ dependencies = [ "argh_shared", "proc-macro2", "quote", - "syn 2.0.39", + "syn 2.0.48", ] [[package]] @@ -172,9 +172,9 @@ checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8" [[package]] name = "base64" -version = "0.21.5" +version = "0.21.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "35636a1494ede3b646cc98f74f8e62c773a38a659ebc777a2cf26b9b74171df9" +checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567" [[package]] name = "bet" @@ -219,9 +219,9 @@ checksum = "0d8c1fef690941d3e7788d328517591fecc684c084084702d6ff1641e993699a" name = "broot" version = "1.32.1-dev" dependencies = [ - "ahash 0.8.6", + "ahash 0.8.7", "ansi_colours", - "base64 0.21.5", + "base64 0.21.7", "bet", "char_reader", "chrono", @@ -258,10 +258,10 @@ dependencies = [ "serde", "smallvec", "splitty", - "strict", + "strict 0.1.4", "syntect-no-panic", "tempfile", - "termimad 0.27.0", + "termimad 0.29.0", "terminal-clipboard", "terminal-light", "toml", @@ -275,9 +275,9 @@ dependencies = [ [[package]] name = "bstr" -version = "1.8.0" +version = "1.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "542f33a8835a0884b006a0c3df3dadd99c0c3f296ed26c2fdc8028e01ad6230c" +checksum = "c48f0051a4b4c5e0b6d365cd04af53aeaa209e3cc15ec2cdb69e73cc87fbd0dc" dependencies = [ "memchr", "regex-automata", @@ -341,9 +341,9 @@ dependencies = [ [[package]] name = "clap" -version = "4.4.8" +version = "4.4.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2275f18819641850fa26c89acc84d465c1bf91ce57bc2748b28c420473352f64" +checksum = "58e54881c004cec7895b0068a0a954cd5d62da01aef83fa35b1e594497bf5445" dependencies = [ "clap_builder", "clap_derive", @@ -351,20 +351,20 @@ dependencies = [ [[package]] name = "clap-help" -version = "1.0.0" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b3a08fe055ca94ba53737ef3c876c5258cfead4162befe5f26b4070e01418cc" +checksum = "b5ca685fc35478f79629023bfd33c6ff80bbb25dfe974dd495521deaa8e3545d" dependencies = [ "clap", - "termimad 0.25.7", + "termimad 0.28.2", "terminal-light", ] [[package]] name = "clap_builder" -version = "4.4.8" +version = "4.4.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07cdf1b148b25c1e1f7a42225e30a0d99a615cd4637eae7365548dd4529b95bc" +checksum = "59cb82d7f531603d2fd1f507441cdd35184fa81beff7bd489570de7f773460bb" dependencies = [ "anstream", "anstyle", @@ -374,9 +374,9 @@ dependencies = [ [[package]] name = "clap_complete" -version = "4.4.4" +version = "4.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bffe91f06a11b4b9420f62103854e90867812cd5d01557f853c5ee8e791b12ae" +checksum = "97aeaa95557bd02f23fbb662f981670c3d20c5a26e69f7354b28f57092437fcd" dependencies = [ "clap", ] @@ -390,7 +390,7 @@ dependencies = [ "heck", "proc-macro2", "quote", - "syn 2.0.39", + "syn 2.0.48", ] [[package]] @@ -401,9 +401,9 @@ checksum = "702fc72eb24e5a1e48ce58027a675bc24edd52096d5397d4aea7c6dd9eca0bd1" [[package]] name = "clap_mangen" -version = "0.2.15" +version = "0.2.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3be86020147691e1d2ef58f75346a3d4d94807bfc473e377d52f09f0f7d77f7" +checksum = "4a7c2b01e5e779c19f46a94bbd398f33ae63b0f78c07108351fb4536845bb7fd" dependencies = [ "clap", "roff", @@ -457,24 +457,18 @@ checksum = "acbf1af155f9b9ef647e42cdc158db4b64a1b61f743629225fde6f3e0be2a7c7" [[package]] name = "coolor" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad6ac2088e244fd157068daf566f17f7b46d5c543273582bc8b2875233bdfb86" - -[[package]] -name = "coolor" -version = "0.8.0" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95ce3e41909f18d5860fe1e6699651fcca2cb2576ee68c6984c93c2b26d059ea" +checksum = "37e93977247fb916abeee1ff8c6594c9b421fd9c26c9b720a3944acb2a7de27b" dependencies = [ "crossterm", ] [[package]] name = "core-foundation-sys" -version = "0.8.4" +version = "0.8.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e496a50fda8aacccc86d7529e2c1e0892dbd0f898a6b5645b5561b89c3210efa" +checksum = "06ea2b9bc92be3c2baa9334a323ebca2d6f074ff852cd1d7b11064035cd3868f" [[package]] name = "crc32fast" @@ -487,34 +481,36 @@ dependencies = [ [[package]] name = "crokey" -version = "0.4.3" +version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2bf153da078e5e4429867d210b984ef96a15a82cf3086f42cb20b58e4f62a980" +checksum = "11650f38fa0dc9fae9b4ac5243c4d32992351f82bb5452c5c1fd7e639057b732" dependencies = [ "crokey-proc_macros", "crossterm", "once_cell", "serde", + "strict 0.2.0", ] [[package]] name = "crokey-proc_macros" -version = "0.4.0" +version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4d4832efaa2189caf3fbcf30a96e1f614503140712f7da8da4032ac1c841ac78" +checksum = "3588f310d39d0c6f546aaca1e9df18d1dfb961a8bb4042a11b6c5a6b449c1894" dependencies = [ + "crossterm", "proc-macro2", "quote", + "strict 0.2.0", "syn 1.0.109", ] [[package]] name = "crossbeam" -version = "0.8.2" +version = "0.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2801af0d36612ae591caa9568261fddce32ce6e08a7275ea334a06a4ad021a2c" +checksum = "1137cd7e7fc0fb5d3c5a8678be38ec56e819125d8d7907411fe24ccb943faca8" dependencies = [ - "cfg-if", "crossbeam-channel", "crossbeam-deque", "crossbeam-epoch", @@ -524,64 +520,54 @@ dependencies = [ [[package]] name = "crossbeam-channel" -version = "0.5.8" +version = "0.5.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a33c2bf77f2df06183c3aa30d1e96c0695a313d4f9c453cc3762a6db39f99200" +checksum = "176dc175b78f56c0f321911d9c8eb2b77a78a4860b9c19db83835fea1a46649b" dependencies = [ - "cfg-if", "crossbeam-utils", ] [[package]] name = "crossbeam-deque" -version = "0.8.3" +version = "0.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce6fd6f855243022dcecf8702fef0c297d4338e226845fe067f6341ad9fa0cef" +checksum = "613f8cc01fe9cf1a3eb3d7f488fd2fa8388403e97039e2f73692932e291a770d" dependencies = [ - "cfg-if", "crossbeam-epoch", "crossbeam-utils", ] [[package]] name = "crossbeam-epoch" -version = "0.9.15" +version = "0.9.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae211234986c545741a7dc064309f67ee1e5ad243d0e48335adc0484d960bcc7" +checksum = "5b82ac4a3c2ca9c3460964f020e1402edd5753411d7737aa39c3714ad1b5420e" dependencies = [ - "autocfg", - "cfg-if", "crossbeam-utils", - "memoffset 0.9.0", - "scopeguard", ] [[package]] name = "crossbeam-queue" -version = "0.3.8" +version = "0.3.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d1cfb3ea8a53f37c40dea2c7bedcbd88bdfae54f5e2175d6ecaff1c988353add" +checksum = "df0346b5d5e76ac2fe4e327c5fd1118d6be7c51dfb18f9b7922923f287471e35" dependencies = [ - "cfg-if", "crossbeam-utils", ] [[package]] name = "crossbeam-utils" -version = "0.8.16" +version = "0.8.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a22b2d63d4d1dc0b7f1b6b2747dd0088008a9be28b6ddf0b1e7d335e3037294" -dependencies = [ - "cfg-if", -] +checksum = "248e3bacc7dc6baa3b21e405ee045c3047101a49145e7e9eca583ab4c2ca5345" [[package]] name = "crossterm" -version = "0.23.2" +version = "0.27.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a2102ea4f781910f8a5b98dd061f4c2023f479ce7bb1236330099ceb5a93cf17" +checksum = "f476fe445d41c9e991fd07515a6f463074b782242ccf4a5b7b1d1012e70824df" dependencies = [ - "bitflags 1.3.2", + "bitflags 2.4.1", "crossterm_winapi", "libc", "mio", @@ -629,9 +615,9 @@ dependencies = [ [[package]] name = "csv2svg" -version = "0.1.12" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "36cfcc52616cdc992e20089a9bc569873c20bb07a1c6aad787c8739bcf46b690" +checksum = "fcb35ac66accacac0a51c7db1aca35c27d86c9d3fd2ec1fb7d080342d57e11ac" dependencies = [ "anyhow", "argh", @@ -656,24 +642,24 @@ checksum = "4f8a51dd197fa6ba5b4dc98a990a43cc13693c23eb0089ebb0fcc1f04152bca6" [[package]] name = "data-url" -version = "0.3.0" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41b319d1b62ffbd002e057f36bebd1f42b9f97927c9577461d855f3513c4289f" +checksum = "5c297a1c74b71ae29df00c3e22dd9534821d60eb9af5a0192823fa2acea70c2a" [[package]] name = "deranged" -version = "0.3.9" +version = "0.3.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f32d04922c60427da6f9fef14d042d9edddef64cb9d4ce0d64d0685fbeb1fd3" +checksum = "b42b6fa04a440b495c8b04d0e71b707c585f83cb9cb28cf8cd0d976c315e31b4" dependencies = [ "powerfmt", ] [[package]] name = "deser-hjson" -version = "2.2.3" +version = "2.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dfde6b5b407ddc1538db11173c85ee8accd9baeebb487e56ccd987bfd1d0b818" +checksum = "7d94aac4095c08ded7e4b9ba7fc2b2929f11b94bb96897ca188b0f64e01688e1" dependencies = [ "serde", ] @@ -739,12 +725,12 @@ checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" [[package]] name = "errno" -version = "0.3.7" +version = "0.3.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f258a7194e7f7c2a7837a8913aeab7fd8c383457034fa20ce4dd3dcb813e8eb8" +checksum = "a258e46cdc063eb8519c00b9fc845fc47bcfca4130e2f08e88665ceda8474245" dependencies = [ "libc", - "windows-sys", + "windows-sys 0.52.0", ] [[package]] @@ -793,9 +779,9 @@ checksum = "25cbce373ec4653f1a01a31e8a5e5ec0c622dc27ff9c4e6606eefef5cbbed4a5" [[package]] name = "fdeflate" -version = "0.3.1" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "64d6dafc854908ff5da46ff3f8f473c6984119a2876a383a860246dd7841a868" +checksum = "209098dd6dfc4445aa6111f0e98653ac323eaa4dfd212c9ca3931bf9955c31bd" dependencies = [ "simd-adler32", ] @@ -862,9 +848,9 @@ dependencies = [ [[package]] name = "form_urlencoded" -version = "1.2.0" +version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a62bc1cf6f830c2ec14a513a9fb124d0a213a629668a4186f329db21fe045652" +checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456" dependencies = [ "percent-encoding", ] @@ -881,9 +867,9 @@ dependencies = [ [[package]] name = "getrandom" -version = "0.2.11" +version = "0.2.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fe9006bed769170c11f845cf00c7c1e9092aeb3f268e007c3e760ac68008070f" +checksum = "190092ea657667030ac6a35e305e62fc4dd69fd98ac98631e5d3a2b1575a12b5" dependencies = [ "cfg-if", "libc", @@ -915,9 +901,9 @@ dependencies = [ [[package]] name = "glassbench" -version = "0.3.6" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fb79ff87dd0dca733c2229746d82c14bb586a025d27e896f98eaeca311b7ee3e" +checksum = "afdba36fcc234421fb6d1e8ab20080a71a72782dd8321f31c3b7edcaaf843579" dependencies = [ "base64 0.13.1", "chrono", @@ -929,7 +915,7 @@ dependencies = [ "serde", "serde_json", "tempfile", - "termimad 0.25.7", + "termimad 0.29.0", "thiserror", ] @@ -959,9 +945,9 @@ dependencies = [ [[package]] name = "hashbrown" -version = "0.14.2" +version = "0.14.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f93e7192158dbcda357bdec5fb5788eebf8bbac027f3f33e719d29135ae84156" +checksum = "290f1a1d9242c78d09ce40a5e87e7554ee637af1351968159f4952f028f75604" [[package]] name = "hashlink" @@ -980,18 +966,18 @@ checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" [[package]] name = "home" -version = "0.5.5" +version = "0.5.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5444c27eef6923071f7ebcc33e3444508466a76f7a2b93da00ed6e19f30c1ddb" +checksum = "e3d1354bf6b7235cb4a0576c2619fd4ed18183f689b12b006a0ee7329eeff9a5" dependencies = [ - "windows-sys", + "windows-sys 0.52.0", ] [[package]] name = "iana-time-zone" -version = "0.1.58" +version = "0.1.59" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8326b86b6cff230b97d0d312a6c40a60726df3332e721f72a1b035f451663b20" +checksum = "b6a67363e2aa4443928ce15e57ebae94fd8949958fd1223c4cfc0cd473ad7539" dependencies = [ "android_system_properties", "core-foundation-sys", @@ -1018,9 +1004,9 @@ checksum = "25a2bc672d1148e28034f176e01fffebb08b35768468cc954630da77a1449005" [[package]] name = "idna" -version = "0.4.0" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d20d6b07bfbc108882d88ed8e37d39636dcc260e15e30c45e6ba089610b917c" +checksum = "634d9b1461af396cad843f47fdba5597a4f9e6ddd4bfb6ff5d85028c25cb12f6" dependencies = [ "unicode-bidi", "unicode-normalization", @@ -1028,9 +1014,9 @@ dependencies = [ [[package]] name = "image" -version = "0.24.7" +version = "0.24.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f3dfdbdd72063086ff443e297b61695500514b1e41095b6fb9a5ab48a70a711" +checksum = "034bbe799d1909622a74d1193aa50147769440040ff36cb2baa947609b0a4e23" dependencies = [ "bytemuck", "byteorder", @@ -1038,7 +1024,6 @@ dependencies = [ "exr", "gif", "jpeg-decoder", - "num-rational", "num-traits", "png", "qoi", @@ -1077,7 +1062,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d530e1a18b1cb4c484e6e34556a0d948706958449fca0cab753d649f2bce3d1f" dependencies = [ "equivalent", - "hashbrown 0.14.2", + "hashbrown 0.14.3", ] [[package]] @@ -1091,9 +1076,9 @@ dependencies = [ [[package]] name = "itoa" -version = "1.0.9" +version = "1.0.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af150ab688ff2122fcef229be89cb50dd66af9e01a4ff320cc137eecc9bacc38" +checksum = "b1a46d1a171d865aa5f83f92695765caa047a9b4cbae2cbf37dbd613a793fd4c" [[package]] name = "jobserver" @@ -1106,18 +1091,18 @@ dependencies = [ [[package]] name = "jpeg-decoder" -version = "0.3.0" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc0000e42512c92e31c2252315bda326620a4e034105e900c98ec492fa077b3e" +checksum = "f5d4a7da358eff58addd2877a45865158f0d78c911d43a5784ceb7bbf52833b0" dependencies = [ "rayon", ] [[package]] name = "js-sys" -version = "0.3.65" +version = "0.3.67" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "54c0c35952f67de54bb584e9fd912b3023117cbafc0a77d8f3dee1fb5f572fe8" +checksum = "9a1d36f1235bc969acba30b7f5990b864423a6068a10f7c90ae8f0112e3a59d1" dependencies = [ "wasm-bindgen", ] @@ -1151,7 +1136,7 @@ dependencies = [ "proc-macro2", "quote", "regex", - "syn 2.0.39", + "syn 2.0.48", ] [[package]] @@ -1179,9 +1164,9 @@ dependencies = [ [[package]] name = "libc" -version = "0.2.150" +version = "0.2.152" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89d92a4743f9a61002fae18374ed11e7973f530cb3a3255fb354818118b2203c" +checksum = "13e3bf6590cbc649f4d1a3eefc9d5d6eb746f5200ffb04e5e142700b8faa56e7" [[package]] name = "libgit2-sys" @@ -1219,9 +1204,9 @@ dependencies = [ [[package]] name = "libz-sys" -version = "1.1.12" +version = "1.1.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d97137b25e321a73eef1418d1d5d2eda4d77e12813f8e6dead84bc52c5870a7b" +checksum = "295c17e837573c8c821dbaeb3cceb3d745ad082f7572191409e69cbc1b3fd050" dependencies = [ "cc", "libc", @@ -1246,9 +1231,9 @@ checksum = "0717cef1bc8b636c6e1c1bbdefc09e6322da8a9321966e8928ef80d20f7f770f" [[package]] name = "linux-raw-sys" -version = "0.4.11" +version = "0.4.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "969488b55f8ac402214f3f5fd243ebb7206cf82de60d3172994707a4bcc2b829" +checksum = "c4cd1a83af159aa67994778be9070f0ae1bd732942279cabb14f86f986a21456" [[package]] name = "lock_api" @@ -1277,9 +1262,9 @@ dependencies = [ [[package]] name = "memchr" -version = "2.6.4" +version = "2.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f665ee40bc4a3c5590afb1e9677db74a508659dfd71e126420da8274909a0167" +checksum = "523dc4f511e55ab87b694dc30d0f820d60906ef06413f93d4d7a1385599cc149" [[package]] name = "memmap2" @@ -1317,15 +1302,6 @@ dependencies = [ "autocfg", ] -[[package]] -name = "memoffset" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a634b1c61a95585bd15607c6ab0c4e5b226e695ff2800ba0cdccddf208c406c" -dependencies = [ - "autocfg", -] - [[package]] name = "minimad" version = "0.13.0" @@ -1347,14 +1323,14 @@ dependencies = [ [[package]] name = "mio" -version = "0.8.9" +version = "0.8.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3dce281c5e46beae905d4de1870d8b1509a9142b62eedf18b443b011ca8343d0" +checksum = "8f3d0b296e374a4e6f3c7b0a1f5a51d748a0d34c85e7dc48fc3fa9a87657fe09" dependencies = [ "libc", "log", "wasi", - "windows-sys", + "windows-sys 0.48.0", ] [[package]] @@ -1388,28 +1364,7 @@ version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ec60c60a693226186f5d6edf073232bfb6464ed97eb22cf3b01c1e8198fd97f5" dependencies = [ - "windows-sys", -] - -[[package]] -name = "num-integer" -version = "0.1.45" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9" -dependencies = [ - "autocfg", - "num-traits", -] - -[[package]] -name = "num-rational" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0638a1c9d0a3c0914158145bc76cff373a75a627e6ecbfb71cbe6f453a5a19b0" -dependencies = [ - "autocfg", - "num-integer", - "num-traits", + "windows-sys 0.48.0", ] [[package]] @@ -1452,9 +1407,9 @@ dependencies = [ [[package]] name = "once_cell" -version = "1.18.0" +version = "1.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd8b5dd2ae5ed71462c540258bedcb51965123ad7e7ccf4b9a8cafaa4a63576d" +checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" [[package]] name = "onig" @@ -1530,9 +1485,9 @@ checksum = "8835116a5c179084a830efb3adc117ab007512b535bc1a21c991d3b32a6b44dd" [[package]] name = "percent-encoding" -version = "2.3.0" +version = "2.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b2a4787296e9989611394c33f193f676704af1686e70b8f8033ab5ba9a35a94" +checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" [[package]] name = "phf" @@ -1564,7 +1519,7 @@ dependencies = [ "phf_shared", "proc-macro2", "quote", - "syn 2.0.39", + "syn 2.0.48", ] [[package]] @@ -1584,9 +1539,9 @@ checksum = "5be167a7af36ee22fe3115051bc51f6e6c7054c9348e28deb4f49bd6f705a315" [[package]] name = "pkg-config" -version = "0.3.27" +version = "0.3.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26072860ba924cbfa98ea39c8c19b4dd6a4a25423dbdf219c1eca91aa0cf6964" +checksum = "69d3587f8a9e599cc7ec2c00e331f71c4e69a5f9a4b8a6efd5b07466b9736f9a" [[package]] name = "plist" @@ -1594,7 +1549,7 @@ version = "1.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e5699cc8a63d1aa2b1ee8e12b9ad70ac790d65788cd36101fa37f87ea46c4cef" dependencies = [ - "base64 0.21.5", + "base64 0.21.7", "indexmap", "line-wrap", "quick-xml", @@ -1604,9 +1559,9 @@ dependencies = [ [[package]] name = "png" -version = "0.17.10" +version = "0.17.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd75bf2d8dd3702b9707cdbc56a5b9ef42cec752eb8b3bafc01234558442aa64" +checksum = "1f6c3c3e617595665b8ea2ff95a86066be38fb121ff920a9c0eb282abcd1da5a" dependencies = [ "bitflags 1.3.2", "crc32fast", @@ -1623,9 +1578,9 @@ checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" [[package]] name = "proc-macro2" -version = "1.0.69" +version = "1.0.76" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "134c189feb4956b20f6f547d2cf727d4c0fe06722b20a0eec87ed445a97f92da" +checksum = "95fc56cda0b5c3325f5fbbd7ff9fda9e02bb00bb3dac51252d2f1bfa1cb8cc8c" dependencies = [ "unicode-ident", ] @@ -1659,9 +1614,9 @@ dependencies = [ [[package]] name = "quote" -version = "1.0.33" +version = "1.0.35" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5267fca4496028628a95160fc423a33e8b2e6af8a5302579e322e4b520293cae" +checksum = "291ec9ab5efd934aaf503a6466c5d5251535d108ee747472c3977cc5acc868ef" dependencies = [ "proc-macro2", ] @@ -1820,15 +1775,15 @@ dependencies = [ [[package]] name = "rustix" -version = "0.38.25" +version = "0.38.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc99bc2d4f1fed22595588a013687477aedf3cdcfb26558c559edb67b4d9b22e" +checksum = "322394588aaf33c24007e8bb3238ee3e4c5c09c084ab32bc73890b99ff326bca" dependencies = [ "bitflags 2.4.1", "errno", "libc", "linux-raw-sys", - "windows-sys", + "windows-sys 0.52.0", ] [[package]] @@ -1849,9 +1804,9 @@ dependencies = [ [[package]] name = "ryu" -version = "1.0.15" +version = "1.0.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ad4cc8da4ef723ed60bced201181d83791ad433213d8c24efffda1eec85d741" +checksum = "f98d2aa92eebf49b69786be48e4477826b256916e84a57ff2a4f21923b48eb4c" [[package]] name = "safemem" @@ -1885,29 +1840,29 @@ dependencies = [ [[package]] name = "serde" -version = "1.0.193" +version = "1.0.195" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "25dd9975e68d0cb5aa1120c288333fc98731bd1dd12f561e468ea4728c042b89" +checksum = "63261df402c67811e9ac6def069e4786148c4563f4b50fd4bf30aa370d626b02" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.193" +version = "1.0.195" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43576ca501357b9b071ac53cdc7da8ef0cbd9493d8df094cd821777ea6e894d3" +checksum = "46fe8f8603d81ba86327b23a2e9cdf49e1255fb94a4c5f297f6ee0547178ea2c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.39", + "syn 2.0.48", ] [[package]] name = "serde_json" -version = "1.0.108" +version = "1.0.111" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d1c7e3eac408d115102c4c24ad393e0821bb3a5df4d506a80f85f7a742a526b" +checksum = "176e46fa42316f18edd598015a5166857fc835ec732f5215eac6b7bdbf0a84f4" dependencies = [ "itoa", "ryu", @@ -1916,9 +1871,9 @@ dependencies = [ [[package]] name = "serde_spanned" -version = "0.6.4" +version = "0.6.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "12022b835073e5b11e90a14f86838ceb1c8fb0325b72416845c487ac0fa95e80" +checksum = "eb3622f419d1296904700073ea6cc23ad690adbd66f13ea683df73298736f0c1" dependencies = [ "serde", ] @@ -1976,18 +1931,18 @@ checksum = "38b58827f4464d87d377d175e90bf58eb00fd8716ff0a62f80356b5e61555d0d" [[package]] name = "slotmap" -version = "1.0.6" +version = "1.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e1e08e261d0e8f5c43123b7adf3e4ca1690d655377ac93a03b2c9d3e98de1342" +checksum = "dbff4acf519f630b3a3ddcfaea6c06b42174d9a44bc70c620e9ed1649d58b82a" dependencies = [ "version_check", ] [[package]] name = "smallvec" -version = "1.11.2" +version = "1.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4dccd0940a2dcdf68d092b8cbab7dc0ad8fa938bf95787e1b916b0e3d0e8e970" +checksum = "2593d31f82ead8df961d8bd23a64c2ccf2eb5dd34b0a34bfb4dd54011c72009e" [[package]] name = "snafu" @@ -2038,6 +1993,12 @@ version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "991af58f8bd0512b0c76abc87f8f6a8a492c314ebcd13189b426c00c95f6f0ee" +[[package]] +name = "strict" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f42444fea5b87a39db4218d9422087e66a85d0e7a0963a439b07bcdf91804006" + [[package]] name = "strict-num" version = "0.1.1" @@ -2082,9 +2043,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.39" +version = "2.0.48" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23e78b90f2fcf45d3e842032ce32e3f2d1545ba6636271dcbf24fa306d87be7a" +checksum = "0f3531638e407dfc0814761abb7c00a5b54992b849452a0646b7f65c9f770f3f" dependencies = [ "proc-macro2", "quote", @@ -2115,26 +2076,26 @@ dependencies = [ [[package]] name = "tempfile" -version = "3.8.1" +version = "3.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ef1adac450ad7f4b3c28589471ade84f25f731a7a0fe30d71dfa9f60fd808e5" +checksum = "01ce4141aa927a6d1bd34a041795abd0db1cccba5d5f24b009f694bdf3a1f3fa" dependencies = [ "cfg-if", "fastrand", "redox_syscall", "rustix", - "windows-sys", + "windows-sys 0.52.0", ] [[package]] name = "termimad" -version = "0.25.7" +version = "0.28.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c1d090fe2d927c784b92ef54daddd9df070c856057715002d484bc7f49ae47d0" +checksum = "b043fcd6def04c40b0ccce109af4107ab7949d2a6824cb5c1971dbfdac4bce20" dependencies = [ - "coolor 0.8.0", + "coolor", + "crokey", "crossbeam", - "crossterm", "lazy-regex", "minimad", "serde", @@ -2144,13 +2105,13 @@ dependencies = [ [[package]] name = "termimad" -version = "0.27.0" +version = "0.29.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d8fd6df3360f61fd890859b94d4a009c2e8dc2d50a6453ad3669fbb0df345f2" +checksum = "2c2c80aaaa313ad8b73018a94b82751b7a78cb3cceadf02cb8cfc9decff3d9b9" dependencies = [ - "coolor 0.8.0", + "coolor", + "crokey", "crossbeam", - "crossterm", "lazy-regex", "minimad", "serde", @@ -2173,11 +2134,11 @@ dependencies = [ [[package]] name = "terminal-light" -version = "1.1.1" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9077b39afb70f12391e4c1fcf46319999cfc32b45d605a668052bc4d1b4511af" +checksum = "b748946b488b3be8a53d90d71692b43e3b2389401a678a2b44a460ea4d295451" dependencies = [ - "coolor 0.5.1", + "coolor", "crossterm", "thiserror", "xterm-query 0.2.0", @@ -2191,29 +2152,29 @@ checksum = "9f6aff13ca3293315b94f6dbd9c69e1c958fe421c294681e2ffda80c9858e36f" [[package]] name = "thiserror" -version = "1.0.50" +version = "1.0.56" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f9a7210f5c9a7156bb50aa36aed4c95afb51df0df00713949448cf9e97d382d2" +checksum = "d54378c645627613241d077a3a79db965db602882668f9136ac42af9ecb730ad" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "1.0.50" +version = "1.0.56" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "266b2e40bc00e5a6c09c3584011e08b06f123c00362c92b975ba9843aaaa14b8" +checksum = "fa0faa943b50f3db30a20aa7e265dbc66076993efed8463e8de414e5d06d3471" dependencies = [ "proc-macro2", "quote", - "syn 2.0.39", + "syn 2.0.48", ] [[package]] name = "tiff" -version = "0.9.0" +version = "0.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d172b0f4d3fba17ba89811858b9d3d97f928aece846475bbda076ca46736211" +checksum = "ba1310fcea54c6a9a4fd1aad794ecc02c31682f6bfbecdf460bf19533eed1e3e" dependencies = [ "flate2", "jpeg-decoder", @@ -2222,9 +2183,9 @@ dependencies = [ [[package]] name = "time" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4a34ab300f2dee6e562c10a046fc05e358b29f9bf92277f30c3c8d82275f6f5" +checksum = "f657ba42c3f86e7680e53c8cd3af8abbe56b5491790b46e22e19c0d57463583e" dependencies = [ "deranged", "itoa", @@ -2242,18 +2203,18 @@ checksum = "ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3" [[package]] name = "time-macros" -version = "0.2.15" +version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ad70d68dba9e1f8aceda7aa6711965dfec1cac869f311a51bd08b3a2ccbce20" +checksum = "26197e33420244aeb70c3e8c78376ca46571bc4e701e4791c2cd9f57dcb3a43f" dependencies = [ "time-core", ] [[package]] name = "tiny-skia" -version = "0.11.2" +version = "0.11.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b72a92a05db376db09fe6d50b7948d106011761c05a6a45e23e17ee9b556222" +checksum = "b6a067b809476893fce6a254cf285850ff69c847e6cfbade6a20b655b6c7e80d" dependencies = [ "arrayref", "arrayvec", @@ -2266,9 +2227,9 @@ dependencies = [ [[package]] name = "tiny-skia-path" -version = "0.11.2" +version = "0.11.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ac3865b9708fc7e1961a65c3a4fa55e984272f33092d3c859929f887fceb647" +checksum = "5de35e8a90052baaaf61f171680ac2f8e925a1e43ea9d2e3a00514772250e541" dependencies = [ "arrayref", "bytemuck", @@ -2326,9 +2287,9 @@ dependencies = [ [[package]] name = "trash" -version = "3.1.2" +version = "3.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8c646008e5144d988005bec12b1e56f5e0a951e957176686815eba8b025e0418" +checksum = "6e7b1a28f9550f43ac27987f2144d7798520c6dee6a7eb1dedfe3131e3c257e3" dependencies = [ "chrono", "libc", @@ -2357,9 +2318,9 @@ dependencies = [ [[package]] name = "unicode-bidi" -version = "0.3.13" +version = "0.3.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "92888ba5573ff080736b3648696b70cafad7d250551175acbaa4e0385b3e1460" +checksum = "6f2528f27a9eb2b21e69c95319b30bd0efd85d09c379741b0f78ea1d86be2416" [[package]] name = "unicode-bidi-mirroring" @@ -2414,9 +2375,9 @@ checksum = "e51733f11c9c4f72aa0c160008246859e340b00807569a0da0e7a1079b27ba85" [[package]] name = "url" -version = "2.4.1" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "143b538f18257fac9cad154828a57c6bf5157e1aa604d4816b5995bf6de87ae5" +checksum = "31e6302e3bb753d46e83516cae55ae196fc0c309407cf11ab35cc51a4c2a4633" dependencies = [ "form_urlencoded", "idna", @@ -2429,7 +2390,7 @@ version = "0.36.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c51daa774fe9ee5efcf7b4fec13019b8119cda764d9a8b5b06df02bb1445c656" dependencies = [ - "base64 0.21.5", + "base64 0.21.7", "log", "pico-args", "usvg-parser", @@ -2530,9 +2491,9 @@ checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" [[package]] name = "wasm-bindgen" -version = "0.2.88" +version = "0.2.90" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7daec296f25a1bae309c0cd5c29c4b260e510e6d813c286b19eaadf409d40fce" +checksum = "b1223296a201415c7fad14792dbefaace9bd52b62d33453ade1c5b5f07555406" dependencies = [ "cfg-if", "wasm-bindgen-macro", @@ -2540,24 +2501,24 @@ dependencies = [ [[package]] name = "wasm-bindgen-backend" -version = "0.2.88" +version = "0.2.90" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e397f4664c0e4e428e8313a469aaa58310d302159845980fd23b0f22a847f217" +checksum = "fcdc935b63408d58a32f8cc9738a0bffd8f05cc7c002086c6ef20b7312ad9dcd" dependencies = [ "bumpalo", "log", "once_cell", "proc-macro2", "quote", - "syn 2.0.39", + "syn 2.0.48", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-macro" -version = "0.2.88" +version = "0.2.90" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5961017b3b08ad5f3fe39f1e79877f8ee7c23c5e5fd5eb80de95abc41f1f16b2" +checksum = "3e4c238561b2d428924c49815533a8b9121c664599558a5d9ec51f8a1740a999" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -2565,22 +2526,22 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.88" +version = "0.2.90" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c5353b8dab669f5e10f5bd76df26a9360c748f054f862ff5f3f8aae0c7fb3907" +checksum = "bae1abb6806dc1ad9e560ed242107c0f6c84335f1749dd4e8ddb012ebd5e25a7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.39", + "syn 2.0.48", "wasm-bindgen-backend", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-shared" -version = "0.2.88" +version = "0.2.90" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d046c5d029ba91a1ed14da14dca44b68bf2f124cfbaf741c54151fdb3e0750b" +checksum = "4d91413b1c31d7539ba5ef2451af3f0b833a005eb27a631cec32bc0635a8602b" [[package]] name = "weezl" @@ -2651,11 +2612,11 @@ dependencies = [ [[package]] name = "windows-core" -version = "0.51.1" +version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1f8cf84f35d2db49a46868f947758c7a1138116f7fac3bc844f43ade1292e64" +checksum = "33ab640c8d7e35bf8ba19b884ba838ceb4fba93a4e8c65a9059d08afcfc683d9" dependencies = [ - "windows-targets 0.48.5", + "windows-targets 0.52.0", ] [[package]] @@ -2667,6 +2628,15 @@ dependencies = [ "windows-targets 0.48.5", ] +[[package]] +name = "windows-sys" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" +dependencies = [ + "windows-targets 0.52.0", +] + [[package]] name = "windows-targets" version = "0.42.2" @@ -2697,6 +2667,21 @@ dependencies = [ "windows_x86_64_msvc 0.48.5", ] +[[package]] +name = "windows-targets" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a18201040b24831fbb9e4eb208f8892e1f50a37feb53cc7ff887feb8f50e7cd" +dependencies = [ + "windows_aarch64_gnullvm 0.52.0", + "windows_aarch64_msvc 0.52.0", + "windows_i686_gnu 0.52.0", + "windows_i686_msvc 0.52.0", + "windows_x86_64_gnu 0.52.0", + "windows_x86_64_gnullvm 0.52.0", + "windows_x86_64_msvc 0.52.0", +] + [[package]] name = "windows_aarch64_gnullvm" version = "0.42.2" @@ -2709,6 +2694,12 @@ version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cb7764e35d4db8a7921e09562a0304bf2f93e0a51bfccee0bd0bb0b666b015ea" + [[package]] name = "windows_aarch64_msvc" version = "0.42.2" @@ -2721,6 +2712,12 @@ version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" +[[package]] +name = "windows_aarch64_msvc" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbaa0368d4f1d2aaefc55b6fcfee13f41544ddf36801e793edbbfd7d7df075ef" + [[package]] name = "windows_i686_gnu" version = "0.42.2" @@ -2733,6 +2730,12 @@ version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" +[[package]] +name = "windows_i686_gnu" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a28637cb1fa3560a16915793afb20081aba2c92ee8af57b4d5f28e4b3e7df313" + [[package]] name = "windows_i686_msvc" version = "0.42.2" @@ -2745,6 +2748,12 @@ version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" +[[package]] +name = "windows_i686_msvc" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ffe5e8e31046ce6230cc7215707b816e339ff4d4d67c65dffa206fd0f7aa7b9a" + [[package]] name = "windows_x86_64_gnu" version = "0.42.2" @@ -2757,6 +2766,12 @@ version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" +[[package]] +name = "windows_x86_64_gnu" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d6fa32db2bc4a2f5abeacf2b69f7992cd09dca97498da74a151a3132c26befd" + [[package]] name = "windows_x86_64_gnullvm" version = "0.42.2" @@ -2769,6 +2784,12 @@ version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a657e1e9d3f514745a572a6846d3c7aa7dbe1658c056ed9c3344c4109a6949e" + [[package]] name = "windows_x86_64_msvc" version = "0.42.2" @@ -2781,11 +2802,17 @@ version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" +[[package]] +name = "windows_x86_64_msvc" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dff9641d1cd4be8d1a070daf9e3773c5f67e78b4d9d42263020c057706765c04" + [[package]] name = "winnow" -version = "0.5.19" +version = "0.5.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "829846f3e3db426d4cee4510841b71a8e58aa2a76b1132579487ae430ccd9c7b" +checksum = "b7cf47b659b318dccbd69cc4797a39ae128f533dce7902a1096044d1967b9c16" dependencies = [ "memchr", ] @@ -2880,7 +2907,7 @@ checksum = "9ce1b18ccd8e73a9321186f97e46f9f04b778851177567b1975109d26a08d2a6" dependencies = [ "proc-macro2", "quote", - "syn 2.0.39", + "syn 2.0.48", ] [[package]] diff --git a/Cargo.toml b/Cargo.toml index 9a99454..d77ae58 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -28,9 +28,9 @@ bet = "1.0.2" char_reader = "0.1" chrono = "0.4" clap = { version = "4.4", features = ["derive", "cargo"] } -clap-help = "1.0" +clap-help = "1.1" cli-log = "2.0" -crokey = "0.4.3" +crokey = "0.6.3" crossbeam = "0.8" custom_error = "1.6" deser-hjson = "2.2.3" @@ -58,9 +58,9 @@ splitty = "1.0" strict = "0.1.4" syntect = { package = "syntect-no-panic", version = "4.6.1" } # see issue #485 tempfile = "3.2" -termimad = "0.27.0" +termimad = "0.29.0" terminal-clipboard = { version = "0.4.1", optional = true } -terminal-light = "1.1.1" +terminal-light = "1.2.0" toml = "0.8" trash = "3.1.2" umask = "2.1.0" @@ -69,7 +69,7 @@ which = "4.4.0" xterm-query = { version = "0.1", optional = true } [dev-dependencies] -glassbench = "0.3.6" +glassbench = "0.4" [target.'cfg(unix)'.dependencies] lfs-core = "0.11.0" @@ -107,22 +107,22 @@ harness = false [patch.crates-io] # bet = { path = "../bet" } -# crokey = { path = "../crokey" } -# clap-help = { path = "../clap-help" } # cli-log = { path = "../cli-log" } -# csv2svg = { path = "../csv2svg" } # crossterm = { path = "../crossterm-rs/crossterm" } +# csv2svg = { path = "../csv2svg" } # deser-hjson = { path = "../deser-hjson" } # glassbench = { path = "../glassbench" } -# lazy-regex = { path = "../lazy-regex" } -# lazy-regex-proc_macros = { path = "../lazy-regex/src/proc_macros" } # lfs-core = { path = "../lfs-core" } +# minimad = { path = "../minimad" } # secular = { path = "../secular", features=["normalization"] } -# strict = { path = "../strict" } # syntect = { path = "../syntect" } # syntect-no-panic = { path = "../syntect" } -# minimad = { path = "../minimad" } # termimad = { path = "../termimad" } -# terminal-light = { path = "../terminal-light" } # terminal-clipboard = { path = "../terminal-clipboard" } +# terminal-light = { path = "../terminal-light" } # umask = { path = "../umask" } +# clap-help = { path = "../clap-help" } +# crokey = { path = "../crokey" } +# lazy-regex = { path = "../lazy-regex" } +# lazy-regex-proc_macros = { path = "../lazy-regex/src/proc_macros" } +# strict = { path = "../strict" } diff --git a/compile-all-targets.sh b/compile-all-targets.sh index 17fcf8e..cd460cd 100755 --- a/compile-all-targets.sh +++ b/compile-all-targets.sh @@ -66,7 +66,7 @@ cp "target/release/$NAME" build/x86_64-linux/ # (they're built as part of the normal compilation by build.rs) echo -e "${H2}Copying completion scripts${EH}" mkdir build/completion -cp "$(broot -c "rp/release\/build\/broot-[^\/]+\/out\/broot.bash;:parent;:pp" target)/"* build/completion +cp "$(broot -c 'rp/release\/build\/broot-[^\/]+\/out\/broot.bash;:parent;:pp' target)/"* build/completion echo " Done" # copy the default conf diff --git a/resources/default-conf/conf.hjson b/resources/default-conf/conf.hjson index c87523b..b5f1b3d 100644 --- a/resources/default-conf/conf.hjson +++ b/resources/default-conf/conf.hjson @@ -195,6 +195,17 @@ content_search_max_file_size: 10MB # # update_work_dir: false +############################################################### +# Kitty Keyboard extension +# +# If you want to use advanced keyboard shortcuts in Kitty +# compatible terminals (Kitty, Wezterm), set this to true. +# +# This makes it possible to use shortcuts like 'space-n', +# 'ctrl-alt-a-b', 'shift-space', etc. +# +enable_kitty_keyboard: false + ############################################################### # Imports # diff --git a/src/app/app.rs b/src/app/app.rs index 8b7dc06..998afa4 100644 --- a/src/app/app.rs +++ b/src/app/app.rs @@ -47,7 +47,7 @@ use { }, }, strict::NonEmptyVec, - termimad::EventSource, + termimad::{EventSource, EventSourceOptions}, }; /// The GUI @@ -772,7 +772,17 @@ impl App { } // we listen for events in a separate thread so that we can go on listening // when a long search is running, and interrupt it if needed - let event_source = EventSource::new()?; + w.flush()?; + let combine_keys = conf.enable_kitty_keyboard.unwrap_or(false) && con.is_tty; + let event_source = EventSource::with_options( + EventSourceOptions { + combine_keys, + ..Default::default() + } + )?; + con.keyboard_enhanced = event_source.supports_multi_key_combinations(); + info!("event source is combining: {}", event_source.supports_multi_key_combinations()); + let rx_events = event_source.receiver(); let mut dam = Dam::from(rx_events); let skin = AppSkin::new(conf, con.launch_args.color == TriBool::No); @@ -834,7 +844,10 @@ impl App { #[allow(unused_mut)] match dam.next(&self.rx_seqs) { Either::First(Some(event)) => { - info!("event: {:?}", &event); + //info!("event: {:?}", &event); + if let Some(key_combination) = event.key_combination { + info!("key combination: {}", key_combination); + } let mut handled = false; // app level handling @@ -900,7 +913,6 @@ impl App { } } } - Ok(self.launch_at_end.take()) } } diff --git a/src/app/app_context.rs b/src/app/app_context.rs index 86a0887..8b56db4 100644 --- a/src/app/app_context.rs +++ b/src/app/app_context.rs @@ -15,6 +15,7 @@ use { tree::TreeOptions, verb::*, }, + crokey::crossterm::tty::IsTty, std::{ convert::{TryFrom, TryInto}, io, @@ -26,6 +27,9 @@ use { /// for the whole life of the App pub struct AppContext { + /// Whether the application is running in a normal TTY context + pub is_tty: bool, + /// The initial tree root pub initial_root: PathBuf, @@ -108,6 +112,12 @@ pub struct AppContext { /// whether to sync broot's work dir with the current panel's root pub update_work_dir: bool, + + /// Whether Kitty keyboard enhancement flags are pushed, so that + /// we know whether we need to temporarily disable them during + /// the execution of a terminal program. + /// This is determined by app::run on launching the event source. + pub keyboard_enhanced: bool, } impl AppContext { @@ -116,6 +126,7 @@ impl AppContext { verb_store: VerbStore, config: &Conf, ) -> Result { + let is_tty = std::io::stdout().is_tty(); let config_default_args = config .default_flags .as_ref() @@ -178,6 +189,7 @@ impl AppContext { let terminal_title_pattern = config.terminal_title.clone(); Ok(Self { + is_tty, initial_root, initial_file, initial_tree_options, @@ -203,6 +215,7 @@ impl AppContext { content_search_max_file_size, terminal_title_pattern, update_work_dir: config.update_work_dir.unwrap_or(true), + keyboard_enhanced: false, }) } /// Return the --cmd argument, coming from the launch arguments (prefered) diff --git a/src/app/panel_state.rs b/src/app/panel_state.rs index efb9a30..dfa97d9 100644 --- a/src/app/panel_state.rs +++ b/src/app/panel_state.rs @@ -944,7 +944,6 @@ pub trait PanelState { has_previous_state: bool, width: usize, ) -> Status { - info!("get_status cc.cmd={:?}", &cc.cmd); match &cc.cmd { Command::PatternEdit { .. } => self.no_verb_status(has_previous_state, cc.app.con, width), Command::VerbEdit(invocation) | Command::VerbTrigger { input_invocation: Some(invocation), .. } => { diff --git a/src/command/completion.rs b/src/command/completion.rs index f6c5640..e43e658 100644 --- a/src/command/completion.rs +++ b/src/command/completion.rs @@ -241,7 +241,6 @@ impl Completions { con: &AppContext, sel_info: SelInfo<'_>, ) -> Self { - info!("Looking for completions"); match &parts.verb_invocation { Some(invocation) if !invocation.is_empty() => { match &invocation.args { diff --git a/src/command/panel_input.rs b/src/command/panel_input.rs index 46f4042..ca31053 100644 --- a/src/command/panel_input.rs +++ b/src/command/panel_input.rs @@ -8,12 +8,11 @@ use { skin::PanelSkin, verb::*, }, - crokey::key, + crokey::{key, KeyCombination}, crokey::crossterm::{ cursor, event::{ Event, - KeyEvent, KeyModifiers, MouseButton, MouseEvent, @@ -85,11 +84,17 @@ impl PanelInput { mode: Mode, panel_state_type: PanelStateType, ) -> Result { - let cmd = match timed_event.event { - Event::Mouse(MouseEvent { kind, column, row, modifiers: KeyModifiers::NONE }) => { + let cmd = match timed_event { + TimedEvent { + event: Event::Mouse(MouseEvent { kind, column, row, modifiers: KeyModifiers::NONE }), + .. + } => { self.on_mouse(timed_event, kind, column, row) } - Event::Key(key) => { + TimedEvent { + key_combination: Some(key), + .. + } => { self.on_key(timed_event, key, con, sel_info, app_state, mode, panel_state_type) } _ => Command::None, @@ -171,10 +176,10 @@ impl PanelInput { /// should be added to the input fn enter_input_mode_with_key( &mut self, - key: KeyEvent, + key: KeyCombination, parts: &CommandParts, ) { - if let Some(c) = crokey::as_letter(key) { + if let Some(c) = key.as_letter() { let add = match c { // '/' if !parts.raw_pattern.is_empty() => true, ' ' if parts.verb_invocation.is_none() => true, @@ -240,7 +245,6 @@ impl PanelInput { &parts }; let completions = Completions::for_input(completable_parts, con, sel_info); - info!(" -> completions: {:?}", &completions); let added = match completions { Completions::None => { debug!("nothing to complete!"); @@ -276,7 +280,7 @@ impl PanelInput { fn find_key_verb<'c>( &mut self, - key: KeyEvent, + key: KeyCombination, con: &'c AppContext, sel_info: SelInfo<'_>, panel_state_type: PanelStateType, @@ -313,7 +317,7 @@ impl PanelInput { column: u16, row: u16, ) -> Command { - if self.input_field.apply_timed_event(timed_event) { + if self.input_field.apply_timed_event(&timed_event) { Command::empty() } else { match kind { @@ -343,7 +347,7 @@ impl PanelInput { fn is_key_allowed_for_verb( &self, - key: KeyEvent, + key: KeyCombination, mode: Mode, ) -> bool { match mode { @@ -361,7 +365,7 @@ impl PanelInput { fn on_key( &mut self, timed_event: TimedEvent, - key: KeyEvent, + key: KeyCombination, con: &AppContext, sel_info: SelInfo<'_>, app_state: &AppState, @@ -455,7 +459,7 @@ impl PanelInput { } // input field management - if mode == Mode::Input && self.input_field.apply_timed_event(timed_event) { + if mode == Mode::Input && self.input_field.apply_timed_event(&timed_event) { return Command::from_raw(self.input_field.get_content(), false); } Command::None diff --git a/src/conf/conf.rs b/src/conf/conf.rs index 7abfeb6..983058d 100644 --- a/src/conf/conf.rs +++ b/src/conf/conf.rs @@ -119,6 +119,9 @@ pub struct Conf { #[serde(alias="update-work-dir")] pub update_work_dir: Option, + #[serde(alias="enable-keyboard-enhancements")] + pub enable_kitty_keyboard: Option, + // BEWARE: entries added here won't be usable unless also // added in read_file! } @@ -204,6 +207,7 @@ impl Conf { overwrite!(self, content_search_max_file_size, conf); overwrite!(self, terminal_title, conf); overwrite!(self, update_work_dir, conf); + overwrite!(self, enable_kitty_keyboard, conf); self.verbs.append(&mut conf.verbs); // the following maps are "additive": we can add entries from several // config files and they still make sense diff --git a/src/keys.rs b/src/keys.rs index 5a97b20..976a548 100644 --- a/src/keys.rs +++ b/src/keys.rs @@ -2,24 +2,27 @@ use { crokey::*, crossterm::event::{ KeyCode, - KeyEvent, KeyModifiers, }, once_cell::sync::Lazy, }; -pub static KEY_FORMAT: Lazy = Lazy::new(|| { - KeyEventFormat::default().with_lowercase_modifiers() +pub static KEY_FORMAT: Lazy = Lazy::new(|| { + KeyCombinationFormat::default().with_lowercase_modifiers() }); -pub fn is_reserved(key: KeyEvent) -> bool { +pub fn is_reserved(key: KeyCombination) -> bool { key == key!(backspace) || key == key!(delete) || key == key!(esc) } +/// Tell whether the key can only be used as a shortcut key if the +/// modal mode is active. pub fn is_key_only_modal( - key: KeyEvent, + key: KeyCombination, ) -> bool { - matches!(key, KeyEvent { code: KeyCode::Char(_), modifiers: KeyModifiers::NONE }) - || matches!(key, KeyEvent { code: KeyCode::Char(_), modifiers: KeyModifiers::SHIFT }) + matches!(key, KeyCombination { + codes: OneToThree::One(KeyCode::Char(_)), + modifiers: KeyModifiers::NONE | KeyModifiers::SHIFT, + }) } diff --git a/src/launchable.rs b/src/launchable.rs index 5ee270a..26c4194 100644 --- a/src/launchable.rs +++ b/src/launchable.rs @@ -55,6 +55,7 @@ pub enum Launchable { working_dir: Option, switch_terminal: bool, capture_mouse: bool, + keyboard_enhanced: bool, }, /// open a path @@ -125,6 +126,7 @@ impl Launchable { working_dir, switch_terminal, capture_mouse: con.capture_mouse, + keyboard_enhanced: con.keyboard_enhanced, }), None => Err(io::Error::new(io::ErrorKind::Other, "Empty launch string")), } @@ -149,14 +151,18 @@ impl Launchable { exe, args, capture_mouse, + keyboard_enhanced, } => { debug!("working_dir: {working_dir:?}"); - debug!("switch_terminal: {working_dir:?}"); + debug!("switch_terminal: {switch_terminal:?}"); if *switch_terminal { // we restore the normal terminal in case the executable // is a terminal application, and we'll switch back to // broot's alternate terminal when we're back to broot if let Some(ref mut w) = &mut w { + if *keyboard_enhanced { + crokey::pop_keyboard_enhancement_flags()?; + } w.queue(cursor::Show).unwrap(); w.queue(LeaveAlternateScreen).unwrap(); if *capture_mouse { @@ -188,6 +194,9 @@ impl Launchable { w.queue(EnterAlternateScreen).unwrap(); w.queue(cursor::Hide).unwrap(); w.flush().unwrap(); + if *keyboard_enhanced { + crokey::push_keyboard_enhancement_flags()?; + } } } if let Some(old_working_dir) = old_working_dir { diff --git a/src/verb/internal_focus.rs b/src/verb/internal_focus.rs index 8f2f129..eaa939b 100644 --- a/src/verb/internal_focus.rs +++ b/src/verb/internal_focus.rs @@ -185,12 +185,6 @@ pub fn on_internal( ) -> CmdResult { let con = &cc.app.con; let screen = cc.app.screen; - info!( - "internal_focus.on_internal internal_exec={:?} input_invocation={:?} trygger_type={:?}", - internal_exec, - input_invocation, - trigger_type, - ); let bang = input_invocation .map(|inv| inv.bang) .unwrap_or(internal_exec.bang); diff --git a/src/verb/internal_select.rs b/src/verb/internal_select.rs index 4dd195b..43db6ee 100644 --- a/src/verb/internal_select.rs +++ b/src/verb/internal_select.rs @@ -134,7 +134,7 @@ pub fn on_path( screen: Screen, in_new_panel: bool, ) -> CmdResult { - info!("executing :select on path {:?}", &path); + debug!("executing :select on path {:?}", &path); if in_new_panel { warn!("bang in :select isn't supported yet"); } diff --git a/src/verb/verb.rs b/src/verb/verb.rs index 332649d..a96e0da 100644 --- a/src/verb/verb.rs +++ b/src/verb/verb.rs @@ -5,7 +5,9 @@ use { errors::ConfError, path::PathAnchor, }, - crokey::crossterm::event::KeyEvent, + crokey::{ + KeyCombination, + }, std::{ cmp::PartialEq, path::PathBuf, @@ -40,7 +42,7 @@ pub struct Verb { pub names: Vec, /// key shortcuts - pub keys: Vec, + pub keys: Vec, /// how the input must be checked and interpreted /// Can be empty if the verb is only called with a key shortcut. @@ -128,11 +130,11 @@ impl Verb { panels: Vec::new(), }) } - pub fn with_key(&mut self, key: KeyEvent) -> &mut Self { + pub fn with_key(&mut self, key: KeyCombination) -> &mut Self { self.keys.push(key); self } - pub fn add_keys(&mut self, keys: Vec) { + pub fn add_keys(&mut self, keys: Vec) { for key in keys { self.keys.push(key); } diff --git a/website/docs/conf_file.md b/website/docs/conf_file.md index 0af8dbd..015084c 100644 --- a/website/docs/conf_file.md +++ b/website/docs/conf_file.md @@ -273,6 +273,25 @@ terminal_title = "{file} 🐄" # Miscellaneous +## Disable keyboard enhancements + +By default, ANSI terminals make a lot of keyboard combinations impossible, for example spacen, or altab, or shiftspace, etc. +Some terminals implement [Kitty's keyboard protocol](https://sw.kovidgoyal.net/kitty/keyboard-protocol/) and basically make it possible to bind verbs to such combinations. + +Broot tests whether the terminal supports those enhancements, and if it's the case, tries to enable them. + +A small downside is that broot will react on key release instead of key press (so that you may press other keys before you release the first one), which may feel less instant. If the Kitty protocol isn't supported by your terminal, broot will react on key press. +Another problem is that it may push you towards key combinations that you wouldn't be able to reuse when switching terminal. +And finally, some terminals have buggy implementations (at time of writing). + +To enable those keyboard enhancements (and make it impossible for broot to detect multi non-modifier keys combinations), change this setting to true + +```Hjson +enable_kitty_keyboard: true +``` +```TOML +enable_kitty_keyboard = true +``` ## Maximal number of files added by a :stage_all_files command -- cgit v1.2.3