├── fmt.sh ├── doc └── screen.png ├── .gitignore ├── rustfmt.toml ├── version.sh ├── Cargo.toml ├── src ├── args.rs └── main.rs ├── release.sh ├── README.md ├── compile-all-targets.sh └── Cargo.lock /fmt.sh: -------------------------------------------------------------------------------- 1 | cargo +nightly fmt 2 | -------------------------------------------------------------------------------- /doc/screen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Canop/print_key/HEAD/doc/screen.png -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | /deploy.sh 2 | /build 3 | /target 4 | /releases 5 | /*.zip 6 | .bacon-locations 7 | -------------------------------------------------------------------------------- /rustfmt.toml: -------------------------------------------------------------------------------- 1 | edition = "2021" 2 | version = "Two" 3 | imports_granularity = "one" 4 | imports_layout = "Vertical" 5 | fn_params_layout = "Vertical" 6 | -------------------------------------------------------------------------------- /version.sh: -------------------------------------------------------------------------------- 1 | # extract the version from the Cargo.toml file 2 | version=$(sed 's/^version = "\([^\"]*\)"/\1/;t;d' Cargo.toml | head -1) 3 | 4 | echo "$version" 5 | -------------------------------------------------------------------------------- /Cargo.toml: -------------------------------------------------------------------------------- 1 | [package] 2 | name = "print_key" 3 | version = "2.2.0" 4 | repository = "https://github.com/Canop/print_key" 5 | authors = ["dystroy "] 6 | edition = "2021" 7 | description = "Print the key combination you type" 8 | license = "MIT" 9 | readme = "README.md" 10 | categories = ["command-line-utilities"] 11 | 12 | [dependencies] 13 | clap = { version = "4.4", features = ["derive"] } 14 | crokey = "1.3" 15 | 16 | [patch.crates-io] 17 | # crokey = { path = "../crokey" } 18 | -------------------------------------------------------------------------------- /src/args.rs: -------------------------------------------------------------------------------- 1 | use clap::{ 2 | Parser, 3 | ValueEnum, 4 | }; 5 | 6 | /// Launch arguments 7 | #[derive(Debug, Parser)] 8 | #[command(author, about, version)] 9 | pub struct Args { 10 | #[arg(long, value_enum, default_value_t=Mode::default())] 11 | pub mode: Mode, 12 | } 13 | 14 | #[derive(Copy, Clone, Debug, Default, PartialEq, Eq, PartialOrd, Ord, ValueEnum)] 15 | pub enum Mode { 16 | /// Compatible with all ANSI terminals (so about any terminal) 17 | Ansi, 18 | 19 | /// Combine keys with modifiers, like Ctrl-Alt-b or Space-g, 20 | /// if the terminal supports the Kitty Keyboard Protocol 21 | #[default] 22 | Kitty, 23 | 24 | /// Combine keys with modifiers, like Ctrl-Alt-b or Space-g, 25 | /// but also without, like a-b-c. 26 | KittyMultiSimples, 27 | } 28 | -------------------------------------------------------------------------------- /release.sh: -------------------------------------------------------------------------------- 1 | # build a new release of lfs for distribution 2 | # 3 | # WARNING: this is not intented for normal usage but 4 | # for the official release. It involves a heavy tool 5 | # chain running on linux. 6 | # 7 | # For your own usage, you should rather do 8 | # 9 | # cargo install --path . 10 | # 11 | # or 12 | # 13 | # cargo build --release 14 | # 15 | version=$(./version.sh) 16 | APP=print_key 17 | 18 | echo "Building release $version" 19 | 20 | # clean previous build 21 | rm -rf build 22 | mkdir build 23 | 24 | # compile all targets 25 | ./compile-all-targets.sh 26 | 27 | # add the readme and changelog in the build directory 28 | echo "This is $APP. More info and installation instructions on https://github.com/Canop/$APP" > build/README.md 29 | # cp CHANGELOG.md build 30 | 31 | # prepare the release archive 32 | rm "${APP}_*.zip" 33 | zip -r "${APP}_$version.zip" build/* 34 | 35 | # copy it to releases folder 36 | mkdir releases 37 | cp "${APP}_$version.zip" releases 38 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | [![Latest Version][s1]][l1] [![Chat on Miaou][s2]][l2] 2 | 3 | [s1]: https://img.shields.io/crates/v/print_key.svg 4 | [l1]: https://crates.io/crates/print_key 5 | 6 | [s2]: https://miaou.dystroy.org/static/shields/room.svg 7 | [l2]: https://miaou.dystroy.org/3768?rust 8 | 9 | Your OS and your terminal intercept many key combinations, and hide the modifiers of some. 10 | This makes defining keybindings for terminal applications often challenging. 11 | 12 | **print_key** helps you determine the available key combinations for terminal applications, and how those terminal applications receive them. 13 | 14 | ![Slava Ukraini](doc/screen.png) 15 | 16 | Key combinations are printed the way they can be written in key binding configurations of programs such as [broot](https://dystroy.org/broot) or [bacon](https://dystroy.org/bacon). 17 | 18 | This serialized format can be parsed by the [crokey](https://github.com/Canop/crokey) Rust library. 19 | 20 | Precompiled binaries are available at [https://dystroy.org/print_key/download](https://dystroy.org/print_key/download). 21 | -------------------------------------------------------------------------------- /compile-all-targets.sh: -------------------------------------------------------------------------------- 1 | # WARNING: This script is NOT meant for normal installation, it's dedicated 2 | # to the compilation of all supported targets, from a linux machine. 3 | # This is a long process and it involves specialized toolchains. 4 | # For usual compilation do 5 | # cargo build --release 6 | 7 | H1="\n\e[30;104;1m\e[2K\n\e[A" # style first header 8 | H2="\n\e[30;104m\e[1K\n\e[A" # style second header 9 | EH="\e[00m\n\e[2K" # end header 10 | APP="print_key" 11 | 12 | version=$(./version.sh) 13 | echo -e "${H1}Compilation of all targets for $APP $version${EH}" 14 | 15 | # clean previous build 16 | rm -rf build 17 | mkdir build 18 | echo " build cleaned" 19 | 20 | # build the linux version 21 | target="x86_64-linux" 22 | echo -e "${H2}Compiling the linux version - $target${EH}" 23 | cargo build --release 24 | mkdir "build/$target/" 25 | cp target/release/$APP "build/$target/" 26 | 27 | # build versions for other platforms using cargo cross 28 | cross_build() { 29 | cargo clean 30 | name="$1" 31 | target="$2" 32 | app_ext="$3" 33 | echo -e "${H2}Compiling the $name / $target version${EH}" 34 | cross build --target "$target" --release 35 | mkdir "build/$target" 36 | cp "target/$target/release/${APP}${app_ext}" "build/$target/" 37 | } 38 | cross_build "Raspberry 32" "armv7-unknown-linux-gnueabihf" 39 | cross_build "MUSL" "x86_64-unknown-linux-musl" 40 | cross_build "Windows" "x86_64-pc-windows-gnu" ".exe" 41 | 42 | echo -e "${H1}Compilations done${EH}" 43 | -------------------------------------------------------------------------------- /src/main.rs: -------------------------------------------------------------------------------- 1 | mod args; 2 | 3 | use { 4 | args::*, 5 | clap::Parser, 6 | crokey::*, 7 | crossterm::{ 8 | event::{ 9 | read, 10 | Event, 11 | }, 12 | style::Stylize, 13 | terminal, 14 | }, 15 | }; 16 | 17 | pub fn main() { 18 | let args = Args::parse(); 19 | let fmt = KeyCombinationFormat::default(); 20 | println!( 21 | "Many terminal applications let you define key bindings but it's hard to know which ones are available." 22 | ); 23 | println!( 24 | "This program shows you the key combinations that can be used in a program running in this terminal." 25 | ); 26 | let mut combiner = Combiner::default(); 27 | match args.mode { 28 | Mode::Ansi => { 29 | println!("You chose the ANSI mode."); 30 | } 31 | Mode::Kitty => { 32 | println!("You chose the Kitty mode."); 33 | if combiner.enable_combining().unwrap() { 34 | combiner.set_mandate_modifier_for_multiple_keys(true); 35 | println!( 36 | "Combinations with several simple keys are possible as soon as there's at least one modifier key." 37 | ); 38 | } else { 39 | println!("But it's not supported by your terminal."); 40 | } 41 | } 42 | Mode::KittyMultiSimples => { 43 | println!("You chose the KittyMultiSimples mode."); 44 | if combiner.enable_combining().unwrap() { 45 | combiner.set_mandate_modifier_for_multiple_keys(false); 46 | println!( 47 | "Combinations with several simple keys are possible even without modifiers." 48 | ); 49 | } else { 50 | println!("But it's not supported by your terminal."); 51 | } 52 | } 53 | } 54 | if !combiner.is_combining() { 55 | println!("Combinations will be reduced to one simple key with optional modifiers"); 56 | } 57 | println!("Type any key combination."); 58 | loop { 59 | terminal::enable_raw_mode().unwrap(); 60 | let e = read(); 61 | terminal::disable_raw_mode().unwrap(); 62 | match e { 63 | Ok(Event::Key(key_event)) => { 64 | let Some(key_combination) = combiner.transform(key_event) else { 65 | continue; 66 | }; 67 | let key = fmt.to_string(key_combination); 68 | match key_combination { 69 | key!(ctrl - c) => { 70 | println!("You killed me with a {}", key.red()); 71 | break; 72 | } 73 | key!(ctrl - q) => { 74 | println!("You typed {} which gracefully quits", key.green()); 75 | break; 76 | } 77 | key!('?') | key!(shift - '?') => { 78 | println!("You typed {} but there's no help in this app", key.yellow()); 79 | } 80 | _ => { 81 | println!("You typed {}", key.blue()); 82 | } 83 | } 84 | } 85 | e => { 86 | // any other event, for example a resize, we quit 87 | eprintln!("Quitting on {:?}", e); 88 | break; 89 | } 90 | } 91 | } 92 | } 93 | -------------------------------------------------------------------------------- /Cargo.lock: -------------------------------------------------------------------------------- 1 | # This file is automatically @generated by Cargo. 2 | # It is not intended for manual editing. 3 | version = 4 4 | 5 | [[package]] 6 | name = "anstream" 7 | version = "0.6.11" 8 | source = "registry+https://github.com/rust-lang/crates.io-index" 9 | checksum = "6e2e1ebcb11de5c03c67de28a7df593d32191b44939c482e97702baaaa6ab6a5" 10 | dependencies = [ 11 | "anstyle", 12 | "anstyle-parse", 13 | "anstyle-query", 14 | "anstyle-wincon", 15 | "colorchoice", 16 | "utf8parse", 17 | ] 18 | 19 | [[package]] 20 | name = "anstyle" 21 | version = "1.0.4" 22 | source = "registry+https://github.com/rust-lang/crates.io-index" 23 | checksum = "7079075b41f533b8c61d2a4d073c4676e1f8b249ff94a393b0595db304e0dd87" 24 | 25 | [[package]] 26 | name = "anstyle-parse" 27 | version = "0.2.3" 28 | source = "registry+https://github.com/rust-lang/crates.io-index" 29 | checksum = "c75ac65da39e5fe5ab759307499ddad880d724eed2f6ce5b5e8a26f4f387928c" 30 | dependencies = [ 31 | "utf8parse", 32 | ] 33 | 34 | [[package]] 35 | name = "anstyle-query" 36 | version = "1.0.2" 37 | source = "registry+https://github.com/rust-lang/crates.io-index" 38 | checksum = "e28923312444cdd728e4738b3f9c9cac739500909bb3d3c94b43551b16517648" 39 | dependencies = [ 40 | "windows-sys 0.52.0", 41 | ] 42 | 43 | [[package]] 44 | name = "anstyle-wincon" 45 | version = "3.0.2" 46 | source = "registry+https://github.com/rust-lang/crates.io-index" 47 | checksum = "1cd54b81ec8d6180e24654d0b371ad22fc3dd083b6ff8ba325b72e00c87660a7" 48 | dependencies = [ 49 | "anstyle", 50 | "windows-sys 0.52.0", 51 | ] 52 | 53 | [[package]] 54 | name = "autocfg" 55 | version = "1.1.0" 56 | source = "registry+https://github.com/rust-lang/crates.io-index" 57 | checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" 58 | 59 | [[package]] 60 | name = "bitflags" 61 | version = "1.3.2" 62 | source = "registry+https://github.com/rust-lang/crates.io-index" 63 | checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" 64 | 65 | [[package]] 66 | name = "bitflags" 67 | version = "2.9.3" 68 | source = "registry+https://github.com/rust-lang/crates.io-index" 69 | checksum = "34efbcccd345379ca2868b2b2c9d3782e9cc58ba87bc7d79d5b53d9c9ae6f25d" 70 | 71 | [[package]] 72 | name = "cfg-if" 73 | version = "1.0.0" 74 | source = "registry+https://github.com/rust-lang/crates.io-index" 75 | checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" 76 | 77 | [[package]] 78 | name = "clap" 79 | version = "4.4.18" 80 | source = "registry+https://github.com/rust-lang/crates.io-index" 81 | checksum = "1e578d6ec4194633722ccf9544794b71b1385c3c027efe0c55db226fc880865c" 82 | dependencies = [ 83 | "clap_builder", 84 | "clap_derive", 85 | ] 86 | 87 | [[package]] 88 | name = "clap_builder" 89 | version = "4.4.18" 90 | source = "registry+https://github.com/rust-lang/crates.io-index" 91 | checksum = "4df4df40ec50c46000231c914968278b1eb05098cf8f1b3a518a95030e71d1c7" 92 | dependencies = [ 93 | "anstream", 94 | "anstyle", 95 | "clap_lex", 96 | "strsim", 97 | ] 98 | 99 | [[package]] 100 | name = "clap_derive" 101 | version = "4.4.7" 102 | source = "registry+https://github.com/rust-lang/crates.io-index" 103 | checksum = "cf9804afaaf59a91e75b022a30fb7229a7901f60c755489cc61c9b423b836442" 104 | dependencies = [ 105 | "heck", 106 | "proc-macro2", 107 | "quote", 108 | "syn", 109 | ] 110 | 111 | [[package]] 112 | name = "clap_lex" 113 | version = "0.6.0" 114 | source = "registry+https://github.com/rust-lang/crates.io-index" 115 | checksum = "702fc72eb24e5a1e48ce58027a675bc24edd52096d5397d4aea7c6dd9eca0bd1" 116 | 117 | [[package]] 118 | name = "colorchoice" 119 | version = "1.0.0" 120 | source = "registry+https://github.com/rust-lang/crates.io-index" 121 | checksum = "acbf1af155f9b9ef647e42cdc158db4b64a1b61f743629225fde6f3e0be2a7c7" 122 | 123 | [[package]] 124 | name = "convert_case" 125 | version = "0.7.1" 126 | source = "registry+https://github.com/rust-lang/crates.io-index" 127 | checksum = "bb402b8d4c85569410425650ce3eddc7d698ed96d39a73f941b08fb63082f1e7" 128 | dependencies = [ 129 | "unicode-segmentation", 130 | ] 131 | 132 | [[package]] 133 | name = "crokey" 134 | version = "1.3.0" 135 | source = "registry+https://github.com/rust-lang/crates.io-index" 136 | checksum = "51360853ebbeb3df20c76c82aecf43d387a62860f1a59ba65ab51f00eea85aad" 137 | dependencies = [ 138 | "crokey-proc_macros", 139 | "crossterm", 140 | "once_cell", 141 | "serde", 142 | "strict", 143 | ] 144 | 145 | [[package]] 146 | name = "crokey-proc_macros" 147 | version = "1.3.0" 148 | source = "registry+https://github.com/rust-lang/crates.io-index" 149 | checksum = "3bf1a727caeb5ee5e0a0826a97f205a9cf84ee964b0b48239fef5214a00ae439" 150 | dependencies = [ 151 | "crossterm", 152 | "proc-macro2", 153 | "quote", 154 | "strict", 155 | "syn", 156 | ] 157 | 158 | [[package]] 159 | name = "crossterm" 160 | version = "0.29.0" 161 | source = "registry+https://github.com/rust-lang/crates.io-index" 162 | checksum = "d8b9f2e4c67f833b660cdb0a3523065869fb35570177239812ed4c905aeff87b" 163 | dependencies = [ 164 | "bitflags 2.9.3", 165 | "crossterm_winapi", 166 | "derive_more", 167 | "document-features", 168 | "mio", 169 | "parking_lot", 170 | "rustix", 171 | "signal-hook", 172 | "signal-hook-mio", 173 | "winapi", 174 | ] 175 | 176 | [[package]] 177 | name = "crossterm_winapi" 178 | version = "0.9.1" 179 | source = "registry+https://github.com/rust-lang/crates.io-index" 180 | checksum = "acdd7c62a3665c7f6830a51635d9ac9b23ed385797f70a83bb8bafe9c572ab2b" 181 | dependencies = [ 182 | "winapi", 183 | ] 184 | 185 | [[package]] 186 | name = "derive_more" 187 | version = "2.0.1" 188 | source = "registry+https://github.com/rust-lang/crates.io-index" 189 | checksum = "093242cf7570c207c83073cf82f79706fe7b8317e98620a47d5be7c3d8497678" 190 | dependencies = [ 191 | "derive_more-impl", 192 | ] 193 | 194 | [[package]] 195 | name = "derive_more-impl" 196 | version = "2.0.1" 197 | source = "registry+https://github.com/rust-lang/crates.io-index" 198 | checksum = "bda628edc44c4bb645fbe0f758797143e4e07926f7ebf4e9bdfbd3d2ce621df3" 199 | dependencies = [ 200 | "convert_case", 201 | "proc-macro2", 202 | "quote", 203 | "syn", 204 | ] 205 | 206 | [[package]] 207 | name = "document-features" 208 | version = "0.2.11" 209 | source = "registry+https://github.com/rust-lang/crates.io-index" 210 | checksum = "95249b50c6c185bee49034bcb378a49dc2b5dff0be90ff6616d31d64febab05d" 211 | dependencies = [ 212 | "litrs", 213 | ] 214 | 215 | [[package]] 216 | name = "errno" 217 | version = "0.3.13" 218 | source = "registry+https://github.com/rust-lang/crates.io-index" 219 | checksum = "778e2ac28f6c47af28e4907f13ffd1e1ddbd400980a9abd7c8df189bf578a5ad" 220 | dependencies = [ 221 | "libc", 222 | "windows-sys 0.52.0", 223 | ] 224 | 225 | [[package]] 226 | name = "heck" 227 | version = "0.4.1" 228 | source = "registry+https://github.com/rust-lang/crates.io-index" 229 | checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" 230 | 231 | [[package]] 232 | name = "libc" 233 | version = "0.2.175" 234 | source = "registry+https://github.com/rust-lang/crates.io-index" 235 | checksum = "6a82ae493e598baaea5209805c49bbf2ea7de956d50d7da0da1164f9c6d28543" 236 | 237 | [[package]] 238 | name = "linux-raw-sys" 239 | version = "0.9.4" 240 | source = "registry+https://github.com/rust-lang/crates.io-index" 241 | checksum = "cd945864f07fe9f5371a27ad7b52a172b4b499999f1d97574c9fa68373937e12" 242 | 243 | [[package]] 244 | name = "litrs" 245 | version = "0.4.2" 246 | source = "registry+https://github.com/rust-lang/crates.io-index" 247 | checksum = "f5e54036fe321fd421e10d732f155734c4e4afd610dd556d9a82833ab3ee0bed" 248 | 249 | [[package]] 250 | name = "lock_api" 251 | version = "0.4.11" 252 | source = "registry+https://github.com/rust-lang/crates.io-index" 253 | checksum = "3c168f8615b12bc01f9c17e2eb0cc07dcae1940121185446edc3744920e8ef45" 254 | dependencies = [ 255 | "autocfg", 256 | "scopeguard", 257 | ] 258 | 259 | [[package]] 260 | name = "log" 261 | version = "0.4.20" 262 | source = "registry+https://github.com/rust-lang/crates.io-index" 263 | checksum = "b5e6163cb8c49088c2c36f57875e58ccd8c87c7427f7fbd50ea6710b2f3f2e8f" 264 | 265 | [[package]] 266 | name = "mio" 267 | version = "1.0.4" 268 | source = "registry+https://github.com/rust-lang/crates.io-index" 269 | checksum = "78bed444cc8a2160f01cbcf811ef18cac863ad68ae8ca62092e8db51d51c761c" 270 | dependencies = [ 271 | "libc", 272 | "log", 273 | "wasi", 274 | "windows-sys 0.59.0", 275 | ] 276 | 277 | [[package]] 278 | name = "once_cell" 279 | version = "1.19.0" 280 | source = "registry+https://github.com/rust-lang/crates.io-index" 281 | checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" 282 | 283 | [[package]] 284 | name = "parking_lot" 285 | version = "0.12.1" 286 | source = "registry+https://github.com/rust-lang/crates.io-index" 287 | checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f" 288 | dependencies = [ 289 | "lock_api", 290 | "parking_lot_core", 291 | ] 292 | 293 | [[package]] 294 | name = "parking_lot_core" 295 | version = "0.9.9" 296 | source = "registry+https://github.com/rust-lang/crates.io-index" 297 | checksum = "4c42a9226546d68acdd9c0a280d17ce19bfe27a46bf68784e4066115788d008e" 298 | dependencies = [ 299 | "cfg-if", 300 | "libc", 301 | "redox_syscall", 302 | "smallvec", 303 | "windows-targets 0.48.5", 304 | ] 305 | 306 | [[package]] 307 | name = "print_key" 308 | version = "2.2.0" 309 | dependencies = [ 310 | "clap", 311 | "crokey", 312 | ] 313 | 314 | [[package]] 315 | name = "proc-macro2" 316 | version = "1.0.76" 317 | source = "registry+https://github.com/rust-lang/crates.io-index" 318 | checksum = "95fc56cda0b5c3325f5fbbd7ff9fda9e02bb00bb3dac51252d2f1bfa1cb8cc8c" 319 | dependencies = [ 320 | "unicode-ident", 321 | ] 322 | 323 | [[package]] 324 | name = "quote" 325 | version = "1.0.35" 326 | source = "registry+https://github.com/rust-lang/crates.io-index" 327 | checksum = "291ec9ab5efd934aaf503a6466c5d5251535d108ee747472c3977cc5acc868ef" 328 | dependencies = [ 329 | "proc-macro2", 330 | ] 331 | 332 | [[package]] 333 | name = "redox_syscall" 334 | version = "0.4.1" 335 | source = "registry+https://github.com/rust-lang/crates.io-index" 336 | checksum = "4722d768eff46b75989dd134e5c353f0d6296e5aaa3132e776cbdb56be7731aa" 337 | dependencies = [ 338 | "bitflags 1.3.2", 339 | ] 340 | 341 | [[package]] 342 | name = "rustix" 343 | version = "1.0.8" 344 | source = "registry+https://github.com/rust-lang/crates.io-index" 345 | checksum = "11181fbabf243db407ef8df94a6ce0b2f9a733bd8be4ad02b4eda9602296cac8" 346 | dependencies = [ 347 | "bitflags 2.9.3", 348 | "errno", 349 | "libc", 350 | "linux-raw-sys", 351 | "windows-sys 0.52.0", 352 | ] 353 | 354 | [[package]] 355 | name = "scopeguard" 356 | version = "1.2.0" 357 | source = "registry+https://github.com/rust-lang/crates.io-index" 358 | checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" 359 | 360 | [[package]] 361 | name = "serde" 362 | version = "1.0.195" 363 | source = "registry+https://github.com/rust-lang/crates.io-index" 364 | checksum = "63261df402c67811e9ac6def069e4786148c4563f4b50fd4bf30aa370d626b02" 365 | dependencies = [ 366 | "serde_derive", 367 | ] 368 | 369 | [[package]] 370 | name = "serde_derive" 371 | version = "1.0.195" 372 | source = "registry+https://github.com/rust-lang/crates.io-index" 373 | checksum = "46fe8f8603d81ba86327b23a2e9cdf49e1255fb94a4c5f297f6ee0547178ea2c" 374 | dependencies = [ 375 | "proc-macro2", 376 | "quote", 377 | "syn", 378 | ] 379 | 380 | [[package]] 381 | name = "signal-hook" 382 | version = "0.3.17" 383 | source = "registry+https://github.com/rust-lang/crates.io-index" 384 | checksum = "8621587d4798caf8eb44879d42e56b9a93ea5dcd315a6487c357130095b62801" 385 | dependencies = [ 386 | "libc", 387 | "signal-hook-registry", 388 | ] 389 | 390 | [[package]] 391 | name = "signal-hook-mio" 392 | version = "0.2.4" 393 | source = "registry+https://github.com/rust-lang/crates.io-index" 394 | checksum = "34db1a06d485c9142248b7a054f034b349b212551f3dfd19c94d45a754a217cd" 395 | dependencies = [ 396 | "libc", 397 | "mio", 398 | "signal-hook", 399 | ] 400 | 401 | [[package]] 402 | name = "signal-hook-registry" 403 | version = "1.4.1" 404 | source = "registry+https://github.com/rust-lang/crates.io-index" 405 | checksum = "d8229b473baa5980ac72ef434c4415e70c4b5e71b423043adb4ba059f89c99a1" 406 | dependencies = [ 407 | "libc", 408 | ] 409 | 410 | [[package]] 411 | name = "smallvec" 412 | version = "1.12.0" 413 | source = "registry+https://github.com/rust-lang/crates.io-index" 414 | checksum = "2593d31f82ead8df961d8bd23a64c2ccf2eb5dd34b0a34bfb4dd54011c72009e" 415 | 416 | [[package]] 417 | name = "strict" 418 | version = "0.2.0" 419 | source = "registry+https://github.com/rust-lang/crates.io-index" 420 | checksum = "f42444fea5b87a39db4218d9422087e66a85d0e7a0963a439b07bcdf91804006" 421 | 422 | [[package]] 423 | name = "strsim" 424 | version = "0.10.0" 425 | source = "registry+https://github.com/rust-lang/crates.io-index" 426 | checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623" 427 | 428 | [[package]] 429 | name = "syn" 430 | version = "2.0.48" 431 | source = "registry+https://github.com/rust-lang/crates.io-index" 432 | checksum = "0f3531638e407dfc0814761abb7c00a5b54992b849452a0646b7f65c9f770f3f" 433 | dependencies = [ 434 | "proc-macro2", 435 | "quote", 436 | "unicode-ident", 437 | ] 438 | 439 | [[package]] 440 | name = "unicode-ident" 441 | version = "1.0.12" 442 | source = "registry+https://github.com/rust-lang/crates.io-index" 443 | checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" 444 | 445 | [[package]] 446 | name = "unicode-segmentation" 447 | version = "1.12.0" 448 | source = "registry+https://github.com/rust-lang/crates.io-index" 449 | checksum = "f6ccf251212114b54433ec949fd6a7841275f9ada20dddd2f29e9ceea4501493" 450 | 451 | [[package]] 452 | name = "utf8parse" 453 | version = "0.2.1" 454 | source = "registry+https://github.com/rust-lang/crates.io-index" 455 | checksum = "711b9620af191e0cdc7468a8d14e709c3dcdb115b36f838e601583af800a370a" 456 | 457 | [[package]] 458 | name = "wasi" 459 | version = "0.11.0+wasi-snapshot-preview1" 460 | source = "registry+https://github.com/rust-lang/crates.io-index" 461 | checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" 462 | 463 | [[package]] 464 | name = "winapi" 465 | version = "0.3.9" 466 | source = "registry+https://github.com/rust-lang/crates.io-index" 467 | checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" 468 | dependencies = [ 469 | "winapi-i686-pc-windows-gnu", 470 | "winapi-x86_64-pc-windows-gnu", 471 | ] 472 | 473 | [[package]] 474 | name = "winapi-i686-pc-windows-gnu" 475 | version = "0.4.0" 476 | source = "registry+https://github.com/rust-lang/crates.io-index" 477 | checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" 478 | 479 | [[package]] 480 | name = "winapi-x86_64-pc-windows-gnu" 481 | version = "0.4.0" 482 | source = "registry+https://github.com/rust-lang/crates.io-index" 483 | checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" 484 | 485 | [[package]] 486 | name = "windows-sys" 487 | version = "0.52.0" 488 | source = "registry+https://github.com/rust-lang/crates.io-index" 489 | checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" 490 | dependencies = [ 491 | "windows-targets 0.52.6", 492 | ] 493 | 494 | [[package]] 495 | name = "windows-sys" 496 | version = "0.59.0" 497 | source = "registry+https://github.com/rust-lang/crates.io-index" 498 | checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b" 499 | dependencies = [ 500 | "windows-targets 0.52.6", 501 | ] 502 | 503 | [[package]] 504 | name = "windows-targets" 505 | version = "0.48.5" 506 | source = "registry+https://github.com/rust-lang/crates.io-index" 507 | checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" 508 | dependencies = [ 509 | "windows_aarch64_gnullvm 0.48.5", 510 | "windows_aarch64_msvc 0.48.5", 511 | "windows_i686_gnu 0.48.5", 512 | "windows_i686_msvc 0.48.5", 513 | "windows_x86_64_gnu 0.48.5", 514 | "windows_x86_64_gnullvm 0.48.5", 515 | "windows_x86_64_msvc 0.48.5", 516 | ] 517 | 518 | [[package]] 519 | name = "windows-targets" 520 | version = "0.52.6" 521 | source = "registry+https://github.com/rust-lang/crates.io-index" 522 | checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" 523 | dependencies = [ 524 | "windows_aarch64_gnullvm 0.52.6", 525 | "windows_aarch64_msvc 0.52.6", 526 | "windows_i686_gnu 0.52.6", 527 | "windows_i686_gnullvm", 528 | "windows_i686_msvc 0.52.6", 529 | "windows_x86_64_gnu 0.52.6", 530 | "windows_x86_64_gnullvm 0.52.6", 531 | "windows_x86_64_msvc 0.52.6", 532 | ] 533 | 534 | [[package]] 535 | name = "windows_aarch64_gnullvm" 536 | version = "0.48.5" 537 | source = "registry+https://github.com/rust-lang/crates.io-index" 538 | checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" 539 | 540 | [[package]] 541 | name = "windows_aarch64_gnullvm" 542 | version = "0.52.6" 543 | source = "registry+https://github.com/rust-lang/crates.io-index" 544 | checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" 545 | 546 | [[package]] 547 | name = "windows_aarch64_msvc" 548 | version = "0.48.5" 549 | source = "registry+https://github.com/rust-lang/crates.io-index" 550 | checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" 551 | 552 | [[package]] 553 | name = "windows_aarch64_msvc" 554 | version = "0.52.6" 555 | source = "registry+https://github.com/rust-lang/crates.io-index" 556 | checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" 557 | 558 | [[package]] 559 | name = "windows_i686_gnu" 560 | version = "0.48.5" 561 | source = "registry+https://github.com/rust-lang/crates.io-index" 562 | checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" 563 | 564 | [[package]] 565 | name = "windows_i686_gnu" 566 | version = "0.52.6" 567 | source = "registry+https://github.com/rust-lang/crates.io-index" 568 | checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" 569 | 570 | [[package]] 571 | name = "windows_i686_gnullvm" 572 | version = "0.52.6" 573 | source = "registry+https://github.com/rust-lang/crates.io-index" 574 | checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" 575 | 576 | [[package]] 577 | name = "windows_i686_msvc" 578 | version = "0.48.5" 579 | source = "registry+https://github.com/rust-lang/crates.io-index" 580 | checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" 581 | 582 | [[package]] 583 | name = "windows_i686_msvc" 584 | version = "0.52.6" 585 | source = "registry+https://github.com/rust-lang/crates.io-index" 586 | checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" 587 | 588 | [[package]] 589 | name = "windows_x86_64_gnu" 590 | version = "0.48.5" 591 | source = "registry+https://github.com/rust-lang/crates.io-index" 592 | checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" 593 | 594 | [[package]] 595 | name = "windows_x86_64_gnu" 596 | version = "0.52.6" 597 | source = "registry+https://github.com/rust-lang/crates.io-index" 598 | checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" 599 | 600 | [[package]] 601 | name = "windows_x86_64_gnullvm" 602 | version = "0.48.5" 603 | source = "registry+https://github.com/rust-lang/crates.io-index" 604 | checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" 605 | 606 | [[package]] 607 | name = "windows_x86_64_gnullvm" 608 | version = "0.52.6" 609 | source = "registry+https://github.com/rust-lang/crates.io-index" 610 | checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" 611 | 612 | [[package]] 613 | name = "windows_x86_64_msvc" 614 | version = "0.48.5" 615 | source = "registry+https://github.com/rust-lang/crates.io-index" 616 | checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" 617 | 618 | [[package]] 619 | name = "windows_x86_64_msvc" 620 | version = "0.52.6" 621 | source = "registry+https://github.com/rust-lang/crates.io-index" 622 | checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" 623 | --------------------------------------------------------------------------------