├── .gitignore ├── .github └── workflows │ └── release-please.yml ├── LICENSE ├── Cargo.toml ├── src ├── predicate_based_selector.rs ├── command_context.rs ├── nu_item.rs ├── command_collector.rs ├── main.rs └── cli_arguments.rs ├── README.md ├── CHANGELOG.md └── Cargo.lock /.gitignore: -------------------------------------------------------------------------------- 1 | # Generated by Cargo 2 | # will have compiled files and executables 3 | debug/ 4 | target/ 5 | 6 | # Remove Cargo.lock from gitignore if creating an executable, leave it for libraries 7 | # More information here https://doc.rust-lang.org/cargo/guide/cargo-toml-vs-cargo-lock.html 8 | # Cargo.lock 9 | 10 | # These are backup files generated by rustfmt 11 | **/*.rs.bk 12 | 13 | # MSVC Windows builds of rustc generate these, which store debugging information 14 | *.pdb 15 | 16 | # Generated by `cargo generate` for the nu plugin template 17 | .DS_Store 18 | -------------------------------------------------------------------------------- /.github/workflows/release-please.yml: -------------------------------------------------------------------------------- 1 | on: 2 | push: 3 | branches: 4 | - main 5 | 6 | permissions: 7 | contents: write 8 | pull-requests: write 9 | 10 | name: release-please 11 | 12 | jobs: 13 | release-please: 14 | runs-on: ubuntu-latest 15 | steps: 16 | - uses: googleapis/release-please-action@v4 17 | with: 18 | token: ${{ secrets.GITHUB_TOKEN }} 19 | # this is a built-in strategy in release-please, see "Action Inputs" 20 | # for more options 21 | release-type: rust 22 | target-branch: main 23 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2024 Idan Arye 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /Cargo.toml: -------------------------------------------------------------------------------- 1 | [package] 2 | name = "nu_plugin_skim" 3 | version = "0.21.0" 4 | authors = ["Idan Arye "] 5 | edition = "2021" 6 | description = "An `sk` command that can handle Nushell's structured data" 7 | repository = "https://github.com/idanarye/nu_plugin_skim" 8 | readme = "README.md" 9 | keywords = ["nu", "plugin", "fuzzy", "menu", "util"] 10 | categories = ["command-line-utilities", "development-tools", "value-formatting"] 11 | license = "MIT" 12 | 13 | # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html 14 | 15 | [dependencies] 16 | # for local development, you can use a path dependency 17 | # nu-plugin = { path = "../nushell/crates/nu-plugin" } 18 | # nu-protocol = { path = "../nushell/crates/nu-protocol", features = ["plugin"] } 19 | nu-plugin = "0.109" 20 | nu-protocol = { version = "0.109", features = ["plugin"] } 21 | #nu-table = "0.99" 22 | skim = { version = "0.20" } 23 | nu-color-config = "0.109" 24 | clap = "4" 25 | shlex = "1" 26 | 27 | [dev-dependencies] 28 | # nu-plugin-test-support = { path = "../nushell/crates/nu-plugin-test-support" } 29 | nu-plugin-test-support = { version = "0.109" } 30 | -------------------------------------------------------------------------------- /src/predicate_based_selector.rs: -------------------------------------------------------------------------------- 1 | use nu_plugin::EngineInterface; 2 | use nu_protocol::{engine::Closure, PipelineData, Spanned}; 3 | use skim::prelude::*; 4 | 5 | use crate::nu_item::NuItem; 6 | 7 | pub struct PredicateBasedSelector { 8 | pub engine: EngineInterface, 9 | pub predicate: Spanned, 10 | } 11 | 12 | impl Selector for PredicateBasedSelector { 13 | fn should_select(&self, _index: usize, item: &dyn SkimItem) -> bool { 14 | let Some(nu_item) = item.as_any().downcast_ref::() else { 15 | return false; 16 | }; 17 | let Ok(result) = self.engine.eval_closure_with_stream( 18 | &self.predicate, 19 | vec![], 20 | PipelineData::Value(nu_item.value.clone(), None), 21 | true, 22 | true, 23 | ) else { 24 | return false; 25 | }; 26 | match result { 27 | PipelineData::Value(value, _) => value.is_true(), 28 | _ => false, 29 | } 30 | } 31 | } 32 | 33 | pub struct CombinedSelector(pub DefaultSkimSelector, pub PredicateBasedSelector); 34 | 35 | impl Selector for CombinedSelector { 36 | fn should_select(&self, index: usize, item: &dyn SkimItem) -> bool { 37 | self.0.should_select(index, item) || self.1.should_select(index, item) 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /src/command_context.rs: -------------------------------------------------------------------------------- 1 | use std::{borrow::Cow, sync::Arc}; 2 | 3 | use nu_plugin::EngineInterface; 4 | use nu_protocol::{ 5 | engine::Closure, IntoSpanned, LabeledError, PipelineData, ShellError, Spanned, Value, 6 | }; 7 | 8 | pub struct CommandContext { 9 | pub engine: EngineInterface, 10 | pub nu_config: Arc, 11 | pub format: MapperFlag, 12 | pub preview: MapperFlag, 13 | } 14 | 15 | impl CommandContext { 16 | #[allow(clippy::result_large_err)] 17 | pub fn new(engine: &EngineInterface) -> Result { 18 | Ok(Self { 19 | engine: engine.clone(), 20 | nu_config: engine.get_config()?.clone(), 21 | format: MapperFlag::None, 22 | preview: MapperFlag::None, 23 | }) 24 | } 25 | } 26 | 27 | pub enum MapperFlag { 28 | None, 29 | Closure(Spanned), 30 | } 31 | 32 | impl TryFrom for MapperFlag { 33 | type Error = LabeledError; 34 | 35 | fn try_from(value: Value) -> Result { 36 | match value { 37 | Value::Closure { val, internal_span, .. } => { 38 | Ok(Self::Closure((*val).into_spanned(internal_span))) 39 | } 40 | _ => Err(ShellError::CantConvert { 41 | to_type: "closure".to_owned(), 42 | from_type: value.get_type().to_string(), 43 | span: value.span(), 44 | help: None, 45 | } 46 | .into()), 47 | } 48 | } 49 | } 50 | 51 | impl MapperFlag { 52 | pub fn map<'a>(&self, context: &CommandContext, value: &'a Value) -> Cow<'a, Value> { 53 | match self { 54 | MapperFlag::None => Cow::Borrowed(value), 55 | MapperFlag::Closure(closure) => Cow::Owned( 56 | match context.engine.eval_closure_with_stream( 57 | closure, 58 | vec![], 59 | PipelineData::Value(value.clone(), None), 60 | true, 61 | true, 62 | ) { 63 | Ok(PipelineData::Empty) => Value::nothing(closure.span), 64 | Ok(PipelineData::Value(value, _)) => value, 65 | Ok(PipelineData::ListStream(list_stream, _)) => { 66 | let span = list_stream.span(); 67 | list_stream.into_value().unwrap_or_else(|err| Value::error(err, span)) 68 | }, 69 | Ok(PipelineData::ByteStream(byte_stream, _)) => { 70 | let span = byte_stream.span(); 71 | match byte_stream.into_string() { 72 | Ok(ok) => Value::string(ok, closure.span), 73 | Err(err) => Value::error(err, span), 74 | } 75 | } 76 | Err(err) => Value::error(err, closure.span), 77 | }, 78 | ), 79 | } 80 | } 81 | } 82 | -------------------------------------------------------------------------------- /src/nu_item.rs: -------------------------------------------------------------------------------- 1 | use nu_plugin::EvaluatedCall; 2 | use nu_protocol::{IntoSpanned, PipelineData, ShellError, Span, Value}; 3 | use skim::prelude::*; 4 | 5 | use crate::command_context::CommandContext; 6 | 7 | pub struct NuItem { 8 | pub index: usize, 9 | pub context: Arc, 10 | pub value: Value, 11 | pub display: AnsiString<'static>, 12 | } 13 | 14 | impl NuItem { 15 | pub fn new(index: usize, context: Arc, value: Value) -> Self { 16 | let display = AnsiString::parse( 17 | &context 18 | .format 19 | .map(&context, &value) 20 | .to_expanded_string(", ", &context.nu_config), 21 | ); 22 | Self { 23 | index, 24 | context, 25 | value, 26 | display, 27 | } 28 | } 29 | } 30 | 31 | impl SkimItem for NuItem { 32 | fn text(&self) -> Cow<'_, str> { 33 | self.display.stripped().to_owned().into() 34 | } 35 | 36 | fn display<'a>(&'a self, context: DisplayContext<'a>) -> AnsiString<'a> { 37 | // Ensure highlight visibility identical to skim: build from DisplayContext. 38 | // This uses skim's theme (including --color) for both current and matched segments. 39 | context.into() 40 | } 41 | 42 | fn preview(&self, context: PreviewContext) -> ItemPreview { 43 | let preview_result = self.context.preview.map(&self.context, &self.value); 44 | if let Ok(preview_result) = preview_result.coerce_string() { 45 | return ItemPreview::AnsiText(preview_result); 46 | } 47 | let result = self 48 | .context 49 | .engine 50 | .find_decl("table") 51 | .and_then(|table_decl| { 52 | let table_decl = table_decl.ok_or_else(|| ShellError::GenericError { 53 | error: "`table` decl is empty".to_owned(), 54 | msg: "`table` decl is empty".to_owned(), 55 | span: None, 56 | help: None, 57 | inner: vec![], 58 | })?; 59 | let as_table = self.context.engine.call_decl( 60 | table_decl, 61 | // TODO: get the actual span 62 | EvaluatedCall::new(Span::unknown()).with_named( 63 | "width".into_spanned(Span::unknown()), 64 | Value::int(context.width as i64, Span::unknown()), 65 | ), 66 | PipelineData::Value((*preview_result).clone(), None), 67 | true, 68 | false, 69 | )?; 70 | let as_table_text = as_table.collect_string("\n", &self.context.nu_config)?; 71 | Ok(as_table_text) 72 | }); 73 | match result { 74 | Ok(text) => ItemPreview::AnsiText(text), 75 | Err(err) => ItemPreview::AnsiText(err.to_string()), 76 | } 77 | } 78 | 79 | fn get_index(&self) -> usize { 80 | self.index 81 | } 82 | 83 | fn set_index(&mut self, index: usize) { 84 | self.index = index; 85 | } 86 | } 87 | -------------------------------------------------------------------------------- /src/command_collector.rs: -------------------------------------------------------------------------------- 1 | use std::sync::Arc; 2 | 3 | use nu_protocol::{engine::Closure, PipelineData, Span, Spanned, Value}; 4 | use skim::reader::CommandCollector; 5 | use skim::{prelude::unbounded, SkimItem}; 6 | 7 | use crate::{command_context::CommandContext, nu_item::NuItem}; 8 | 9 | pub struct NuCommandCollector { 10 | pub context: Arc, 11 | pub closure: Spanned, 12 | } 13 | 14 | impl CommandCollector for NuCommandCollector { 15 | fn invoke( 16 | &mut self, 17 | cmd: &str, // not really the command - actually the query string 18 | components_to_stop: std::sync::Arc, 19 | ) -> (skim::SkimItemReceiver, skim::prelude::Sender) { 20 | let (tx, rx) = unbounded::>(); 21 | let (tx_interrupt, rx_interrupt) = unbounded(); 22 | let context = self.context.clone(); 23 | let closure = self.closure.clone(); 24 | let cmd = cmd.to_owned(); 25 | std::thread::spawn(move || { 26 | components_to_stop.fetch_add(1, std::sync::atomic::Ordering::SeqCst); 27 | 28 | match context.engine.eval_closure_with_stream( 29 | &closure, 30 | vec![Value::string(cmd, Span::unknown())], 31 | PipelineData::Empty, 32 | true, 33 | true, 34 | ) { 35 | Ok(PipelineData::ByteStream(stream, _)) => { 36 | let span = stream.span(); 37 | if let Some(lines) = stream.lines() { 38 | for (index, line) in lines.enumerate() { 39 | if rx_interrupt.try_recv().is_ok() { 40 | break; 41 | } 42 | let send_result = match line { 43 | Ok(line) => tx.try_send(Arc::new(NuItem::new( 44 | index, 45 | context.clone(), 46 | Value::string(line, span), 47 | ))), 48 | Err(err) => tx.try_send(Arc::new(NuItem::new( 49 | index, 50 | context.clone(), 51 | Value::error(err, span), 52 | ))), 53 | }; 54 | if send_result.is_err() { 55 | break; 56 | } 57 | } 58 | } 59 | } 60 | Ok(stream) => { 61 | for (index, value) in stream.into_iter().enumerate() { 62 | if rx_interrupt.try_recv().is_ok() { 63 | break; 64 | } 65 | let send_result = 66 | tx.try_send(Arc::new(NuItem::new(index, context.clone(), value))); 67 | if send_result.is_err() { 68 | break; 69 | } 70 | } 71 | } 72 | Err(err) => { 73 | let _ = tx.try_send(Arc::new(NuItem::new( 74 | 0, 75 | context.clone(), 76 | Value::error(err, Span::unknown()), 77 | ))); 78 | } 79 | } 80 | 81 | components_to_stop.fetch_sub(1, std::sync::atomic::Ordering::SeqCst); 82 | }); 83 | (rx, tx_interrupt) 84 | } 85 | } 86 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # nu_plugin_skim 2 | 3 | This is a [Nushell](https://nushell.sh/) plugin that adds integrates the [skim](https://github.com/lotabout/skim) fuzzy finder. 4 | 5 | The regular `sk` executable filters lines of text, but the `sk` command added by this plugin can filter Nushell's structured data. 6 | 7 | ## Installing 8 | 9 | Install the crate using: 10 | 11 | ```nushell 12 | > cargo install nu_plugin_skim 13 | ``` 14 | 15 | Then register the plugin using (this must be done inside Nushell): 16 | 17 | ```nushell 18 | > plugin add ~/.cargo/bin/nu_plugin_skim 19 | ``` 20 | 21 | ## Usage 22 | 23 | Pipe the input of any Nushell command into `sk`: 24 | 25 | ```nushell 26 | > ps | sk --format {get name} --preview {} 27 | ``` 28 | 29 | This will open the skim TUI, allowing you to select an item from the stream: 30 | 31 | ``` 32 | │╭─────────┬─────────────╮ 1/9 33 | ││ pid │ 4223 │ 34 | ││ ppid │ 3944 │ 35 | > /usr/bin/nu ││ name │ /usr/bin/nu │ 36 | nu ││ status │ Running │ 37 | nu ││ cpu │ 28.78 │ 38 | nu ││ mem │ 37.4 MiB │ 39 | nu ││ virtual │ 1.4 GiB │ 40 | nu │╰─────────┴─────────────╯ 41 | 6/258 5/0 │ 42 | > 'nu │ 43 | ``` 44 | 45 | The item will be returned as the same structured Nushell type that was fed into `sk`: 46 | 47 | ```nushell 48 | > ps | sk --format {get name} --preview {} 49 | ╭─────────┬─────────────╮ 50 | │ pid │ 4223 │ 51 | │ ppid │ 3944 │ 52 | │ name │ /usr/bin/nu │ 53 | │ status │ Running │ 54 | │ cpu │ 28.57 │ 55 | │ mem │ 37.8 MiB │ 56 | │ virtual │ 1.4 GiB │ 57 | ╰─────────┴─────────────╯ 58 | ``` 59 | 60 | Of course, the result of the command can be piped into another command: 61 | 62 | ```nushell 63 | > ps | sk --format {get name} --preview {} | kill $in.pid 64 | ``` 65 | 66 | ## Notable flags 67 | 68 | nu_plugin_skim aims to repliacte skim's sytnax, but there are some differences to better integrate with Nushell: 69 | 70 | - `--multi` / `-m` - this flag works exactly the same as in the regular skim, but unlike the regular skim that always returns text - here `sk` returns structured Nushell data, and this flag changes the type of that data. Without it, the chosen item is returned as is. With it, it gets returned as a list (even if the user only chooses a single item) 71 | 72 | ```nushell 73 | > seq 1 10 | sk | describe 74 | int 75 | > seq 1 10 | sk -m | describe 76 | list (stream) 77 | ``` 78 | 79 | - `--format` - this is a flag that the regular skim does not have. It receives a Nushell closure, and pipes the items through that closure before showing them as user selectable rows. 80 | 81 | If the closure returns a complex Nushell data type, it'll be formatted in a notation similar to [Nushell's `debug` command](http://www.nushell.sh/commands/docs/debug.html) 82 | 83 | Note that in skim one would use `--with-nth` for a similar purpose - but the syntax and usage are different enough to warren a different name. 84 | 85 | - `--preview` - unlike the regular skim, where `--preview` accepts a string, here `--preview` accepts a Nushell closure. The item under the cursor will get piped into the closure and the result will be displayed inside the preview window. 86 | 87 | If the closure returns a complex Nushell data type, it'll be formatted into a table. 88 | 89 | To display the item as is, use the empty closure `--preview {}`. 90 | 91 | - `--bind` - unlike regular `sk` that recieves bindings as a comma-separated list of colon-seperated key-values (e.g. `sk --bind alt-s:down,alt-w:up`), here the bindings are given as a record (e.g. `sk --bind {alt-s: down, alt-w: up}`) 92 | 93 | - `--expect` - unlike regular `sk` that receives actions as comma-specified list of keys (e.g. `sk --expect ctrl-v,ctrl-t,alt-s`), here the actions are given as a list of strings (e.g. `sk --expect [ctrl-v, ctrl-t, alt-s]`) 94 | 95 | When this flag is given (even with an empty list), the result will be a record with an `action` field that contains the action (or `null`, if regular `Return` was used) and a `selected` field that contains the selected item (or a list of them, if `-m` / `--multi` was used) 96 | 97 | - `--tiebreak` - unlike regular `sk` that receives actions as comma-specified list of criteria, here the criteria are given as a list of strings. 98 | 99 | - `--algo` and `--case` - in regular `sk` setting them to an unsupported value will fall back to the default. Here it'll raise an error. 100 | 101 | - `--pre-select-items` - unlike regular `sk` where it receives a newline-seperated list, here it receives a Nushell list. 102 | 103 | ## Defaults via SKIM_DEFAULT_OPTIONS 104 | 105 | This plugin now reads the `SKIM_DEFAULT_OPTIONS` environment variable and treats it as default skim flags (similar to the regular `sk`). 106 | -------------------------------------------------------------------------------- /src/main.rs: -------------------------------------------------------------------------------- 1 | mod cli_arguments; 2 | mod command_collector; 3 | mod command_context; 4 | mod nu_item; 5 | mod predicate_based_selector; 6 | 7 | use cli_arguments::CliArguments; 8 | use command_collector::NuCommandCollector; 9 | use command_context::CommandContext; 10 | use nu_item::NuItem; 11 | use nu_plugin::{serve_plugin, MsgPackSerializer, Plugin, PluginCommand}; 12 | use nu_plugin::{EngineInterface, EvaluatedCall}; 13 | use nu_protocol::{ 14 | Category, LabeledError, ListStream, PipelineData, Record, Signals, Signature, SyntaxShape, 15 | Type, Value, 16 | }; 17 | use skim::prelude::*; 18 | 19 | pub struct SkimPlugin; 20 | 21 | impl Plugin for SkimPlugin { 22 | fn commands(&self) -> Vec>> { 23 | vec![Box::new(Sk)] 24 | } 25 | 26 | fn version(&self) -> String { 27 | env!("CARGO_PKG_VERSION").to_owned() 28 | } 29 | } 30 | 31 | pub struct Sk; 32 | 33 | impl PluginCommand for Sk { 34 | type Plugin = SkimPlugin; 35 | 36 | fn name(&self) -> &str { 37 | "sk" 38 | } 39 | 40 | fn signature(&self) -> Signature { 41 | let signature = { 42 | Signature::build(self.name()) 43 | .input_output_type(Type::List(Type::Any.into()), Type::List(Type::Any.into())) 44 | .category(Category::Filters) 45 | .filter() 46 | .named( 47 | "format", 48 | SyntaxShape::Closure(Some(vec![])), 49 | "Modify the string to display", 50 | Some('f'), 51 | ) 52 | .named( 53 | "preview", 54 | SyntaxShape::Closure(Some(vec![])), 55 | "Generate a preview", 56 | Some('p'), 57 | ) 58 | .named( 59 | "cmd", 60 | SyntaxShape::Closure(Some(vec![SyntaxShape::String])), 61 | "Command to invoke dynamically. A closure that receives the command query as its argument", 62 | Some('c'), 63 | ) 64 | }; 65 | CliArguments::add_to_signature(signature) 66 | } 67 | 68 | fn description(&self) -> &str { 69 | "Select a value using skim (a fuzzy finder written in Rust)" 70 | } 71 | 72 | fn run( 73 | &self, 74 | _plugin: &SkimPlugin, 75 | engine: &EngineInterface, 76 | call: &EvaluatedCall, 77 | input: PipelineData, 78 | ) -> Result { 79 | let span = call.head; 80 | 81 | let pipeline_metadata = input.metadata(); 82 | 83 | let cli_arguments = CliArguments::new(call, engine)?; 84 | let mut skim_options = cli_arguments.to_skim_options(); 85 | 86 | let mut command_context = CommandContext::new(engine)?; 87 | if let Some(format) = call.get_flag_value("format") { 88 | command_context.format = format.try_into()?; 89 | } 90 | 91 | if let Some(preview) = call.get_flag_value("preview") { 92 | command_context.preview = preview.try_into()?; 93 | skim_options.preview = Some("".to_owned()); 94 | } 95 | 96 | let command_context = Arc::new(command_context); 97 | 98 | if let Some(closure) = call.get_flag("cmd")? { 99 | // This is a hack to make Skim conjure what it thinks is the actual command but is 100 | // actually just the query, which will be sent to as the `cmd` argument to 101 | // `NuCommandCollector.invoke`. 102 | skim_options.cmd = Some("{}".to_owned()); 103 | skim_options.cmd_collector = Rc::new(RefCell::new(NuCommandCollector { 104 | context: command_context.clone(), 105 | closure, 106 | })) 107 | } 108 | 109 | let receiver = match input { 110 | PipelineData::Empty => { 111 | if skim_options.cmd.is_none() { 112 | return Ok(PipelineData::empty()); 113 | } 114 | None 115 | } 116 | PipelineData::Value(_, _) | PipelineData::ListStream(_, _) => { 117 | let (sender, receiver) = unbounded::>(); 118 | std::thread::spawn(move || { 119 | for (index, entry) in input.into_iter().enumerate() { 120 | if sender 121 | .send(Arc::new(NuItem::new(index, command_context.clone(), entry))) 122 | .is_err() 123 | { 124 | // Assuming the receiver was closed because the user picked an item 125 | return; 126 | } 127 | } 128 | }); 129 | Some(receiver) 130 | } 131 | PipelineData::ByteStream(byte_stream, _) => { 132 | let Some(lines) = byte_stream.lines() else { 133 | return Ok(PipelineData::empty()); 134 | }; 135 | let (sender, receiver) = unbounded::>(); 136 | std::thread::spawn(move || { 137 | for (index, line) in lines.enumerate() { 138 | if sender 139 | .send(Arc::new(NuItem::new( 140 | index, 141 | command_context.clone(), 142 | match line { 143 | Ok(text) => Value::string(text, span), 144 | Err(err) => Value::error(err, span), 145 | }, 146 | ))) 147 | .is_err() 148 | { 149 | // Assuming the receiver was closed because the user picked an item 150 | return; 151 | } 152 | } 153 | }); 154 | Some(receiver) 155 | } 156 | }; 157 | 158 | let _foreground = engine.enter_foreground()?; 159 | let skim_output = Skim::run_with(&skim_options, receiver).unwrap(); 160 | 161 | if skim_output.is_abort { 162 | return Ok(PipelineData::empty()); 163 | } 164 | 165 | let mut result = skim_output.selected_items.into_iter().map(|item| { 166 | (*item) 167 | .as_any() 168 | .downcast_ref::() 169 | .unwrap() 170 | .value 171 | .clone() 172 | }); 173 | if skim_options.expect.is_empty() { 174 | if skim_options.multi { 175 | Ok(PipelineData::ListStream( 176 | ListStream::new(result, span, Signals::EMPTY), 177 | pipeline_metadata, 178 | )) 179 | } else { 180 | Ok(if let Some(result) = result.next() { 181 | PipelineData::Value(result, pipeline_metadata) 182 | } else { 183 | PipelineData::empty() 184 | }) 185 | } 186 | } else { 187 | let mut record = Record::new(); 188 | record.push( 189 | "action", 190 | if let Event::EvActAccept(Some(action)) = skim_output.final_event { 191 | Value::string(action, span) 192 | } else { 193 | Value::nothing(span) 194 | }, 195 | ); 196 | 197 | record.push( 198 | "selected", 199 | if skim_options.multi { 200 | Value::list(result.collect(), span) 201 | } else if let Some(result) = result.next() { 202 | result 203 | } else { 204 | Value::nothing(span) 205 | }, 206 | ); 207 | 208 | Ok(PipelineData::Value( 209 | Value::record(record, span), 210 | pipeline_metadata, 211 | )) 212 | } 213 | } 214 | } 215 | 216 | fn main() { 217 | serve_plugin(&SkimPlugin, MsgPackSerializer); 218 | } 219 | -------------------------------------------------------------------------------- /CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # Changelog 2 | All notable changes to this project will be documented in this file. 3 | 4 | The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), 5 | and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). 6 | 7 | ## [0.21.0](https://github.com/idanarye/nu_plugin_skim/compare/v0.20.1...v0.21.0) (2025-11-29) 8 | 9 | 10 | ### Features 11 | 12 | * Upgrade Nu version to 0.109 ([ee349e7](https://github.com/idanarye/nu_plugin_skim/commit/ee349e753456599227280762b74a9eccb56bdc5c)) 13 | 14 | ## [0.20.1](https://github.com/idanarye/nu_plugin_skim/compare/v0.20.0...v0.20.1) (2025-10-16) 15 | 16 | 17 | ### Bug Fixes 18 | 19 | * Use the `sqlite` feature of the `nu-protocol` requirement, to be able to load the user nushell config if they use sqlite ([cdbd145](https://github.com/idanarye/nu_plugin_skim/commit/cdbd1456048b2023bc0a6a65067513ebf53e64ed)) 20 | 21 | ## [0.20.0](https://github.com/idanarye/nu_plugin_skim/compare/v0.19.0...v0.20.0) (2025-10-16) 22 | 23 | 24 | ### Features 25 | 26 | * Upgrade Nu version to 0.108 ([762f232](https://github.com/idanarye/nu_plugin_skim/commit/762f2329abea9e931c8d7bcbd3013883e45282c9)) 27 | 28 | ## [0.19.0](https://github.com/idanarye/nu_plugin_skim/compare/v0.18.0...v0.19.0) (2025-09-03) 29 | 30 | 31 | ### Features 32 | 33 | * Upgrade Nu version to 0.107 ([3b87af2](https://github.com/idanarye/nu_plugin_skim/commit/3b87af2613630860c41698e734fa5a9ea0df7a13)) 34 | 35 | ## [0.18.0](https://github.com/idanarye/nu_plugin_skim/compare/v0.17.0...v0.18.0) (2025-09-01) 36 | 37 | 38 | ### Features 39 | 40 | * add default argument by $SKIM_DEFAULT_OPTIONS. Code is generate by ChatGPT-codex, review before merge. ([32ec382](https://github.com/idanarye/nu_plugin_skim/commit/32ec38263fc72c901cf6cafc5842ffa1d7f9a53a)) 41 | * add default argument doc to README; sty: format by prettier ([2e5a8b4](https://github.com/idanarye/nu_plugin_skim/commit/2e5a8b4610d57d47f5791117fabc2765446cb7e6)) 42 | * use $SKIM_DEFAULT_OPTIONS for default arguments ([cebe658](https://github.com/idanarye/nu_plugin_skim/commit/cebe658e1d67ba396ee7ba88777b46f6fcf270b7)) 43 | 44 | 45 | ### Bug Fixes 46 | 47 | * resolve cargo check and clippy warnings; sty: format code with cargo fmt <NO BREAKING CHANGES> ([f9cfa4c](https://github.com/idanarye/nu_plugin_skim/commit/f9cfa4c865afeb4c78ac949df937d0a416da6540)) 48 | * use `EngineInterface::get_env_var` instead of `std:env:var` ([98a9c34](https://github.com/idanarye/nu_plugin_skim/commit/98a9c34bab4ca7cd4fbdac35af67e8429e9c8d38)) 49 | * use both environmentVariable and arguments input now, like `skim` ([64ace17](https://github.com/idanarye/nu_plugin_skim/commit/64ace17916686a7c50d9e0c960c13f6a269d6e08)) 50 | 51 | ## [0.17.0](https://github.com/idanarye/nu_plugin_skim/compare/v0.16.0...v0.17.0) (2025-08-26) 52 | 53 | 54 | ### Features 55 | 56 | * Upgrade skim to 0.20 ([4bdaca1](https://github.com/idanarye/nu_plugin_skim/commit/4bdaca17b72c4036be8fbeb5a688a7fa9bb44c0c)) 57 | 58 | 59 | ### Bug Fixes 60 | 61 | * color highlight ([4d28af4](https://github.com/idanarye/nu_plugin_skim/commit/4d28af4b497ce075f6f9821da391bf2e9f148ca2)) 62 | * color highlight ([a0391bc](https://github.com/idanarye/nu_plugin_skim/commit/a0391bc5ef0d95466bbf495a0544927820e09182)) 63 | 64 | ## [0.16.0](https://github.com/idanarye/nu_plugin_skim/compare/v0.15.0...v0.16.0) (2025-07-26) 65 | 66 | 67 | ### Features 68 | 69 | * Upgrade Nu version to 0.106 ([fc920ce](https://github.com/idanarye/nu_plugin_skim/commit/fc920cedb86b7813757b0c67303e25127e119074)) 70 | 71 | ## [0.15.0](https://github.com/idanarye/nu_plugin_skim/compare/v0.14.0...v0.15.0) (2025-06-10) 72 | 73 | 74 | ### Features 75 | 76 | * Upgrade Nu version to 0.105 ([a476a00](https://github.com/idanarye/nu_plugin_skim/commit/a476a00305d6e59bec8b86790d04af21782577bd)) 77 | 78 | ## [0.14.0](https://github.com/idanarye/nu_plugin_skim/compare/v0.13.0...v0.14.0) (2025-04-30) 79 | 80 | 81 | ### Features 82 | 83 | * Upgrade Nu version to 0.104 ([b5fdfd2](https://github.com/idanarye/nu_plugin_skim/commit/b5fdfd2a8151641a9ab1494598409e6e3111b898)) 84 | 85 | ## [0.13.0](https://github.com/idanarye/nu_plugin_skim/compare/v0.12.0...v0.13.0) (2025-03-21) 86 | 87 | 88 | ### Features 89 | 90 | * Upgrade Nu version to 0.103 ([80ad80b](https://github.com/idanarye/nu_plugin_skim/commit/80ad80bdfca5878447a84baf054f54ef2c1da694)) 91 | 92 | ## [0.12.0](https://github.com/idanarye/nu_plugin_skim/compare/v0.11.1...v0.12.0) (2025-02-10) 93 | 94 | 95 | ### Features 96 | 97 | * Upgrade Nu version to 0.102 ([2066d88](https://github.com/idanarye/nu_plugin_skim/commit/2066d8842339421b09b9f3f10b8cbc337052514a)) 98 | 99 | ## [0.11.1](https://github.com/idanarye/nu_plugin_skim/compare/v0.11.0...v0.11.1) (2024-12-23) 100 | 101 | 102 | ### Bug Fixes 103 | 104 | * Downgrade skim back to 0.13 to fix multiselect ([a7bccd2](https://github.com/idanarye/nu_plugin_skim/commit/a7bccd242c57f4fcdde0d0b1a6134047b644c2e7)) 105 | 106 | ## [0.11.0](https://github.com/idanarye/nu_plugin_skim/compare/v0.10.0...v0.11.0) (2024-12-23) 107 | 108 | 109 | ### Features 110 | 111 | * Upgrade Nu version to 0.101 ([e39120e](https://github.com/idanarye/nu_plugin_skim/commit/e39120ecedee63a795a9b74933c2276d2c6dc204)) 112 | 113 | ## [0.10.0](https://github.com/idanarye/nu_plugin_skim/compare/v0.9.1...v0.10.0) (2024-11-25) 114 | 115 | 116 | ### Features 117 | 118 | * Migrate back to Skim, since it's now maintained again ([c678542](https://github.com/idanarye/nu_plugin_skim/commit/c678542f3c8569f4828f0ba6fd66f7fdc6f1751a)) 119 | 120 | ## [0.9.1](https://github.com/idanarye/nu_plugin_skim/compare/v0.9.0...v0.9.1) (2024-11-21) 121 | 122 | 123 | ### Bug Fixes 124 | 125 | * 18: pre-calculate the `--format` lambda ([71b0df3](https://github.com/idanarye/nu_plugin_skim/commit/71b0df3339a4a82798bac2a0fd5fd835a6f8a218)) 126 | 127 | ## [0.9.0](https://github.com/idanarye/nu_plugin_skim/compare/v0.8.0...v0.9.0) (2024-11-13) 128 | 129 | 130 | ### Features 131 | 132 | * Upgrade Nu version to 0.100 ([32437bd](https://github.com/idanarye/nu_plugin_skim/commit/32437bd42ef33ace27034aa343e396c19fb461e8)) 133 | 134 | ## [0.8.0](https://github.com/idanarye/nu_plugin_skim/compare/v0.7.0...v0.8.0) (2024-10-20) 135 | 136 | 137 | ### Features 138 | 139 | * Upgrade Nu version to 0.99 ([e77ad4b](https://github.com/idanarye/nu_plugin_skim/commit/e77ad4b1f4d8d7c249c83dd4714816077058e8fc)) 140 | 141 | ## [0.7.0](https://github.com/idanarye/nu_plugin_skim/compare/v0.6.0...v0.7.0) (2024-09-30) 142 | 143 | 144 | ### Features 145 | 146 | * Properly pass `--width` when invoking `table` in the preview window ([253cc7c](https://github.com/idanarye/nu_plugin_skim/commit/253cc7c7060f9c72cde4175f1c3d575819d40833)) 147 | 148 | 149 | ### Bug Fixes 150 | 151 | * Properly handle ANSI ([d400868](https://github.com/idanarye/nu_plugin_skim/commit/d4008680000f2614e855a02f254ef2ef1f45199a)) 152 | 153 | ## [0.6.0](https://github.com/idanarye/nu_plugin_skim/compare/v0.5.0...v0.6.0) (2024-09-18) 154 | 155 | 156 | ### Features 157 | 158 | * Update Nu and two-percent versions ([8d3ebaf](https://github.com/idanarye/nu_plugin_skim/commit/8d3ebaf3afac5936f08f6283906a8b31576c8b15)) 159 | 160 | ## [0.5.0](https://github.com/idanarye/nu_plugin_skim/compare/v0.4.1...v0.5.0) (2024-08-21) 161 | 162 | 163 | ### Features 164 | 165 | * Upgrade to Nu protocol 0.97 ([9ed8191](https://github.com/idanarye/nu_plugin_skim/commit/9ed8191e2e79d83238fa0d0764718483e587af30)) 166 | 167 | ## [0.4.1](https://github.com/idanarye/nu_plugin_skim/compare/v0.4.0...v0.4.1) (2024-08-07) 168 | 169 | 170 | ### Bug Fixes 171 | 172 | * Commit `Cargo.lock` to the repository (Fix [#10](https://github.com/idanarye/nu_plugin_skim/issues/10)) ([2e1739a](https://github.com/idanarye/nu_plugin_skim/commit/2e1739a3c036554341139e79e33497d19fff5712)) 173 | 174 | ## [0.4.0](https://github.com/idanarye/nu_plugin_skim/compare/v0.3.0...v0.4.0) (2024-08-05) 175 | 176 | 177 | ### Features 178 | 179 | * Add shortopts for `--format` (`-f`) and `--preview` (`-p`) ([e77e3e2](https://github.com/idanarye/nu_plugin_skim/commit/e77e3e21d8438f366dfd7a6afcb8f86203ec7230)) 180 | * Add the `--pre-select` flag (Close [#5](https://github.com/idanarye/nu_plugin_skim/issues/5)) ([3c16d7c](https://github.com/idanarye/nu_plugin_skim/commit/3c16d7cd1a427f338182ad1865257fdc9a076f56)) 181 | * Support interactive mode with `-i` and `-c` (Close [#4](https://github.com/idanarye/nu_plugin_skim/issues/4)) ([b81ee88](https://github.com/idanarye/nu_plugin_skim/commit/b81ee8892f54a6e18bd5d88890737b7194a736e2)) 182 | 183 | 184 | ### Bug Fixes 185 | 186 | * Set the signature of `--cmd` to accept one string parameter ([3cde093](https://github.com/idanarye/nu_plugin_skim/commit/3cde0937509c9c5eadab06efad3f592a1aee6a7b)) 187 | 188 | ## [0.3.0](https://github.com/idanarye/nu_plugin_skim/compare/v0.2.0...v0.3.0) (2024-07-30) 189 | 190 | 191 | ### Features 192 | 193 | * Upgrade Nu version to 0.96 ([cd4402f](https://github.com/idanarye/nu_plugin_skim/commit/cd4402f0e76b574e834baff7bbc9321a0c3f9415)) 194 | 195 | ## [Unreleased] 196 | 197 | ## [0.2.0](https://github.com/idanarye/nu_plugin_skim/compare/v0.1.1...v0.2.0) - 2024-07-01 198 | 199 | ### Changed 200 | - Upgrade Nushell API to 0.95. 201 | 202 | ## [0.1.1](https://github.com/idanarye/nu_plugin_skim/compare/v0.1.0...v0.1.1) - 2024-06-16 203 | 204 | ### Fixed 205 | - Make the install command in the README install from crates.io 206 | 207 | ## [0.1.0](https://github.com/idanarye/nu_plugin_skim/releases/tag/v0.1.0) - 2024-06-16 208 | 209 | ### Added 210 | - sk` command that can handle Nushell structure data. 211 | -------------------------------------------------------------------------------- /src/cli_arguments.rs: -------------------------------------------------------------------------------- 1 | use std::{ 2 | fs::File, 3 | io::{BufRead, BufReader}, 4 | path::PathBuf, 5 | rc::Rc, 6 | }; 7 | 8 | use clap::ValueEnum; 9 | use nu_plugin::{EngineInterface, EvaluatedCall}; 10 | use nu_protocol::{ 11 | engine::Closure, LabeledError, Record, ShellError, Signature, Spanned, SyntaxShape, 12 | }; 13 | use shlex::Shlex; 14 | use skim::{ 15 | prelude::DefaultSkimSelector, CaseMatching, FuzzyAlgorithm, RankCriteria, Selector, SkimOptions, 16 | }; 17 | 18 | use crate::predicate_based_selector::{CombinedSelector, PredicateBasedSelector}; 19 | 20 | pub struct CliArguments { 21 | bind: Vec, 22 | multi: bool, 23 | prompt: Option, 24 | cmd_prompt: Option, 25 | expect: Vec, 26 | tac: bool, 27 | no_sort: bool, 28 | tiebreak: Vec, 29 | exact: bool, 30 | //cmd: Option, 31 | interactive: bool, 32 | query: Option, 33 | cmd_query: Option, 34 | regex: bool, 35 | //delimiter: Option, 36 | //replstr: Option, 37 | color: Option, 38 | margin: Option, 39 | no_height: bool, 40 | no_clear: bool, 41 | no_clear_start: bool, 42 | min_height: Option, 43 | height: Option, 44 | //preview: Option, 45 | preview_window: Option, 46 | reverse: bool, // note that this does not (just) get paseed to CliArguments as is - it's there to modify --layout 47 | tabstop: Option, 48 | no_hscroll: bool, 49 | no_mouse: bool, 50 | inline_info: bool, 51 | //header: Option, 52 | //header_lines: usize, 53 | layout: Option, 54 | algorithm: FuzzyAlgorithm, 55 | case: CaseMatching, 56 | //engine_factory: Option>, 57 | //query_history: &'a [String], 58 | //cmd_history: &'a [String], 59 | //cmd_collector: Rc>, 60 | keep_right: bool, 61 | skip_to_pattern: Option, 62 | select1: bool, 63 | exit0: bool, 64 | sync: bool, 65 | selector: Option>, 66 | no_clear_if_empty: bool, 67 | } 68 | 69 | impl CliArguments { 70 | #[allow(clippy::result_large_err)] 71 | pub fn new(call: &EvaluatedCall, engine: &EngineInterface) -> Result { 72 | let env_defaults = EnvDefaults::from_env(engine); 73 | Ok(Self { 74 | bind: if let Some(bind) = call.get_flag::("bind")? { 75 | bind.iter() 76 | .map(|(key, value)| { 77 | let value = value.coerce_string()?; 78 | Ok(format!("{key}:{value}")) 79 | }) 80 | .collect::, LabeledError>>()? 81 | } else { 82 | env_defaults.bind.unwrap_or_default() 83 | }, 84 | multi: call.has_flag("multi")? || env_defaults.multi.unwrap_or(false), 85 | prompt: call.get_flag("prompt")?.or(env_defaults.prompt), 86 | cmd_prompt: call.get_flag("cmd-prompt")?.or(env_defaults.cmd_prompt), 87 | expect: call 88 | .get_flag("expect")? 89 | .unwrap_or_else(|| env_defaults.expect.unwrap_or_default()), 90 | tac: call.has_flag("tac")? || env_defaults.tac.unwrap_or(false), 91 | no_sort: call.has_flag("no-sort")? || env_defaults.no_sort.unwrap_or(false), 92 | tiebreak: { 93 | let from_call = call 94 | .get_flag::>>("tiebreak")? 95 | .unwrap_or_default() 96 | .into_iter() 97 | .map(|flag| { 98 | RankCriteria::from_str(&flag.item, true).map_err(|_| { 99 | let possible_values = RankCriteria::value_variants() 100 | .iter() 101 | .flat_map(|v| { 102 | Some(format!("`{}`", v.to_possible_value()?.get_name())) 103 | }) 104 | .collect::>() 105 | .join("/"); 106 | LabeledError::new(format!( 107 | "Invalid tiebreak - legal options are {possible_values}" 108 | )) 109 | .with_label("here", flag.span) 110 | }) 111 | }) 112 | .collect::, _>>()?; 113 | if from_call.is_empty() { 114 | env_defaults.tiebreak.unwrap_or_default() 115 | } else { 116 | from_call 117 | } 118 | }, 119 | exact: call.has_flag("exact")? || env_defaults.exact.unwrap_or(false), 120 | interactive: call.has_flag("interactive")? || env_defaults.interactive.unwrap_or(false), 121 | query: call.get_flag("query")?.or(env_defaults.query), 122 | cmd_query: call.get_flag("cmd-query")?.or(env_defaults.cmd_query), 123 | regex: call.has_flag("regex")? || env_defaults.regex.unwrap_or(false), 124 | color: call.get_flag("color")?.or(env_defaults.color), 125 | margin: call.get_flag("margin")?.or(env_defaults.margin), 126 | no_height: call.has_flag("no-height")? || env_defaults.no_height.unwrap_or(false), 127 | no_clear: call.has_flag("no-clear")? || env_defaults.no_clear.unwrap_or(false), 128 | no_clear_start: call.has_flag("no-clear-start")? 129 | || env_defaults.no_clear_start.unwrap_or(false), 130 | min_height: call 131 | .get_flag::("min-height")? 132 | .map(|num| num.to_string()) 133 | .or(env_defaults.min_height), 134 | height: call.get_flag("height")?.or(env_defaults.height), 135 | preview_window: call 136 | .get_flag("preview-window")? 137 | .or(env_defaults.preview_window), 138 | reverse: call.has_flag("reverse")? || env_defaults.reverse.unwrap_or(false), 139 | tabstop: call.get_flag::("tabstop")?.or(env_defaults.tabstop), 140 | no_hscroll: call.has_flag("no-hscroll")? || env_defaults.no_hscroll.unwrap_or(false), 141 | no_mouse: call.has_flag("no-mouse")? || env_defaults.no_mouse.unwrap_or(false), 142 | inline_info: call.has_flag("inline-info")? || env_defaults.inline_info.unwrap_or(false), 143 | layout: call.get_flag("layout")?.or(env_defaults.layout), 144 | algorithm: call 145 | .get_flag::("algo")? 146 | .as_deref() 147 | .map(|flag| match flag { 148 | "skim_v1" => Ok(FuzzyAlgorithm::SkimV1), 149 | "skim_v2" => Ok(FuzzyAlgorithm::SkimV2), 150 | "clangd" => Ok(FuzzyAlgorithm::Clangd), 151 | _ => Err(ShellError::InvalidValue { 152 | valid: "[skim_v1|skim_v2|clangd]".to_owned(), 153 | actual: flag.to_owned(), 154 | span: call 155 | .get_flag_value("algo") 156 | .expect("we already know the flag exists") 157 | .span(), 158 | }), 159 | }) 160 | .transpose()? 161 | .or(env_defaults.algorithm) 162 | .unwrap_or_default(), 163 | case: call 164 | .get_flag::("case")? 165 | .as_deref() 166 | .map(|flag| match flag { 167 | "smart" => Ok(CaseMatching::Smart), 168 | "ignore" => Ok(CaseMatching::Ignore), 169 | "respect" => Ok(CaseMatching::Respect), 170 | _ => Err(ShellError::InvalidValue { 171 | valid: "[smart|ignore|respect]".to_owned(), 172 | actual: flag.to_owned(), 173 | span: call 174 | .get_flag_value("case") 175 | .expect("we already know the flag exists") 176 | .span(), 177 | }), 178 | }) 179 | .transpose()? 180 | .unwrap_or(env_defaults.case.unwrap_or_default()), 181 | keep_right: call.has_flag("keep-right")? || env_defaults.keep_right.unwrap_or(false), 182 | skip_to_pattern: call 183 | .get_flag("skip-to-pattern")? 184 | .or(env_defaults.skip_to_pattern), 185 | select1: call.has_flag("select-1")? || env_defaults.select1.unwrap_or(false), 186 | exit0: call.has_flag("exit-0")? || env_defaults.exit0.unwrap_or(false), 187 | sync: call.has_flag("sync")? || env_defaults.sync.unwrap_or(false), 188 | selector: { 189 | let mut dumb_selector: Option = None; 190 | 191 | // First apply env-derived pre-select options (if any), 192 | // then apply flag-derived options additively. 193 | if let Some(n) = env_defaults.pre_select_n { 194 | dumb_selector = Some(dumb_selector.take().unwrap_or_default().first_n(n)); 195 | } 196 | if let Some(pat) = env_defaults.pre_select_pat { 197 | dumb_selector = Some(dumb_selector.take().unwrap_or_default().regex(&pat)); 198 | } 199 | if let Some(items) = env_defaults.pre_select_items { 200 | dumb_selector = Some(dumb_selector.take().unwrap_or_default().preset(items)); 201 | } 202 | if let Some(file_path) = env_defaults.pre_select_file { 203 | let file = 204 | File::open(file_path).map_err(|e| LabeledError::new(e.to_string()))?; 205 | let items = BufReader::new(file) 206 | .lines() 207 | .collect::, _>>() 208 | .map_err(|e| LabeledError::new(e.to_string()))?; 209 | dumb_selector = Some(dumb_selector.take().unwrap_or_default().preset(items)); 210 | } 211 | 212 | // Now apply flag-derived pre-select options additively 213 | if let Some(n) = call.get_flag::("pre-select-n")? { 214 | dumb_selector = Some(dumb_selector.take().unwrap_or_default().first_n(n)); 215 | } 216 | if let Some(pat) = call.get_flag::("pre-select-pat")? { 217 | dumb_selector = Some(dumb_selector.take().unwrap_or_default().regex(&pat)); 218 | } 219 | if let Some(items) = call.get_flag::>("pre-select-items")? { 220 | dumb_selector = Some(dumb_selector.take().unwrap_or_default().preset(items)); 221 | } 222 | if let Some(file_path) = call.get_flag::>("pre-select-file")? { 223 | let file = File::open(file_path.item).map_err(|e| { 224 | LabeledError::new(e.to_string()).with_label("here", file_path.span) 225 | })?; 226 | let items = BufReader::new(file) 227 | .lines() 228 | .collect::, _>>() 229 | .map_err(|e| LabeledError::new(e.to_string()))?; 230 | dumb_selector = Some(dumb_selector.take().unwrap_or_default().preset(items)); 231 | } 232 | if let Some(predicate) = call.get_flag::>("pre-select")? { 233 | let predicate_based_selector = PredicateBasedSelector { 234 | engine: engine.clone(), 235 | predicate, 236 | }; 237 | if let Some(dumb_selector) = dumb_selector { 238 | Some(Rc::new(CombinedSelector( 239 | dumb_selector, 240 | predicate_based_selector, 241 | ))) 242 | } else { 243 | Some(Rc::new(predicate_based_selector)) 244 | } 245 | } else if let Some(dumb_selector) = dumb_selector { 246 | Some(Rc::new(dumb_selector)) 247 | } else { 248 | None 249 | } 250 | }, 251 | no_clear_if_empty: call.has_flag("no-clear-if-empty")? 252 | || env_defaults.no_clear_if_empty.unwrap_or(false), 253 | }) 254 | } 255 | 256 | pub fn add_to_signature(signature: Signature) -> Signature { 257 | signature 258 | .named( 259 | "bind", 260 | SyntaxShape::Record(Vec::default()), 261 | "Custom key bindings. A record where the keys arae keymaps and the values are actions", 262 | None, 263 | ) 264 | .switch("multi", "Select multiple values", Some('m')) 265 | .named("prompt", SyntaxShape::String, "Input prompt", None) 266 | .named("cmd-prompt", SyntaxShape::String, "Command mode prompt", None) 267 | .named( 268 | "expect", 269 | SyntaxShape::List(Box::new(SyntaxShape::String)), 270 | "List of keys that can be used to complete sk in addition to the default enter key", 271 | None, 272 | ) 273 | .switch("tac", "Reverse the order of the search result (normally used together with --no-sort)", None) 274 | .switch("no-sort", "Do not sort the search result (normally used together with --tac)", None) 275 | .named( 276 | "tiebreak", 277 | SyntaxShape::List(Box::new(SyntaxShape::String)), 278 | "List of sort criteria to apply when the scores are tied.", 279 | None, 280 | ) 281 | .switch( 282 | "exact", 283 | "Enable exact-match", 284 | Some('e'), 285 | ) 286 | .switch("interactive", "Start skim in interactive(command) mode", Some('i')) 287 | .named( 288 | "query", 289 | SyntaxShape::String, 290 | "Specify the initial query", 291 | Some('q'), 292 | ) 293 | .named( 294 | "cmd-query", 295 | SyntaxShape::String, 296 | "Specify the initial query for interactive mode", 297 | None, 298 | ) 299 | .switch( 300 | "regex", 301 | "Search with regular expression instead of fuzzy match", 302 | None, 303 | ) 304 | .named("color", SyntaxShape::String, "Color configuration", None) 305 | .named("margin", SyntaxShape::String, "Comma-separated expression for margins around the finder.", None) 306 | .switch( 307 | "no-height", 308 | "Disable height feature", 309 | None, 310 | ) 311 | .switch( 312 | "no-clear", 313 | "Do not clear finder interface on exit", 314 | None, 315 | ) 316 | .switch( 317 | "no-clear-start", 318 | "Do not clear on start", 319 | None, 320 | ) 321 | .named( 322 | "height", 323 | SyntaxShape::String, 324 | "Display sk window below the cursor with the given height instead of using the full screen", 325 | None, 326 | ) 327 | .named( 328 | "min-height", 329 | SyntaxShape::Number, 330 | "Minimum height when --height is given in percent. Ignored when --height is not specified", 331 | None, 332 | ) 333 | .named( 334 | "preview-window", 335 | SyntaxShape::String, 336 | "Determines the layout of the preview window", 337 | None, 338 | ) 339 | .switch( 340 | "reverse", 341 | "A synonym for --layout=reverse", 342 | None, 343 | ) 344 | .named( 345 | "tabstop", 346 | SyntaxShape::Number, 347 | "Number of spaces for a tab character", 348 | None, 349 | ) 350 | .switch( 351 | "no-hscroll", 352 | "Disable horizontal scroll", 353 | None, 354 | ) 355 | .switch( 356 | "no-mouse", 357 | "Disable mouse", 358 | None, 359 | ) 360 | .switch( 361 | "inline-info", 362 | "Display the finder info after the prompt with the default prefix ' < '", 363 | None, 364 | ) 365 | .named( 366 | "layout", 367 | SyntaxShape::String, 368 | "Choose the layout", 369 | None, 370 | ) 371 | .named( 372 | "algo", 373 | SyntaxShape::String, 374 | "Fuzzy matching algorithm: [skim_v1|skim_v2|clangd] (default: skim_v2)", 375 | None, 376 | ) 377 | .named( 378 | "case", 379 | SyntaxShape::String, 380 | "Case sensitivity: [smart|ignore|respect] (default: smart)", 381 | None, 382 | ) 383 | .switch( 384 | "keep-right", 385 | "Keep the right end of the line visible when it's too long", 386 | None, 387 | ) 388 | .named( 389 | "skip-to-pattern", 390 | SyntaxShape::String, 391 | "Line will start with the start of the matched pattern", 392 | None, 393 | ) 394 | .switch( 395 | "select-1", 396 | "Automatically select the only match", 397 | Some('1'), 398 | ) 399 | .switch( 400 | "exit-0", 401 | "Exit immediately when there's no match", 402 | Some('0'), 403 | ) 404 | .switch( 405 | "sync", 406 | "Wait for all the options to be available before choosing", 407 | None, 408 | ) 409 | .named( 410 | "pre-select-n", 411 | SyntaxShape::Number, 412 | "Pre-select the first n items in multi-selection mode", 413 | None, 414 | ) 415 | .named( 416 | "pre-select-pat", 417 | SyntaxShape::String, 418 | "Pre-select the matched items in multi-selection mode", 419 | None, 420 | ) 421 | .named( 422 | "pre-select-items", 423 | SyntaxShape::List(Box::new(SyntaxShape::String)), 424 | "Pre-select the items in the given list", 425 | None, 426 | ) 427 | .named( 428 | "pre-select-file", 429 | SyntaxShape::Filepath, 430 | "Pre-select the items read from file", 431 | None, 432 | ) 433 | .named( 434 | "pre-select", 435 | SyntaxShape::Closure(Some(vec![])), 436 | "Pre-select the items that match the predicate", 437 | None, 438 | ) 439 | .switch( 440 | "no-clear-if-empty", 441 | "Do not clear previous items if command returns empty result", 442 | None, 443 | ) 444 | } 445 | 446 | pub fn to_skim_options(&self) -> SkimOptions { 447 | let Self { 448 | bind, 449 | multi, 450 | prompt, 451 | cmd_prompt, 452 | expect, 453 | tac, 454 | no_sort: nosort, 455 | tiebreak, 456 | exact, 457 | interactive, 458 | query, 459 | cmd_query, 460 | regex, 461 | color, 462 | margin, 463 | no_height, 464 | no_clear, 465 | no_clear_start, 466 | min_height, 467 | height, 468 | preview_window, 469 | reverse, 470 | tabstop, 471 | no_hscroll, 472 | no_mouse, 473 | inline_info, 474 | layout, 475 | algorithm, 476 | case, 477 | keep_right, 478 | skip_to_pattern, 479 | select1: select_1, 480 | exit0: exit_0, 481 | sync, 482 | selector, 483 | no_clear_if_empty, 484 | } = self; 485 | 486 | let default_options = SkimOptions::default(); 487 | 488 | SkimOptions { 489 | bind: bind.clone(), 490 | multi: *multi, 491 | no_multi: !*multi, 492 | prompt: prompt.as_deref().unwrap_or_default().to_owned(), 493 | cmd_prompt: cmd_prompt.as_deref().unwrap_or_default().to_owned(), 494 | expect: expect.clone(), 495 | tac: *tac, 496 | no_sort: *nosort, 497 | tiebreak: tiebreak.clone(), 498 | exact: *exact, 499 | cmd: Some("ls".to_owned()), 500 | interactive: *interactive, 501 | query: query.clone(), 502 | cmd_query: cmd_query.clone(), 503 | regex: *regex, 504 | color: color.clone(), 505 | margin: margin.as_deref().unwrap_or("0,0,0,0").to_owned(), 506 | no_height: *no_height, 507 | no_clear: *no_clear, 508 | no_clear_start: *no_clear_start, 509 | min_height: min_height.as_deref().unwrap_or("10").to_owned(), 510 | height: height.as_deref().unwrap_or("100%").to_owned(), 511 | preview_window: preview_window.as_deref().unwrap_or("right:50%").to_owned(), 512 | reverse: *reverse, 513 | tabstop: tabstop.unwrap_or(8), 514 | no_hscroll: *no_hscroll, 515 | no_mouse: *no_mouse, 516 | inline_info: *inline_info, 517 | layout: if *reverse { 518 | "reverse" 519 | } else { 520 | layout.as_deref().unwrap_or("default") 521 | } 522 | .to_owned(), 523 | algorithm: *algorithm, 524 | case: *case, 525 | keep_right: *keep_right, 526 | skip_to_pattern: skip_to_pattern.clone(), 527 | select_1: *select_1, 528 | exit_0: *exit_0, 529 | sync: *sync, 530 | selector: selector.clone(), 531 | no_clear_if_empty: *no_clear_if_empty, 532 | 533 | // Use these instead of Default::default so that when they add new options the compiler 534 | // will point them out. 535 | 536 | // These are options that should not be implemented because it works differently in 537 | // Nushell 538 | preview: default_options.preview, 539 | pre_select_n: default_options.pre_select_n, 540 | pre_select_pat: default_options.pre_select_pat, 541 | pre_select_items: default_options.pre_select_items, 542 | pre_select_file: default_options.pre_select_file, 543 | cmd_collector: default_options.cmd_collector, 544 | shell: default_options.shell, 545 | nth: default_options.nth, 546 | delimiter: default_options.delimiter, 547 | read0: default_options.read0, 548 | print0: default_options.print0, 549 | 550 | // These options still need to be considered 551 | min_query_length: default_options.min_query_length, 552 | with_nth: default_options.with_nth, 553 | replstr: default_options.replstr, 554 | show_cmd_error: default_options.show_cmd_error, 555 | ansi: default_options.ansi, 556 | info: default_options.info, 557 | no_info: default_options.no_info, 558 | header: default_options.header, 559 | header_lines: default_options.header_lines, 560 | history_file: default_options.history_file, 561 | history_size: default_options.history_size, 562 | cmd_history_file: default_options.cmd_history_file, 563 | cmd_history_size: default_options.cmd_history_size, 564 | print_query: default_options.print_query, 565 | print_cmd: default_options.print_cmd, 566 | print_score: default_options.print_score, 567 | filter: default_options.filter, 568 | tmux: default_options.tmux, 569 | extended: default_options.extended, 570 | literal: default_options.literal, 571 | cycle: default_options.cycle, 572 | hscroll_off: default_options.hscroll_off, 573 | filepath_word: default_options.filepath_word, 574 | jump_labels: default_options.jump_labels, 575 | border: default_options.border, 576 | no_bold: default_options.no_bold, 577 | pointer: default_options.pointer, 578 | marker: default_options.marker, 579 | phony: default_options.phony, 580 | query_history: default_options.query_history, 581 | cmd_history: default_options.cmd_history, 582 | preview_fn: default_options.preview_fn, 583 | } 584 | } 585 | } 586 | 587 | #[derive(Default)] 588 | struct EnvDefaults { 589 | bind: Option>, 590 | multi: Option, 591 | prompt: Option, 592 | cmd_prompt: Option, 593 | expect: Option>, 594 | tac: Option, 595 | no_sort: Option, 596 | tiebreak: Option>, 597 | exact: Option, 598 | interactive: Option, 599 | query: Option, 600 | cmd_query: Option, 601 | regex: Option, 602 | color: Option, 603 | margin: Option, 604 | no_height: Option, 605 | no_clear: Option, 606 | no_clear_start: Option, 607 | min_height: Option, 608 | height: Option, 609 | preview_window: Option, 610 | reverse: Option, 611 | tabstop: Option, 612 | no_hscroll: Option, 613 | no_mouse: Option, 614 | inline_info: Option, 615 | layout: Option, 616 | algorithm: Option, 617 | case: Option, 618 | keep_right: Option, 619 | skip_to_pattern: Option, 620 | select1: Option, 621 | exit0: Option, 622 | sync: Option, 623 | pre_select_n: Option, 624 | pre_select_pat: Option, 625 | pre_select_items: Option>, 626 | pre_select_file: Option, 627 | no_clear_if_empty: Option, 628 | } 629 | 630 | impl EnvDefaults { 631 | fn from_env(engine: &EngineInterface) -> Self { 632 | match engine.get_env_var("SKIM_DEFAULT_OPTIONS") { 633 | Ok(Some(value)) => match value.coerce_string() { 634 | Ok(raw) => Self::from_options_str(&raw), 635 | Err(_) => Self::default(), 636 | }, 637 | _ => Self::default(), 638 | } 639 | } 640 | 641 | fn from_options_str(s: &str) -> Self { 642 | let mut out = EnvDefaults::default(); 643 | let mut it = Shlex::new(s) 644 | .collect::>() 645 | .into_iter() 646 | .peekable(); 647 | 648 | while let Some(tok) = it.next() { 649 | if tok == "--" { 650 | break; 651 | } 652 | if let Some(rest) = tok.strip_prefix("--") { 653 | let (key, val_opt) = if let Some(eq_idx) = rest.find('=') { 654 | ( 655 | rest[..eq_idx].to_string(), 656 | Some(rest[eq_idx + 1..].to_string()), 657 | ) 658 | } else { 659 | (rest.to_string(), None) 660 | }; 661 | match key.as_str() { 662 | // boolean switches 663 | "multi" => out.multi = Some(true), 664 | "tac" => out.tac = Some(true), 665 | "no-sort" => out.no_sort = Some(true), 666 | "exact" => out.exact = Some(true), 667 | "interactive" => out.interactive = Some(true), 668 | "regex" => out.regex = Some(true), 669 | "no-height" => out.no_height = Some(true), 670 | "no-clear" => out.no_clear = Some(true), 671 | "no-clear-start" => out.no_clear_start = Some(true), 672 | "reverse" => out.reverse = Some(true), 673 | "no-hscroll" => out.no_hscroll = Some(true), 674 | "no-mouse" => out.no_mouse = Some(true), 675 | "inline-info" => out.inline_info = Some(true), 676 | "keep-right" => out.keep_right = Some(true), 677 | "select-1" => out.select1 = Some(true), 678 | "exit-0" => out.exit0 = Some(true), 679 | "sync" => out.sync = Some(true), 680 | "no-clear-if-empty" => out.no_clear_if_empty = Some(true), 681 | 682 | // string/numeric options 683 | "prompt" => { 684 | if let Some(v) = set_string(val_opt, &mut it) { 685 | out.prompt = Some(v); 686 | } 687 | } 688 | "cmd-prompt" => { 689 | if let Some(v) = set_string(val_opt, &mut it) { 690 | out.cmd_prompt = Some(v); 691 | } 692 | } 693 | "query" => { 694 | if let Some(v) = set_string(val_opt, &mut it) { 695 | out.query = Some(v); 696 | } 697 | } 698 | "cmd-query" => { 699 | if let Some(v) = set_string(val_opt, &mut it) { 700 | out.cmd_query = Some(v); 701 | } 702 | } 703 | "color" => { 704 | if let Some(v) = set_string(val_opt, &mut it) { 705 | out.color = Some(v); 706 | } 707 | } 708 | "margin" => { 709 | if let Some(v) = set_string(val_opt, &mut it) { 710 | out.margin = Some(v); 711 | } 712 | } 713 | "min-height" => { 714 | if let Some(v) = set_string(val_opt, &mut it) { 715 | out.min_height = Some(v); 716 | } 717 | } 718 | "height" => { 719 | if let Some(v) = set_string(val_opt, &mut it) { 720 | out.height = Some(v); 721 | } 722 | } 723 | "preview-window" => { 724 | if let Some(v) = set_string(val_opt, &mut it) { 725 | out.preview_window = Some(v); 726 | } 727 | } 728 | "layout" => { 729 | if let Some(v) = set_string(val_opt, &mut it) { 730 | out.layout = Some(v); 731 | } 732 | } 733 | "skip-to-pattern" => { 734 | if let Some(v) = set_string(val_opt, &mut it) { 735 | out.skip_to_pattern = Some(v); 736 | } 737 | } 738 | 739 | "tabstop" => { 740 | if let Some(v) = set_string(val_opt, &mut it) { 741 | if let Ok(n) = v.parse::() { 742 | out.tabstop = Some(n); 743 | } 744 | } 745 | } 746 | 747 | "algo" => { 748 | if let Some(v) = set_string(val_opt, &mut it) { 749 | out.algorithm = match v.as_str() { 750 | "skim_v1" => Some(FuzzyAlgorithm::SkimV1), 751 | "skim_v2" => Some(FuzzyAlgorithm::SkimV2), 752 | "clangd" => Some(FuzzyAlgorithm::Clangd), 753 | _ => None, 754 | } 755 | } 756 | } 757 | "case" => { 758 | if let Some(v) = set_string(val_opt, &mut it) { 759 | out.case = match v.as_str() { 760 | "smart" => Some(CaseMatching::Smart), 761 | "ignore" => Some(CaseMatching::Ignore), 762 | "respect" => Some(CaseMatching::Respect), 763 | _ => None, 764 | } 765 | } 766 | } 767 | 768 | "expect" => { 769 | if let Some(v) = set_string(val_opt, &mut it) { 770 | out.expect = Some(split_csv_like(&v)) 771 | } 772 | } 773 | "tiebreak" => { 774 | if let Some(v) = set_string(val_opt, &mut it) { 775 | let vals = split_csv_like(&v); 776 | let mut parsed = Vec::new(); 777 | for s in vals { 778 | if let Ok(rc) = RankCriteria::from_str(&s, true) { 779 | parsed.push(rc); 780 | } 781 | } 782 | out.tiebreak = Some(parsed); 783 | } 784 | } 785 | "bind" => { 786 | if let Some(v) = set_string(val_opt, &mut it) { 787 | // accept comma-separated bind entries like skim 788 | let entries = v 789 | .split(',') 790 | .map(|s| s.trim().to_string()) 791 | .filter(|s| !s.is_empty()) 792 | .collect::>(); 793 | out.bind = Some(entries); 794 | } 795 | } 796 | 797 | "pre-select-n" => { 798 | if let Some(v) = set_string(val_opt, &mut it) { 799 | if let Ok(n) = v.parse::() { 800 | out.pre_select_n = Some(n); 801 | } 802 | } 803 | } 804 | "pre-select-pat" => { 805 | if let Some(v) = set_string(val_opt, &mut it) { 806 | out.pre_select_pat = Some(v); 807 | } 808 | } 809 | "pre-select-items" => { 810 | if let Some(v) = set_string(val_opt, &mut it) { 811 | out.pre_select_items = Some(split_csv_like(&v)) 812 | } 813 | } 814 | "pre-select-file" => { 815 | if let Some(v) = set_string(val_opt, &mut it) { 816 | out.pre_select_file = Some(PathBuf::from(v)); 817 | } 818 | } 819 | 820 | _ => { /* unrecognized; ignore */ } 821 | } 822 | continue; 823 | } 824 | 825 | if tok.starts_with('-') { 826 | let flags = tok.trim_start_matches('-'); 827 | let mut chars = flags.chars().peekable(); 828 | while let Some(c) = chars.next() { 829 | match c { 830 | 'm' => out.multi = Some(true), 831 | 'e' => out.exact = Some(true), 832 | 'i' => out.interactive = Some(true), 833 | '1' => out.select1 = Some(true), 834 | '0' => out.exit0 = Some(true), 835 | 'q' => { 836 | // remainder of this token or next token 837 | let rest: String = chars.collect(); 838 | if !rest.is_empty() { 839 | out.query = Some(rest); 840 | } else if let Some(v) = it.next() { 841 | out.query = Some(v); 842 | } 843 | break; 844 | } 845 | _ => {} 846 | } 847 | } 848 | } 849 | } 850 | 851 | out 852 | } 853 | } 854 | 855 | fn set_string>( 856 | val_opt: Option, 857 | it: &mut std::iter::Peekable, 858 | ) -> Option { 859 | if let Some(v) = val_opt { 860 | Some(v) 861 | } else { 862 | it.next() 863 | } 864 | } 865 | 866 | fn split_csv_like(s: &str) -> Vec { 867 | s.split(&[',', ' '] as &[_]) 868 | .filter(|t| !t.is_empty()) 869 | .map(|t| t.to_string()) 870 | .collect() 871 | } 872 | -------------------------------------------------------------------------------- /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 = "adler2" 7 | version = "2.0.0" 8 | source = "registry+https://github.com/rust-lang/crates.io-index" 9 | checksum = "512761e0bb2578dd7380c6baaa0f4ce03e84f95e960231d1dec8bf4d7d6e2627" 10 | 11 | [[package]] 12 | name = "aho-corasick" 13 | version = "1.1.3" 14 | source = "registry+https://github.com/rust-lang/crates.io-index" 15 | checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916" 16 | dependencies = [ 17 | "memchr", 18 | ] 19 | 20 | [[package]] 21 | name = "alloc-no-stdlib" 22 | version = "2.0.4" 23 | source = "registry+https://github.com/rust-lang/crates.io-index" 24 | checksum = "cc7bb162ec39d46ab1ca8c77bf72e890535becd1751bb45f64c597edb4c8c6b3" 25 | 26 | [[package]] 27 | name = "alloc-stdlib" 28 | version = "0.2.2" 29 | source = "registry+https://github.com/rust-lang/crates.io-index" 30 | checksum = "94fb8275041c72129eb51b7d0322c29b8387a0386127718b096429201a5d6ece" 31 | dependencies = [ 32 | "alloc-no-stdlib", 33 | ] 34 | 35 | [[package]] 36 | name = "allocator-api2" 37 | version = "0.2.20" 38 | source = "registry+https://github.com/rust-lang/crates.io-index" 39 | checksum = "45862d1c77f2228b9e10bc609d5bc203d86ebc9b87ad8d5d5167a6c9abf739d9" 40 | 41 | [[package]] 42 | name = "android-tzdata" 43 | version = "0.1.1" 44 | source = "registry+https://github.com/rust-lang/crates.io-index" 45 | checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0" 46 | 47 | [[package]] 48 | name = "android_system_properties" 49 | version = "0.1.5" 50 | source = "registry+https://github.com/rust-lang/crates.io-index" 51 | checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311" 52 | dependencies = [ 53 | "libc", 54 | ] 55 | 56 | [[package]] 57 | name = "anstream" 58 | version = "0.6.18" 59 | source = "registry+https://github.com/rust-lang/crates.io-index" 60 | checksum = "8acc5369981196006228e28809f761875c0327210a891e941f4c683b3a99529b" 61 | dependencies = [ 62 | "anstyle", 63 | "anstyle-parse", 64 | "anstyle-query", 65 | "anstyle-wincon", 66 | "colorchoice", 67 | "is_terminal_polyfill", 68 | "utf8parse", 69 | ] 70 | 71 | [[package]] 72 | name = "anstyle" 73 | version = "1.0.10" 74 | source = "registry+https://github.com/rust-lang/crates.io-index" 75 | checksum = "55cc3b69f167a1ef2e161439aa98aed94e6028e5f9a59be9a6ffb47aef1651f9" 76 | 77 | [[package]] 78 | name = "anstyle-parse" 79 | version = "0.2.6" 80 | source = "registry+https://github.com/rust-lang/crates.io-index" 81 | checksum = "3b2d16507662817a6a20a9ea92df6652ee4f94f914589377d69f3b21bc5798a9" 82 | dependencies = [ 83 | "utf8parse", 84 | ] 85 | 86 | [[package]] 87 | name = "anstyle-query" 88 | version = "1.1.2" 89 | source = "registry+https://github.com/rust-lang/crates.io-index" 90 | checksum = "79947af37f4177cfead1110013d678905c37501914fba0efea834c3fe9a8d60c" 91 | dependencies = [ 92 | "windows-sys 0.59.0", 93 | ] 94 | 95 | [[package]] 96 | name = "anstyle-wincon" 97 | version = "3.0.6" 98 | source = "registry+https://github.com/rust-lang/crates.io-index" 99 | checksum = "2109dbce0e72be3ec00bed26e6a7479ca384ad226efdd66db8fa2e3a38c83125" 100 | dependencies = [ 101 | "anstyle", 102 | "windows-sys 0.59.0", 103 | ] 104 | 105 | [[package]] 106 | name = "arrayvec" 107 | version = "0.7.6" 108 | source = "registry+https://github.com/rust-lang/crates.io-index" 109 | checksum = "7c02d123df017efcdfbd739ef81735b36c5ba83ec3c59c80a9d7ecc718f92e50" 110 | 111 | [[package]] 112 | name = "autocfg" 113 | version = "1.4.0" 114 | source = "registry+https://github.com/rust-lang/crates.io-index" 115 | checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26" 116 | 117 | [[package]] 118 | name = "beef" 119 | version = "0.5.2" 120 | source = "registry+https://github.com/rust-lang/crates.io-index" 121 | checksum = "3a8241f3ebb85c056b509d4327ad0358fbbba6ffb340bf388f26350aeda225b1" 122 | 123 | [[package]] 124 | name = "bindgen" 125 | version = "0.70.1" 126 | source = "registry+https://github.com/rust-lang/crates.io-index" 127 | checksum = "f49d8fed880d473ea71efb9bf597651e77201bdd4893efe54c9e5d65ae04ce6f" 128 | dependencies = [ 129 | "bitflags 2.10.0", 130 | "cexpr", 131 | "clang-sys", 132 | "itertools 0.13.0", 133 | "proc-macro2", 134 | "quote", 135 | "regex", 136 | "rustc-hash", 137 | "shlex", 138 | "syn", 139 | ] 140 | 141 | [[package]] 142 | name = "bit-set" 143 | version = "0.8.0" 144 | source = "registry+https://github.com/rust-lang/crates.io-index" 145 | checksum = "08807e080ed7f9d5433fa9b275196cfc35414f66a0c79d864dc51a0d825231a3" 146 | dependencies = [ 147 | "bit-vec", 148 | ] 149 | 150 | [[package]] 151 | name = "bit-vec" 152 | version = "0.8.0" 153 | source = "registry+https://github.com/rust-lang/crates.io-index" 154 | checksum = "5e764a1d40d510daf35e07be9eb06e75770908c27d411ee6c92109c9840eaaf7" 155 | 156 | [[package]] 157 | name = "bitflags" 158 | version = "1.3.2" 159 | source = "registry+https://github.com/rust-lang/crates.io-index" 160 | checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" 161 | 162 | [[package]] 163 | name = "bitflags" 164 | version = "2.10.0" 165 | source = "registry+https://github.com/rust-lang/crates.io-index" 166 | checksum = "812e12b5285cc515a9c72a5c1d3b6d46a19dac5acfef5265968c166106e31dd3" 167 | 168 | [[package]] 169 | name = "brotli" 170 | version = "8.0.2" 171 | source = "registry+https://github.com/rust-lang/crates.io-index" 172 | checksum = "4bd8b9603c7aa97359dbd97ecf258968c95f3adddd6db2f7e7a5bef101c84560" 173 | dependencies = [ 174 | "alloc-no-stdlib", 175 | "alloc-stdlib", 176 | "brotli-decompressor", 177 | ] 178 | 179 | [[package]] 180 | name = "brotli-decompressor" 181 | version = "5.0.0" 182 | source = "registry+https://github.com/rust-lang/crates.io-index" 183 | checksum = "874bb8112abecc98cbd6d81ea4fa7e94fb9449648c93cc89aa40c81c24d7de03" 184 | dependencies = [ 185 | "alloc-no-stdlib", 186 | "alloc-stdlib", 187 | ] 188 | 189 | [[package]] 190 | name = "bstr" 191 | version = "1.12.0" 192 | source = "registry+https://github.com/rust-lang/crates.io-index" 193 | checksum = "234113d19d0d7d613b40e86fb654acf958910802bcceab913a4f9e7cda03b1a4" 194 | dependencies = [ 195 | "memchr", 196 | "regex-automata", 197 | "serde", 198 | ] 199 | 200 | [[package]] 201 | name = "buf-trait" 202 | version = "0.4.1" 203 | source = "registry+https://github.com/rust-lang/crates.io-index" 204 | checksum = "21eaafc770e8c073d6c3facafe7617e774305d4954aa6351b9c452eb37ee17b4" 205 | dependencies = [ 206 | "zerocopy 0.7.35", 207 | ] 208 | 209 | [[package]] 210 | name = "bumpalo" 211 | version = "3.16.0" 212 | source = "registry+https://github.com/rust-lang/crates.io-index" 213 | checksum = "79296716171880943b8470b5f8d03aa55eb2e645a4874bdbb28adb49162e012c" 214 | 215 | [[package]] 216 | name = "byteorder" 217 | version = "1.5.0" 218 | source = "registry+https://github.com/rust-lang/crates.io-index" 219 | checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" 220 | 221 | [[package]] 222 | name = "bytes" 223 | version = "1.8.0" 224 | source = "registry+https://github.com/rust-lang/crates.io-index" 225 | checksum = "9ac0150caa2ae65ca5bd83f25c7de183dea78d4d366469f148435e2acfbad0da" 226 | 227 | [[package]] 228 | name = "bytesize" 229 | version = "2.1.0" 230 | source = "registry+https://github.com/rust-lang/crates.io-index" 231 | checksum = "f5c434ae3cf0089ca203e9019ebe529c47ff45cefe8af7c85ecb734ef541822f" 232 | 233 | [[package]] 234 | name = "byteyarn" 235 | version = "0.5.1" 236 | source = "registry+https://github.com/rust-lang/crates.io-index" 237 | checksum = "b93e51d26468a15ea59f8525e0c13dc405db43e644a0b1e6d44346c72cf4cf7b" 238 | dependencies = [ 239 | "buf-trait", 240 | ] 241 | 242 | [[package]] 243 | name = "castaway" 244 | version = "0.2.4" 245 | source = "registry+https://github.com/rust-lang/crates.io-index" 246 | checksum = "dec551ab6e7578819132c713a93c022a05d60159dc86e7a7050223577484c55a" 247 | dependencies = [ 248 | "rustversion", 249 | ] 250 | 251 | [[package]] 252 | name = "cc" 253 | version = "1.2.1" 254 | source = "registry+https://github.com/rust-lang/crates.io-index" 255 | checksum = "fd9de9f2205d5ef3fd67e685b0df337994ddd4495e2a28d185500d0e1edfea47" 256 | dependencies = [ 257 | "shlex", 258 | ] 259 | 260 | [[package]] 261 | name = "cexpr" 262 | version = "0.6.0" 263 | source = "registry+https://github.com/rust-lang/crates.io-index" 264 | checksum = "6fac387a98bb7c37292057cffc56d62ecb629900026402633ae9160df93a8766" 265 | dependencies = [ 266 | "nom", 267 | ] 268 | 269 | [[package]] 270 | name = "cfg-if" 271 | version = "1.0.0" 272 | source = "registry+https://github.com/rust-lang/crates.io-index" 273 | checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" 274 | 275 | [[package]] 276 | name = "cfg_aliases" 277 | version = "0.2.1" 278 | source = "registry+https://github.com/rust-lang/crates.io-index" 279 | checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724" 280 | 281 | [[package]] 282 | name = "chrono" 283 | version = "0.4.41" 284 | source = "registry+https://github.com/rust-lang/crates.io-index" 285 | checksum = "c469d952047f47f91b68d1cba3f10d63c11d73e4636f24f08daf0278abf01c4d" 286 | dependencies = [ 287 | "android-tzdata", 288 | "iana-time-zone", 289 | "js-sys", 290 | "num-traits", 291 | "pure-rust-locales", 292 | "serde", 293 | "wasm-bindgen", 294 | "windows-link 0.1.3", 295 | ] 296 | 297 | [[package]] 298 | name = "chrono-humanize" 299 | version = "0.2.3" 300 | source = "registry+https://github.com/rust-lang/crates.io-index" 301 | checksum = "799627e6b4d27827a814e837b9d8a504832086081806d45b1afa34dc982b023b" 302 | dependencies = [ 303 | "chrono", 304 | ] 305 | 306 | [[package]] 307 | name = "clang-sys" 308 | version = "1.8.1" 309 | source = "registry+https://github.com/rust-lang/crates.io-index" 310 | checksum = "0b023947811758c97c59bf9d1c188fd619ad4718dcaa767947df1cadb14f39f4" 311 | dependencies = [ 312 | "glob", 313 | "libc", 314 | "libloading", 315 | ] 316 | 317 | [[package]] 318 | name = "clap" 319 | version = "4.5.46" 320 | source = "registry+https://github.com/rust-lang/crates.io-index" 321 | checksum = "2c5e4fcf9c21d2e544ca1ee9d8552de13019a42aa7dbf32747fa7aaf1df76e57" 322 | dependencies = [ 323 | "clap_builder", 324 | "clap_derive", 325 | ] 326 | 327 | [[package]] 328 | name = "clap_builder" 329 | version = "4.5.46" 330 | source = "registry+https://github.com/rust-lang/crates.io-index" 331 | checksum = "fecb53a0e6fcfb055f686001bc2e2592fa527efaf38dbe81a6a9563562e57d41" 332 | dependencies = [ 333 | "anstream", 334 | "anstyle", 335 | "clap_lex", 336 | "strsim", 337 | ] 338 | 339 | [[package]] 340 | name = "clap_complete" 341 | version = "4.5.57" 342 | source = "registry+https://github.com/rust-lang/crates.io-index" 343 | checksum = "4d9501bd3f5f09f7bbee01da9a511073ed30a80cd7a509f1214bb74eadea71ad" 344 | dependencies = [ 345 | "clap", 346 | ] 347 | 348 | [[package]] 349 | name = "clap_derive" 350 | version = "4.5.45" 351 | source = "registry+https://github.com/rust-lang/crates.io-index" 352 | checksum = "14cb31bb0a7d536caef2639baa7fad459e15c3144efefa6dbd1c84562c4739f6" 353 | dependencies = [ 354 | "anstyle", 355 | "heck", 356 | "proc-macro2", 357 | "pulldown-cmark", 358 | "quote", 359 | "syn", 360 | ] 361 | 362 | [[package]] 363 | name = "clap_lex" 364 | version = "0.7.5" 365 | source = "registry+https://github.com/rust-lang/crates.io-index" 366 | checksum = "b94f61472cee1439c0b966b47e3aca9ae07e45d070759512cd390ea2bebc6675" 367 | 368 | [[package]] 369 | name = "colorchoice" 370 | version = "1.0.3" 371 | source = "registry+https://github.com/rust-lang/crates.io-index" 372 | checksum = "5b63caa9aa9397e2d9480a9b13673856c78d8ac123288526c37d7839f2a86990" 373 | 374 | [[package]] 375 | name = "const_format" 376 | version = "0.2.33" 377 | source = "registry+https://github.com/rust-lang/crates.io-index" 378 | checksum = "50c655d81ff1114fb0dcdea9225ea9f0cc712a6f8d189378e82bdf62a473a64b" 379 | dependencies = [ 380 | "const_format_proc_macros", 381 | ] 382 | 383 | [[package]] 384 | name = "const_format_proc_macros" 385 | version = "0.2.33" 386 | source = "registry+https://github.com/rust-lang/crates.io-index" 387 | checksum = "eff1a44b93f47b1bac19a27932f5c591e43d1ba357ee4f61526c8a25603f0eb1" 388 | dependencies = [ 389 | "proc-macro2", 390 | "quote", 391 | "unicode-xid", 392 | ] 393 | 394 | [[package]] 395 | name = "convert_case" 396 | version = "0.7.1" 397 | source = "registry+https://github.com/rust-lang/crates.io-index" 398 | checksum = "bb402b8d4c85569410425650ce3eddc7d698ed96d39a73f941b08fb63082f1e7" 399 | dependencies = [ 400 | "unicode-segmentation", 401 | ] 402 | 403 | [[package]] 404 | name = "core-foundation-sys" 405 | version = "0.8.7" 406 | source = "registry+https://github.com/rust-lang/crates.io-index" 407 | checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" 408 | 409 | [[package]] 410 | name = "crc32fast" 411 | version = "1.4.2" 412 | source = "registry+https://github.com/rust-lang/crates.io-index" 413 | checksum = "a97769d94ddab943e4510d138150169a2758b5ef3eb191a9ee688de3e23ef7b3" 414 | dependencies = [ 415 | "cfg-if", 416 | ] 417 | 418 | [[package]] 419 | name = "crossbeam" 420 | version = "0.8.4" 421 | source = "registry+https://github.com/rust-lang/crates.io-index" 422 | checksum = "1137cd7e7fc0fb5d3c5a8678be38ec56e819125d8d7907411fe24ccb943faca8" 423 | dependencies = [ 424 | "crossbeam-channel", 425 | "crossbeam-deque", 426 | "crossbeam-epoch", 427 | "crossbeam-queue", 428 | "crossbeam-utils", 429 | ] 430 | 431 | [[package]] 432 | name = "crossbeam-channel" 433 | version = "0.5.13" 434 | source = "registry+https://github.com/rust-lang/crates.io-index" 435 | checksum = "33480d6946193aa8033910124896ca395333cae7e2d1113d1fef6c3272217df2" 436 | dependencies = [ 437 | "crossbeam-utils", 438 | ] 439 | 440 | [[package]] 441 | name = "crossbeam-deque" 442 | version = "0.8.5" 443 | source = "registry+https://github.com/rust-lang/crates.io-index" 444 | checksum = "613f8cc01fe9cf1a3eb3d7f488fd2fa8388403e97039e2f73692932e291a770d" 445 | dependencies = [ 446 | "crossbeam-epoch", 447 | "crossbeam-utils", 448 | ] 449 | 450 | [[package]] 451 | name = "crossbeam-epoch" 452 | version = "0.9.18" 453 | source = "registry+https://github.com/rust-lang/crates.io-index" 454 | checksum = "5b82ac4a3c2ca9c3460964f020e1402edd5753411d7737aa39c3714ad1b5420e" 455 | dependencies = [ 456 | "crossbeam-utils", 457 | ] 458 | 459 | [[package]] 460 | name = "crossbeam-queue" 461 | version = "0.3.11" 462 | source = "registry+https://github.com/rust-lang/crates.io-index" 463 | checksum = "df0346b5d5e76ac2fe4e327c5fd1118d6be7c51dfb18f9b7922923f287471e35" 464 | dependencies = [ 465 | "crossbeam-utils", 466 | ] 467 | 468 | [[package]] 469 | name = "crossbeam-utils" 470 | version = "0.8.20" 471 | source = "registry+https://github.com/rust-lang/crates.io-index" 472 | checksum = "22ec99545bb0ed0ea7bb9b8e1e9122ea386ff8a48c0922e43f36d45ab09e0e80" 473 | 474 | [[package]] 475 | name = "crossterm" 476 | version = "0.29.0" 477 | source = "registry+https://github.com/rust-lang/crates.io-index" 478 | checksum = "d8b9f2e4c67f833b660cdb0a3523065869fb35570177239812ed4c905aeff87b" 479 | dependencies = [ 480 | "bitflags 2.10.0", 481 | "crossterm_winapi", 482 | "derive_more", 483 | "document-features", 484 | "mio", 485 | "parking_lot", 486 | "rustix 1.0.8", 487 | "signal-hook", 488 | "signal-hook-mio", 489 | "winapi", 490 | ] 491 | 492 | [[package]] 493 | name = "crossterm_winapi" 494 | version = "0.9.1" 495 | source = "registry+https://github.com/rust-lang/crates.io-index" 496 | checksum = "acdd7c62a3665c7f6830a51635d9ac9b23ed385797f70a83bb8bafe9c572ab2b" 497 | dependencies = [ 498 | "winapi", 499 | ] 500 | 501 | [[package]] 502 | name = "darling" 503 | version = "0.20.10" 504 | source = "registry+https://github.com/rust-lang/crates.io-index" 505 | checksum = "6f63b86c8a8826a49b8c21f08a2d07338eec8d900540f8630dc76284be802989" 506 | dependencies = [ 507 | "darling_core", 508 | "darling_macro", 509 | ] 510 | 511 | [[package]] 512 | name = "darling_core" 513 | version = "0.20.10" 514 | source = "registry+https://github.com/rust-lang/crates.io-index" 515 | checksum = "95133861a8032aaea082871032f5815eb9e98cef03fa916ab4500513994df9e5" 516 | dependencies = [ 517 | "fnv", 518 | "ident_case", 519 | "proc-macro2", 520 | "quote", 521 | "strsim", 522 | "syn", 523 | ] 524 | 525 | [[package]] 526 | name = "darling_macro" 527 | version = "0.20.10" 528 | source = "registry+https://github.com/rust-lang/crates.io-index" 529 | checksum = "d336a2a514f6ccccaa3e09b02d41d35330c07ddf03a62165fcec10bb561c7806" 530 | dependencies = [ 531 | "darling_core", 532 | "quote", 533 | "syn", 534 | ] 535 | 536 | [[package]] 537 | name = "defer-drop" 538 | version = "1.3.0" 539 | source = "registry+https://github.com/rust-lang/crates.io-index" 540 | checksum = "f613ec9fa66a6b28cdb1842b27f9adf24f39f9afc4dcdd9fdecee4aca7945c57" 541 | dependencies = [ 542 | "crossbeam-channel", 543 | "once_cell", 544 | ] 545 | 546 | [[package]] 547 | name = "deranged" 548 | version = "0.4.0" 549 | source = "registry+https://github.com/rust-lang/crates.io-index" 550 | checksum = "9c9e6a11ca8224451684bc0d7d5a7adbf8f2fd6887261a1cfc3c0432f9d4068e" 551 | dependencies = [ 552 | "powerfmt", 553 | ] 554 | 555 | [[package]] 556 | name = "derive_builder" 557 | version = "0.20.2" 558 | source = "registry+https://github.com/rust-lang/crates.io-index" 559 | checksum = "507dfb09ea8b7fa618fcf76e953f4f5e192547945816d5358edffe39f6f94947" 560 | dependencies = [ 561 | "derive_builder_macro", 562 | ] 563 | 564 | [[package]] 565 | name = "derive_builder_core" 566 | version = "0.20.2" 567 | source = "registry+https://github.com/rust-lang/crates.io-index" 568 | checksum = "2d5bcf7b024d6835cfb3d473887cd966994907effbe9227e8c8219824d06c4e8" 569 | dependencies = [ 570 | "darling", 571 | "proc-macro2", 572 | "quote", 573 | "syn", 574 | ] 575 | 576 | [[package]] 577 | name = "derive_builder_macro" 578 | version = "0.20.2" 579 | source = "registry+https://github.com/rust-lang/crates.io-index" 580 | checksum = "ab63b0e2bf4d5928aff72e83a7dace85d7bba5fe12dcc3c5a572d78caffd3f3c" 581 | dependencies = [ 582 | "derive_builder_core", 583 | "syn", 584 | ] 585 | 586 | [[package]] 587 | name = "derive_more" 588 | version = "2.0.1" 589 | source = "registry+https://github.com/rust-lang/crates.io-index" 590 | checksum = "093242cf7570c207c83073cf82f79706fe7b8317e98620a47d5be7c3d8497678" 591 | dependencies = [ 592 | "derive_more-impl", 593 | ] 594 | 595 | [[package]] 596 | name = "derive_more-impl" 597 | version = "2.0.1" 598 | source = "registry+https://github.com/rust-lang/crates.io-index" 599 | checksum = "bda628edc44c4bb645fbe0f758797143e4e07926f7ebf4e9bdfbd3d2ce621df3" 600 | dependencies = [ 601 | "convert_case", 602 | "proc-macro2", 603 | "quote", 604 | "syn", 605 | ] 606 | 607 | [[package]] 608 | name = "dirs" 609 | version = "6.0.0" 610 | source = "registry+https://github.com/rust-lang/crates.io-index" 611 | checksum = "c3e8aa94d75141228480295a7d0e7feb620b1a5ad9f12bc40be62411e38cce4e" 612 | dependencies = [ 613 | "dirs-sys", 614 | ] 615 | 616 | [[package]] 617 | name = "dirs-next" 618 | version = "2.0.0" 619 | source = "registry+https://github.com/rust-lang/crates.io-index" 620 | checksum = "b98cf8ebf19c3d1b223e151f99a4f9f0690dca41414773390fc824184ac833e1" 621 | dependencies = [ 622 | "cfg-if", 623 | "dirs-sys-next", 624 | ] 625 | 626 | [[package]] 627 | name = "dirs-sys" 628 | version = "0.5.0" 629 | source = "registry+https://github.com/rust-lang/crates.io-index" 630 | checksum = "e01a3366d27ee9890022452ee61b2b63a67e6f13f58900b651ff5665f0bb1fab" 631 | dependencies = [ 632 | "libc", 633 | "option-ext", 634 | "redox_users 0.5.2", 635 | "windows-sys 0.61.2", 636 | ] 637 | 638 | [[package]] 639 | name = "dirs-sys-next" 640 | version = "0.1.2" 641 | source = "registry+https://github.com/rust-lang/crates.io-index" 642 | checksum = "4ebda144c4fe02d1f7ea1a7d9641b6fc6b580adcfa024ae48797ecdeb6825b4d" 643 | dependencies = [ 644 | "libc", 645 | "redox_users 0.4.6", 646 | "winapi", 647 | ] 648 | 649 | [[package]] 650 | name = "doctest-file" 651 | version = "1.0.0" 652 | source = "registry+https://github.com/rust-lang/crates.io-index" 653 | checksum = "aac81fa3e28d21450aa4d2ac065992ba96a1d7303efbce51a95f4fd175b67562" 654 | 655 | [[package]] 656 | name = "document-features" 657 | version = "0.2.12" 658 | source = "registry+https://github.com/rust-lang/crates.io-index" 659 | checksum = "d4b8a88685455ed29a21542a33abd9cb6510b6b129abadabdcef0f4c55bc8f61" 660 | dependencies = [ 661 | "litrs", 662 | ] 663 | 664 | [[package]] 665 | name = "either" 666 | version = "1.13.0" 667 | source = "registry+https://github.com/rust-lang/crates.io-index" 668 | checksum = "60b1af1c220855b6ceac025d3f6ecdd2b7c4894bfe9cd9bda4fbb4bc7c0d4cf0" 669 | 670 | [[package]] 671 | name = "env_filter" 672 | version = "0.1.3" 673 | source = "registry+https://github.com/rust-lang/crates.io-index" 674 | checksum = "186e05a59d4c50738528153b83b0b0194d3a29507dfec16eccd4b342903397d0" 675 | dependencies = [ 676 | "log", 677 | "regex", 678 | ] 679 | 680 | [[package]] 681 | name = "env_home" 682 | version = "0.1.0" 683 | source = "registry+https://github.com/rust-lang/crates.io-index" 684 | checksum = "c7f84e12ccf0a7ddc17a6c41c93326024c42920d7ee630d04950e6926645c0fe" 685 | 686 | [[package]] 687 | name = "env_logger" 688 | version = "0.11.8" 689 | source = "registry+https://github.com/rust-lang/crates.io-index" 690 | checksum = "13c863f0904021b108aa8b2f55046443e6b1ebde8fd4a15c399893aae4fa069f" 691 | dependencies = [ 692 | "anstream", 693 | "anstyle", 694 | "env_filter", 695 | "jiff", 696 | "log", 697 | ] 698 | 699 | [[package]] 700 | name = "equivalent" 701 | version = "1.0.1" 702 | source = "registry+https://github.com/rust-lang/crates.io-index" 703 | checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" 704 | 705 | [[package]] 706 | name = "erased-serde" 707 | version = "0.4.5" 708 | source = "registry+https://github.com/rust-lang/crates.io-index" 709 | checksum = "24e2389d65ab4fab27dc2a5de7b191e1f6617d1f1c8855c0dc569c94a4cbb18d" 710 | dependencies = [ 711 | "serde", 712 | "typeid", 713 | ] 714 | 715 | [[package]] 716 | name = "errno" 717 | version = "0.3.13" 718 | source = "registry+https://github.com/rust-lang/crates.io-index" 719 | checksum = "778e2ac28f6c47af28e4907f13ffd1e1ddbd400980a9abd7c8df189bf578a5ad" 720 | dependencies = [ 721 | "libc", 722 | "windows-sys 0.59.0", 723 | ] 724 | 725 | [[package]] 726 | name = "fancy-regex" 727 | version = "0.16.1" 728 | source = "registry+https://github.com/rust-lang/crates.io-index" 729 | checksum = "bf04c5ec15464ace8355a7b440a33aece288993475556d461154d7a62ad9947c" 730 | dependencies = [ 731 | "bit-set", 732 | "regex-automata", 733 | "regex-syntax", 734 | ] 735 | 736 | [[package]] 737 | name = "flate2" 738 | version = "1.0.35" 739 | source = "registry+https://github.com/rust-lang/crates.io-index" 740 | checksum = "c936bfdafb507ebbf50b8074c54fa31c5be9a1e7e5f467dd659697041407d07c" 741 | dependencies = [ 742 | "crc32fast", 743 | "miniz_oxide", 744 | ] 745 | 746 | [[package]] 747 | name = "fnv" 748 | version = "1.0.7" 749 | source = "registry+https://github.com/rust-lang/crates.io-index" 750 | checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" 751 | 752 | [[package]] 753 | name = "foldhash" 754 | version = "0.1.3" 755 | source = "registry+https://github.com/rust-lang/crates.io-index" 756 | checksum = "f81ec6369c545a7d40e4589b5597581fa1c441fe1cce96dd1de43159910a36a2" 757 | 758 | [[package]] 759 | name = "fuzzy-matcher" 760 | version = "0.3.7" 761 | source = "registry+https://github.com/rust-lang/crates.io-index" 762 | checksum = "54614a3312934d066701a80f20f15fa3b56d67ac7722b39eea5b4c9dd1d66c94" 763 | dependencies = [ 764 | "thread_local", 765 | ] 766 | 767 | [[package]] 768 | name = "getrandom" 769 | version = "0.2.15" 770 | source = "registry+https://github.com/rust-lang/crates.io-index" 771 | checksum = "c4567c8db10ae91089c99af84c68c38da3ec2f087c3f82960bcdbf3656b6f4d7" 772 | dependencies = [ 773 | "cfg-if", 774 | "libc", 775 | "wasi 0.11.0+wasi-snapshot-preview1", 776 | ] 777 | 778 | [[package]] 779 | name = "getrandom" 780 | version = "0.3.3" 781 | source = "registry+https://github.com/rust-lang/crates.io-index" 782 | checksum = "26145e563e54f2cadc477553f1ec5ee650b00862f0a58bcd12cbdc5f0ea2d2f4" 783 | dependencies = [ 784 | "cfg-if", 785 | "libc", 786 | "r-efi", 787 | "wasi 0.14.2+wasi-0.2.4", 788 | ] 789 | 790 | [[package]] 791 | name = "glob" 792 | version = "0.3.1" 793 | source = "registry+https://github.com/rust-lang/crates.io-index" 794 | checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b" 795 | 796 | [[package]] 797 | name = "hashbrown" 798 | version = "0.15.2" 799 | source = "registry+https://github.com/rust-lang/crates.io-index" 800 | checksum = "bf151400ff0baff5465007dd2f3e717f3fe502074ca563069ce3a6629d07b289" 801 | dependencies = [ 802 | "allocator-api2", 803 | "equivalent", 804 | "foldhash", 805 | ] 806 | 807 | [[package]] 808 | name = "heck" 809 | version = "0.5.0" 810 | source = "registry+https://github.com/rust-lang/crates.io-index" 811 | checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" 812 | 813 | [[package]] 814 | name = "hex" 815 | version = "0.4.3" 816 | source = "registry+https://github.com/rust-lang/crates.io-index" 817 | checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" 818 | 819 | [[package]] 820 | name = "iana-time-zone" 821 | version = "0.1.61" 822 | source = "registry+https://github.com/rust-lang/crates.io-index" 823 | checksum = "235e081f3925a06703c2d0117ea8b91f042756fd6e7a6e5d901e8ca1a996b220" 824 | dependencies = [ 825 | "android_system_properties", 826 | "core-foundation-sys", 827 | "iana-time-zone-haiku", 828 | "js-sys", 829 | "wasm-bindgen", 830 | "windows-core 0.52.0", 831 | ] 832 | 833 | [[package]] 834 | name = "iana-time-zone-haiku" 835 | version = "0.1.2" 836 | source = "registry+https://github.com/rust-lang/crates.io-index" 837 | checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f" 838 | dependencies = [ 839 | "cc", 840 | ] 841 | 842 | [[package]] 843 | name = "ident_case" 844 | version = "1.0.1" 845 | source = "registry+https://github.com/rust-lang/crates.io-index" 846 | checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" 847 | 848 | [[package]] 849 | name = "indexmap" 850 | version = "2.11.0" 851 | source = "registry+https://github.com/rust-lang/crates.io-index" 852 | checksum = "f2481980430f9f78649238835720ddccc57e52df14ffce1c6f37391d61b563e9" 853 | dependencies = [ 854 | "equivalent", 855 | "hashbrown", 856 | ] 857 | 858 | [[package]] 859 | name = "interprocess" 860 | version = "2.2.2" 861 | source = "registry+https://github.com/rust-lang/crates.io-index" 862 | checksum = "894148491d817cb36b6f778017b8ac46b17408d522dd90f539d677ea938362eb" 863 | dependencies = [ 864 | "doctest-file", 865 | "libc", 866 | "recvmsg", 867 | "widestring", 868 | "windows-sys 0.52.0", 869 | ] 870 | 871 | [[package]] 872 | name = "inventory" 873 | version = "0.3.15" 874 | source = "registry+https://github.com/rust-lang/crates.io-index" 875 | checksum = "f958d3d68f4167080a18141e10381e7634563984a537f2a49a30fd8e53ac5767" 876 | 877 | [[package]] 878 | name = "is_ci" 879 | version = "1.2.0" 880 | source = "registry+https://github.com/rust-lang/crates.io-index" 881 | checksum = "7655c9839580ee829dfacba1d1278c2b7883e50a277ff7541299489d6bdfdc45" 882 | 883 | [[package]] 884 | name = "is_debug" 885 | version = "1.1.0" 886 | source = "registry+https://github.com/rust-lang/crates.io-index" 887 | checksum = "1fe266d2e243c931d8190177f20bf7f24eed45e96f39e87dc49a27b32d12d407" 888 | 889 | [[package]] 890 | name = "is_terminal_polyfill" 891 | version = "1.70.1" 892 | source = "registry+https://github.com/rust-lang/crates.io-index" 893 | checksum = "7943c866cc5cd64cbc25b2e01621d07fa8eb2a1a23160ee81ce38704e97b8ecf" 894 | 895 | [[package]] 896 | name = "itertools" 897 | version = "0.13.0" 898 | source = "registry+https://github.com/rust-lang/crates.io-index" 899 | checksum = "413ee7dfc52ee1a4949ceeb7dbc8a33f2d6c088194d9f922fb8318faf1f01186" 900 | dependencies = [ 901 | "either", 902 | ] 903 | 904 | [[package]] 905 | name = "itertools" 906 | version = "0.14.0" 907 | source = "registry+https://github.com/rust-lang/crates.io-index" 908 | checksum = "2b192c782037fadd9cfa75548310488aabdbf3d2da73885b31bd0abd03351285" 909 | dependencies = [ 910 | "either", 911 | ] 912 | 913 | [[package]] 914 | name = "itoa" 915 | version = "1.0.13" 916 | source = "registry+https://github.com/rust-lang/crates.io-index" 917 | checksum = "540654e97a3f4470a492cd30ff187bc95d89557a903a2bbf112e2fae98104ef2" 918 | 919 | [[package]] 920 | name = "jiff" 921 | version = "0.2.15" 922 | source = "registry+https://github.com/rust-lang/crates.io-index" 923 | checksum = "be1f93b8b1eb69c77f24bbb0afdf66f54b632ee39af40ca21c4365a1d7347e49" 924 | dependencies = [ 925 | "jiff-static", 926 | "log", 927 | "portable-atomic", 928 | "portable-atomic-util", 929 | "serde", 930 | ] 931 | 932 | [[package]] 933 | name = "jiff-static" 934 | version = "0.2.15" 935 | source = "registry+https://github.com/rust-lang/crates.io-index" 936 | checksum = "03343451ff899767262ec32146f6d559dd759fdadf42ff0e227c7c48f72594b4" 937 | dependencies = [ 938 | "proc-macro2", 939 | "quote", 940 | "syn", 941 | ] 942 | 943 | [[package]] 944 | name = "js-sys" 945 | version = "0.3.72" 946 | source = "registry+https://github.com/rust-lang/crates.io-index" 947 | checksum = "6a88f1bda2bd75b0452a14784937d796722fdebfe50df998aeb3f0b7603019a9" 948 | dependencies = [ 949 | "wasm-bindgen", 950 | ] 951 | 952 | [[package]] 953 | name = "lazy_static" 954 | version = "1.5.0" 955 | source = "registry+https://github.com/rust-lang/crates.io-index" 956 | checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" 957 | 958 | [[package]] 959 | name = "lean_string" 960 | version = "0.5.1" 961 | source = "registry+https://github.com/rust-lang/crates.io-index" 962 | checksum = "962df00ba70ac8d5ca5c064e17e5c3d090c087fd8d21aa45096c716b169da514" 963 | dependencies = [ 964 | "castaway", 965 | "itoa", 966 | "ryu", 967 | "serde", 968 | ] 969 | 970 | [[package]] 971 | name = "libc" 972 | version = "0.2.174" 973 | source = "registry+https://github.com/rust-lang/crates.io-index" 974 | checksum = "1171693293099992e19cddea4e8b849964e9846f4acee11b3948bcc337be8776" 975 | 976 | [[package]] 977 | name = "libloading" 978 | version = "0.8.5" 979 | source = "registry+https://github.com/rust-lang/crates.io-index" 980 | checksum = "4979f22fdb869068da03c9f7528f8297c6fd2606bc3a4affe42e6a823fdb8da4" 981 | dependencies = [ 982 | "cfg-if", 983 | "windows-targets", 984 | ] 985 | 986 | [[package]] 987 | name = "libproc" 988 | version = "0.14.10" 989 | source = "registry+https://github.com/rust-lang/crates.io-index" 990 | checksum = "e78a09b56be5adbcad5aa1197371688dc6bb249a26da3bca2011ee2fb987ebfb" 991 | dependencies = [ 992 | "bindgen", 993 | "errno", 994 | "libc", 995 | ] 996 | 997 | [[package]] 998 | name = "libredox" 999 | version = "0.1.3" 1000 | source = "registry+https://github.com/rust-lang/crates.io-index" 1001 | checksum = "c0ff37bd590ca25063e35af745c343cb7a0271906fb7b37e4813e8f79f00268d" 1002 | dependencies = [ 1003 | "bitflags 2.10.0", 1004 | "libc", 1005 | ] 1006 | 1007 | [[package]] 1008 | name = "linked-hash-map" 1009 | version = "0.5.6" 1010 | source = "registry+https://github.com/rust-lang/crates.io-index" 1011 | checksum = "0717cef1bc8b636c6e1c1bbdefc09e6322da8a9321966e8928ef80d20f7f770f" 1012 | dependencies = [ 1013 | "serde", 1014 | ] 1015 | 1016 | [[package]] 1017 | name = "linux-raw-sys" 1018 | version = "0.4.14" 1019 | source = "registry+https://github.com/rust-lang/crates.io-index" 1020 | checksum = "78b3ae25bc7c8c38cec158d1f2757ee79e9b3740fbc7ccf0e59e4b08d793fa89" 1021 | 1022 | [[package]] 1023 | name = "linux-raw-sys" 1024 | version = "0.9.4" 1025 | source = "registry+https://github.com/rust-lang/crates.io-index" 1026 | checksum = "cd945864f07fe9f5371a27ad7b52a172b4b499999f1d97574c9fa68373937e12" 1027 | 1028 | [[package]] 1029 | name = "litrs" 1030 | version = "1.0.0" 1031 | source = "registry+https://github.com/rust-lang/crates.io-index" 1032 | checksum = "11d3d7f243d5c5a8b9bb5d6dd2b1602c0cb0b9db1621bafc7ed66e35ff9fe092" 1033 | 1034 | [[package]] 1035 | name = "lock_api" 1036 | version = "0.4.12" 1037 | source = "registry+https://github.com/rust-lang/crates.io-index" 1038 | checksum = "07af8b9cdd281b7915f413fa73f29ebd5d55d0d3f0155584dade1ff18cea1b17" 1039 | dependencies = [ 1040 | "autocfg", 1041 | "scopeguard", 1042 | ] 1043 | 1044 | [[package]] 1045 | name = "log" 1046 | version = "0.4.27" 1047 | source = "registry+https://github.com/rust-lang/crates.io-index" 1048 | checksum = "13dc2df351e3202783a1fe0d44375f7295ffb4049267b0f3018346dc122a1d94" 1049 | 1050 | [[package]] 1051 | name = "lru" 1052 | version = "0.12.5" 1053 | source = "registry+https://github.com/rust-lang/crates.io-index" 1054 | checksum = "234cf4f4a04dc1f57e24b96cc0cd600cf2af460d4161ac5ecdd0af8e1f3b2a38" 1055 | dependencies = [ 1056 | "hashbrown", 1057 | ] 1058 | 1059 | [[package]] 1060 | name = "lscolors" 1061 | version = "0.20.0" 1062 | source = "registry+https://github.com/rust-lang/crates.io-index" 1063 | checksum = "61183da5de8ba09a58e330d55e5ea796539d8443bd00fdeb863eac39724aa4ab" 1064 | dependencies = [ 1065 | "aho-corasick", 1066 | "nu-ansi-term", 1067 | ] 1068 | 1069 | [[package]] 1070 | name = "mach2" 1071 | version = "0.4.2" 1072 | source = "registry+https://github.com/rust-lang/crates.io-index" 1073 | checksum = "19b955cdeb2a02b9117f121ce63aa52d08ade45de53e48fe6a38b39c10f6f709" 1074 | dependencies = [ 1075 | "libc", 1076 | ] 1077 | 1078 | [[package]] 1079 | name = "memchr" 1080 | version = "2.7.4" 1081 | source = "registry+https://github.com/rust-lang/crates.io-index" 1082 | checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" 1083 | 1084 | [[package]] 1085 | name = "miette" 1086 | version = "7.6.0" 1087 | source = "registry+https://github.com/rust-lang/crates.io-index" 1088 | checksum = "5f98efec8807c63c752b5bd61f862c165c115b0a35685bdcfd9238c7aeb592b7" 1089 | dependencies = [ 1090 | "cfg-if", 1091 | "miette-derive", 1092 | "owo-colors", 1093 | "supports-color", 1094 | "supports-hyperlinks", 1095 | "supports-unicode", 1096 | "terminal_size", 1097 | "textwrap", 1098 | "unicode-width 0.1.14", 1099 | ] 1100 | 1101 | [[package]] 1102 | name = "miette-derive" 1103 | version = "7.6.0" 1104 | source = "registry+https://github.com/rust-lang/crates.io-index" 1105 | checksum = "db5b29714e950dbb20d5e6f74f9dcec4edbcc1067bb7f8ed198c097b8c1a818b" 1106 | dependencies = [ 1107 | "proc-macro2", 1108 | "quote", 1109 | "syn", 1110 | ] 1111 | 1112 | [[package]] 1113 | name = "minimal-lexical" 1114 | version = "0.2.1" 1115 | source = "registry+https://github.com/rust-lang/crates.io-index" 1116 | checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" 1117 | 1118 | [[package]] 1119 | name = "miniz_oxide" 1120 | version = "0.8.0" 1121 | source = "registry+https://github.com/rust-lang/crates.io-index" 1122 | checksum = "e2d80299ef12ff69b16a84bb182e3b9df68b5a91574d3d4fa6e41b65deec4df1" 1123 | dependencies = [ 1124 | "adler2", 1125 | ] 1126 | 1127 | [[package]] 1128 | name = "mio" 1129 | version = "1.0.3" 1130 | source = "registry+https://github.com/rust-lang/crates.io-index" 1131 | checksum = "2886843bf800fba2e3377cff24abf6379b4c4d5c6681eaf9ea5b0d15090450bd" 1132 | dependencies = [ 1133 | "libc", 1134 | "log", 1135 | "wasi 0.11.0+wasi-snapshot-preview1", 1136 | "windows-sys 0.52.0", 1137 | ] 1138 | 1139 | [[package]] 1140 | name = "nix" 1141 | version = "0.29.0" 1142 | source = "registry+https://github.com/rust-lang/crates.io-index" 1143 | checksum = "71e2746dc3a24dd78b3cfcb7be93368c6de9963d30f43a6a73998a9cf4b17b46" 1144 | dependencies = [ 1145 | "bitflags 2.10.0", 1146 | "cfg-if", 1147 | "cfg_aliases", 1148 | "libc", 1149 | ] 1150 | 1151 | [[package]] 1152 | name = "nix" 1153 | version = "0.30.1" 1154 | source = "registry+https://github.com/rust-lang/crates.io-index" 1155 | checksum = "74523f3a35e05aba87a1d978330aef40f67b0304ac79c1c00b294c9830543db6" 1156 | dependencies = [ 1157 | "bitflags 2.10.0", 1158 | "cfg-if", 1159 | "cfg_aliases", 1160 | "libc", 1161 | ] 1162 | 1163 | [[package]] 1164 | name = "nom" 1165 | version = "7.1.3" 1166 | source = "registry+https://github.com/rust-lang/crates.io-index" 1167 | checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a" 1168 | dependencies = [ 1169 | "memchr", 1170 | "minimal-lexical", 1171 | ] 1172 | 1173 | [[package]] 1174 | name = "ntapi" 1175 | version = "0.4.1" 1176 | source = "registry+https://github.com/rust-lang/crates.io-index" 1177 | checksum = "e8a3895c6391c39d7fe7ebc444a87eb2991b2a0bc718fdabd071eec617fc68e4" 1178 | dependencies = [ 1179 | "winapi", 1180 | ] 1181 | 1182 | [[package]] 1183 | name = "nu-ansi-term" 1184 | version = "0.50.3" 1185 | source = "registry+https://github.com/rust-lang/crates.io-index" 1186 | checksum = "7957b9740744892f114936ab4a57b3f487491bbeafaf8083688b16841a4240e5" 1187 | dependencies = [ 1188 | "windows-sys 0.61.2", 1189 | ] 1190 | 1191 | [[package]] 1192 | name = "nu-cmd-base" 1193 | version = "0.109.0" 1194 | source = "registry+https://github.com/rust-lang/crates.io-index" 1195 | checksum = "0ae6898b080619528cabe9fd6d2ba0b6c7553ea34a2792e8f5ad667e41db36ed" 1196 | dependencies = [ 1197 | "indexmap", 1198 | "miette", 1199 | "nu-engine", 1200 | "nu-parser", 1201 | "nu-path", 1202 | "nu-protocol", 1203 | ] 1204 | 1205 | [[package]] 1206 | name = "nu-cmd-lang" 1207 | version = "0.109.0" 1208 | source = "registry+https://github.com/rust-lang/crates.io-index" 1209 | checksum = "6ac8b89425b9bfe4088a4580cabc9c8a3019b96a9628b4b2cbe8d1e7e9e5ce2d" 1210 | dependencies = [ 1211 | "itertools 0.14.0", 1212 | "nu-cmd-base", 1213 | "nu-engine", 1214 | "nu-experimental", 1215 | "nu-parser", 1216 | "nu-protocol", 1217 | "nu-utils", 1218 | "shadow-rs", 1219 | ] 1220 | 1221 | [[package]] 1222 | name = "nu-color-config" 1223 | version = "0.109.0" 1224 | source = "registry+https://github.com/rust-lang/crates.io-index" 1225 | checksum = "16eec8b22be26b9d12973099ea342d1755d36cb21601defe562dc24d5fc12406" 1226 | dependencies = [ 1227 | "nu-ansi-term", 1228 | "nu-engine", 1229 | "nu-json", 1230 | "nu-protocol", 1231 | "serde", 1232 | ] 1233 | 1234 | [[package]] 1235 | name = "nu-derive-value" 1236 | version = "0.109.0" 1237 | source = "registry+https://github.com/rust-lang/crates.io-index" 1238 | checksum = "9b404c41d3905b98bafb59fccbe3bd56f0c3e8cc4a9d0517b98b53c964675def" 1239 | dependencies = [ 1240 | "heck", 1241 | "proc-macro-error2", 1242 | "proc-macro2", 1243 | "quote", 1244 | "syn", 1245 | ] 1246 | 1247 | [[package]] 1248 | name = "nu-engine" 1249 | version = "0.109.0" 1250 | source = "registry+https://github.com/rust-lang/crates.io-index" 1251 | checksum = "188cc8702c82662ef34af1b06acf6581d027ea02101636f193e0c045e47eee15" 1252 | dependencies = [ 1253 | "fancy-regex", 1254 | "log", 1255 | "nu-experimental", 1256 | "nu-glob", 1257 | "nu-path", 1258 | "nu-protocol", 1259 | "nu-utils", 1260 | ] 1261 | 1262 | [[package]] 1263 | name = "nu-experimental" 1264 | version = "0.109.0" 1265 | source = "registry+https://github.com/rust-lang/crates.io-index" 1266 | checksum = "9eda6983d400a4128f50001cf716eec221a49d79c864b14cf784ce440eb3825c" 1267 | dependencies = [ 1268 | "itertools 0.14.0", 1269 | "thiserror 2.0.12", 1270 | ] 1271 | 1272 | [[package]] 1273 | name = "nu-glob" 1274 | version = "0.109.0" 1275 | source = "registry+https://github.com/rust-lang/crates.io-index" 1276 | checksum = "cacb18ace94927d188998b514ea4188f7557e39e95231324b6f6fb2fedb0bdd7" 1277 | 1278 | [[package]] 1279 | name = "nu-json" 1280 | version = "0.109.0" 1281 | source = "registry+https://github.com/rust-lang/crates.io-index" 1282 | checksum = "69c4b45e019de730b9e31fc65402e068c83f2bb30aec74d12f32f86c1a51c2e5" 1283 | dependencies = [ 1284 | "linked-hash-map", 1285 | "nu-utils", 1286 | "num-traits", 1287 | "serde", 1288 | "serde_json", 1289 | ] 1290 | 1291 | [[package]] 1292 | name = "nu-parser" 1293 | version = "0.109.0" 1294 | source = "registry+https://github.com/rust-lang/crates.io-index" 1295 | checksum = "25ce4608d9a7f729e384f8c3a619e24d1004e7c8b9cca35adad3df392f9f97e6" 1296 | dependencies = [ 1297 | "bytesize", 1298 | "chrono", 1299 | "itertools 0.14.0", 1300 | "log", 1301 | "nu-engine", 1302 | "nu-path", 1303 | "nu-plugin-engine", 1304 | "nu-protocol", 1305 | "nu-utils", 1306 | "serde_json", 1307 | ] 1308 | 1309 | [[package]] 1310 | name = "nu-path" 1311 | version = "0.109.0" 1312 | source = "registry+https://github.com/rust-lang/crates.io-index" 1313 | checksum = "4b49218356ce3a174d56fadbac2cb52588d5f0d0ee668fd07eab23bd7a66f00e" 1314 | dependencies = [ 1315 | "dirs", 1316 | "omnipath", 1317 | "pwd", 1318 | "ref-cast", 1319 | ] 1320 | 1321 | [[package]] 1322 | name = "nu-plugin" 1323 | version = "0.109.0" 1324 | source = "registry+https://github.com/rust-lang/crates.io-index" 1325 | checksum = "dcc251aef941f9a1f0e1797774dcd66e83e6a09b9cd12a1a69c45b91b6cd70a8" 1326 | dependencies = [ 1327 | "log", 1328 | "nix 0.30.1", 1329 | "nu-engine", 1330 | "nu-plugin-core", 1331 | "nu-plugin-protocol", 1332 | "nu-protocol", 1333 | "nu-utils", 1334 | "thiserror 2.0.12", 1335 | ] 1336 | 1337 | [[package]] 1338 | name = "nu-plugin-core" 1339 | version = "0.109.0" 1340 | source = "registry+https://github.com/rust-lang/crates.io-index" 1341 | checksum = "9aadb86a7dc31b8af987cbdc6a8008ddff1d3181ad3cab4c4498ff89509729f9" 1342 | dependencies = [ 1343 | "interprocess", 1344 | "log", 1345 | "nu-plugin-protocol", 1346 | "nu-protocol", 1347 | "rmp-serde", 1348 | "serde", 1349 | "serde_json", 1350 | "windows 0.62.2", 1351 | ] 1352 | 1353 | [[package]] 1354 | name = "nu-plugin-engine" 1355 | version = "0.109.0" 1356 | source = "registry+https://github.com/rust-lang/crates.io-index" 1357 | checksum = "beb8f17d41b5686faed754b9d5115d08ea2ab69d1f7e5b32aeef59dc50308870" 1358 | dependencies = [ 1359 | "log", 1360 | "nu-engine", 1361 | "nu-plugin-core", 1362 | "nu-plugin-protocol", 1363 | "nu-protocol", 1364 | "nu-system", 1365 | "nu-utils", 1366 | "serde", 1367 | "windows 0.62.2", 1368 | ] 1369 | 1370 | [[package]] 1371 | name = "nu-plugin-protocol" 1372 | version = "0.109.0" 1373 | source = "registry+https://github.com/rust-lang/crates.io-index" 1374 | checksum = "27d0d776c82611d70e49084f6fff691ee2b6527ea162ee72c4e101e025a190ee" 1375 | dependencies = [ 1376 | "nu-protocol", 1377 | "nu-utils", 1378 | "rmp-serde", 1379 | "semver", 1380 | "serde", 1381 | "typetag", 1382 | ] 1383 | 1384 | [[package]] 1385 | name = "nu-plugin-test-support" 1386 | version = "0.109.0" 1387 | source = "registry+https://github.com/rust-lang/crates.io-index" 1388 | checksum = "1f8978d8b5db3a46a08a5281d0bc72df9863e78bdbea99771b958d019bb67150" 1389 | dependencies = [ 1390 | "nu-ansi-term", 1391 | "nu-cmd-lang", 1392 | "nu-engine", 1393 | "nu-parser", 1394 | "nu-plugin", 1395 | "nu-plugin-core", 1396 | "nu-plugin-engine", 1397 | "nu-plugin-protocol", 1398 | "nu-protocol", 1399 | "similar", 1400 | ] 1401 | 1402 | [[package]] 1403 | name = "nu-protocol" 1404 | version = "0.109.0" 1405 | source = "registry+https://github.com/rust-lang/crates.io-index" 1406 | checksum = "27aea0b941d30e7d835750d64d4d285df21e3e063be77213a3dae80a76cef3a8" 1407 | dependencies = [ 1408 | "brotli", 1409 | "bytes", 1410 | "chrono", 1411 | "chrono-humanize", 1412 | "dirs", 1413 | "dirs-sys", 1414 | "fancy-regex", 1415 | "heck", 1416 | "indexmap", 1417 | "log", 1418 | "lru", 1419 | "memchr", 1420 | "miette", 1421 | "nix 0.30.1", 1422 | "nu-derive-value", 1423 | "nu-experimental", 1424 | "nu-glob", 1425 | "nu-path", 1426 | "nu-system", 1427 | "nu-utils", 1428 | "num-format", 1429 | "os_pipe", 1430 | "rmp-serde", 1431 | "serde", 1432 | "serde_json", 1433 | "strum", 1434 | "strum_macros", 1435 | "thiserror 2.0.12", 1436 | "typetag", 1437 | "web-time", 1438 | "windows 0.62.2", 1439 | "windows-sys 0.61.2", 1440 | ] 1441 | 1442 | [[package]] 1443 | name = "nu-system" 1444 | version = "0.109.0" 1445 | source = "registry+https://github.com/rust-lang/crates.io-index" 1446 | checksum = "5887a3cee21d8e7ca24ca19b45dc32a26fac1a10f98f9ccf3467148ec32f82d0" 1447 | dependencies = [ 1448 | "chrono", 1449 | "itertools 0.14.0", 1450 | "libc", 1451 | "libproc", 1452 | "log", 1453 | "mach2", 1454 | "nix 0.30.1", 1455 | "ntapi", 1456 | "procfs", 1457 | "sysinfo", 1458 | "web-time", 1459 | "windows 0.62.2", 1460 | ] 1461 | 1462 | [[package]] 1463 | name = "nu-utils" 1464 | version = "0.109.0" 1465 | source = "registry+https://github.com/rust-lang/crates.io-index" 1466 | checksum = "8f16f0be98882112a30314aad40d34b21dee368ebdddd10abfc81eff1ec72d3c" 1467 | dependencies = [ 1468 | "byteyarn", 1469 | "crossterm", 1470 | "crossterm_winapi", 1471 | "fancy-regex", 1472 | "lean_string", 1473 | "log", 1474 | "lscolors", 1475 | "memchr", 1476 | "nix 0.30.1", 1477 | "num-format", 1478 | "serde", 1479 | "serde_json", 1480 | "strip-ansi-escapes", 1481 | "sys-locale", 1482 | "unicase", 1483 | ] 1484 | 1485 | [[package]] 1486 | name = "nu_plugin_skim" 1487 | version = "0.21.0" 1488 | dependencies = [ 1489 | "clap", 1490 | "nu-color-config", 1491 | "nu-plugin", 1492 | "nu-plugin-test-support", 1493 | "nu-protocol", 1494 | "shlex", 1495 | "skim", 1496 | ] 1497 | 1498 | [[package]] 1499 | name = "num-conv" 1500 | version = "0.1.0" 1501 | source = "registry+https://github.com/rust-lang/crates.io-index" 1502 | checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9" 1503 | 1504 | [[package]] 1505 | name = "num-format" 1506 | version = "0.4.4" 1507 | source = "registry+https://github.com/rust-lang/crates.io-index" 1508 | checksum = "a652d9771a63711fd3c3deb670acfbe5c30a4072e664d7a3bf5a9e1056ac72c3" 1509 | dependencies = [ 1510 | "arrayvec", 1511 | "itoa", 1512 | ] 1513 | 1514 | [[package]] 1515 | name = "num-traits" 1516 | version = "0.2.19" 1517 | source = "registry+https://github.com/rust-lang/crates.io-index" 1518 | checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" 1519 | dependencies = [ 1520 | "autocfg", 1521 | ] 1522 | 1523 | [[package]] 1524 | name = "num_threads" 1525 | version = "0.1.7" 1526 | source = "registry+https://github.com/rust-lang/crates.io-index" 1527 | checksum = "5c7398b9c8b70908f6371f47ed36737907c87c52af34c268fed0bf0ceb92ead9" 1528 | dependencies = [ 1529 | "libc", 1530 | ] 1531 | 1532 | [[package]] 1533 | name = "objc2-core-foundation" 1534 | version = "0.3.1" 1535 | source = "registry+https://github.com/rust-lang/crates.io-index" 1536 | checksum = "1c10c2894a6fed806ade6027bcd50662746363a9589d3ec9d9bef30a4e4bc166" 1537 | dependencies = [ 1538 | "bitflags 2.10.0", 1539 | ] 1540 | 1541 | [[package]] 1542 | name = "objc2-io-kit" 1543 | version = "0.3.1" 1544 | source = "registry+https://github.com/rust-lang/crates.io-index" 1545 | checksum = "71c1c64d6120e51cd86033f67176b1cb66780c2efe34dec55176f77befd93c0a" 1546 | dependencies = [ 1547 | "libc", 1548 | "objc2-core-foundation", 1549 | ] 1550 | 1551 | [[package]] 1552 | name = "omnipath" 1553 | version = "0.1.6" 1554 | source = "registry+https://github.com/rust-lang/crates.io-index" 1555 | checksum = "80adb31078122c880307e9cdfd4e3361e6545c319f9b9dcafcb03acd3b51a575" 1556 | 1557 | [[package]] 1558 | name = "once_cell" 1559 | version = "1.20.2" 1560 | source = "registry+https://github.com/rust-lang/crates.io-index" 1561 | checksum = "1261fe7e33c73b354eab43b1273a57c8f967d0391e80353e51f764ac02cf6775" 1562 | 1563 | [[package]] 1564 | name = "option-ext" 1565 | version = "0.2.0" 1566 | source = "registry+https://github.com/rust-lang/crates.io-index" 1567 | checksum = "04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7d" 1568 | 1569 | [[package]] 1570 | name = "os_pipe" 1571 | version = "1.2.1" 1572 | source = "registry+https://github.com/rust-lang/crates.io-index" 1573 | checksum = "5ffd2b0a5634335b135d5728d84c5e0fd726954b87111f7506a61c502280d982" 1574 | dependencies = [ 1575 | "libc", 1576 | "windows-sys 0.59.0", 1577 | ] 1578 | 1579 | [[package]] 1580 | name = "owo-colors" 1581 | version = "4.1.0" 1582 | source = "registry+https://github.com/rust-lang/crates.io-index" 1583 | checksum = "fb37767f6569cd834a413442455e0f066d0d522de8630436e2a1761d9726ba56" 1584 | 1585 | [[package]] 1586 | name = "parking_lot" 1587 | version = "0.12.3" 1588 | source = "registry+https://github.com/rust-lang/crates.io-index" 1589 | checksum = "f1bf18183cf54e8d6059647fc3063646a1801cf30896933ec2311622cc4b9a27" 1590 | dependencies = [ 1591 | "lock_api", 1592 | "parking_lot_core", 1593 | ] 1594 | 1595 | [[package]] 1596 | name = "parking_lot_core" 1597 | version = "0.9.10" 1598 | source = "registry+https://github.com/rust-lang/crates.io-index" 1599 | checksum = "1e401f977ab385c9e4e3ab30627d6f26d00e2c73eef317493c4ec6d468726cf8" 1600 | dependencies = [ 1601 | "cfg-if", 1602 | "libc", 1603 | "redox_syscall", 1604 | "smallvec", 1605 | "windows-targets", 1606 | ] 1607 | 1608 | [[package]] 1609 | name = "paste" 1610 | version = "1.0.15" 1611 | source = "registry+https://github.com/rust-lang/crates.io-index" 1612 | checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a" 1613 | 1614 | [[package]] 1615 | name = "portable-atomic" 1616 | version = "1.11.1" 1617 | source = "registry+https://github.com/rust-lang/crates.io-index" 1618 | checksum = "f84267b20a16ea918e43c6a88433c2d54fa145c92a811b5b047ccbe153674483" 1619 | 1620 | [[package]] 1621 | name = "portable-atomic-util" 1622 | version = "0.2.4" 1623 | source = "registry+https://github.com/rust-lang/crates.io-index" 1624 | checksum = "d8a2f0d8d040d7848a709caf78912debcc3f33ee4b3cac47d73d1e1069e83507" 1625 | dependencies = [ 1626 | "portable-atomic", 1627 | ] 1628 | 1629 | [[package]] 1630 | name = "powerfmt" 1631 | version = "0.2.0" 1632 | source = "registry+https://github.com/rust-lang/crates.io-index" 1633 | checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" 1634 | 1635 | [[package]] 1636 | name = "ppv-lite86" 1637 | version = "0.2.21" 1638 | source = "registry+https://github.com/rust-lang/crates.io-index" 1639 | checksum = "85eae3c4ed2f50dcfe72643da4befc30deadb458a9b590d720cde2f2b1e97da9" 1640 | dependencies = [ 1641 | "zerocopy 0.8.26", 1642 | ] 1643 | 1644 | [[package]] 1645 | name = "proc-macro-error-attr2" 1646 | version = "2.0.0" 1647 | source = "registry+https://github.com/rust-lang/crates.io-index" 1648 | checksum = "96de42df36bb9bba5542fe9f1a054b8cc87e172759a1868aa05c1f3acc89dfc5" 1649 | dependencies = [ 1650 | "proc-macro2", 1651 | "quote", 1652 | ] 1653 | 1654 | [[package]] 1655 | name = "proc-macro-error2" 1656 | version = "2.0.1" 1657 | source = "registry+https://github.com/rust-lang/crates.io-index" 1658 | checksum = "11ec05c52be0a07b08061f7dd003e7d7092e0472bc731b4af7bb1ef876109802" 1659 | dependencies = [ 1660 | "proc-macro-error-attr2", 1661 | "proc-macro2", 1662 | "quote", 1663 | "syn", 1664 | ] 1665 | 1666 | [[package]] 1667 | name = "proc-macro2" 1668 | version = "1.0.101" 1669 | source = "registry+https://github.com/rust-lang/crates.io-index" 1670 | checksum = "89ae43fd86e4158d6db51ad8e2b80f313af9cc74f5c0e03ccb87de09998732de" 1671 | dependencies = [ 1672 | "unicode-ident", 1673 | ] 1674 | 1675 | [[package]] 1676 | name = "procfs" 1677 | version = "0.17.0" 1678 | source = "registry+https://github.com/rust-lang/crates.io-index" 1679 | checksum = "cc5b72d8145275d844d4b5f6d4e1eef00c8cd889edb6035c21675d1bb1f45c9f" 1680 | dependencies = [ 1681 | "bitflags 2.10.0", 1682 | "chrono", 1683 | "flate2", 1684 | "hex", 1685 | "procfs-core", 1686 | "rustix 0.38.41", 1687 | ] 1688 | 1689 | [[package]] 1690 | name = "procfs-core" 1691 | version = "0.17.0" 1692 | source = "registry+https://github.com/rust-lang/crates.io-index" 1693 | checksum = "239df02d8349b06fc07398a3a1697b06418223b1c7725085e801e7c0fc6a12ec" 1694 | dependencies = [ 1695 | "bitflags 2.10.0", 1696 | "chrono", 1697 | "hex", 1698 | ] 1699 | 1700 | [[package]] 1701 | name = "pulldown-cmark" 1702 | version = "0.13.0" 1703 | source = "registry+https://github.com/rust-lang/crates.io-index" 1704 | checksum = "1e8bbe1a966bd2f362681a44f6edce3c2310ac21e4d5067a6e7ec396297a6ea0" 1705 | dependencies = [ 1706 | "bitflags 2.10.0", 1707 | "memchr", 1708 | "unicase", 1709 | ] 1710 | 1711 | [[package]] 1712 | name = "pure-rust-locales" 1713 | version = "0.8.1" 1714 | source = "registry+https://github.com/rust-lang/crates.io-index" 1715 | checksum = "1190fd18ae6ce9e137184f207593877e70f39b015040156b1e05081cdfe3733a" 1716 | 1717 | [[package]] 1718 | name = "pwd" 1719 | version = "1.4.0" 1720 | source = "registry+https://github.com/rust-lang/crates.io-index" 1721 | checksum = "72c71c0c79b9701efe4e1e4b563b2016dd4ee789eb99badcb09d61ac4b92e4a2" 1722 | dependencies = [ 1723 | "libc", 1724 | "thiserror 1.0.69", 1725 | ] 1726 | 1727 | [[package]] 1728 | name = "quote" 1729 | version = "1.0.40" 1730 | source = "registry+https://github.com/rust-lang/crates.io-index" 1731 | checksum = "1885c039570dc00dcb4ff087a89e185fd56bae234ddc7f056a945bf36467248d" 1732 | dependencies = [ 1733 | "proc-macro2", 1734 | ] 1735 | 1736 | [[package]] 1737 | name = "r-efi" 1738 | version = "5.3.0" 1739 | source = "registry+https://github.com/rust-lang/crates.io-index" 1740 | checksum = "69cdb34c158ceb288df11e18b4bd39de994f6657d83847bdffdbd7f346754b0f" 1741 | 1742 | [[package]] 1743 | name = "rand" 1744 | version = "0.9.2" 1745 | source = "registry+https://github.com/rust-lang/crates.io-index" 1746 | checksum = "6db2770f06117d490610c7488547d543617b21bfa07796d7a12f6f1bd53850d1" 1747 | dependencies = [ 1748 | "rand_chacha", 1749 | "rand_core", 1750 | ] 1751 | 1752 | [[package]] 1753 | name = "rand_chacha" 1754 | version = "0.9.0" 1755 | source = "registry+https://github.com/rust-lang/crates.io-index" 1756 | checksum = "d3022b5f1df60f26e1ffddd6c66e8aa15de382ae63b3a0c1bfc0e4d3e3f325cb" 1757 | dependencies = [ 1758 | "ppv-lite86", 1759 | "rand_core", 1760 | ] 1761 | 1762 | [[package]] 1763 | name = "rand_core" 1764 | version = "0.9.3" 1765 | source = "registry+https://github.com/rust-lang/crates.io-index" 1766 | checksum = "99d9a13982dcf210057a8a78572b2217b667c3beacbf3a0d8b454f6f82837d38" 1767 | dependencies = [ 1768 | "getrandom 0.3.3", 1769 | ] 1770 | 1771 | [[package]] 1772 | name = "rayon" 1773 | version = "1.10.0" 1774 | source = "registry+https://github.com/rust-lang/crates.io-index" 1775 | checksum = "b418a60154510ca1a002a752ca9714984e21e4241e804d32555251faf8b78ffa" 1776 | dependencies = [ 1777 | "either", 1778 | "rayon-core", 1779 | ] 1780 | 1781 | [[package]] 1782 | name = "rayon-core" 1783 | version = "1.12.1" 1784 | source = "registry+https://github.com/rust-lang/crates.io-index" 1785 | checksum = "1465873a3dfdaa8ae7cb14b4383657caab0b3e8a0aa9ae8e04b044854c8dfce2" 1786 | dependencies = [ 1787 | "crossbeam-deque", 1788 | "crossbeam-utils", 1789 | ] 1790 | 1791 | [[package]] 1792 | name = "recvmsg" 1793 | version = "1.0.0" 1794 | source = "registry+https://github.com/rust-lang/crates.io-index" 1795 | checksum = "d3edd4d5d42c92f0a659926464d4cce56b562761267ecf0f469d85b7de384175" 1796 | 1797 | [[package]] 1798 | name = "redox_syscall" 1799 | version = "0.5.8" 1800 | source = "registry+https://github.com/rust-lang/crates.io-index" 1801 | checksum = "03a862b389f93e68874fbf580b9de08dd02facb9a788ebadaf4a3fd33cf58834" 1802 | dependencies = [ 1803 | "bitflags 2.10.0", 1804 | ] 1805 | 1806 | [[package]] 1807 | name = "redox_users" 1808 | version = "0.4.6" 1809 | source = "registry+https://github.com/rust-lang/crates.io-index" 1810 | checksum = "ba009ff324d1fc1b900bd1fdb31564febe58a8ccc8a6fdbb93b543d33b13ca43" 1811 | dependencies = [ 1812 | "getrandom 0.2.15", 1813 | "libredox", 1814 | "thiserror 1.0.69", 1815 | ] 1816 | 1817 | [[package]] 1818 | name = "redox_users" 1819 | version = "0.5.2" 1820 | source = "registry+https://github.com/rust-lang/crates.io-index" 1821 | checksum = "a4e608c6638b9c18977b00b475ac1f28d14e84b27d8d42f70e0bf1e3dec127ac" 1822 | dependencies = [ 1823 | "getrandom 0.2.15", 1824 | "libredox", 1825 | "thiserror 2.0.12", 1826 | ] 1827 | 1828 | [[package]] 1829 | name = "ref-cast" 1830 | version = "1.0.23" 1831 | source = "registry+https://github.com/rust-lang/crates.io-index" 1832 | checksum = "ccf0a6f84d5f1d581da8b41b47ec8600871962f2a528115b542b362d4b744931" 1833 | dependencies = [ 1834 | "ref-cast-impl", 1835 | ] 1836 | 1837 | [[package]] 1838 | name = "ref-cast-impl" 1839 | version = "1.0.23" 1840 | source = "registry+https://github.com/rust-lang/crates.io-index" 1841 | checksum = "bcc303e793d3734489387d205e9b186fac9c6cfacedd98cbb2e8a5943595f3e6" 1842 | dependencies = [ 1843 | "proc-macro2", 1844 | "quote", 1845 | "syn", 1846 | ] 1847 | 1848 | [[package]] 1849 | name = "regex" 1850 | version = "1.11.1" 1851 | source = "registry+https://github.com/rust-lang/crates.io-index" 1852 | checksum = "b544ef1b4eac5dc2db33ea63606ae9ffcfac26c1416a2806ae0bf5f56b201191" 1853 | dependencies = [ 1854 | "aho-corasick", 1855 | "memchr", 1856 | "regex-automata", 1857 | "regex-syntax", 1858 | ] 1859 | 1860 | [[package]] 1861 | name = "regex-automata" 1862 | version = "0.4.9" 1863 | source = "registry+https://github.com/rust-lang/crates.io-index" 1864 | checksum = "809e8dc61f6de73b46c85f4c96486310fe304c434cfa43669d7b40f711150908" 1865 | dependencies = [ 1866 | "aho-corasick", 1867 | "memchr", 1868 | "regex-syntax", 1869 | ] 1870 | 1871 | [[package]] 1872 | name = "regex-syntax" 1873 | version = "0.8.5" 1874 | source = "registry+https://github.com/rust-lang/crates.io-index" 1875 | checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c" 1876 | 1877 | [[package]] 1878 | name = "rmp" 1879 | version = "0.8.14" 1880 | source = "registry+https://github.com/rust-lang/crates.io-index" 1881 | checksum = "228ed7c16fa39782c3b3468e974aec2795e9089153cd08ee2e9aefb3613334c4" 1882 | dependencies = [ 1883 | "byteorder", 1884 | "num-traits", 1885 | "paste", 1886 | ] 1887 | 1888 | [[package]] 1889 | name = "rmp-serde" 1890 | version = "1.3.0" 1891 | source = "registry+https://github.com/rust-lang/crates.io-index" 1892 | checksum = "52e599a477cf9840e92f2cde9a7189e67b42c57532749bf90aea6ec10facd4db" 1893 | dependencies = [ 1894 | "byteorder", 1895 | "rmp", 1896 | "serde", 1897 | ] 1898 | 1899 | [[package]] 1900 | name = "rustc-hash" 1901 | version = "1.1.0" 1902 | source = "registry+https://github.com/rust-lang/crates.io-index" 1903 | checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" 1904 | 1905 | [[package]] 1906 | name = "rustix" 1907 | version = "0.38.41" 1908 | source = "registry+https://github.com/rust-lang/crates.io-index" 1909 | checksum = "d7f649912bc1495e167a6edee79151c84b1bad49748cb4f1f1167f459f6224f6" 1910 | dependencies = [ 1911 | "bitflags 2.10.0", 1912 | "errno", 1913 | "libc", 1914 | "linux-raw-sys 0.4.14", 1915 | "windows-sys 0.52.0", 1916 | ] 1917 | 1918 | [[package]] 1919 | name = "rustix" 1920 | version = "1.0.8" 1921 | source = "registry+https://github.com/rust-lang/crates.io-index" 1922 | checksum = "11181fbabf243db407ef8df94a6ce0b2f9a733bd8be4ad02b4eda9602296cac8" 1923 | dependencies = [ 1924 | "bitflags 2.10.0", 1925 | "errno", 1926 | "libc", 1927 | "linux-raw-sys 0.9.4", 1928 | "windows-sys 0.59.0", 1929 | ] 1930 | 1931 | [[package]] 1932 | name = "rustversion" 1933 | version = "1.0.18" 1934 | source = "registry+https://github.com/rust-lang/crates.io-index" 1935 | checksum = "0e819f2bc632f285be6d7cd36e25940d45b2391dd6d9b939e79de557f7014248" 1936 | 1937 | [[package]] 1938 | name = "ryu" 1939 | version = "1.0.18" 1940 | source = "registry+https://github.com/rust-lang/crates.io-index" 1941 | checksum = "f3cb5ba0dc43242ce17de99c180e96db90b235b8a9fdc9543c96d2209116bd9f" 1942 | 1943 | [[package]] 1944 | name = "scopeguard" 1945 | version = "1.2.0" 1946 | source = "registry+https://github.com/rust-lang/crates.io-index" 1947 | checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" 1948 | 1949 | [[package]] 1950 | name = "semver" 1951 | version = "1.0.23" 1952 | source = "registry+https://github.com/rust-lang/crates.io-index" 1953 | checksum = "61697e0a1c7e512e84a621326239844a24d8207b4669b41bc18b32ea5cbf988b" 1954 | 1955 | [[package]] 1956 | name = "serde" 1957 | version = "1.0.215" 1958 | source = "registry+https://github.com/rust-lang/crates.io-index" 1959 | checksum = "6513c1ad0b11a9376da888e3e0baa0077f1aed55c17f50e7b2397136129fb88f" 1960 | dependencies = [ 1961 | "serde_derive", 1962 | ] 1963 | 1964 | [[package]] 1965 | name = "serde_derive" 1966 | version = "1.0.215" 1967 | source = "registry+https://github.com/rust-lang/crates.io-index" 1968 | checksum = "ad1e866f866923f252f05c889987993144fb74e722403468a4ebd70c3cd756c0" 1969 | dependencies = [ 1970 | "proc-macro2", 1971 | "quote", 1972 | "syn", 1973 | ] 1974 | 1975 | [[package]] 1976 | name = "serde_json" 1977 | version = "1.0.133" 1978 | source = "registry+https://github.com/rust-lang/crates.io-index" 1979 | checksum = "c7fceb2473b9166b2294ef05efcb65a3db80803f0b03ef86a5fc88a2b85ee377" 1980 | dependencies = [ 1981 | "itoa", 1982 | "memchr", 1983 | "ryu", 1984 | "serde", 1985 | ] 1986 | 1987 | [[package]] 1988 | name = "shadow-rs" 1989 | version = "1.4.0" 1990 | source = "registry+https://github.com/rust-lang/crates.io-index" 1991 | checksum = "72d18183cef626bce22836103349c7050d73db799be0171386b80947d157ae32" 1992 | dependencies = [ 1993 | "const_format", 1994 | "is_debug", 1995 | "time", 1996 | "tzdb", 1997 | ] 1998 | 1999 | [[package]] 2000 | name = "shell-quote" 2001 | version = "0.7.2" 2002 | source = "registry+https://github.com/rust-lang/crates.io-index" 2003 | checksum = "fb502615975ae2365825521fa1529ca7648fd03ce0b0746604e0683856ecd7e4" 2004 | dependencies = [ 2005 | "bstr", 2006 | ] 2007 | 2008 | [[package]] 2009 | name = "shlex" 2010 | version = "1.3.0" 2011 | source = "registry+https://github.com/rust-lang/crates.io-index" 2012 | checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" 2013 | 2014 | [[package]] 2015 | name = "signal-hook" 2016 | version = "0.3.17" 2017 | source = "registry+https://github.com/rust-lang/crates.io-index" 2018 | checksum = "8621587d4798caf8eb44879d42e56b9a93ea5dcd315a6487c357130095b62801" 2019 | dependencies = [ 2020 | "libc", 2021 | "signal-hook-registry", 2022 | ] 2023 | 2024 | [[package]] 2025 | name = "signal-hook-mio" 2026 | version = "0.2.4" 2027 | source = "registry+https://github.com/rust-lang/crates.io-index" 2028 | checksum = "34db1a06d485c9142248b7a054f034b349b212551f3dfd19c94d45a754a217cd" 2029 | dependencies = [ 2030 | "libc", 2031 | "mio", 2032 | "signal-hook", 2033 | ] 2034 | 2035 | [[package]] 2036 | name = "signal-hook-registry" 2037 | version = "1.4.2" 2038 | source = "registry+https://github.com/rust-lang/crates.io-index" 2039 | checksum = "a9e9e0b4211b72e7b8b6e85c807d36c212bdb33ea8587f7569562a84df5465b1" 2040 | dependencies = [ 2041 | "libc", 2042 | ] 2043 | 2044 | [[package]] 2045 | name = "similar" 2046 | version = "2.7.0" 2047 | source = "registry+https://github.com/rust-lang/crates.io-index" 2048 | checksum = "bbbb5d9659141646ae647b42fe094daf6c6192d1620870b449d9557f748b2daa" 2049 | 2050 | [[package]] 2051 | name = "skim" 2052 | version = "0.20.5" 2053 | source = "registry+https://github.com/rust-lang/crates.io-index" 2054 | checksum = "60e10a7f70e8e532d8780d88210055e15e12d0df431bf5dab7bb1ed22b6fb4f2" 2055 | dependencies = [ 2056 | "beef", 2057 | "bitflags 1.3.2", 2058 | "chrono", 2059 | "clap", 2060 | "clap_complete", 2061 | "crossbeam", 2062 | "defer-drop", 2063 | "derive_builder", 2064 | "env_logger", 2065 | "fuzzy-matcher", 2066 | "indexmap", 2067 | "log", 2068 | "nix 0.29.0", 2069 | "rand", 2070 | "rayon", 2071 | "regex", 2072 | "shell-quote", 2073 | "shlex", 2074 | "skim-common", 2075 | "skim-tuikit", 2076 | "time", 2077 | "timer", 2078 | "unicode-width 0.2.1", 2079 | "vte 0.15.0", 2080 | "which", 2081 | ] 2082 | 2083 | [[package]] 2084 | name = "skim-common" 2085 | version = "0.2.0" 2086 | source = "registry+https://github.com/rust-lang/crates.io-index" 2087 | checksum = "d8312ae7ca1a5883e68042b9c6bce05bfc12f06b814ecfda06c34abfb6c88175" 2088 | 2089 | [[package]] 2090 | name = "skim-tuikit" 2091 | version = "0.6.6" 2092 | source = "registry+https://github.com/rust-lang/crates.io-index" 2093 | checksum = "cb54242783b4234134359fea4d11f26879c49ace6c00c5d402fd04a5ab2ad7bd" 2094 | dependencies = [ 2095 | "bitflags 1.3.2", 2096 | "lazy_static", 2097 | "log", 2098 | "nix 0.29.0", 2099 | "skim-common", 2100 | "term", 2101 | "unicode-width 0.2.1", 2102 | ] 2103 | 2104 | [[package]] 2105 | name = "smallvec" 2106 | version = "1.13.2" 2107 | source = "registry+https://github.com/rust-lang/crates.io-index" 2108 | checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67" 2109 | 2110 | [[package]] 2111 | name = "strip-ansi-escapes" 2112 | version = "0.2.1" 2113 | source = "registry+https://github.com/rust-lang/crates.io-index" 2114 | checksum = "2a8f8038e7e7969abb3f1b7c2a811225e9296da208539e0f79c5251d6cac0025" 2115 | dependencies = [ 2116 | "vte 0.14.1", 2117 | ] 2118 | 2119 | [[package]] 2120 | name = "strsim" 2121 | version = "0.11.1" 2122 | source = "registry+https://github.com/rust-lang/crates.io-index" 2123 | checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" 2124 | 2125 | [[package]] 2126 | name = "strum" 2127 | version = "0.26.3" 2128 | source = "registry+https://github.com/rust-lang/crates.io-index" 2129 | checksum = "8fec0f0aef304996cf250b31b5a10dee7980c85da9d759361292b8bca5a18f06" 2130 | 2131 | [[package]] 2132 | name = "strum_macros" 2133 | version = "0.27.2" 2134 | source = "registry+https://github.com/rust-lang/crates.io-index" 2135 | checksum = "7695ce3845ea4b33927c055a39dc438a45b059f7c1b3d91d38d10355fb8cbca7" 2136 | dependencies = [ 2137 | "heck", 2138 | "proc-macro2", 2139 | "quote", 2140 | "syn", 2141 | ] 2142 | 2143 | [[package]] 2144 | name = "supports-color" 2145 | version = "3.0.1" 2146 | source = "registry+https://github.com/rust-lang/crates.io-index" 2147 | checksum = "8775305acf21c96926c900ad056abeef436701108518cf890020387236ac5a77" 2148 | dependencies = [ 2149 | "is_ci", 2150 | ] 2151 | 2152 | [[package]] 2153 | name = "supports-hyperlinks" 2154 | version = "3.0.0" 2155 | source = "registry+https://github.com/rust-lang/crates.io-index" 2156 | checksum = "2c0a1e5168041f5f3ff68ff7d95dcb9c8749df29f6e7e89ada40dd4c9de404ee" 2157 | 2158 | [[package]] 2159 | name = "supports-unicode" 2160 | version = "3.0.0" 2161 | source = "registry+https://github.com/rust-lang/crates.io-index" 2162 | checksum = "b7401a30af6cb5818bb64852270bb722533397edcfc7344954a38f420819ece2" 2163 | 2164 | [[package]] 2165 | name = "syn" 2166 | version = "2.0.106" 2167 | source = "registry+https://github.com/rust-lang/crates.io-index" 2168 | checksum = "ede7c438028d4436d71104916910f5bb611972c5cfd7f89b8300a8186e6fada6" 2169 | dependencies = [ 2170 | "proc-macro2", 2171 | "quote", 2172 | "unicode-ident", 2173 | ] 2174 | 2175 | [[package]] 2176 | name = "sys-locale" 2177 | version = "0.3.2" 2178 | source = "registry+https://github.com/rust-lang/crates.io-index" 2179 | checksum = "8eab9a99a024a169fe8a903cf9d4a3b3601109bcc13bd9e3c6fff259138626c4" 2180 | dependencies = [ 2181 | "libc", 2182 | ] 2183 | 2184 | [[package]] 2185 | name = "sysinfo" 2186 | version = "0.37.2" 2187 | source = "registry+https://github.com/rust-lang/crates.io-index" 2188 | checksum = "16607d5caffd1c07ce073528f9ed972d88db15dd44023fa57142963be3feb11f" 2189 | dependencies = [ 2190 | "libc", 2191 | "memchr", 2192 | "ntapi", 2193 | "objc2-core-foundation", 2194 | "objc2-io-kit", 2195 | "windows 0.61.3", 2196 | ] 2197 | 2198 | [[package]] 2199 | name = "term" 2200 | version = "0.7.0" 2201 | source = "registry+https://github.com/rust-lang/crates.io-index" 2202 | checksum = "c59df8ac95d96ff9bede18eb7300b0fda5e5d8d90960e76f8e14ae765eedbf1f" 2203 | dependencies = [ 2204 | "dirs-next", 2205 | "rustversion", 2206 | "winapi", 2207 | ] 2208 | 2209 | [[package]] 2210 | name = "terminal_size" 2211 | version = "0.4.1" 2212 | source = "registry+https://github.com/rust-lang/crates.io-index" 2213 | checksum = "5352447f921fda68cf61b4101566c0bdb5104eff6804d0678e5227580ab6a4e9" 2214 | dependencies = [ 2215 | "rustix 0.38.41", 2216 | "windows-sys 0.59.0", 2217 | ] 2218 | 2219 | [[package]] 2220 | name = "textwrap" 2221 | version = "0.16.1" 2222 | source = "registry+https://github.com/rust-lang/crates.io-index" 2223 | checksum = "23d434d3f8967a09480fb04132ebe0a3e088c173e6d0ee7897abbdf4eab0f8b9" 2224 | dependencies = [ 2225 | "unicode-linebreak", 2226 | "unicode-width 0.1.14", 2227 | ] 2228 | 2229 | [[package]] 2230 | name = "thiserror" 2231 | version = "1.0.69" 2232 | source = "registry+https://github.com/rust-lang/crates.io-index" 2233 | checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52" 2234 | dependencies = [ 2235 | "thiserror-impl 1.0.69", 2236 | ] 2237 | 2238 | [[package]] 2239 | name = "thiserror" 2240 | version = "2.0.12" 2241 | source = "registry+https://github.com/rust-lang/crates.io-index" 2242 | checksum = "567b8a2dae586314f7be2a752ec7474332959c6460e02bde30d702a66d488708" 2243 | dependencies = [ 2244 | "thiserror-impl 2.0.12", 2245 | ] 2246 | 2247 | [[package]] 2248 | name = "thiserror-impl" 2249 | version = "1.0.69" 2250 | source = "registry+https://github.com/rust-lang/crates.io-index" 2251 | checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" 2252 | dependencies = [ 2253 | "proc-macro2", 2254 | "quote", 2255 | "syn", 2256 | ] 2257 | 2258 | [[package]] 2259 | name = "thiserror-impl" 2260 | version = "2.0.12" 2261 | source = "registry+https://github.com/rust-lang/crates.io-index" 2262 | checksum = "7f7cf42b4507d8ea322120659672cf1b9dbb93f8f2d4ecfd6e51350ff5b17a1d" 2263 | dependencies = [ 2264 | "proc-macro2", 2265 | "quote", 2266 | "syn", 2267 | ] 2268 | 2269 | [[package]] 2270 | name = "thread_local" 2271 | version = "1.1.8" 2272 | source = "registry+https://github.com/rust-lang/crates.io-index" 2273 | checksum = "8b9ef9bad013ada3808854ceac7b46812a6465ba368859a37e2100283d2d719c" 2274 | dependencies = [ 2275 | "cfg-if", 2276 | "once_cell", 2277 | ] 2278 | 2279 | [[package]] 2280 | name = "time" 2281 | version = "0.3.41" 2282 | source = "registry+https://github.com/rust-lang/crates.io-index" 2283 | checksum = "8a7619e19bc266e0f9c5e6686659d394bc57973859340060a69221e57dbc0c40" 2284 | dependencies = [ 2285 | "deranged", 2286 | "itoa", 2287 | "libc", 2288 | "num-conv", 2289 | "num_threads", 2290 | "powerfmt", 2291 | "serde", 2292 | "time-core", 2293 | "time-macros", 2294 | ] 2295 | 2296 | [[package]] 2297 | name = "time-core" 2298 | version = "0.1.4" 2299 | source = "registry+https://github.com/rust-lang/crates.io-index" 2300 | checksum = "c9e9a38711f559d9e3ce1cdb06dd7c5b8ea546bc90052da6d06bb76da74bb07c" 2301 | 2302 | [[package]] 2303 | name = "time-macros" 2304 | version = "0.2.22" 2305 | source = "registry+https://github.com/rust-lang/crates.io-index" 2306 | checksum = "3526739392ec93fd8b359c8e98514cb3e8e021beb4e5f597b00a0221f8ed8a49" 2307 | dependencies = [ 2308 | "num-conv", 2309 | "time-core", 2310 | ] 2311 | 2312 | [[package]] 2313 | name = "timer" 2314 | version = "0.2.0" 2315 | source = "registry+https://github.com/rust-lang/crates.io-index" 2316 | checksum = "31d42176308937165701f50638db1c31586f183f1aab416268216577aec7306b" 2317 | dependencies = [ 2318 | "chrono", 2319 | ] 2320 | 2321 | [[package]] 2322 | name = "typeid" 2323 | version = "1.0.2" 2324 | source = "registry+https://github.com/rust-lang/crates.io-index" 2325 | checksum = "0e13db2e0ccd5e14a544e8a246ba2312cd25223f616442d7f2cb0e3db614236e" 2326 | 2327 | [[package]] 2328 | name = "typetag" 2329 | version = "0.2.18" 2330 | source = "registry+https://github.com/rust-lang/crates.io-index" 2331 | checksum = "52ba3b6e86ffe0054b2c44f2d86407388b933b16cb0a70eea3929420db1d9bbe" 2332 | dependencies = [ 2333 | "erased-serde", 2334 | "inventory", 2335 | "once_cell", 2336 | "serde", 2337 | "typetag-impl", 2338 | ] 2339 | 2340 | [[package]] 2341 | name = "typetag-impl" 2342 | version = "0.2.18" 2343 | source = "registry+https://github.com/rust-lang/crates.io-index" 2344 | checksum = "70b20a22c42c8f1cd23ce5e34f165d4d37038f5b663ad20fb6adbdf029172483" 2345 | dependencies = [ 2346 | "proc-macro2", 2347 | "quote", 2348 | "syn", 2349 | ] 2350 | 2351 | [[package]] 2352 | name = "tz-rs" 2353 | version = "0.7.0" 2354 | source = "registry+https://github.com/rust-lang/crates.io-index" 2355 | checksum = "e1450bf2b99397e72070e7935c89facaa80092ac812502200375f1f7d33c71a1" 2356 | 2357 | [[package]] 2358 | name = "tzdb" 2359 | version = "0.7.2" 2360 | source = "registry+https://github.com/rust-lang/crates.io-index" 2361 | checksum = "0be2ea5956f295449f47c0b825c5e109022ff1a6a53bb4f77682a87c2341fbf5" 2362 | dependencies = [ 2363 | "iana-time-zone", 2364 | "tz-rs", 2365 | "tzdb_data", 2366 | ] 2367 | 2368 | [[package]] 2369 | name = "tzdb_data" 2370 | version = "0.2.2" 2371 | source = "registry+https://github.com/rust-lang/crates.io-index" 2372 | checksum = "9c4c81d75033770e40fbd3643ce7472a1a9fd301f90b7139038228daf8af03ec" 2373 | dependencies = [ 2374 | "tz-rs", 2375 | ] 2376 | 2377 | [[package]] 2378 | name = "unicase" 2379 | version = "2.8.0" 2380 | source = "registry+https://github.com/rust-lang/crates.io-index" 2381 | checksum = "7e51b68083f157f853b6379db119d1c1be0e6e4dec98101079dec41f6f5cf6df" 2382 | 2383 | [[package]] 2384 | name = "unicode-ident" 2385 | version = "1.0.14" 2386 | source = "registry+https://github.com/rust-lang/crates.io-index" 2387 | checksum = "adb9e6ca4f869e1180728b7950e35922a7fc6397f7b641499e8f3ef06e50dc83" 2388 | 2389 | [[package]] 2390 | name = "unicode-linebreak" 2391 | version = "0.1.5" 2392 | source = "registry+https://github.com/rust-lang/crates.io-index" 2393 | checksum = "3b09c83c3c29d37506a3e260c08c03743a6bb66a9cd432c6934ab501a190571f" 2394 | 2395 | [[package]] 2396 | name = "unicode-segmentation" 2397 | version = "1.12.0" 2398 | source = "registry+https://github.com/rust-lang/crates.io-index" 2399 | checksum = "f6ccf251212114b54433ec949fd6a7841275f9ada20dddd2f29e9ceea4501493" 2400 | 2401 | [[package]] 2402 | name = "unicode-width" 2403 | version = "0.1.14" 2404 | source = "registry+https://github.com/rust-lang/crates.io-index" 2405 | checksum = "7dd6e30e90baa6f72411720665d41d89b9a3d039dc45b8faea1ddd07f617f6af" 2406 | 2407 | [[package]] 2408 | name = "unicode-width" 2409 | version = "0.2.1" 2410 | source = "registry+https://github.com/rust-lang/crates.io-index" 2411 | checksum = "4a1a07cc7db3810833284e8d372ccdc6da29741639ecc70c9ec107df0fa6154c" 2412 | 2413 | [[package]] 2414 | name = "unicode-xid" 2415 | version = "0.2.6" 2416 | source = "registry+https://github.com/rust-lang/crates.io-index" 2417 | checksum = "ebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853" 2418 | 2419 | [[package]] 2420 | name = "utf8parse" 2421 | version = "0.2.2" 2422 | source = "registry+https://github.com/rust-lang/crates.io-index" 2423 | checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" 2424 | 2425 | [[package]] 2426 | name = "vte" 2427 | version = "0.14.1" 2428 | source = "registry+https://github.com/rust-lang/crates.io-index" 2429 | checksum = "231fdcd7ef3037e8330d8e17e61011a2c244126acc0a982f4040ac3f9f0bc077" 2430 | dependencies = [ 2431 | "memchr", 2432 | ] 2433 | 2434 | [[package]] 2435 | name = "vte" 2436 | version = "0.15.0" 2437 | source = "registry+https://github.com/rust-lang/crates.io-index" 2438 | checksum = "a5924018406ce0063cd67f8e008104968b74b563ee1b85dde3ed1f7cb87d3dbd" 2439 | dependencies = [ 2440 | "arrayvec", 2441 | "memchr", 2442 | ] 2443 | 2444 | [[package]] 2445 | name = "wasi" 2446 | version = "0.11.0+wasi-snapshot-preview1" 2447 | source = "registry+https://github.com/rust-lang/crates.io-index" 2448 | checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" 2449 | 2450 | [[package]] 2451 | name = "wasi" 2452 | version = "0.14.2+wasi-0.2.4" 2453 | source = "registry+https://github.com/rust-lang/crates.io-index" 2454 | checksum = "9683f9a5a998d873c0d21fcbe3c083009670149a8fab228644b8bd36b2c48cb3" 2455 | dependencies = [ 2456 | "wit-bindgen-rt", 2457 | ] 2458 | 2459 | [[package]] 2460 | name = "wasm-bindgen" 2461 | version = "0.2.95" 2462 | source = "registry+https://github.com/rust-lang/crates.io-index" 2463 | checksum = "128d1e363af62632b8eb57219c8fd7877144af57558fb2ef0368d0087bddeb2e" 2464 | dependencies = [ 2465 | "cfg-if", 2466 | "once_cell", 2467 | "wasm-bindgen-macro", 2468 | ] 2469 | 2470 | [[package]] 2471 | name = "wasm-bindgen-backend" 2472 | version = "0.2.95" 2473 | source = "registry+https://github.com/rust-lang/crates.io-index" 2474 | checksum = "cb6dd4d3ca0ddffd1dd1c9c04f94b868c37ff5fac97c30b97cff2d74fce3a358" 2475 | dependencies = [ 2476 | "bumpalo", 2477 | "log", 2478 | "once_cell", 2479 | "proc-macro2", 2480 | "quote", 2481 | "syn", 2482 | "wasm-bindgen-shared", 2483 | ] 2484 | 2485 | [[package]] 2486 | name = "wasm-bindgen-macro" 2487 | version = "0.2.95" 2488 | source = "registry+https://github.com/rust-lang/crates.io-index" 2489 | checksum = "e79384be7f8f5a9dd5d7167216f022090cf1f9ec128e6e6a482a2cb5c5422c56" 2490 | dependencies = [ 2491 | "quote", 2492 | "wasm-bindgen-macro-support", 2493 | ] 2494 | 2495 | [[package]] 2496 | name = "wasm-bindgen-macro-support" 2497 | version = "0.2.95" 2498 | source = "registry+https://github.com/rust-lang/crates.io-index" 2499 | checksum = "26c6ab57572f7a24a4985830b120de1594465e5d500f24afe89e16b4e833ef68" 2500 | dependencies = [ 2501 | "proc-macro2", 2502 | "quote", 2503 | "syn", 2504 | "wasm-bindgen-backend", 2505 | "wasm-bindgen-shared", 2506 | ] 2507 | 2508 | [[package]] 2509 | name = "wasm-bindgen-shared" 2510 | version = "0.2.95" 2511 | source = "registry+https://github.com/rust-lang/crates.io-index" 2512 | checksum = "65fc09f10666a9f147042251e0dda9c18f166ff7de300607007e96bdebc1068d" 2513 | 2514 | [[package]] 2515 | name = "web-time" 2516 | version = "1.1.0" 2517 | source = "registry+https://github.com/rust-lang/crates.io-index" 2518 | checksum = "5a6580f308b1fad9207618087a65c04e7a10bc77e02c8e84e9b00dd4b12fa0bb" 2519 | dependencies = [ 2520 | "js-sys", 2521 | "wasm-bindgen", 2522 | ] 2523 | 2524 | [[package]] 2525 | name = "which" 2526 | version = "7.0.3" 2527 | source = "registry+https://github.com/rust-lang/crates.io-index" 2528 | checksum = "24d643ce3fd3e5b54854602a080f34fb10ab75e0b813ee32d00ca2b44fa74762" 2529 | dependencies = [ 2530 | "either", 2531 | "env_home", 2532 | "rustix 1.0.8", 2533 | "winsafe", 2534 | ] 2535 | 2536 | [[package]] 2537 | name = "widestring" 2538 | version = "1.1.0" 2539 | source = "registry+https://github.com/rust-lang/crates.io-index" 2540 | checksum = "7219d36b6eac893fa81e84ebe06485e7dcbb616177469b142df14f1f4deb1311" 2541 | 2542 | [[package]] 2543 | name = "winapi" 2544 | version = "0.3.9" 2545 | source = "registry+https://github.com/rust-lang/crates.io-index" 2546 | checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" 2547 | dependencies = [ 2548 | "winapi-i686-pc-windows-gnu", 2549 | "winapi-x86_64-pc-windows-gnu", 2550 | ] 2551 | 2552 | [[package]] 2553 | name = "winapi-i686-pc-windows-gnu" 2554 | version = "0.4.0" 2555 | source = "registry+https://github.com/rust-lang/crates.io-index" 2556 | checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" 2557 | 2558 | [[package]] 2559 | name = "winapi-x86_64-pc-windows-gnu" 2560 | version = "0.4.0" 2561 | source = "registry+https://github.com/rust-lang/crates.io-index" 2562 | checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" 2563 | 2564 | [[package]] 2565 | name = "windows" 2566 | version = "0.61.3" 2567 | source = "registry+https://github.com/rust-lang/crates.io-index" 2568 | checksum = "9babd3a767a4c1aef6900409f85f5d53ce2544ccdfaa86dad48c91782c6d6893" 2569 | dependencies = [ 2570 | "windows-collections 0.2.0", 2571 | "windows-core 0.61.2", 2572 | "windows-future 0.2.1", 2573 | "windows-link 0.1.3", 2574 | "windows-numerics 0.2.0", 2575 | ] 2576 | 2577 | [[package]] 2578 | name = "windows" 2579 | version = "0.62.2" 2580 | source = "registry+https://github.com/rust-lang/crates.io-index" 2581 | checksum = "527fadee13e0c05939a6a05d5bd6eec6cd2e3dbd648b9f8e447c6518133d8580" 2582 | dependencies = [ 2583 | "windows-collections 0.3.2", 2584 | "windows-core 0.62.2", 2585 | "windows-future 0.3.2", 2586 | "windows-numerics 0.3.1", 2587 | ] 2588 | 2589 | [[package]] 2590 | name = "windows-collections" 2591 | version = "0.2.0" 2592 | source = "registry+https://github.com/rust-lang/crates.io-index" 2593 | checksum = "3beeceb5e5cfd9eb1d76b381630e82c4241ccd0d27f1a39ed41b2760b255c5e8" 2594 | dependencies = [ 2595 | "windows-core 0.61.2", 2596 | ] 2597 | 2598 | [[package]] 2599 | name = "windows-collections" 2600 | version = "0.3.2" 2601 | source = "registry+https://github.com/rust-lang/crates.io-index" 2602 | checksum = "23b2d95af1a8a14a3c7367e1ed4fc9c20e0a26e79551b1454d72583c97cc6610" 2603 | dependencies = [ 2604 | "windows-core 0.62.2", 2605 | ] 2606 | 2607 | [[package]] 2608 | name = "windows-core" 2609 | version = "0.52.0" 2610 | source = "registry+https://github.com/rust-lang/crates.io-index" 2611 | checksum = "33ab640c8d7e35bf8ba19b884ba838ceb4fba93a4e8c65a9059d08afcfc683d9" 2612 | dependencies = [ 2613 | "windows-targets", 2614 | ] 2615 | 2616 | [[package]] 2617 | name = "windows-core" 2618 | version = "0.61.2" 2619 | source = "registry+https://github.com/rust-lang/crates.io-index" 2620 | checksum = "c0fdd3ddb90610c7638aa2b3a3ab2904fb9e5cdbecc643ddb3647212781c4ae3" 2621 | dependencies = [ 2622 | "windows-implement", 2623 | "windows-interface", 2624 | "windows-link 0.1.3", 2625 | "windows-result 0.3.4", 2626 | "windows-strings 0.4.2", 2627 | ] 2628 | 2629 | [[package]] 2630 | name = "windows-core" 2631 | version = "0.62.2" 2632 | source = "registry+https://github.com/rust-lang/crates.io-index" 2633 | checksum = "b8e83a14d34d0623b51dce9581199302a221863196a1dde71a7663a4c2be9deb" 2634 | dependencies = [ 2635 | "windows-implement", 2636 | "windows-interface", 2637 | "windows-link 0.2.1", 2638 | "windows-result 0.4.1", 2639 | "windows-strings 0.5.1", 2640 | ] 2641 | 2642 | [[package]] 2643 | name = "windows-future" 2644 | version = "0.2.1" 2645 | source = "registry+https://github.com/rust-lang/crates.io-index" 2646 | checksum = "fc6a41e98427b19fe4b73c550f060b59fa592d7d686537eebf9385621bfbad8e" 2647 | dependencies = [ 2648 | "windows-core 0.61.2", 2649 | "windows-link 0.1.3", 2650 | "windows-threading 0.1.0", 2651 | ] 2652 | 2653 | [[package]] 2654 | name = "windows-future" 2655 | version = "0.3.2" 2656 | source = "registry+https://github.com/rust-lang/crates.io-index" 2657 | checksum = "e1d6f90251fe18a279739e78025bd6ddc52a7e22f921070ccdc67dde84c605cb" 2658 | dependencies = [ 2659 | "windows-core 0.62.2", 2660 | "windows-link 0.2.1", 2661 | "windows-threading 0.2.1", 2662 | ] 2663 | 2664 | [[package]] 2665 | name = "windows-implement" 2666 | version = "0.60.2" 2667 | source = "registry+https://github.com/rust-lang/crates.io-index" 2668 | checksum = "053e2e040ab57b9dc951b72c264860db7eb3b0200ba345b4e4c3b14f67855ddf" 2669 | dependencies = [ 2670 | "proc-macro2", 2671 | "quote", 2672 | "syn", 2673 | ] 2674 | 2675 | [[package]] 2676 | name = "windows-interface" 2677 | version = "0.59.3" 2678 | source = "registry+https://github.com/rust-lang/crates.io-index" 2679 | checksum = "3f316c4a2570ba26bbec722032c4099d8c8bc095efccdc15688708623367e358" 2680 | dependencies = [ 2681 | "proc-macro2", 2682 | "quote", 2683 | "syn", 2684 | ] 2685 | 2686 | [[package]] 2687 | name = "windows-link" 2688 | version = "0.1.3" 2689 | source = "registry+https://github.com/rust-lang/crates.io-index" 2690 | checksum = "5e6ad25900d524eaabdbbb96d20b4311e1e7ae1699af4fb28c17ae66c80d798a" 2691 | 2692 | [[package]] 2693 | name = "windows-link" 2694 | version = "0.2.1" 2695 | source = "registry+https://github.com/rust-lang/crates.io-index" 2696 | checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5" 2697 | 2698 | [[package]] 2699 | name = "windows-numerics" 2700 | version = "0.2.0" 2701 | source = "registry+https://github.com/rust-lang/crates.io-index" 2702 | checksum = "9150af68066c4c5c07ddc0ce30421554771e528bde427614c61038bc2c92c2b1" 2703 | dependencies = [ 2704 | "windows-core 0.61.2", 2705 | "windows-link 0.1.3", 2706 | ] 2707 | 2708 | [[package]] 2709 | name = "windows-numerics" 2710 | version = "0.3.1" 2711 | source = "registry+https://github.com/rust-lang/crates.io-index" 2712 | checksum = "6e2e40844ac143cdb44aead537bbf727de9b044e107a0f1220392177d15b0f26" 2713 | dependencies = [ 2714 | "windows-core 0.62.2", 2715 | "windows-link 0.2.1", 2716 | ] 2717 | 2718 | [[package]] 2719 | name = "windows-result" 2720 | version = "0.3.4" 2721 | source = "registry+https://github.com/rust-lang/crates.io-index" 2722 | checksum = "56f42bd332cc6c8eac5af113fc0c1fd6a8fd2aa08a0119358686e5160d0586c6" 2723 | dependencies = [ 2724 | "windows-link 0.1.3", 2725 | ] 2726 | 2727 | [[package]] 2728 | name = "windows-result" 2729 | version = "0.4.1" 2730 | source = "registry+https://github.com/rust-lang/crates.io-index" 2731 | checksum = "7781fa89eaf60850ac3d2da7af8e5242a5ea78d1a11c49bf2910bb5a73853eb5" 2732 | dependencies = [ 2733 | "windows-link 0.2.1", 2734 | ] 2735 | 2736 | [[package]] 2737 | name = "windows-strings" 2738 | version = "0.4.2" 2739 | source = "registry+https://github.com/rust-lang/crates.io-index" 2740 | checksum = "56e6c93f3a0c3b36176cb1327a4958a0353d5d166c2a35cb268ace15e91d3b57" 2741 | dependencies = [ 2742 | "windows-link 0.1.3", 2743 | ] 2744 | 2745 | [[package]] 2746 | name = "windows-strings" 2747 | version = "0.5.1" 2748 | source = "registry+https://github.com/rust-lang/crates.io-index" 2749 | checksum = "7837d08f69c77cf6b07689544538e017c1bfcf57e34b4c0ff58e6c2cd3b37091" 2750 | dependencies = [ 2751 | "windows-link 0.2.1", 2752 | ] 2753 | 2754 | [[package]] 2755 | name = "windows-sys" 2756 | version = "0.52.0" 2757 | source = "registry+https://github.com/rust-lang/crates.io-index" 2758 | checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" 2759 | dependencies = [ 2760 | "windows-targets", 2761 | ] 2762 | 2763 | [[package]] 2764 | name = "windows-sys" 2765 | version = "0.59.0" 2766 | source = "registry+https://github.com/rust-lang/crates.io-index" 2767 | checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b" 2768 | dependencies = [ 2769 | "windows-targets", 2770 | ] 2771 | 2772 | [[package]] 2773 | name = "windows-sys" 2774 | version = "0.61.2" 2775 | source = "registry+https://github.com/rust-lang/crates.io-index" 2776 | checksum = "ae137229bcbd6cdf0f7b80a31df61766145077ddf49416a728b02cb3921ff3fc" 2777 | dependencies = [ 2778 | "windows-link 0.2.1", 2779 | ] 2780 | 2781 | [[package]] 2782 | name = "windows-targets" 2783 | version = "0.52.6" 2784 | source = "registry+https://github.com/rust-lang/crates.io-index" 2785 | checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" 2786 | dependencies = [ 2787 | "windows_aarch64_gnullvm", 2788 | "windows_aarch64_msvc", 2789 | "windows_i686_gnu", 2790 | "windows_i686_gnullvm", 2791 | "windows_i686_msvc", 2792 | "windows_x86_64_gnu", 2793 | "windows_x86_64_gnullvm", 2794 | "windows_x86_64_msvc", 2795 | ] 2796 | 2797 | [[package]] 2798 | name = "windows-threading" 2799 | version = "0.1.0" 2800 | source = "registry+https://github.com/rust-lang/crates.io-index" 2801 | checksum = "b66463ad2e0ea3bbf808b7f1d371311c80e115c0b71d60efc142cafbcfb057a6" 2802 | dependencies = [ 2803 | "windows-link 0.1.3", 2804 | ] 2805 | 2806 | [[package]] 2807 | name = "windows-threading" 2808 | version = "0.2.1" 2809 | source = "registry+https://github.com/rust-lang/crates.io-index" 2810 | checksum = "3949bd5b99cafdf1c7ca86b43ca564028dfe27d66958f2470940f73d86d75b37" 2811 | dependencies = [ 2812 | "windows-link 0.2.1", 2813 | ] 2814 | 2815 | [[package]] 2816 | name = "windows_aarch64_gnullvm" 2817 | version = "0.52.6" 2818 | source = "registry+https://github.com/rust-lang/crates.io-index" 2819 | checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" 2820 | 2821 | [[package]] 2822 | name = "windows_aarch64_msvc" 2823 | version = "0.52.6" 2824 | source = "registry+https://github.com/rust-lang/crates.io-index" 2825 | checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" 2826 | 2827 | [[package]] 2828 | name = "windows_i686_gnu" 2829 | version = "0.52.6" 2830 | source = "registry+https://github.com/rust-lang/crates.io-index" 2831 | checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" 2832 | 2833 | [[package]] 2834 | name = "windows_i686_gnullvm" 2835 | version = "0.52.6" 2836 | source = "registry+https://github.com/rust-lang/crates.io-index" 2837 | checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" 2838 | 2839 | [[package]] 2840 | name = "windows_i686_msvc" 2841 | version = "0.52.6" 2842 | source = "registry+https://github.com/rust-lang/crates.io-index" 2843 | checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" 2844 | 2845 | [[package]] 2846 | name = "windows_x86_64_gnu" 2847 | version = "0.52.6" 2848 | source = "registry+https://github.com/rust-lang/crates.io-index" 2849 | checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" 2850 | 2851 | [[package]] 2852 | name = "windows_x86_64_gnullvm" 2853 | version = "0.52.6" 2854 | source = "registry+https://github.com/rust-lang/crates.io-index" 2855 | checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" 2856 | 2857 | [[package]] 2858 | name = "windows_x86_64_msvc" 2859 | version = "0.52.6" 2860 | source = "registry+https://github.com/rust-lang/crates.io-index" 2861 | checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" 2862 | 2863 | [[package]] 2864 | name = "winsafe" 2865 | version = "0.0.19" 2866 | source = "registry+https://github.com/rust-lang/crates.io-index" 2867 | checksum = "d135d17ab770252ad95e9a872d365cf3090e3be864a34ab46f48555993efc904" 2868 | 2869 | [[package]] 2870 | name = "wit-bindgen-rt" 2871 | version = "0.39.0" 2872 | source = "registry+https://github.com/rust-lang/crates.io-index" 2873 | checksum = "6f42320e61fe2cfd34354ecb597f86f413484a798ba44a8ca1165c58d42da6c1" 2874 | dependencies = [ 2875 | "bitflags 2.10.0", 2876 | ] 2877 | 2878 | [[package]] 2879 | name = "zerocopy" 2880 | version = "0.7.35" 2881 | source = "registry+https://github.com/rust-lang/crates.io-index" 2882 | checksum = "1b9b4fd18abc82b8136838da5d50bae7bdea537c574d8dc1a34ed098d6c166f0" 2883 | dependencies = [ 2884 | "byteorder", 2885 | "zerocopy-derive 0.7.35", 2886 | ] 2887 | 2888 | [[package]] 2889 | name = "zerocopy" 2890 | version = "0.8.26" 2891 | source = "registry+https://github.com/rust-lang/crates.io-index" 2892 | checksum = "1039dd0d3c310cf05de012d8a39ff557cb0d23087fd44cad61df08fc31907a2f" 2893 | dependencies = [ 2894 | "zerocopy-derive 0.8.26", 2895 | ] 2896 | 2897 | [[package]] 2898 | name = "zerocopy-derive" 2899 | version = "0.7.35" 2900 | source = "registry+https://github.com/rust-lang/crates.io-index" 2901 | checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e" 2902 | dependencies = [ 2903 | "proc-macro2", 2904 | "quote", 2905 | "syn", 2906 | ] 2907 | 2908 | [[package]] 2909 | name = "zerocopy-derive" 2910 | version = "0.8.26" 2911 | source = "registry+https://github.com/rust-lang/crates.io-index" 2912 | checksum = "9ecf5b4cc5364572d7f4c329661bcc82724222973f2cab6f050a4e5c22f75181" 2913 | dependencies = [ 2914 | "proc-macro2", 2915 | "quote", 2916 | "syn", 2917 | ] 2918 | --------------------------------------------------------------------------------