├── .gitignore ├── .github ├── FUNDING.yml └── workflows │ └── ci.yml ├── rust-toolchain.toml ├── .gitmodules ├── README.md ├── Cargo.toml ├── LICENSE ├── src ├── util.rs ├── main.rs ├── config.rs ├── search.rs └── app.rs └── Cargo.lock /.gitignore: -------------------------------------------------------------------------------- 1 | /target 2 | -------------------------------------------------------------------------------- /.github/FUNDING.yml: -------------------------------------------------------------------------------- 1 | github: [notnite] 2 | -------------------------------------------------------------------------------- /rust-toolchain.toml: -------------------------------------------------------------------------------- 1 | [toolchain] 2 | channel = "nightly" 3 | -------------------------------------------------------------------------------- /.gitmodules: -------------------------------------------------------------------------------- 1 | [submodule "egui"] 2 | path = egui 3 | url = https://github.com/NotNite/egui.git 4 | branch = eframe-visible 5 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # tistow 2 | 3 | [![Continuous integration](https://github.com/NotNite/tistow/actions/workflows/ci.yml/badge.svg)](https://github.com/NotNite/tistow/actions/workflows/ci.yml) 4 | 5 | ![a screenshot of tistow](https://namazu.photos/i/6ze22lso.png) 6 | 7 | > "The Informational Searching Tool on Windows"\ 8 | > \- NotNite, 2022 9 | 10 | tistow is macOS Spotlight/PowerToys Run but good. and in rust. rust = good 11 | 12 | features: 13 | 14 | - search your shortcuts at the Speed of Light 15 | - a working calculator mode (`=1+1`) 16 | - works on windows (and macos, but i test on windows) 17 | - customizable via config file 18 | - lua scripting 19 | - it's in rust so i get upvotes on reddit 20 | -------------------------------------------------------------------------------- /Cargo.toml: -------------------------------------------------------------------------------- 1 | [package] 2 | name = "tistow" 3 | description = "The Informational Search Tool on Windows" 4 | authors = ["NotNite"] 5 | license = "MIT" 6 | version = "0.4.3" 7 | edition = "2021" 8 | 9 | # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html 10 | 11 | [dependencies] 12 | serde = { version = "1.0.138", features = ["derive"] } 13 | toml = "0.5.9" 14 | figment = { version = "0.10", features = ["toml"] } 15 | directories = "4.0.1" 16 | shellexpand = "2.1" 17 | mlua = { version = "0.8.2", features = ["lua54", "vendored"] } 18 | 19 | egui = { path = "./egui/egui" } 20 | eframe = { path = "./egui/eframe" } 21 | glutin = "0.28.0" 22 | glow = "0.11.2" 23 | 24 | device_query = "1.1.1" 25 | anyhow = "1.0.58" 26 | 27 | fuzzy-matcher = "0.3.7" 28 | meval = "0.2" 29 | walkdir = "2" 30 | arboard = "2.1.1" 31 | open = "3.0.1" 32 | 33 | [target.'cfg(target_os = "windows")'.dependencies] 34 | windows = { version = "0.38.0", features = ["Win32_Foundation", "Win32_System_Console"]} 35 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2022 NotNite 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 | -------------------------------------------------------------------------------- /.github/workflows/ci.yml: -------------------------------------------------------------------------------- 1 | on: [push, pull_request] 2 | 3 | name: Continuous integration 4 | 5 | jobs: 6 | windows: 7 | name: Windows builds 8 | runs-on: windows-latest 9 | steps: 10 | - uses: actions/checkout@v2 11 | with: 12 | submodules: recursive 13 | - uses: actions-rs/toolchain@v1 14 | with: 15 | profile: minimal 16 | toolchain: nightly 17 | override: true 18 | components: rustfmt, clippy 19 | - name: cargo fmt 20 | uses: actions-rs/cargo@v1 21 | with: 22 | command: fmt 23 | args: --all -- --check 24 | - name: cargo clippy 25 | uses: actions-rs/cargo@v1 26 | with: 27 | command: clippy 28 | args: -- -D warnings 29 | - name: Release build 30 | run: cargo build --release 31 | - name: Upload artifact 32 | uses: actions/upload-artifact@v2 33 | with: 34 | name: windows 35 | path: target/release/tistow.exe 36 | 37 | macos: 38 | name: macOS builds 39 | runs-on: macos-latest 40 | steps: 41 | - uses: actions/checkout@v2 42 | with: 43 | submodules: recursive 44 | - uses: actions-rs/toolchain@v1 45 | with: 46 | profile: minimal 47 | toolchain: nightly 48 | override: true 49 | components: rustfmt, clippy 50 | - name: cargo fmt 51 | uses: actions-rs/cargo@v1 52 | with: 53 | command: fmt 54 | args: --all -- --check 55 | - name: cargo clippy 56 | uses: actions-rs/cargo@v1 57 | with: 58 | command: clippy 59 | args: -- -D warnings 60 | - name: Release build 61 | run: cargo build --release 62 | - name: Upload artifact 63 | uses: actions/upload-artifact@v2 64 | with: 65 | name: macos 66 | path: target/release/tistow 67 | -------------------------------------------------------------------------------- /src/util.rs: -------------------------------------------------------------------------------- 1 | use std::{ 2 | collections::HashSet, 3 | path::{Path, PathBuf}, 4 | }; 5 | 6 | use crate::config::Config; 7 | use device_query::{DeviceQuery, DeviceState, Keycode}; 8 | use egui::Color32; 9 | 10 | pub fn is_hotkey_pressed(device_state: &DeviceState, hotkey_str: &[Keycode]) -> bool { 11 | HashSet::::from_iter(device_state.get_keys()) 12 | .is_superset(&HashSet::from_iter(hotkey_str.iter().copied())) 13 | } 14 | 15 | // this func was entirely generated with github copilot 16 | // thanks AI for taking over my job 17 | pub fn hex_to_color32(hex: &str) -> Color32 { 18 | let hex = hex.trim_start_matches('#'); 19 | let r = u8::from_str_radix(&hex[0..2], 16).unwrap(); 20 | let g = u8::from_str_radix(&hex[2..4], 16).unwrap(); 21 | let b = u8::from_str_radix(&hex[4..6], 16).unwrap(); 22 | 23 | Color32::from_rgb(r, g, b) 24 | } 25 | 26 | #[cfg(target_os = "windows")] 27 | pub fn get_shortcuts(config: &Config) -> Vec { 28 | config 29 | .search 30 | .shortcut_paths 31 | .iter() 32 | .map(|path| { 33 | walkdir::WalkDir::new(Path::new( 34 | shellexpand::env(&path) 35 | .expect("couldn't get shortcut path") 36 | .as_ref(), 37 | )) 38 | }) 39 | .flat_map(|shortcuts_dir| { 40 | shortcuts_dir 41 | .into_iter() 42 | .filter_map(Result::ok) 43 | .filter(|x| { 44 | let path = x.path().to_str().unwrap(); 45 | let lowercase = path.to_lowercase(); 46 | let ignored = config 47 | .search 48 | .ignore_paths 49 | .iter() 50 | .map(|ignore_str| { 51 | shellexpand::env(&ignore_str) 52 | .expect("couldn't get shortcut ignore dir") 53 | .to_lowercase() 54 | }) 55 | .any(|ignore_dir| lowercase.contains(&ignore_dir)); 56 | 57 | !ignored && (lowercase.ends_with(".lnk") || lowercase.ends_with(".url")) 58 | }) 59 | .map(|x| x.path().to_owned()) 60 | }) 61 | .collect() 62 | } 63 | 64 | #[cfg(target_os = "macos")] 65 | pub fn get_shortcuts(config: &Config) -> Vec { 66 | config 67 | .search 68 | .shortcut_paths 69 | .iter() 70 | .map(|path| { 71 | walkdir::WalkDir::new(Path::new( 72 | shellexpand::env(&path) 73 | .expect("couldn't get shortcut path") 74 | .as_ref(), 75 | )) 76 | // arbitrary limit to prevent long load times with apps that store stuff incorrectly 77 | // (looking at you unity) 78 | .max_depth(5) 79 | }) 80 | .flat_map(|shortcuts_dir| { 81 | shortcuts_dir 82 | .into_iter() 83 | .filter_map(Result::ok) 84 | .filter(|de| { 85 | let path = de.path(); 86 | let file_name = path 87 | .file_name() 88 | .and_then(|s| s.to_str()) 89 | .unwrap_or_default(); 90 | 91 | !file_name.starts_with('.') && file_name.ends_with(".app") 92 | }) 93 | .map(|de| de.path().to_path_buf()) 94 | }) 95 | .collect() 96 | } 97 | -------------------------------------------------------------------------------- /src/main.rs: -------------------------------------------------------------------------------- 1 | #![cfg_attr(not(debug_assertions), windows_subsystem = "windows")] 2 | 3 | use std::fs; 4 | 5 | use eframe::egui; 6 | use egui::{FontData, FontDefinitions, FontFamily, Pos2, Vec2}; 7 | 8 | mod app; 9 | mod config; 10 | mod search; 11 | mod util; 12 | 13 | #[cfg(target_os = "windows")] 14 | fn fix_stdout() { 15 | use windows::Win32::System::Console::{AttachConsole, ATTACH_PARENT_PROCESS}; 16 | 17 | unsafe { 18 | AttachConsole(ATTACH_PARENT_PROCESS); 19 | } 20 | } 21 | 22 | fn main() { 23 | #[cfg(target_os = "windows")] 24 | fix_stdout(); 25 | 26 | let config = config::get_config(); 27 | println!("{:#?}", config); 28 | 29 | eframe::run_native( 30 | "tistow", 31 | eframe::NativeOptions { 32 | transparent: true, 33 | resizable: false, 34 | always_on_top: true, 35 | decorated: false, 36 | initial_window_size: Some(Vec2 { 37 | x: config.window.width as f32, 38 | y: config.window.height as f32, 39 | }), 40 | initial_window_pos: Some(Pos2 { 41 | x: config.window.x as f32, 42 | y: config.window.y as f32, 43 | }), 44 | ..eframe::NativeOptions::default() 45 | }, 46 | Box::new(|cc| { 47 | let mut visuals = egui::Visuals::dark(); 48 | 49 | // colors 50 | if let Some(bg_color) = &config.style.bg_color { 51 | let bg_color = util::hex_to_color32(bg_color); 52 | visuals.widgets.noninteractive.bg_fill = bg_color; 53 | } 54 | 55 | if let Some(input_bg_color) = &config.style.input_bg_color { 56 | let input_bg_color = util::hex_to_color32(input_bg_color); 57 | visuals.extreme_bg_color = input_bg_color; 58 | } 59 | 60 | if let Some(hovered_bg_color) = &config.style.hovered_bg_color { 61 | let hovered_bg_color = util::hex_to_color32(hovered_bg_color); 62 | visuals.widgets.hovered.bg_fill = hovered_bg_color; 63 | } 64 | 65 | if let Some(selected_bg_color) = &config.style.selected_bg_color { 66 | let selected_bg_color = util::hex_to_color32(selected_bg_color); 67 | visuals.widgets.active.bg_fill = selected_bg_color; 68 | } 69 | 70 | if let Some(text_color) = &config.style.text_color { 71 | let text_color = util::hex_to_color32(text_color); 72 | visuals.override_text_color = Some(text_color); 73 | } 74 | 75 | if let Some(stroke_color) = &config.style.stroke_color { 76 | let stroke_color = util::hex_to_color32(stroke_color); 77 | visuals.selection.stroke.color = stroke_color; // text input 78 | visuals.widgets.hovered.bg_stroke.color = stroke_color; // hover 79 | visuals.widgets.active.bg_stroke.color = stroke_color; // selection 80 | } 81 | 82 | cc.egui_ctx.set_visuals(visuals); 83 | 84 | // fonts 85 | if let Some(font_path) = &config.style.font { 86 | let mut fonts = FontDefinitions::default(); 87 | 88 | fonts.font_data.insert( 89 | "custom_font".to_owned(), 90 | FontData::from_owned(fs::read(font_path).unwrap()), 91 | ); 92 | 93 | fonts 94 | .families 95 | .get_mut(&FontFamily::Proportional) 96 | .unwrap() 97 | .insert(0, "custom_font".to_owned()); 98 | fonts 99 | .families 100 | .get_mut(&FontFamily::Monospace) 101 | .unwrap() 102 | .push("custom_font".to_owned()); 103 | 104 | cc.egui_ctx.set_fonts(fonts); 105 | } 106 | 107 | Box::new(app::App::new(cc.egui_ctx.clone(), config)) 108 | }), 109 | ); 110 | } 111 | -------------------------------------------------------------------------------- /src/config.rs: -------------------------------------------------------------------------------- 1 | use directories::ProjectDirs; 2 | use figment::{ 3 | providers::{Format, Serialized, Toml}, 4 | value::Map, 5 | Figment, 6 | }; 7 | use serde::{Deserialize, Serialize}; 8 | use std::fs::{self, File}; 9 | 10 | #[derive(Serialize, Deserialize, Debug, Clone)] 11 | pub struct Window { 12 | pub width: u32, 13 | pub height: u32, 14 | pub x: u32, 15 | pub y: u32, 16 | } 17 | 18 | impl Default for Window { 19 | fn default() -> Self { 20 | Self { 21 | width: 640, 22 | height: 320, 23 | x: 640, 24 | y: 380, 25 | } 26 | } 27 | } 28 | 29 | #[derive(Serialize, Deserialize, Debug, Clone)] 30 | pub struct Search { 31 | pub shortcut_paths: Vec, 32 | pub ignore_paths: Vec, 33 | pub aliases: Map, 34 | } 35 | 36 | impl Default for Search { 37 | #[cfg(target_os = "windows")] 38 | fn default() -> Self { 39 | Self { 40 | shortcut_paths: vec![ 41 | "${AppData}\\Microsoft\\Windows\\Start Menu".to_string(), 42 | "${ProgramData}\\Microsoft\\Windows\\Start Menu".to_string(), 43 | ], 44 | ignore_paths: vec![ 45 | "${AppData}\\Microsoft\\Windows\\Start Menu\\Programs\\Startup".to_string(), 46 | ], 47 | aliases: Map::new(), 48 | } 49 | } 50 | 51 | #[cfg(target_os = "macos")] 52 | fn default() -> Self { 53 | Self { 54 | shortcut_paths: vec![ 55 | "/Applications".to_string(), 56 | "/System/Applications".to_string(), 57 | "${HOME}/Applications".to_string(), 58 | ], 59 | ignore_paths: vec![], 60 | aliases: Map::new(), 61 | } 62 | } 63 | } 64 | 65 | #[derive(Serialize, Deserialize, Debug, Clone)] 66 | pub struct General { 67 | pub hotkey: Vec, 68 | } 69 | 70 | impl Default for General { 71 | fn default() -> Self { 72 | Self { 73 | hotkey: vec!["LAlt".to_string(), "Backspace".to_string()], 74 | } 75 | } 76 | } 77 | 78 | #[derive(Serialize, Deserialize, Debug, Clone, Default)] 79 | pub struct Style { 80 | pub font: Option, 81 | 82 | pub bg_color: Option, 83 | pub input_bg_color: Option, 84 | pub hovered_bg_color: Option, 85 | pub selected_bg_color: Option, 86 | 87 | pub text_color: Option, 88 | pub stroke_color: Option, 89 | } 90 | 91 | #[derive(Serialize, Deserialize, Debug, Default, Clone)] 92 | pub struct Config { 93 | pub window: Window, 94 | pub search: Search, 95 | pub general: General, 96 | pub style: Style, 97 | } 98 | 99 | pub fn get_config() -> Config { 100 | // make dir 101 | let project_dir = ProjectDirs::from("", "", "tistow").expect("couldn't get project dir"); 102 | let config_dir = project_dir.config_dir(); 103 | 104 | fs::create_dir_all(config_dir).expect("couldn't create config dir"); 105 | 106 | // create file if it doesn't exist 107 | let config_path = config_dir.join("config.toml"); 108 | if !config_path.exists() { 109 | File::create(&config_path).expect("couldn't create config"); 110 | } 111 | 112 | // read config 113 | let config: Config = Figment::from(Serialized::defaults(Config::default())) 114 | .merge(Toml::file(&config_path)) 115 | .extract() 116 | .expect("couldn't load config"); 117 | 118 | // write config 119 | fs::write( 120 | &config_path, 121 | toml::to_string(&config).expect("couldn't save config"), 122 | ) 123 | .expect("couldn't save config"); 124 | 125 | config 126 | } 127 | 128 | pub fn get_scripts() -> Vec { 129 | let project_dir = ProjectDirs::from("", "", "tistow").expect("couldn't get project dir"); 130 | let lua_dir = project_dir.config_dir().join("lua"); 131 | 132 | if !lua_dir.exists() { 133 | std::fs::create_dir(&lua_dir).expect("couldn't create lua dir"); 134 | } 135 | 136 | let mut results: Vec = Vec::new(); 137 | for file in std::fs::read_dir(lua_dir).unwrap() { 138 | let file = file.unwrap(); 139 | let file = file.path(); 140 | if file.extension().unwrap() == "lua" { 141 | let script = std::fs::read_to_string(file).unwrap(); 142 | results.push(script); 143 | } 144 | } 145 | 146 | results 147 | } 148 | -------------------------------------------------------------------------------- /src/search.rs: -------------------------------------------------------------------------------- 1 | use figment::value::Map; 2 | use fuzzy_matcher::{skim::SkimMatcherV2, FuzzyMatcher}; 3 | use std::path::PathBuf; 4 | 5 | #[derive(Clone)] 6 | pub enum SearchMode { 7 | Search, 8 | Calculator, 9 | } 10 | 11 | #[derive(Clone)] 12 | pub struct SearchResult { 13 | pub mode: SearchMode, 14 | pub text: String, 15 | pub action: Option, 16 | } 17 | 18 | #[derive(Clone)] 19 | pub enum ResultAction { 20 | Open { path: PathBuf }, 21 | Copy { text: String }, 22 | Lua, 23 | } 24 | 25 | pub struct Search { 26 | matcher: SkimMatcherV2, 27 | shortcuts: Vec, 28 | aliases: Map, 29 | 30 | custom_shortcuts: Vec, 31 | } 32 | 33 | struct KeyMatch { 34 | path: Option, 35 | name: String, 36 | kind: Option, 37 | } 38 | 39 | #[derive(PartialEq, Eq, PartialOrd, Ord, Copy, Clone)] 40 | enum MatchKind { 41 | Alias, 42 | Exact, 43 | StartsWith, 44 | Fuzzy, 45 | } 46 | 47 | impl Search { 48 | pub fn new(shortcuts: Vec, aliases: Map) -> Self { 49 | Self { 50 | matcher: SkimMatcherV2::default(), 51 | shortcuts, 52 | aliases, 53 | 54 | custom_shortcuts: Vec::new(), 55 | } 56 | } 57 | 58 | pub fn add_custom_shortcut(&mut self, name: String) { 59 | self.custom_shortcuts.push(SearchResult { 60 | mode: SearchMode::Search, 61 | text: name, 62 | action: Some(ResultAction::Lua), 63 | }); 64 | } 65 | 66 | pub fn search(&self, input: &str) -> Vec { 67 | if input.is_empty() { 68 | return vec![]; 69 | } 70 | 71 | // TODO: find better way to do this 72 | let mode = if input.starts_with('=') { 73 | SearchMode::Calculator 74 | } else { 75 | SearchMode::Search 76 | }; 77 | 78 | match mode { 79 | SearchMode::Calculator => self.mode_calculator(&input[1..]), 80 | SearchMode::Search => self.mode_search(input), 81 | } 82 | } 83 | 84 | fn mode_calculator(&self, input: &str) -> Vec { 85 | let r = meval::eval_str(input.trim()); 86 | 87 | let res = if let Ok(n) = r { 88 | n.to_string() 89 | } else { 90 | "ERROR".to_string() 91 | }; 92 | 93 | vec![SearchResult { 94 | mode: SearchMode::Calculator, 95 | text: format!("= {}", res), 96 | action: Some(ResultAction::Copy { text: res }), 97 | }] 98 | } 99 | 100 | fn do_keymatch( 101 | name: String, 102 | path: Option, 103 | alias: Option<&String>, 104 | input: &str, 105 | fuzzy: bool, 106 | ) -> KeyMatch { 107 | let alias_matches = alias.is_some() && name.trim() == alias.unwrap().trim(); 108 | let exact_match = name.trim().to_lowercase() == input.trim().to_lowercase(); 109 | let starts_with = name 110 | .trim() 111 | .to_lowercase() 112 | .starts_with(&input.trim().to_lowercase()); 113 | 114 | let match_kind = if alias_matches { 115 | Some(MatchKind::Alias) 116 | } else if exact_match { 117 | Some(MatchKind::Exact) 118 | } else if starts_with { 119 | Some(MatchKind::StartsWith) 120 | } else if fuzzy { 121 | Some(MatchKind::Fuzzy) 122 | } else { 123 | None 124 | }; 125 | 126 | KeyMatch { 127 | path, 128 | name, 129 | kind: match_kind, 130 | } 131 | } 132 | 133 | fn mode_search(&self, input: &str) -> Vec { 134 | let alias = self.aliases.get(input.trim()); 135 | 136 | let shortcuts = self.shortcuts.clone(); 137 | let shortcuts: Vec> = shortcuts.iter().map(Some).collect(); 138 | 139 | // we need to prioritize, in order: 140 | // - aliases 141 | // - exact matches 142 | // - starts with input 143 | // - everything else 144 | let mut vec: Vec = Vec::new(); 145 | for shortcut in shortcuts { 146 | let path = shortcut.unwrap().to_path_buf(); 147 | let name = path.file_stem().unwrap().to_str().unwrap().to_string(); 148 | 149 | let fuzzy = self 150 | .matcher 151 | .fuzzy_match(&name.to_lowercase(), &input.to_lowercase()) 152 | .is_some(); 153 | 154 | let km = Self::do_keymatch(name, Some(path), alias, input, fuzzy); 155 | vec.push(km); 156 | } 157 | 158 | for custom_shortcut in &self.custom_shortcuts { 159 | let name = custom_shortcut.text.clone(); 160 | let fuzzy = self 161 | .matcher 162 | .fuzzy_match(&name.to_lowercase(), &input.to_lowercase()) 163 | .is_some(); 164 | 165 | let km = Self::do_keymatch(name, None, alias, input, fuzzy); 166 | vec.push(km); 167 | } 168 | 169 | let mut available_shortcuts: Vec<&KeyMatch> = 170 | vec.iter().filter(|x| x.kind.is_some()).collect(); 171 | 172 | available_shortcuts.sort_by_cached_key(|x| x.kind); 173 | 174 | available_shortcuts 175 | .iter() 176 | .map(|k| { 177 | let path = &k.path; 178 | let name = &k.name; 179 | 180 | if let Some(path) = path { 181 | SearchResult { 182 | mode: SearchMode::Search, 183 | text: name.to_string(), 184 | action: Some(ResultAction::Open { 185 | path: path.to_owned(), 186 | }), 187 | } 188 | } else { 189 | SearchResult { 190 | mode: SearchMode::Search, 191 | text: name.to_string(), 192 | action: Some(ResultAction::Lua), 193 | } 194 | } 195 | }) 196 | .collect() 197 | } 198 | } 199 | -------------------------------------------------------------------------------- /src/app.rs: -------------------------------------------------------------------------------- 1 | use std::collections::HashMap; 2 | use std::str::FromStr; 3 | use std::sync; 4 | 5 | use anyhow::Context; 6 | use arboard::Clipboard; 7 | use egui::Key; 8 | use mlua::Lua; 9 | 10 | use crate::config::{get_scripts, Config}; 11 | use crate::search::{ResultAction, Search, SearchResult}; 12 | use crate::util::get_shortcuts; 13 | 14 | #[derive(Clone, Copy, Debug)] 15 | pub enum HotkeyEvent { 16 | Open, 17 | } 18 | 19 | #[derive(Clone, Debug)] 20 | pub enum LuaShortcutEvent { 21 | Add(String), 22 | Done, 23 | } 24 | 25 | #[derive(Clone, Debug)] 26 | pub enum LuaEvent { 27 | RunCallback(String), 28 | Close, 29 | } 30 | 31 | pub struct AppChannels { 32 | hotkeys_rx: sync::mpsc::Receiver, 33 | lua_run_tx: sync::mpsc::Sender, 34 | lua_close_rx: sync::mpsc::Receiver, 35 | } 36 | 37 | #[derive(Default, Clone, Debug)] 38 | struct Opened { 39 | input: String, 40 | focused: Option, 41 | items: usize, 42 | } 43 | impl Opened { 44 | pub fn cycle_focus(&mut self) { 45 | self.focused = match self.focused { 46 | Some(n) => { 47 | if n + 1 == self.items { 48 | None 49 | } else { 50 | Some(n + 1) 51 | } 52 | } 53 | None => Some(0), 54 | } 55 | } 56 | } 57 | 58 | #[derive(Clone, Debug)] 59 | enum AppState { 60 | First, 61 | Unopened, 62 | Opened(Opened), 63 | } 64 | 65 | pub struct App { 66 | search: Search, 67 | state: AppState, 68 | app_channels: AppChannels, 69 | _hotkey_thread: std::thread::JoinHandle<()>, 70 | _config: Config, 71 | } 72 | 73 | impl App { 74 | pub fn new(ctx: egui::Context, config: Config) -> Self { 75 | let shortcuts = get_shortcuts(&config); 76 | let mut search = Search::new(shortcuts, config.search.aliases.clone()); 77 | 78 | let (events_tx, hotkeys_rx) = sync::mpsc::channel(); 79 | let hotkey_thread = std::thread::spawn({ 80 | let config = config.clone(); 81 | let hotkeys: Vec<_> = config 82 | .general 83 | .hotkey 84 | .iter() 85 | .map(|hk| device_query::Keycode::from_str(hk).unwrap()) 86 | .collect(); 87 | 88 | move || { 89 | let device_state = device_query::DeviceState::new(); 90 | 91 | loop { 92 | // global hotkeys 93 | if crate::util::is_hotkey_pressed(&device_state, &hotkeys) { 94 | events_tx.send(HotkeyEvent::Open).unwrap(); 95 | ctx.request_repaint(); 96 | } 97 | 98 | std::thread::sleep(std::time::Duration::from_millis(10)); 99 | } 100 | } 101 | }); 102 | 103 | let (run_tx, run_rx) = sync::mpsc::channel(); 104 | let (close_tx, close_rx) = sync::mpsc::channel(); 105 | let (shortcuts_tx, shortcuts_rx) = sync::mpsc::channel(); 106 | 107 | std::thread::spawn(move || { 108 | let lua = Lua::new(); 109 | let lua_table = lua.create_table().unwrap(); 110 | 111 | lua.set_named_registry_value("custom_shortcuts", HashMap::::new()) 112 | .unwrap(); 113 | 114 | let open = lua 115 | .create_function(|_, open: String| -> mlua::Result<()> { 116 | open::that(open)?; 117 | Ok(()) 118 | }) 119 | .unwrap(); 120 | lua_table.set("open", open).unwrap(); 121 | 122 | let copy = lua 123 | .create_function(|_, text: String| -> mlua::Result<()> { 124 | Clipboard::new() 125 | .unwrap() 126 | .set_text(text) 127 | .context("couldn't copy to clipboard") 128 | .unwrap(); 129 | 130 | Ok(()) 131 | }) 132 | .unwrap(); 133 | lua_table.set("copy", copy).unwrap(); 134 | 135 | let add_entry = lua 136 | .create_function( 137 | |lua, (name, func): (String, mlua::Function)| -> mlua::Result<()> { 138 | let mut custom_shortcuts: HashMap = 139 | lua.named_registry_value("custom_shortcuts").unwrap(); 140 | custom_shortcuts.insert(name, func); 141 | lua.set_named_registry_value("custom_shortcuts", custom_shortcuts) 142 | .unwrap(); 143 | 144 | Ok(()) 145 | }, 146 | ) 147 | .unwrap(); 148 | lua_table.set("add_entry", add_entry).unwrap(); 149 | 150 | lua.globals().set("tistow", lua_table).unwrap(); 151 | 152 | let scripts = get_scripts(); 153 | println!("scripts to load: {}", scripts.len()); 154 | for script in scripts { 155 | lua.load(&script).exec().unwrap(); 156 | } 157 | 158 | let custom_shortcuts: HashMap = 159 | lua.named_registry_value("custom_shortcuts").unwrap(); 160 | for (name, _) in custom_shortcuts { 161 | shortcuts_tx.send(LuaShortcutEvent::Add(name)).unwrap(); 162 | } 163 | shortcuts_tx.send(LuaShortcutEvent::Done).unwrap(); 164 | 165 | loop { 166 | match run_rx.recv() { 167 | Ok(LuaEvent::RunCallback(callback)) => { 168 | let custom_shortcuts: HashMap = 169 | lua.named_registry_value("custom_shortcuts").unwrap(); 170 | let func = custom_shortcuts.get(&callback).unwrap(); 171 | let should_close = func.call::<_, bool>(()).unwrap(); 172 | 173 | if should_close { 174 | close_tx.send(LuaEvent::Close).unwrap(); 175 | } 176 | } 177 | Ok(LuaEvent::Close) => { 178 | todo!() 179 | } 180 | Err(e) => { 181 | println!("lua thread error: {}", e); 182 | } 183 | } 184 | } 185 | }); 186 | 187 | loop { 188 | match shortcuts_rx.recv() { 189 | Ok(LuaShortcutEvent::Add(name)) => { 190 | search.add_custom_shortcut(name); 191 | } 192 | Ok(LuaShortcutEvent::Done) => { 193 | break; 194 | } 195 | Err(e) => { 196 | println!("shortcuts thread error: {}", e); 197 | } 198 | } 199 | } 200 | 201 | Self { 202 | search, 203 | state: AppState::First, 204 | 205 | app_channels: AppChannels { 206 | hotkeys_rx, 207 | lua_run_tx: run_tx, 208 | lua_close_rx: close_rx, 209 | }, 210 | 211 | _hotkey_thread: hotkey_thread, 212 | _config: config, 213 | } 214 | } 215 | 216 | fn handle_select(selection: &SearchResult, app_channels: &AppChannels) -> anyhow::Result { 217 | println!("select: {}", selection.text); 218 | let action = match &selection.action { 219 | Some(action) => action, 220 | _ => return Ok(false), 221 | }; 222 | 223 | let should_close = match action { 224 | ResultAction::Open { path } => { 225 | open::that(path).context("couldn't spawn process")?; 226 | 227 | true 228 | } 229 | ResultAction::Copy { text } => { 230 | Clipboard::new()? 231 | .set_text(text.to_string()) 232 | .context("couldn't copy to clipboard")?; 233 | 234 | false 235 | } 236 | ResultAction::Lua => { 237 | // ghelp 238 | app_channels 239 | .lua_run_tx 240 | .send(LuaEvent::RunCallback(selection.text.clone())) 241 | .unwrap(); 242 | 243 | false 244 | } 245 | }; 246 | Ok(should_close) 247 | } 248 | 249 | fn get_new_state(&self, ctx: &egui::Context) -> anyhow::Result { 250 | match &self.state { 251 | AppState::First => Ok(AppState::Unopened), 252 | AppState::Unopened => Ok(AppState::Unopened), 253 | AppState::Opened(opened) => self.process_opened(opened, ctx), 254 | } 255 | } 256 | 257 | fn process_opened(&self, opened: &Opened, ctx: &egui::Context) -> anyhow::Result { 258 | let mut opened = opened.clone(); 259 | let results = self.search.search(&opened.input); 260 | opened.items = results.len(); 261 | 262 | //println!("{}", self.focused); 263 | if ctx.input().key_pressed(egui::Key::Tab) { 264 | opened.cycle_focus(); 265 | } 266 | if ctx.input().key_released(Key::Escape) { 267 | return Ok(AppState::Unopened); 268 | } 269 | 270 | egui::CentralPanel::default() 271 | .show(ctx, |ui| { 272 | Self::draw_opened_central(ui, opened, results, &self.app_channels) 273 | }) 274 | .inner 275 | } 276 | 277 | fn draw_opened_central( 278 | ui: &mut egui::Ui, 279 | mut opened: Opened, 280 | results: Vec, 281 | app_channels: &AppChannels, 282 | ) -> anyhow::Result { 283 | let input_widget = egui::TextEdit::singleline(&mut opened.input) 284 | .hint_text("search anything...") 285 | .lock_focus(true); 286 | let input_res = ui.add_sized((ui.available_width(), 18_f32), input_widget); 287 | 288 | if app_channels.lua_close_rx.try_recv().is_ok() { 289 | return Ok(AppState::Unopened); 290 | } 291 | 292 | if ui.input().key_pressed(egui::Key::Enter) && !results.is_empty() { 293 | let result = if input_res.lost_focus() { 294 | // user presses enter in the input field (select first input) 295 | Some(&results[0]) 296 | } else if opened.focused.is_some() { 297 | // user selects option manually 298 | Some(&results[opened.focused.unwrap()]) 299 | } else { 300 | None 301 | }; 302 | 303 | if let Some(result) = result { 304 | if Self::handle_select(result, app_channels)? { 305 | return Ok(AppState::Unopened); 306 | } 307 | } 308 | } 309 | 310 | if opened.focused.is_none() { 311 | input_res.request_focus(); 312 | } 313 | 314 | ui.separator(); 315 | 316 | let inner = egui::ScrollArea::vertical() 317 | .auto_shrink([false, false]) 318 | .min_scrolled_width(ui.available_width()) 319 | .show(ui, |scroll_ui| { 320 | if opened.input.is_empty() { 321 | return Ok(None); 322 | } 323 | 324 | if opened.input.trim() == "anything" && results.is_empty() { 325 | scroll_ui.label("...uh, not like that"); 326 | } 327 | 328 | for (pos, result) in results.iter().enumerate() { 329 | let mut label_res = scroll_ui.selectable_label(false, &result.text); 330 | 331 | if let Some(ResultAction::Open { path }) = &result.action { 332 | label_res = label_res.on_hover_text(path.to_str().unwrap()); 333 | } 334 | 335 | if opened.focused == Some(pos) { 336 | label_res.request_focus(); 337 | label_res.scroll_to_me(None); 338 | } 339 | 340 | if label_res.clicked() { 341 | let should_close = Self::handle_select(result, app_channels)?; 342 | if should_close { 343 | return Ok(Some(AppState::Unopened)); 344 | } 345 | } 346 | } 347 | 348 | anyhow::Ok(None) 349 | }) 350 | .inner?; 351 | 352 | Ok(inner.unwrap_or(AppState::Opened(opened))) 353 | } 354 | 355 | fn set_state(&mut self, state: AppState, frame: &mut eframe::Frame) { 356 | self.state = state; 357 | match &self.state { 358 | AppState::First => panic!("should never enter first state"), 359 | AppState::Unopened => { 360 | frame.set_visibility(false); 361 | } 362 | AppState::Opened(_) => { 363 | frame.set_visibility(true); 364 | } 365 | } 366 | } 367 | } 368 | 369 | impl eframe::App for App { 370 | fn on_exit(&mut self, _gl: Option<&eframe::glow::Context>) { 371 | //self.exited = true; 372 | } 373 | 374 | fn update(&mut self, ctx: &egui::Context, frame: &mut eframe::Frame) { 375 | let events: Vec<_> = self.app_channels.hotkeys_rx.try_iter().collect(); 376 | for event in events { 377 | match event { 378 | HotkeyEvent::Open => self.set_state(AppState::Opened(Opened::default()), frame), 379 | } 380 | } 381 | 382 | let state = self.get_new_state(ctx); 383 | self.set_state(state.unwrap(), frame); 384 | } 385 | } 386 | -------------------------------------------------------------------------------- /Cargo.lock: -------------------------------------------------------------------------------- 1 | # This file is automatically @generated by Cargo. 2 | # It is not intended for manual editing. 3 | version = 3 4 | 5 | [[package]] 6 | name = "ab_glyph" 7 | version = "0.2.15" 8 | source = "registry+https://github.com/rust-lang/crates.io-index" 9 | checksum = "24606928a235e73cdef55a0c909719cadd72fce573e5713d58cb2952d8f5794c" 10 | dependencies = [ 11 | "ab_glyph_rasterizer", 12 | "owned_ttf_parser", 13 | ] 14 | 15 | [[package]] 16 | name = "ab_glyph_rasterizer" 17 | version = "0.1.5" 18 | source = "registry+https://github.com/rust-lang/crates.io-index" 19 | checksum = "a13739d7177fbd22bb0ed28badfff9f372f8bef46c863db4e1c6248f6b223b6e" 20 | 21 | [[package]] 22 | name = "adler" 23 | version = "1.0.2" 24 | source = "registry+https://github.com/rust-lang/crates.io-index" 25 | checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" 26 | 27 | [[package]] 28 | name = "adler32" 29 | version = "1.2.0" 30 | source = "registry+https://github.com/rust-lang/crates.io-index" 31 | checksum = "aae1277d39aeec15cb388266ecc24b11c80469deae6067e17a1a7aa9e5c1f234" 32 | 33 | [[package]] 34 | name = "ahash" 35 | version = "0.4.7" 36 | source = "registry+https://github.com/rust-lang/crates.io-index" 37 | checksum = "739f4a8db6605981345c5654f3a85b056ce52f37a39d34da03f25bf2151ea16e" 38 | 39 | [[package]] 40 | name = "ahash" 41 | version = "0.7.6" 42 | source = "registry+https://github.com/rust-lang/crates.io-index" 43 | checksum = "fcb51a0695d8f838b1ee009b3fbf66bda078cd64590202a864a8f3e8c4315c47" 44 | dependencies = [ 45 | "getrandom", 46 | "once_cell", 47 | "version_check", 48 | ] 49 | 50 | [[package]] 51 | name = "aho-corasick" 52 | version = "0.7.18" 53 | source = "registry+https://github.com/rust-lang/crates.io-index" 54 | checksum = "1e37cfd5e7657ada45f742d6e99ca5788580b5c529dc78faf11ece6dc702656f" 55 | dependencies = [ 56 | "memchr", 57 | ] 58 | 59 | [[package]] 60 | name = "android_glue" 61 | version = "0.2.3" 62 | source = "registry+https://github.com/rust-lang/crates.io-index" 63 | checksum = "000444226fcff248f2bc4c7625be32c63caccfecc2723a2b9f78a7487a49c407" 64 | 65 | [[package]] 66 | name = "anyhow" 67 | version = "1.0.58" 68 | source = "registry+https://github.com/rust-lang/crates.io-index" 69 | checksum = "bb07d2053ccdbe10e2af2995a2f116c1330396493dc1269f6a91d0ae82e19704" 70 | 71 | [[package]] 72 | name = "arboard" 73 | version = "2.1.1" 74 | source = "registry+https://github.com/rust-lang/crates.io-index" 75 | checksum = "dc120354d1b5ec6d7aaf4876b602def75595937b5e15d356eb554ab5177e08bb" 76 | dependencies = [ 77 | "clipboard-win", 78 | "core-graphics 0.22.3", 79 | "image", 80 | "log", 81 | "objc", 82 | "objc-foundation", 83 | "objc_id", 84 | "parking_lot 0.12.1", 85 | "thiserror", 86 | "winapi", 87 | "x11rb", 88 | ] 89 | 90 | [[package]] 91 | name = "async-broadcast" 92 | version = "0.4.0" 93 | source = "registry+https://github.com/rust-lang/crates.io-index" 94 | checksum = "1bbd92a9bd0e9c1298118ecf8a2f825e86b12c3ec9e411573e34aaf3a0c03cdd" 95 | dependencies = [ 96 | "easy-parallel", 97 | "event-listener", 98 | "futures-core", 99 | "parking_lot 0.11.2", 100 | ] 101 | 102 | [[package]] 103 | name = "async-channel" 104 | version = "1.6.1" 105 | source = "registry+https://github.com/rust-lang/crates.io-index" 106 | checksum = "2114d64672151c0c5eaa5e131ec84a74f06e1e559830dabba01ca30605d66319" 107 | dependencies = [ 108 | "concurrent-queue", 109 | "event-listener", 110 | "futures-core", 111 | ] 112 | 113 | [[package]] 114 | name = "async-executor" 115 | version = "1.4.1" 116 | source = "registry+https://github.com/rust-lang/crates.io-index" 117 | checksum = "871f9bb5e0a22eeb7e8cf16641feb87c9dc67032ccf8ff49e772eb9941d3a965" 118 | dependencies = [ 119 | "async-task", 120 | "concurrent-queue", 121 | "fastrand", 122 | "futures-lite", 123 | "once_cell", 124 | "slab", 125 | ] 126 | 127 | [[package]] 128 | name = "async-io" 129 | version = "1.7.0" 130 | source = "registry+https://github.com/rust-lang/crates.io-index" 131 | checksum = "e5e18f61464ae81cde0a23e713ae8fd299580c54d697a35820cfd0625b8b0e07" 132 | dependencies = [ 133 | "concurrent-queue", 134 | "futures-lite", 135 | "libc", 136 | "log", 137 | "once_cell", 138 | "parking", 139 | "polling", 140 | "slab", 141 | "socket2", 142 | "waker-fn", 143 | "winapi", 144 | ] 145 | 146 | [[package]] 147 | name = "async-lock" 148 | version = "2.5.0" 149 | source = "registry+https://github.com/rust-lang/crates.io-index" 150 | checksum = "e97a171d191782fba31bb902b14ad94e24a68145032b7eedf871ab0bc0d077b6" 151 | dependencies = [ 152 | "event-listener", 153 | ] 154 | 155 | [[package]] 156 | name = "async-recursion" 157 | version = "0.3.2" 158 | source = "registry+https://github.com/rust-lang/crates.io-index" 159 | checksum = "d7d78656ba01f1b93024b7c3a0467f1608e4be67d725749fdcd7d2c7678fd7a2" 160 | dependencies = [ 161 | "proc-macro2", 162 | "quote", 163 | "syn", 164 | ] 165 | 166 | [[package]] 167 | name = "async-task" 168 | version = "4.2.0" 169 | source = "registry+https://github.com/rust-lang/crates.io-index" 170 | checksum = "30696a84d817107fc028e049980e09d5e140e8da8f1caeb17e8e950658a3cea9" 171 | 172 | [[package]] 173 | name = "async-trait" 174 | version = "0.1.56" 175 | source = "registry+https://github.com/rust-lang/crates.io-index" 176 | checksum = "96cf8829f67d2eab0b2dfa42c5d0ef737e0724e4a82b01b3e292456202b19716" 177 | dependencies = [ 178 | "proc-macro2", 179 | "quote", 180 | "syn", 181 | ] 182 | 183 | [[package]] 184 | name = "atomic" 185 | version = "0.5.1" 186 | source = "registry+https://github.com/rust-lang/crates.io-index" 187 | checksum = "b88d82667eca772c4aa12f0f1348b3ae643424c8876448f3f7bd5787032e234c" 188 | dependencies = [ 189 | "autocfg", 190 | ] 191 | 192 | [[package]] 193 | name = "atomic_refcell" 194 | version = "0.1.8" 195 | source = "registry+https://github.com/rust-lang/crates.io-index" 196 | checksum = "73b5e5f48b927f04e952dedc932f31995a65a0bf65ec971c74436e51bf6e970d" 197 | 198 | [[package]] 199 | name = "autocfg" 200 | version = "1.1.0" 201 | source = "registry+https://github.com/rust-lang/crates.io-index" 202 | checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" 203 | 204 | [[package]] 205 | name = "bitflags" 206 | version = "1.3.2" 207 | source = "registry+https://github.com/rust-lang/crates.io-index" 208 | checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" 209 | 210 | [[package]] 211 | name = "block" 212 | version = "0.1.6" 213 | source = "registry+https://github.com/rust-lang/crates.io-index" 214 | checksum = "0d8c1fef690941d3e7788d328517591fecc684c084084702d6ff1641e993699a" 215 | 216 | [[package]] 217 | name = "bstr" 218 | version = "0.2.17" 219 | source = "registry+https://github.com/rust-lang/crates.io-index" 220 | checksum = "ba3569f383e8f1598449f1a423e72e99569137b47740b1da11ef19af3d5c3223" 221 | dependencies = [ 222 | "memchr", 223 | ] 224 | 225 | [[package]] 226 | name = "bumpalo" 227 | version = "3.10.0" 228 | source = "registry+https://github.com/rust-lang/crates.io-index" 229 | checksum = "37ccbd214614c6783386c1af30caf03192f17891059cecc394b4fb119e363de3" 230 | 231 | [[package]] 232 | name = "bytemuck" 233 | version = "1.10.0" 234 | source = "registry+https://github.com/rust-lang/crates.io-index" 235 | checksum = "c53dfa917ec274df8ed3c572698f381a24eef2efba9492d797301b72b6db408a" 236 | dependencies = [ 237 | "bytemuck_derive", 238 | ] 239 | 240 | [[package]] 241 | name = "bytemuck_derive" 242 | version = "1.1.0" 243 | source = "registry+https://github.com/rust-lang/crates.io-index" 244 | checksum = "562e382481975bc61d11275ac5e62a19abd00b0547d99516a415336f183dcd0e" 245 | dependencies = [ 246 | "proc-macro2", 247 | "quote", 248 | "syn", 249 | ] 250 | 251 | [[package]] 252 | name = "byteorder" 253 | version = "1.4.3" 254 | source = "registry+https://github.com/rust-lang/crates.io-index" 255 | checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610" 256 | 257 | [[package]] 258 | name = "bytes" 259 | version = "1.1.0" 260 | source = "registry+https://github.com/rust-lang/crates.io-index" 261 | checksum = "c4872d67bab6358e59559027aa3b9157c53d9358c51423c17554809a8858e0f8" 262 | 263 | [[package]] 264 | name = "cache-padded" 265 | version = "1.2.0" 266 | source = "registry+https://github.com/rust-lang/crates.io-index" 267 | checksum = "c1db59621ec70f09c5e9b597b220c7a2b43611f4710dc03ceb8748637775692c" 268 | 269 | [[package]] 270 | name = "calloop" 271 | version = "0.9.3" 272 | source = "registry+https://github.com/rust-lang/crates.io-index" 273 | checksum = "bf2eec61efe56aa1e813f5126959296933cf0700030e4314786c48779a66ab82" 274 | dependencies = [ 275 | "log", 276 | "nix 0.22.3", 277 | ] 278 | 279 | [[package]] 280 | name = "cc" 281 | version = "1.0.73" 282 | source = "registry+https://github.com/rust-lang/crates.io-index" 283 | checksum = "2fff2a6927b3bb87f9595d67196a70493f627687a71d87a0d692242c33f58c11" 284 | 285 | [[package]] 286 | name = "cesu8" 287 | version = "1.1.0" 288 | source = "registry+https://github.com/rust-lang/crates.io-index" 289 | checksum = "6d43a04d8753f35258c91f8ec639f792891f748a1edbd759cf1dcea3382ad83c" 290 | 291 | [[package]] 292 | name = "cfg-if" 293 | version = "0.1.10" 294 | source = "registry+https://github.com/rust-lang/crates.io-index" 295 | checksum = "4785bdd1c96b2a846b2bd7cc02e86b6b3dbf14e7e53446c4f54c92a361040822" 296 | 297 | [[package]] 298 | name = "cfg-if" 299 | version = "1.0.0" 300 | source = "registry+https://github.com/rust-lang/crates.io-index" 301 | checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" 302 | 303 | [[package]] 304 | name = "cgl" 305 | version = "0.3.2" 306 | source = "registry+https://github.com/rust-lang/crates.io-index" 307 | checksum = "0ced0551234e87afee12411d535648dd89d2e7f34c78b753395567aff3d447ff" 308 | dependencies = [ 309 | "libc", 310 | ] 311 | 312 | [[package]] 313 | name = "clipboard-win" 314 | version = "4.4.1" 315 | source = "registry+https://github.com/rust-lang/crates.io-index" 316 | checksum = "2f3e1238132dc01f081e1cbb9dace14e5ef4c3a51ee244bd982275fb514605db" 317 | dependencies = [ 318 | "error-code", 319 | "str-buf", 320 | "winapi", 321 | ] 322 | 323 | [[package]] 324 | name = "cocoa" 325 | version = "0.24.0" 326 | source = "registry+https://github.com/rust-lang/crates.io-index" 327 | checksum = "6f63902e9223530efb4e26ccd0cf55ec30d592d3b42e21a28defc42a9586e832" 328 | dependencies = [ 329 | "bitflags", 330 | "block", 331 | "cocoa-foundation", 332 | "core-foundation 0.9.3", 333 | "core-graphics 0.22.3", 334 | "foreign-types", 335 | "libc", 336 | "objc", 337 | ] 338 | 339 | [[package]] 340 | name = "cocoa-foundation" 341 | version = "0.1.0" 342 | source = "registry+https://github.com/rust-lang/crates.io-index" 343 | checksum = "7ade49b65d560ca58c403a479bb396592b155c0185eada742ee323d1d68d6318" 344 | dependencies = [ 345 | "bitflags", 346 | "block", 347 | "core-foundation 0.9.3", 348 | "core-graphics-types", 349 | "foreign-types", 350 | "libc", 351 | "objc", 352 | ] 353 | 354 | [[package]] 355 | name = "color_quant" 356 | version = "1.1.0" 357 | source = "registry+https://github.com/rust-lang/crates.io-index" 358 | checksum = "3d7b894f5411737b7867f4827955924d7c254fc9f4d91a6aad6b097804b1018b" 359 | 360 | [[package]] 361 | name = "combine" 362 | version = "4.6.4" 363 | source = "registry+https://github.com/rust-lang/crates.io-index" 364 | checksum = "2a604e93b79d1808327a6fca85a6f2d69de66461e7620f5a4cbf5fb4d1d7c948" 365 | dependencies = [ 366 | "bytes", 367 | "memchr", 368 | ] 369 | 370 | [[package]] 371 | name = "concurrent-queue" 372 | version = "1.2.2" 373 | source = "registry+https://github.com/rust-lang/crates.io-index" 374 | checksum = "30ed07550be01594c6026cff2a1d7fe9c8f683caa798e12b68694ac9e88286a3" 375 | dependencies = [ 376 | "cache-padded", 377 | ] 378 | 379 | [[package]] 380 | name = "core-foundation" 381 | version = "0.7.0" 382 | source = "registry+https://github.com/rust-lang/crates.io-index" 383 | checksum = "57d24c7a13c43e870e37c1556b74555437870a04514f7685f5b354e090567171" 384 | dependencies = [ 385 | "core-foundation-sys 0.7.0", 386 | "libc", 387 | ] 388 | 389 | [[package]] 390 | name = "core-foundation" 391 | version = "0.9.3" 392 | source = "registry+https://github.com/rust-lang/crates.io-index" 393 | checksum = "194a7a9e6de53fa55116934067c844d9d749312f75c6f6d0980e8c252f8c2146" 394 | dependencies = [ 395 | "core-foundation-sys 0.8.3", 396 | "libc", 397 | ] 398 | 399 | [[package]] 400 | name = "core-foundation-sys" 401 | version = "0.7.0" 402 | source = "registry+https://github.com/rust-lang/crates.io-index" 403 | checksum = "b3a71ab494c0b5b860bdc8407ae08978052417070c2ced38573a9157ad75b8ac" 404 | 405 | [[package]] 406 | name = "core-foundation-sys" 407 | version = "0.8.3" 408 | source = "registry+https://github.com/rust-lang/crates.io-index" 409 | checksum = "5827cebf4670468b8772dd191856768aedcb1b0278a04f989f7766351917b9dc" 410 | 411 | [[package]] 412 | name = "core-graphics" 413 | version = "0.19.2" 414 | source = "registry+https://github.com/rust-lang/crates.io-index" 415 | checksum = "b3889374e6ea6ab25dba90bb5d96202f61108058361f6dc72e8b03e6f8bbe923" 416 | dependencies = [ 417 | "bitflags", 418 | "core-foundation 0.7.0", 419 | "foreign-types", 420 | "libc", 421 | ] 422 | 423 | [[package]] 424 | name = "core-graphics" 425 | version = "0.22.3" 426 | source = "registry+https://github.com/rust-lang/crates.io-index" 427 | checksum = "2581bbab3b8ffc6fcbd550bf46c355135d16e9ff2a6ea032ad6b9bf1d7efe4fb" 428 | dependencies = [ 429 | "bitflags", 430 | "core-foundation 0.9.3", 431 | "core-graphics-types", 432 | "foreign-types", 433 | "libc", 434 | ] 435 | 436 | [[package]] 437 | name = "core-graphics-types" 438 | version = "0.1.1" 439 | source = "registry+https://github.com/rust-lang/crates.io-index" 440 | checksum = "3a68b68b3446082644c91ac778bf50cd4104bfb002b5a6a7c44cca5a2c70788b" 441 | dependencies = [ 442 | "bitflags", 443 | "core-foundation 0.9.3", 444 | "foreign-types", 445 | "libc", 446 | ] 447 | 448 | [[package]] 449 | name = "core-video-sys" 450 | version = "0.1.4" 451 | source = "registry+https://github.com/rust-lang/crates.io-index" 452 | checksum = "34ecad23610ad9757664d644e369246edde1803fcb43ed72876565098a5d3828" 453 | dependencies = [ 454 | "cfg-if 0.1.10", 455 | "core-foundation-sys 0.7.0", 456 | "core-graphics 0.19.2", 457 | "libc", 458 | "objc", 459 | ] 460 | 461 | [[package]] 462 | name = "crc32fast" 463 | version = "1.3.2" 464 | source = "registry+https://github.com/rust-lang/crates.io-index" 465 | checksum = "b540bd8bc810d3885c6ea91e2018302f68baba2129ab3e88f32389ee9370880d" 466 | dependencies = [ 467 | "cfg-if 1.0.0", 468 | ] 469 | 470 | [[package]] 471 | name = "cty" 472 | version = "0.2.2" 473 | source = "registry+https://github.com/rust-lang/crates.io-index" 474 | checksum = "b365fabc795046672053e29c954733ec3b05e4be654ab130fe8f1f94d7051f35" 475 | 476 | [[package]] 477 | name = "dark-light" 478 | version = "0.2.2" 479 | source = "registry+https://github.com/rust-lang/crates.io-index" 480 | checksum = "5b83576e2eee2d9cdaa8d08812ae59cbfe1b5ac7ac5ac4b8400303c6148a88c1" 481 | dependencies = [ 482 | "dconf_rs", 483 | "detect-desktop-environment", 484 | "dirs", 485 | "objc", 486 | "rust-ini", 487 | "web-sys", 488 | "winreg", 489 | "zbus", 490 | "zvariant", 491 | ] 492 | 493 | [[package]] 494 | name = "darling" 495 | version = "0.13.4" 496 | source = "registry+https://github.com/rust-lang/crates.io-index" 497 | checksum = "a01d95850c592940db9b8194bc39f4bc0e89dee5c4265e4b1807c34a9aba453c" 498 | dependencies = [ 499 | "darling_core", 500 | "darling_macro", 501 | ] 502 | 503 | [[package]] 504 | name = "darling_core" 505 | version = "0.13.4" 506 | source = "registry+https://github.com/rust-lang/crates.io-index" 507 | checksum = "859d65a907b6852c9361e3185c862aae7fafd2887876799fa55f5f99dc40d610" 508 | dependencies = [ 509 | "fnv", 510 | "ident_case", 511 | "proc-macro2", 512 | "quote", 513 | "strsim", 514 | "syn", 515 | ] 516 | 517 | [[package]] 518 | name = "darling_macro" 519 | version = "0.13.4" 520 | source = "registry+https://github.com/rust-lang/crates.io-index" 521 | checksum = "9c972679f83bdf9c42bd905396b6c3588a843a17f0f16dfcfa3e2c5d57441835" 522 | dependencies = [ 523 | "darling_core", 524 | "quote", 525 | "syn", 526 | ] 527 | 528 | [[package]] 529 | name = "dconf_rs" 530 | version = "0.3.0" 531 | source = "registry+https://github.com/rust-lang/crates.io-index" 532 | checksum = "7046468a81e6a002061c01e6a7c83139daf91b11c30e66795b13217c2d885c8b" 533 | 534 | [[package]] 535 | name = "deflate" 536 | version = "0.8.6" 537 | source = "registry+https://github.com/rust-lang/crates.io-index" 538 | checksum = "73770f8e1fe7d64df17ca66ad28994a0a623ea497fa69486e14984e715c5d174" 539 | dependencies = [ 540 | "adler32", 541 | "byteorder", 542 | ] 543 | 544 | [[package]] 545 | name = "derivative" 546 | version = "2.2.0" 547 | source = "registry+https://github.com/rust-lang/crates.io-index" 548 | checksum = "fcc3dd5e9e9c0b295d6e1e4d811fb6f157d5ffd784b8d202fc62eac8035a770b" 549 | dependencies = [ 550 | "proc-macro2", 551 | "quote", 552 | "syn", 553 | ] 554 | 555 | [[package]] 556 | name = "detect-desktop-environment" 557 | version = "0.2.0" 558 | source = "registry+https://github.com/rust-lang/crates.io-index" 559 | checksum = "21d8ad60dd5b13a4ee6bd8fa2d5d88965c597c67bce32b5fc49c94f55cb50810" 560 | 561 | [[package]] 562 | name = "device_query" 563 | version = "1.1.1" 564 | source = "registry+https://github.com/rust-lang/crates.io-index" 565 | checksum = "8b54c3f0350a597abbed2c10fff7b233f92744c9422697d5fb58dc5397ab6fae" 566 | dependencies = [ 567 | "lazy_static", 568 | "macos-accessibility-client", 569 | "pkg-config", 570 | "readkey", 571 | "readmouse", 572 | "winapi", 573 | "x11", 574 | ] 575 | 576 | [[package]] 577 | name = "directories" 578 | version = "4.0.1" 579 | source = "registry+https://github.com/rust-lang/crates.io-index" 580 | checksum = "f51c5d4ddabd36886dd3e1438cb358cdcb0d7c499cb99cb4ac2e38e18b5cb210" 581 | dependencies = [ 582 | "dirs-sys", 583 | ] 584 | 585 | [[package]] 586 | name = "dirs" 587 | version = "4.0.0" 588 | source = "registry+https://github.com/rust-lang/crates.io-index" 589 | checksum = "ca3aa72a6f96ea37bbc5aa912f6788242832f75369bdfdadcb0e38423f100059" 590 | dependencies = [ 591 | "dirs-sys", 592 | ] 593 | 594 | [[package]] 595 | name = "dirs-next" 596 | version = "2.0.0" 597 | source = "registry+https://github.com/rust-lang/crates.io-index" 598 | checksum = "b98cf8ebf19c3d1b223e151f99a4f9f0690dca41414773390fc824184ac833e1" 599 | dependencies = [ 600 | "cfg-if 1.0.0", 601 | "dirs-sys-next", 602 | ] 603 | 604 | [[package]] 605 | name = "dirs-sys" 606 | version = "0.3.7" 607 | source = "registry+https://github.com/rust-lang/crates.io-index" 608 | checksum = "1b1d1d91c932ef41c0f2663aa8b0ca0342d444d842c06914aa0a7e352d0bada6" 609 | dependencies = [ 610 | "libc", 611 | "redox_users", 612 | "winapi", 613 | ] 614 | 615 | [[package]] 616 | name = "dirs-sys-next" 617 | version = "0.1.2" 618 | source = "registry+https://github.com/rust-lang/crates.io-index" 619 | checksum = "4ebda144c4fe02d1f7ea1a7d9641b6fc6b580adcfa024ae48797ecdeb6825b4d" 620 | dependencies = [ 621 | "libc", 622 | "redox_users", 623 | "winapi", 624 | ] 625 | 626 | [[package]] 627 | name = "dispatch" 628 | version = "0.2.0" 629 | source = "registry+https://github.com/rust-lang/crates.io-index" 630 | checksum = "bd0c93bb4b0c6d9b77f4435b0ae98c24d17f1c45b2ff844c6151a07256ca923b" 631 | 632 | [[package]] 633 | name = "dlib" 634 | version = "0.5.0" 635 | source = "registry+https://github.com/rust-lang/crates.io-index" 636 | checksum = "ac1b7517328c04c2aa68422fc60a41b92208182142ed04a25879c26c8f878794" 637 | dependencies = [ 638 | "libloading", 639 | ] 640 | 641 | [[package]] 642 | name = "dlv-list" 643 | version = "0.2.3" 644 | source = "registry+https://github.com/rust-lang/crates.io-index" 645 | checksum = "68df3f2b690c1b86e65ef7830956aededf3cb0a16f898f79b9a6f421a7b6211b" 646 | dependencies = [ 647 | "rand", 648 | ] 649 | 650 | [[package]] 651 | name = "downcast-rs" 652 | version = "1.2.0" 653 | source = "registry+https://github.com/rust-lang/crates.io-index" 654 | checksum = "9ea835d29036a4087793836fa931b08837ad5e957da9e23886b29586fb9b6650" 655 | 656 | [[package]] 657 | name = "easy-parallel" 658 | version = "3.2.0" 659 | source = "registry+https://github.com/rust-lang/crates.io-index" 660 | checksum = "6907e25393cdcc1f4f3f513d9aac1e840eb1cc341a0fccb01171f7d14d10b946" 661 | 662 | [[package]] 663 | name = "eframe" 664 | version = "0.18.0" 665 | dependencies = [ 666 | "bytemuck", 667 | "dark-light", 668 | "egui", 669 | "egui-winit", 670 | "egui_glow", 671 | "glow", 672 | "glutin", 673 | "js-sys", 674 | "percent-encoding", 675 | "tracing", 676 | "wasm-bindgen", 677 | "wasm-bindgen-futures", 678 | "web-sys", 679 | "winit", 680 | ] 681 | 682 | [[package]] 683 | name = "egui" 684 | version = "0.18.1" 685 | dependencies = [ 686 | "ahash 0.7.6", 687 | "epaint", 688 | "nohash-hasher", 689 | "tracing", 690 | ] 691 | 692 | [[package]] 693 | name = "egui-winit" 694 | version = "0.18.0" 695 | dependencies = [ 696 | "arboard", 697 | "egui", 698 | "instant", 699 | "smithay-clipboard", 700 | "tracing", 701 | "webbrowser", 702 | "winit", 703 | ] 704 | 705 | [[package]] 706 | name = "egui_glow" 707 | version = "0.18.1" 708 | dependencies = [ 709 | "bytemuck", 710 | "egui", 711 | "glow", 712 | "memoffset", 713 | "tracing", 714 | "wasm-bindgen", 715 | "web-sys", 716 | ] 717 | 718 | [[package]] 719 | name = "emath" 720 | version = "0.18.0" 721 | dependencies = [ 722 | "bytemuck", 723 | ] 724 | 725 | [[package]] 726 | name = "enumflags2" 727 | version = "0.7.5" 728 | source = "registry+https://github.com/rust-lang/crates.io-index" 729 | checksum = "e75d4cd21b95383444831539909fbb14b9dc3fdceb2a6f5d36577329a1f55ccb" 730 | dependencies = [ 731 | "enumflags2_derive", 732 | "serde", 733 | ] 734 | 735 | [[package]] 736 | name = "enumflags2_derive" 737 | version = "0.7.4" 738 | source = "registry+https://github.com/rust-lang/crates.io-index" 739 | checksum = "f58dc3c5e468259f19f2d46304a6b28f1c3d034442e14b322d2b850e36f6d5ae" 740 | dependencies = [ 741 | "proc-macro2", 742 | "quote", 743 | "syn", 744 | ] 745 | 746 | [[package]] 747 | name = "epaint" 748 | version = "0.18.1" 749 | dependencies = [ 750 | "ab_glyph", 751 | "ahash 0.7.6", 752 | "atomic_refcell", 753 | "bytemuck", 754 | "emath", 755 | "nohash-hasher", 756 | "parking_lot 0.12.1", 757 | ] 758 | 759 | [[package]] 760 | name = "error-code" 761 | version = "2.3.1" 762 | source = "registry+https://github.com/rust-lang/crates.io-index" 763 | checksum = "64f18991e7bf11e7ffee451b5318b5c1a73c52d0d0ada6e5a3017c8c1ced6a21" 764 | dependencies = [ 765 | "libc", 766 | "str-buf", 767 | ] 768 | 769 | [[package]] 770 | name = "event-listener" 771 | version = "2.5.2" 772 | source = "registry+https://github.com/rust-lang/crates.io-index" 773 | checksum = "77f3309417938f28bf8228fcff79a4a37103981e3e186d2ccd19c74b38f4eb71" 774 | 775 | [[package]] 776 | name = "fastrand" 777 | version = "1.7.0" 778 | source = "registry+https://github.com/rust-lang/crates.io-index" 779 | checksum = "c3fcf0cee53519c866c09b5de1f6c56ff9d647101f81c1964fa632e148896cdf" 780 | dependencies = [ 781 | "instant", 782 | ] 783 | 784 | [[package]] 785 | name = "figment" 786 | version = "0.10.6" 787 | source = "registry+https://github.com/rust-lang/crates.io-index" 788 | checksum = "790b4292c72618abbab50f787a477014fe15634f96291de45672ce46afe122df" 789 | dependencies = [ 790 | "atomic", 791 | "serde", 792 | "toml", 793 | "uncased", 794 | "version_check", 795 | ] 796 | 797 | [[package]] 798 | name = "fnv" 799 | version = "1.0.7" 800 | source = "registry+https://github.com/rust-lang/crates.io-index" 801 | checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" 802 | 803 | [[package]] 804 | name = "foreign-types" 805 | version = "0.3.2" 806 | source = "registry+https://github.com/rust-lang/crates.io-index" 807 | checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1" 808 | dependencies = [ 809 | "foreign-types-shared", 810 | ] 811 | 812 | [[package]] 813 | name = "foreign-types-shared" 814 | version = "0.1.1" 815 | source = "registry+https://github.com/rust-lang/crates.io-index" 816 | checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" 817 | 818 | [[package]] 819 | name = "form_urlencoded" 820 | version = "1.0.1" 821 | source = "registry+https://github.com/rust-lang/crates.io-index" 822 | checksum = "5fc25a87fa4fd2094bffb06925852034d90a17f0d1e05197d4956d3555752191" 823 | dependencies = [ 824 | "matches", 825 | "percent-encoding", 826 | ] 827 | 828 | [[package]] 829 | name = "futures-core" 830 | version = "0.3.21" 831 | source = "registry+https://github.com/rust-lang/crates.io-index" 832 | checksum = "0c09fd04b7e4073ac7156a9539b57a484a8ea920f79c7c675d05d289ab6110d3" 833 | 834 | [[package]] 835 | name = "futures-io" 836 | version = "0.3.21" 837 | source = "registry+https://github.com/rust-lang/crates.io-index" 838 | checksum = "fc4045962a5a5e935ee2fdedaa4e08284547402885ab326734432bed5d12966b" 839 | 840 | [[package]] 841 | name = "futures-lite" 842 | version = "1.12.0" 843 | source = "registry+https://github.com/rust-lang/crates.io-index" 844 | checksum = "7694489acd39452c77daa48516b894c153f192c3578d5a839b62c58099fcbf48" 845 | dependencies = [ 846 | "fastrand", 847 | "futures-core", 848 | "futures-io", 849 | "memchr", 850 | "parking", 851 | "pin-project-lite", 852 | "waker-fn", 853 | ] 854 | 855 | [[package]] 856 | name = "futures-sink" 857 | version = "0.3.21" 858 | source = "registry+https://github.com/rust-lang/crates.io-index" 859 | checksum = "21163e139fa306126e6eedaf49ecdb4588f939600f0b1e770f4205ee4b7fa868" 860 | 861 | [[package]] 862 | name = "futures-task" 863 | version = "0.3.21" 864 | source = "registry+https://github.com/rust-lang/crates.io-index" 865 | checksum = "57c66a976bf5909d801bbef33416c41372779507e7a6b3a5e25e4749c58f776a" 866 | 867 | [[package]] 868 | name = "futures-util" 869 | version = "0.3.21" 870 | source = "registry+https://github.com/rust-lang/crates.io-index" 871 | checksum = "d8b7abd5d659d9b90c8cba917f6ec750a74e2dc23902ef9cd4cc8c8b22e6036a" 872 | dependencies = [ 873 | "futures-core", 874 | "futures-sink", 875 | "futures-task", 876 | "pin-project-lite", 877 | "pin-utils", 878 | "slab", 879 | ] 880 | 881 | [[package]] 882 | name = "fuzzy-matcher" 883 | version = "0.3.7" 884 | source = "registry+https://github.com/rust-lang/crates.io-index" 885 | checksum = "54614a3312934d066701a80f20f15fa3b56d67ac7722b39eea5b4c9dd1d66c94" 886 | dependencies = [ 887 | "thread_local", 888 | ] 889 | 890 | [[package]] 891 | name = "gethostname" 892 | version = "0.2.3" 893 | source = "registry+https://github.com/rust-lang/crates.io-index" 894 | checksum = "c1ebd34e35c46e00bb73e81363248d627782724609fe1b6396f553f68fe3862e" 895 | dependencies = [ 896 | "libc", 897 | "winapi", 898 | ] 899 | 900 | [[package]] 901 | name = "getrandom" 902 | version = "0.2.7" 903 | source = "registry+https://github.com/rust-lang/crates.io-index" 904 | checksum = "4eb1a864a501629691edf6c15a593b7a51eebaa1e8468e9ddc623de7c9b58ec6" 905 | dependencies = [ 906 | "cfg-if 1.0.0", 907 | "libc", 908 | "wasi", 909 | ] 910 | 911 | [[package]] 912 | name = "gl_generator" 913 | version = "0.14.0" 914 | source = "registry+https://github.com/rust-lang/crates.io-index" 915 | checksum = "1a95dfc23a2b4a9a2f5ab41d194f8bfda3cabec42af4e39f08c339eb2a0c124d" 916 | dependencies = [ 917 | "khronos_api", 918 | "log", 919 | "xml-rs", 920 | ] 921 | 922 | [[package]] 923 | name = "glow" 924 | version = "0.11.2" 925 | source = "registry+https://github.com/rust-lang/crates.io-index" 926 | checksum = "d8bd5877156a19b8ac83a29b2306fe20537429d318f3ff0a1a2119f8d9c61919" 927 | dependencies = [ 928 | "js-sys", 929 | "slotmap", 930 | "wasm-bindgen", 931 | "web-sys", 932 | ] 933 | 934 | [[package]] 935 | name = "glutin" 936 | version = "0.28.0" 937 | source = "registry+https://github.com/rust-lang/crates.io-index" 938 | checksum = "00ea9dbe544bc8a657c4c4a798c2d16cd01b549820e47657297549d28371f6d2" 939 | dependencies = [ 940 | "android_glue", 941 | "cgl", 942 | "cocoa", 943 | "core-foundation 0.9.3", 944 | "glutin_egl_sys", 945 | "glutin_emscripten_sys", 946 | "glutin_gles2_sys", 947 | "glutin_glx_sys", 948 | "glutin_wgl_sys", 949 | "lazy_static", 950 | "libloading", 951 | "log", 952 | "objc", 953 | "osmesa-sys", 954 | "parking_lot 0.11.2", 955 | "wayland-client", 956 | "wayland-egl", 957 | "winapi", 958 | "winit", 959 | ] 960 | 961 | [[package]] 962 | name = "glutin_egl_sys" 963 | version = "0.1.5" 964 | source = "registry+https://github.com/rust-lang/crates.io-index" 965 | checksum = "2abb6aa55523480c4adc5a56bbaa249992e2dddb2fc63dc96e04a3355364c211" 966 | dependencies = [ 967 | "gl_generator", 968 | "winapi", 969 | ] 970 | 971 | [[package]] 972 | name = "glutin_emscripten_sys" 973 | version = "0.1.1" 974 | source = "registry+https://github.com/rust-lang/crates.io-index" 975 | checksum = "80de4146df76e8a6c32b03007bc764ff3249dcaeb4f675d68a06caf1bac363f1" 976 | 977 | [[package]] 978 | name = "glutin_gles2_sys" 979 | version = "0.1.5" 980 | source = "registry+https://github.com/rust-lang/crates.io-index" 981 | checksum = "e8094e708b730a7c8a1954f4f8a31880af00eb8a1c5b5bf85d28a0a3c6d69103" 982 | dependencies = [ 983 | "gl_generator", 984 | "objc", 985 | ] 986 | 987 | [[package]] 988 | name = "glutin_glx_sys" 989 | version = "0.1.7" 990 | source = "registry+https://github.com/rust-lang/crates.io-index" 991 | checksum = "7e393c8fc02b807459410429150e9c4faffdb312d59b8c038566173c81991351" 992 | dependencies = [ 993 | "gl_generator", 994 | "x11-dl", 995 | ] 996 | 997 | [[package]] 998 | name = "glutin_wgl_sys" 999 | version = "0.1.5" 1000 | source = "registry+https://github.com/rust-lang/crates.io-index" 1001 | checksum = "3da5951a1569dbab865c6f2a863efafff193a93caf05538d193e9e3816d21696" 1002 | dependencies = [ 1003 | "gl_generator", 1004 | ] 1005 | 1006 | [[package]] 1007 | name = "hashbrown" 1008 | version = "0.9.1" 1009 | source = "registry+https://github.com/rust-lang/crates.io-index" 1010 | checksum = "d7afe4a420e3fe79967a00898cc1f4db7c8a49a9333a29f8a4bd76a253d5cd04" 1011 | dependencies = [ 1012 | "ahash 0.4.7", 1013 | ] 1014 | 1015 | [[package]] 1016 | name = "hex" 1017 | version = "0.4.3" 1018 | source = "registry+https://github.com/rust-lang/crates.io-index" 1019 | checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" 1020 | 1021 | [[package]] 1022 | name = "ident_case" 1023 | version = "1.0.1" 1024 | source = "registry+https://github.com/rust-lang/crates.io-index" 1025 | checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" 1026 | 1027 | [[package]] 1028 | name = "idna" 1029 | version = "0.2.3" 1030 | source = "registry+https://github.com/rust-lang/crates.io-index" 1031 | checksum = "418a0a6fab821475f634efe3ccc45c013f742efe03d853e8d3355d5cb850ecf8" 1032 | dependencies = [ 1033 | "matches", 1034 | "unicode-bidi", 1035 | "unicode-normalization", 1036 | ] 1037 | 1038 | [[package]] 1039 | name = "image" 1040 | version = "0.23.14" 1041 | source = "registry+https://github.com/rust-lang/crates.io-index" 1042 | checksum = "24ffcb7e7244a9bf19d35bf2883b9c080c4ced3c07a9895572178cdb8f13f6a1" 1043 | dependencies = [ 1044 | "bytemuck", 1045 | "byteorder", 1046 | "color_quant", 1047 | "num-iter", 1048 | "num-rational", 1049 | "num-traits", 1050 | "png", 1051 | "tiff", 1052 | ] 1053 | 1054 | [[package]] 1055 | name = "instant" 1056 | version = "0.1.12" 1057 | source = "registry+https://github.com/rust-lang/crates.io-index" 1058 | checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c" 1059 | dependencies = [ 1060 | "cfg-if 1.0.0", 1061 | "js-sys", 1062 | "wasm-bindgen", 1063 | "web-sys", 1064 | ] 1065 | 1066 | [[package]] 1067 | name = "jni" 1068 | version = "0.19.0" 1069 | source = "registry+https://github.com/rust-lang/crates.io-index" 1070 | checksum = "c6df18c2e3db7e453d3c6ac5b3e9d5182664d28788126d39b91f2d1e22b017ec" 1071 | dependencies = [ 1072 | "cesu8", 1073 | "combine", 1074 | "jni-sys", 1075 | "log", 1076 | "thiserror", 1077 | "walkdir", 1078 | ] 1079 | 1080 | [[package]] 1081 | name = "jni-sys" 1082 | version = "0.3.0" 1083 | source = "registry+https://github.com/rust-lang/crates.io-index" 1084 | checksum = "8eaf4bc02d17cbdd7ff4c7438cafcdf7fb9a4613313ad11b4f8fefe7d3fa0130" 1085 | 1086 | [[package]] 1087 | name = "jpeg-decoder" 1088 | version = "0.1.22" 1089 | source = "registry+https://github.com/rust-lang/crates.io-index" 1090 | checksum = "229d53d58899083193af11e15917b5640cd40b29ff475a1fe4ef725deb02d0f2" 1091 | 1092 | [[package]] 1093 | name = "js-sys" 1094 | version = "0.3.58" 1095 | source = "registry+https://github.com/rust-lang/crates.io-index" 1096 | checksum = "c3fac17f7123a73ca62df411b1bf727ccc805daa070338fda671c86dac1bdc27" 1097 | dependencies = [ 1098 | "wasm-bindgen", 1099 | ] 1100 | 1101 | [[package]] 1102 | name = "khronos_api" 1103 | version = "3.1.0" 1104 | source = "registry+https://github.com/rust-lang/crates.io-index" 1105 | checksum = "e2db585e1d738fc771bf08a151420d3ed193d9d895a36df7f6f8a9456b911ddc" 1106 | 1107 | [[package]] 1108 | name = "lazy_static" 1109 | version = "1.4.0" 1110 | source = "registry+https://github.com/rust-lang/crates.io-index" 1111 | checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" 1112 | 1113 | [[package]] 1114 | name = "libc" 1115 | version = "0.2.126" 1116 | source = "registry+https://github.com/rust-lang/crates.io-index" 1117 | checksum = "349d5a591cd28b49e1d1037471617a32ddcda5731b99419008085f72d5a53836" 1118 | 1119 | [[package]] 1120 | name = "libloading" 1121 | version = "0.7.3" 1122 | source = "registry+https://github.com/rust-lang/crates.io-index" 1123 | checksum = "efbc0f03f9a775e9f6aed295c6a1ba2253c5757a9e03d55c6caa46a681abcddd" 1124 | dependencies = [ 1125 | "cfg-if 1.0.0", 1126 | "winapi", 1127 | ] 1128 | 1129 | [[package]] 1130 | name = "lock_api" 1131 | version = "0.4.7" 1132 | source = "registry+https://github.com/rust-lang/crates.io-index" 1133 | checksum = "327fa5b6a6940e4699ec49a9beae1ea4845c6bab9314e4f84ac68742139d8c53" 1134 | dependencies = [ 1135 | "autocfg", 1136 | "scopeguard", 1137 | ] 1138 | 1139 | [[package]] 1140 | name = "log" 1141 | version = "0.4.17" 1142 | source = "registry+https://github.com/rust-lang/crates.io-index" 1143 | checksum = "abb12e687cfb44aa40f41fc3978ef76448f9b6038cad6aef4259d3c095a2382e" 1144 | dependencies = [ 1145 | "cfg-if 1.0.0", 1146 | ] 1147 | 1148 | [[package]] 1149 | name = "lua-src" 1150 | version = "544.0.1" 1151 | source = "registry+https://github.com/rust-lang/crates.io-index" 1152 | checksum = "708ba3c844d5e9d38def4a09dd871c17c370f519b3c4b7261fbabe4a613a814c" 1153 | dependencies = [ 1154 | "cc", 1155 | ] 1156 | 1157 | [[package]] 1158 | name = "luajit-src" 1159 | version = "210.4.0+resty124ff8d" 1160 | source = "registry+https://github.com/rust-lang/crates.io-index" 1161 | checksum = "f76fb2e2c0c7192e18719d321c9a148f7625c4dcbe3df5f4c19e685e4c286f6c" 1162 | dependencies = [ 1163 | "cc", 1164 | ] 1165 | 1166 | [[package]] 1167 | name = "macos-accessibility-client" 1168 | version = "0.0.1" 1169 | source = "registry+https://github.com/rust-lang/crates.io-index" 1170 | checksum = "edf7710fbff50c24124331760978fb9086d6de6288dcdb38b25a97f8b1bdebbb" 1171 | dependencies = [ 1172 | "core-foundation 0.9.3", 1173 | "core-foundation-sys 0.8.3", 1174 | ] 1175 | 1176 | [[package]] 1177 | name = "malloc_buf" 1178 | version = "0.0.6" 1179 | source = "registry+https://github.com/rust-lang/crates.io-index" 1180 | checksum = "62bb907fe88d54d8d9ce32a3cceab4218ed2f6b7d35617cafe9adf84e43919cb" 1181 | dependencies = [ 1182 | "libc", 1183 | ] 1184 | 1185 | [[package]] 1186 | name = "matches" 1187 | version = "0.1.9" 1188 | source = "registry+https://github.com/rust-lang/crates.io-index" 1189 | checksum = "a3e378b66a060d48947b590737b30a1be76706c8dd7b8ba0f2fe3989c68a853f" 1190 | 1191 | [[package]] 1192 | name = "memchr" 1193 | version = "2.5.0" 1194 | source = "registry+https://github.com/rust-lang/crates.io-index" 1195 | checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d" 1196 | 1197 | [[package]] 1198 | name = "memmap2" 1199 | version = "0.3.1" 1200 | source = "registry+https://github.com/rust-lang/crates.io-index" 1201 | checksum = "00b6c2ebff6180198788f5db08d7ce3bc1d0b617176678831a7510825973e357" 1202 | dependencies = [ 1203 | "libc", 1204 | ] 1205 | 1206 | [[package]] 1207 | name = "memmap2" 1208 | version = "0.5.4" 1209 | source = "registry+https://github.com/rust-lang/crates.io-index" 1210 | checksum = "d5172b50c23043ff43dd53e51392f36519d9b35a8f3a410d30ece5d1aedd58ae" 1211 | dependencies = [ 1212 | "libc", 1213 | ] 1214 | 1215 | [[package]] 1216 | name = "memoffset" 1217 | version = "0.6.5" 1218 | source = "registry+https://github.com/rust-lang/crates.io-index" 1219 | checksum = "5aa361d4faea93603064a027415f07bd8e1d5c88c9fbf68bf56a285428fd79ce" 1220 | dependencies = [ 1221 | "autocfg", 1222 | ] 1223 | 1224 | [[package]] 1225 | name = "meval" 1226 | version = "0.2.0" 1227 | source = "registry+https://github.com/rust-lang/crates.io-index" 1228 | checksum = "f79496a5651c8d57cd033c5add8ca7ee4e3d5f7587a4777484640d9cb60392d9" 1229 | dependencies = [ 1230 | "fnv", 1231 | "nom 1.2.4", 1232 | ] 1233 | 1234 | [[package]] 1235 | name = "minimal-lexical" 1236 | version = "0.2.1" 1237 | source = "registry+https://github.com/rust-lang/crates.io-index" 1238 | checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" 1239 | 1240 | [[package]] 1241 | name = "miniz_oxide" 1242 | version = "0.3.7" 1243 | source = "registry+https://github.com/rust-lang/crates.io-index" 1244 | checksum = "791daaae1ed6889560f8c4359194f56648355540573244a5448a83ba1ecc7435" 1245 | dependencies = [ 1246 | "adler32", 1247 | ] 1248 | 1249 | [[package]] 1250 | name = "miniz_oxide" 1251 | version = "0.4.4" 1252 | source = "registry+https://github.com/rust-lang/crates.io-index" 1253 | checksum = "a92518e98c078586bc6c934028adcca4c92a53d6a958196de835170a01d84e4b" 1254 | dependencies = [ 1255 | "adler", 1256 | "autocfg", 1257 | ] 1258 | 1259 | [[package]] 1260 | name = "mio" 1261 | version = "0.8.4" 1262 | source = "registry+https://github.com/rust-lang/crates.io-index" 1263 | checksum = "57ee1c23c7c63b0c9250c339ffdc69255f110b298b901b9f6c82547b7b87caaf" 1264 | dependencies = [ 1265 | "libc", 1266 | "log", 1267 | "wasi", 1268 | "windows-sys", 1269 | ] 1270 | 1271 | [[package]] 1272 | name = "mlua" 1273 | version = "0.8.2" 1274 | source = "registry+https://github.com/rust-lang/crates.io-index" 1275 | checksum = "8afb4815a6d6a3bd1c23e6c647f7df18c9800c12e80526a98e18d7decd7cedcd" 1276 | dependencies = [ 1277 | "bstr", 1278 | "cc", 1279 | "lua-src", 1280 | "luajit-src", 1281 | "num-traits", 1282 | "once_cell", 1283 | "pkg-config", 1284 | "rustc-hash", 1285 | ] 1286 | 1287 | [[package]] 1288 | name = "ndk" 1289 | version = "0.5.0" 1290 | source = "registry+https://github.com/rust-lang/crates.io-index" 1291 | checksum = "96d868f654c72e75f8687572699cdabe755f03effbb62542768e995d5b8d699d" 1292 | dependencies = [ 1293 | "bitflags", 1294 | "jni-sys", 1295 | "ndk-sys", 1296 | "num_enum", 1297 | "thiserror", 1298 | ] 1299 | 1300 | [[package]] 1301 | name = "ndk-context" 1302 | version = "0.1.1" 1303 | source = "registry+https://github.com/rust-lang/crates.io-index" 1304 | checksum = "27b02d87554356db9e9a873add8782d4ea6e3e58ea071a9adb9a2e8ddb884a8b" 1305 | 1306 | [[package]] 1307 | name = "ndk-glue" 1308 | version = "0.5.2" 1309 | source = "registry+https://github.com/rust-lang/crates.io-index" 1310 | checksum = "c71bee8ea72d685477e28bd004cfe1bf99c754d688cd78cad139eae4089484d4" 1311 | dependencies = [ 1312 | "lazy_static", 1313 | "libc", 1314 | "log", 1315 | "ndk", 1316 | "ndk-context", 1317 | "ndk-macro", 1318 | "ndk-sys", 1319 | ] 1320 | 1321 | [[package]] 1322 | name = "ndk-macro" 1323 | version = "0.3.0" 1324 | source = "registry+https://github.com/rust-lang/crates.io-index" 1325 | checksum = "0df7ac00c4672f9d5aece54ee3347520b7e20f158656c7db2e6de01902eb7a6c" 1326 | dependencies = [ 1327 | "darling", 1328 | "proc-macro-crate", 1329 | "proc-macro2", 1330 | "quote", 1331 | "syn", 1332 | ] 1333 | 1334 | [[package]] 1335 | name = "ndk-sys" 1336 | version = "0.2.2" 1337 | source = "registry+https://github.com/rust-lang/crates.io-index" 1338 | checksum = "e1bcdd74c20ad5d95aacd60ef9ba40fdf77f767051040541df557b7a9b2a2121" 1339 | 1340 | [[package]] 1341 | name = "nix" 1342 | version = "0.22.3" 1343 | source = "registry+https://github.com/rust-lang/crates.io-index" 1344 | checksum = "e4916f159ed8e5de0082076562152a76b7a1f64a01fd9d1e0fea002c37624faf" 1345 | dependencies = [ 1346 | "bitflags", 1347 | "cc", 1348 | "cfg-if 1.0.0", 1349 | "libc", 1350 | "memoffset", 1351 | ] 1352 | 1353 | [[package]] 1354 | name = "nix" 1355 | version = "0.23.1" 1356 | source = "registry+https://github.com/rust-lang/crates.io-index" 1357 | checksum = "9f866317acbd3a240710c63f065ffb1e4fd466259045ccb504130b7f668f35c6" 1358 | dependencies = [ 1359 | "bitflags", 1360 | "cc", 1361 | "cfg-if 1.0.0", 1362 | "libc", 1363 | "memoffset", 1364 | ] 1365 | 1366 | [[package]] 1367 | name = "nix" 1368 | version = "0.24.1" 1369 | source = "registry+https://github.com/rust-lang/crates.io-index" 1370 | checksum = "8f17df307904acd05aa8e32e97bb20f2a0df1728bbc2d771ae8f9a90463441e9" 1371 | dependencies = [ 1372 | "bitflags", 1373 | "cfg-if 1.0.0", 1374 | "libc", 1375 | ] 1376 | 1377 | [[package]] 1378 | name = "nohash-hasher" 1379 | version = "0.2.0" 1380 | source = "registry+https://github.com/rust-lang/crates.io-index" 1381 | checksum = "2bf50223579dc7cdcfb3bfcacf7069ff68243f8c363f62ffa99cf000a6b9c451" 1382 | 1383 | [[package]] 1384 | name = "nom" 1385 | version = "1.2.4" 1386 | source = "registry+https://github.com/rust-lang/crates.io-index" 1387 | checksum = "a5b8c256fd9471521bcb84c3cdba98921497f1a331cbc15b8030fc63b82050ce" 1388 | 1389 | [[package]] 1390 | name = "nom" 1391 | version = "7.1.1" 1392 | source = "registry+https://github.com/rust-lang/crates.io-index" 1393 | checksum = "a8903e5a29a317527874d0402f867152a3d21c908bb0b933e416c65e301d4c36" 1394 | dependencies = [ 1395 | "memchr", 1396 | "minimal-lexical", 1397 | ] 1398 | 1399 | [[package]] 1400 | name = "num-integer" 1401 | version = "0.1.45" 1402 | source = "registry+https://github.com/rust-lang/crates.io-index" 1403 | checksum = "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9" 1404 | dependencies = [ 1405 | "autocfg", 1406 | "num-traits", 1407 | ] 1408 | 1409 | [[package]] 1410 | name = "num-iter" 1411 | version = "0.1.43" 1412 | source = "registry+https://github.com/rust-lang/crates.io-index" 1413 | checksum = "7d03e6c028c5dc5cac6e2dec0efda81fc887605bb3d884578bb6d6bf7514e252" 1414 | dependencies = [ 1415 | "autocfg", 1416 | "num-integer", 1417 | "num-traits", 1418 | ] 1419 | 1420 | [[package]] 1421 | name = "num-rational" 1422 | version = "0.3.2" 1423 | source = "registry+https://github.com/rust-lang/crates.io-index" 1424 | checksum = "12ac428b1cb17fce6f731001d307d351ec70a6d202fc2e60f7d4c5e42d8f4f07" 1425 | dependencies = [ 1426 | "autocfg", 1427 | "num-integer", 1428 | "num-traits", 1429 | ] 1430 | 1431 | [[package]] 1432 | name = "num-traits" 1433 | version = "0.2.15" 1434 | source = "registry+https://github.com/rust-lang/crates.io-index" 1435 | checksum = "578ede34cf02f8924ab9447f50c28075b4d3e5b269972345e7e0372b38c6cdcd" 1436 | dependencies = [ 1437 | "autocfg", 1438 | ] 1439 | 1440 | [[package]] 1441 | name = "num_enum" 1442 | version = "0.5.7" 1443 | source = "registry+https://github.com/rust-lang/crates.io-index" 1444 | checksum = "cf5395665662ef45796a4ff5486c5d41d29e0c09640af4c5f17fd94ee2c119c9" 1445 | dependencies = [ 1446 | "num_enum_derive", 1447 | ] 1448 | 1449 | [[package]] 1450 | name = "num_enum_derive" 1451 | version = "0.5.7" 1452 | source = "registry+https://github.com/rust-lang/crates.io-index" 1453 | checksum = "3b0498641e53dd6ac1a4f22547548caa6864cc4933784319cd1775271c5a46ce" 1454 | dependencies = [ 1455 | "proc-macro-crate", 1456 | "proc-macro2", 1457 | "quote", 1458 | "syn", 1459 | ] 1460 | 1461 | [[package]] 1462 | name = "objc" 1463 | version = "0.2.7" 1464 | source = "registry+https://github.com/rust-lang/crates.io-index" 1465 | checksum = "915b1b472bc21c53464d6c8461c9d3af805ba1ef837e1cac254428f4a77177b1" 1466 | dependencies = [ 1467 | "malloc_buf", 1468 | ] 1469 | 1470 | [[package]] 1471 | name = "objc-foundation" 1472 | version = "0.1.1" 1473 | source = "registry+https://github.com/rust-lang/crates.io-index" 1474 | checksum = "1add1b659e36c9607c7aab864a76c7a4c2760cd0cd2e120f3fb8b952c7e22bf9" 1475 | dependencies = [ 1476 | "block", 1477 | "objc", 1478 | "objc_id", 1479 | ] 1480 | 1481 | [[package]] 1482 | name = "objc_id" 1483 | version = "0.1.1" 1484 | source = "registry+https://github.com/rust-lang/crates.io-index" 1485 | checksum = "c92d4ddb4bd7b50d730c215ff871754d0da6b2178849f8a2a2ab69712d0c073b" 1486 | dependencies = [ 1487 | "objc", 1488 | ] 1489 | 1490 | [[package]] 1491 | name = "once_cell" 1492 | version = "1.13.0" 1493 | source = "registry+https://github.com/rust-lang/crates.io-index" 1494 | checksum = "18a6dbe30758c9f83eb00cbea4ac95966305f5a7772f3f42ebfc7fc7eddbd8e1" 1495 | 1496 | [[package]] 1497 | name = "open" 1498 | version = "3.0.1" 1499 | source = "registry+https://github.com/rust-lang/crates.io-index" 1500 | checksum = "360bcc8316bf6363aa3954c3ccc4de8add167b087e0259190a043c9514f910fe" 1501 | dependencies = [ 1502 | "pathdiff", 1503 | "windows-sys", 1504 | ] 1505 | 1506 | [[package]] 1507 | name = "ordered-multimap" 1508 | version = "0.3.1" 1509 | source = "registry+https://github.com/rust-lang/crates.io-index" 1510 | checksum = "1c672c7ad9ec066e428c00eb917124a06f08db19e2584de982cc34b1f4c12485" 1511 | dependencies = [ 1512 | "dlv-list", 1513 | "hashbrown", 1514 | ] 1515 | 1516 | [[package]] 1517 | name = "ordered-stream" 1518 | version = "0.0.1" 1519 | source = "registry+https://github.com/rust-lang/crates.io-index" 1520 | checksum = "44630c059eacfd6e08bdaa51b1db2ce33119caa4ddc1235e923109aa5f25ccb1" 1521 | dependencies = [ 1522 | "futures-core", 1523 | "pin-project-lite", 1524 | ] 1525 | 1526 | [[package]] 1527 | name = "osmesa-sys" 1528 | version = "0.1.2" 1529 | source = "registry+https://github.com/rust-lang/crates.io-index" 1530 | checksum = "88cfece6e95d2e717e0872a7f53a8684712ad13822a7979bc760b9c77ec0013b" 1531 | dependencies = [ 1532 | "shared_library", 1533 | ] 1534 | 1535 | [[package]] 1536 | name = "owned_ttf_parser" 1537 | version = "0.15.0" 1538 | source = "registry+https://github.com/rust-lang/crates.io-index" 1539 | checksum = "4fb1e509cfe7a12db2a90bfa057dfcdbc55a347f5da677c506b53dd099cfec9d" 1540 | dependencies = [ 1541 | "ttf-parser", 1542 | ] 1543 | 1544 | [[package]] 1545 | name = "parking" 1546 | version = "2.0.0" 1547 | source = "registry+https://github.com/rust-lang/crates.io-index" 1548 | checksum = "427c3892f9e783d91cc128285287e70a59e206ca452770ece88a76f7a3eddd72" 1549 | 1550 | [[package]] 1551 | name = "parking_lot" 1552 | version = "0.11.2" 1553 | source = "registry+https://github.com/rust-lang/crates.io-index" 1554 | checksum = "7d17b78036a60663b797adeaee46f5c9dfebb86948d1255007a1d6be0271ff99" 1555 | dependencies = [ 1556 | "instant", 1557 | "lock_api", 1558 | "parking_lot_core 0.8.5", 1559 | ] 1560 | 1561 | [[package]] 1562 | name = "parking_lot" 1563 | version = "0.12.1" 1564 | source = "registry+https://github.com/rust-lang/crates.io-index" 1565 | checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f" 1566 | dependencies = [ 1567 | "lock_api", 1568 | "parking_lot_core 0.9.3", 1569 | ] 1570 | 1571 | [[package]] 1572 | name = "parking_lot_core" 1573 | version = "0.8.5" 1574 | source = "registry+https://github.com/rust-lang/crates.io-index" 1575 | checksum = "d76e8e1493bcac0d2766c42737f34458f1c8c50c0d23bcb24ea953affb273216" 1576 | dependencies = [ 1577 | "cfg-if 1.0.0", 1578 | "instant", 1579 | "libc", 1580 | "redox_syscall", 1581 | "smallvec", 1582 | "winapi", 1583 | ] 1584 | 1585 | [[package]] 1586 | name = "parking_lot_core" 1587 | version = "0.9.3" 1588 | source = "registry+https://github.com/rust-lang/crates.io-index" 1589 | checksum = "09a279cbf25cb0757810394fbc1e359949b59e348145c643a939a525692e6929" 1590 | dependencies = [ 1591 | "cfg-if 1.0.0", 1592 | "libc", 1593 | "redox_syscall", 1594 | "smallvec", 1595 | "windows-sys", 1596 | ] 1597 | 1598 | [[package]] 1599 | name = "pathdiff" 1600 | version = "0.2.1" 1601 | source = "registry+https://github.com/rust-lang/crates.io-index" 1602 | checksum = "8835116a5c179084a830efb3adc117ab007512b535bc1a21c991d3b32a6b44dd" 1603 | 1604 | [[package]] 1605 | name = "percent-encoding" 1606 | version = "2.1.0" 1607 | source = "registry+https://github.com/rust-lang/crates.io-index" 1608 | checksum = "d4fd5641d01c8f18a23da7b6fe29298ff4b55afcccdf78973b24cf3175fee32e" 1609 | 1610 | [[package]] 1611 | name = "pin-project-lite" 1612 | version = "0.2.9" 1613 | source = "registry+https://github.com/rust-lang/crates.io-index" 1614 | checksum = "e0a7ae3ac2f1173085d398531c705756c94a4c56843785df85a60c1a0afac116" 1615 | 1616 | [[package]] 1617 | name = "pin-utils" 1618 | version = "0.1.0" 1619 | source = "registry+https://github.com/rust-lang/crates.io-index" 1620 | checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" 1621 | 1622 | [[package]] 1623 | name = "pkg-config" 1624 | version = "0.3.25" 1625 | source = "registry+https://github.com/rust-lang/crates.io-index" 1626 | checksum = "1df8c4ec4b0627e53bdf214615ad287367e482558cf84b109250b37464dc03ae" 1627 | 1628 | [[package]] 1629 | name = "png" 1630 | version = "0.16.8" 1631 | source = "registry+https://github.com/rust-lang/crates.io-index" 1632 | checksum = "3c3287920cb847dee3de33d301c463fba14dda99db24214ddf93f83d3021f4c6" 1633 | dependencies = [ 1634 | "bitflags", 1635 | "crc32fast", 1636 | "deflate", 1637 | "miniz_oxide 0.3.7", 1638 | ] 1639 | 1640 | [[package]] 1641 | name = "polling" 1642 | version = "2.2.0" 1643 | source = "registry+https://github.com/rust-lang/crates.io-index" 1644 | checksum = "685404d509889fade3e86fe3a5803bca2ec09b0c0778d5ada6ec8bf7a8de5259" 1645 | dependencies = [ 1646 | "cfg-if 1.0.0", 1647 | "libc", 1648 | "log", 1649 | "wepoll-ffi", 1650 | "winapi", 1651 | ] 1652 | 1653 | [[package]] 1654 | name = "ppv-lite86" 1655 | version = "0.2.16" 1656 | source = "registry+https://github.com/rust-lang/crates.io-index" 1657 | checksum = "eb9f9e6e233e5c4a35559a617bf40a4ec447db2e84c20b55a6f83167b7e57872" 1658 | 1659 | [[package]] 1660 | name = "proc-macro-crate" 1661 | version = "1.1.3" 1662 | source = "registry+https://github.com/rust-lang/crates.io-index" 1663 | checksum = "e17d47ce914bf4de440332250b0edd23ce48c005f59fab39d3335866b114f11a" 1664 | dependencies = [ 1665 | "thiserror", 1666 | "toml", 1667 | ] 1668 | 1669 | [[package]] 1670 | name = "proc-macro2" 1671 | version = "1.0.40" 1672 | source = "registry+https://github.com/rust-lang/crates.io-index" 1673 | checksum = "dd96a1e8ed2596c337f8eae5f24924ec83f5ad5ab21ea8e455d3566c69fbcaf7" 1674 | dependencies = [ 1675 | "unicode-ident", 1676 | ] 1677 | 1678 | [[package]] 1679 | name = "quote" 1680 | version = "1.0.20" 1681 | source = "registry+https://github.com/rust-lang/crates.io-index" 1682 | checksum = "3bcdf212e9776fbcb2d23ab029360416bb1706b1aea2d1a5ba002727cbcab804" 1683 | dependencies = [ 1684 | "proc-macro2", 1685 | ] 1686 | 1687 | [[package]] 1688 | name = "rand" 1689 | version = "0.8.5" 1690 | source = "registry+https://github.com/rust-lang/crates.io-index" 1691 | checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" 1692 | dependencies = [ 1693 | "libc", 1694 | "rand_chacha", 1695 | "rand_core", 1696 | ] 1697 | 1698 | [[package]] 1699 | name = "rand_chacha" 1700 | version = "0.3.1" 1701 | source = "registry+https://github.com/rust-lang/crates.io-index" 1702 | checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" 1703 | dependencies = [ 1704 | "ppv-lite86", 1705 | "rand_core", 1706 | ] 1707 | 1708 | [[package]] 1709 | name = "rand_core" 1710 | version = "0.6.3" 1711 | source = "registry+https://github.com/rust-lang/crates.io-index" 1712 | checksum = "d34f1408f55294453790c48b2f1ebbb1c5b4b7563eb1f418bcfcfdbb06ebb4e7" 1713 | dependencies = [ 1714 | "getrandom", 1715 | ] 1716 | 1717 | [[package]] 1718 | name = "raw-window-handle" 1719 | version = "0.4.3" 1720 | source = "registry+https://github.com/rust-lang/crates.io-index" 1721 | checksum = "b800beb9b6e7d2df1fe337c9e3d04e3af22a124460fb4c30fcc22c9117cefb41" 1722 | dependencies = [ 1723 | "cty", 1724 | ] 1725 | 1726 | [[package]] 1727 | name = "readkey" 1728 | version = "0.1.7" 1729 | source = "registry+https://github.com/rust-lang/crates.io-index" 1730 | checksum = "86d401b6d6a1725a59f1b4e813275d289dff3ad09c72b373a10a7a8217ba3146" 1731 | 1732 | [[package]] 1733 | name = "readmouse" 1734 | version = "0.2.1" 1735 | source = "registry+https://github.com/rust-lang/crates.io-index" 1736 | checksum = "be105c72a1e6a5a1198acee3d5b506a15676b74a02ecd78060042a447f408d94" 1737 | 1738 | [[package]] 1739 | name = "redox_syscall" 1740 | version = "0.2.13" 1741 | source = "registry+https://github.com/rust-lang/crates.io-index" 1742 | checksum = "62f25bc4c7e55e0b0b7a1d43fb893f4fa1361d0abe38b9ce4f323c2adfe6ef42" 1743 | dependencies = [ 1744 | "bitflags", 1745 | ] 1746 | 1747 | [[package]] 1748 | name = "redox_users" 1749 | version = "0.4.3" 1750 | source = "registry+https://github.com/rust-lang/crates.io-index" 1751 | checksum = "b033d837a7cf162d7993aded9304e30a83213c648b6e389db233191f891e5c2b" 1752 | dependencies = [ 1753 | "getrandom", 1754 | "redox_syscall", 1755 | "thiserror", 1756 | ] 1757 | 1758 | [[package]] 1759 | name = "regex" 1760 | version = "1.5.6" 1761 | source = "registry+https://github.com/rust-lang/crates.io-index" 1762 | checksum = "d83f127d94bdbcda4c8cc2e50f6f84f4b611f69c902699ca385a39c3a75f9ff1" 1763 | dependencies = [ 1764 | "aho-corasick", 1765 | "memchr", 1766 | "regex-syntax", 1767 | ] 1768 | 1769 | [[package]] 1770 | name = "regex-syntax" 1771 | version = "0.6.26" 1772 | source = "registry+https://github.com/rust-lang/crates.io-index" 1773 | checksum = "49b3de9ec5dc0a3417da371aab17d729997c15010e7fd24ff707773a33bddb64" 1774 | 1775 | [[package]] 1776 | name = "remove_dir_all" 1777 | version = "0.5.3" 1778 | source = "registry+https://github.com/rust-lang/crates.io-index" 1779 | checksum = "3acd125665422973a33ac9d3dd2df85edad0f4ae9b00dafb1a05e43a9f5ef8e7" 1780 | dependencies = [ 1781 | "winapi", 1782 | ] 1783 | 1784 | [[package]] 1785 | name = "rust-ini" 1786 | version = "0.17.0" 1787 | source = "registry+https://github.com/rust-lang/crates.io-index" 1788 | checksum = "63471c4aa97a1cf8332a5f97709a79a4234698de6a1f5087faf66f2dae810e22" 1789 | dependencies = [ 1790 | "cfg-if 1.0.0", 1791 | "ordered-multimap", 1792 | ] 1793 | 1794 | [[package]] 1795 | name = "rustc-hash" 1796 | version = "1.1.0" 1797 | source = "registry+https://github.com/rust-lang/crates.io-index" 1798 | checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" 1799 | 1800 | [[package]] 1801 | name = "same-file" 1802 | version = "1.0.6" 1803 | source = "registry+https://github.com/rust-lang/crates.io-index" 1804 | checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" 1805 | dependencies = [ 1806 | "winapi-util", 1807 | ] 1808 | 1809 | [[package]] 1810 | name = "scoped-tls" 1811 | version = "1.0.0" 1812 | source = "registry+https://github.com/rust-lang/crates.io-index" 1813 | checksum = "ea6a9290e3c9cf0f18145ef7ffa62d68ee0bf5fcd651017e586dc7fd5da448c2" 1814 | 1815 | [[package]] 1816 | name = "scopeguard" 1817 | version = "1.1.0" 1818 | source = "registry+https://github.com/rust-lang/crates.io-index" 1819 | checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd" 1820 | 1821 | [[package]] 1822 | name = "serde" 1823 | version = "1.0.138" 1824 | source = "registry+https://github.com/rust-lang/crates.io-index" 1825 | checksum = "1578c6245786b9d168c5447eeacfb96856573ca56c9d68fdcf394be134882a47" 1826 | dependencies = [ 1827 | "serde_derive", 1828 | ] 1829 | 1830 | [[package]] 1831 | name = "serde_derive" 1832 | version = "1.0.138" 1833 | source = "registry+https://github.com/rust-lang/crates.io-index" 1834 | checksum = "023e9b1467aef8a10fb88f25611870ada9800ef7e22afce356bb0d2387b6f27c" 1835 | dependencies = [ 1836 | "proc-macro2", 1837 | "quote", 1838 | "syn", 1839 | ] 1840 | 1841 | [[package]] 1842 | name = "serde_repr" 1843 | version = "0.1.8" 1844 | source = "registry+https://github.com/rust-lang/crates.io-index" 1845 | checksum = "a2ad84e47328a31223de7fed7a4f5087f2d6ddfe586cf3ca25b7a165bc0a5aed" 1846 | dependencies = [ 1847 | "proc-macro2", 1848 | "quote", 1849 | "syn", 1850 | ] 1851 | 1852 | [[package]] 1853 | name = "sha1" 1854 | version = "0.6.1" 1855 | source = "registry+https://github.com/rust-lang/crates.io-index" 1856 | checksum = "c1da05c97445caa12d05e848c4a4fcbbea29e748ac28f7e80e9b010392063770" 1857 | dependencies = [ 1858 | "sha1_smol", 1859 | ] 1860 | 1861 | [[package]] 1862 | name = "sha1_smol" 1863 | version = "1.0.0" 1864 | source = "registry+https://github.com/rust-lang/crates.io-index" 1865 | checksum = "ae1a47186c03a32177042e55dbc5fd5aee900b8e0069a8d70fba96a9375cd012" 1866 | 1867 | [[package]] 1868 | name = "shared_library" 1869 | version = "0.1.9" 1870 | source = "registry+https://github.com/rust-lang/crates.io-index" 1871 | checksum = "5a9e7e0f2bfae24d8a5b5a66c5b257a83c7412304311512a0c054cd5e619da11" 1872 | dependencies = [ 1873 | "lazy_static", 1874 | "libc", 1875 | ] 1876 | 1877 | [[package]] 1878 | name = "shellexpand" 1879 | version = "2.1.0" 1880 | source = "registry+https://github.com/rust-lang/crates.io-index" 1881 | checksum = "83bdb7831b2d85ddf4a7b148aa19d0587eddbe8671a436b7bd1182eaad0f2829" 1882 | dependencies = [ 1883 | "dirs-next", 1884 | ] 1885 | 1886 | [[package]] 1887 | name = "slab" 1888 | version = "0.4.6" 1889 | source = "registry+https://github.com/rust-lang/crates.io-index" 1890 | checksum = "eb703cfe953bccee95685111adeedb76fabe4e97549a58d16f03ea7b9367bb32" 1891 | 1892 | [[package]] 1893 | name = "slotmap" 1894 | version = "1.0.6" 1895 | source = "registry+https://github.com/rust-lang/crates.io-index" 1896 | checksum = "e1e08e261d0e8f5c43123b7adf3e4ca1690d655377ac93a03b2c9d3e98de1342" 1897 | dependencies = [ 1898 | "version_check", 1899 | ] 1900 | 1901 | [[package]] 1902 | name = "smallvec" 1903 | version = "1.9.0" 1904 | source = "registry+https://github.com/rust-lang/crates.io-index" 1905 | checksum = "2fd0db749597d91ff862fd1d55ea87f7855a744a8425a64695b6fca237d1dad1" 1906 | 1907 | [[package]] 1908 | name = "smithay-client-toolkit" 1909 | version = "0.15.4" 1910 | source = "registry+https://github.com/rust-lang/crates.io-index" 1911 | checksum = "8a28f16a97fa0e8ce563b2774d1e732dd5d4025d2772c5dba0a41a0f90a29da3" 1912 | dependencies = [ 1913 | "bitflags", 1914 | "calloop", 1915 | "dlib", 1916 | "lazy_static", 1917 | "log", 1918 | "memmap2 0.3.1", 1919 | "nix 0.22.3", 1920 | "pkg-config", 1921 | "wayland-client", 1922 | "wayland-cursor", 1923 | "wayland-protocols", 1924 | ] 1925 | 1926 | [[package]] 1927 | name = "smithay-client-toolkit" 1928 | version = "0.16.0" 1929 | source = "registry+https://github.com/rust-lang/crates.io-index" 1930 | checksum = "f307c47d32d2715eb2e0ece5589057820e0e5e70d07c247d1063e844e107f454" 1931 | dependencies = [ 1932 | "bitflags", 1933 | "dlib", 1934 | "lazy_static", 1935 | "log", 1936 | "memmap2 0.5.4", 1937 | "nix 0.24.1", 1938 | "pkg-config", 1939 | "wayland-client", 1940 | "wayland-cursor", 1941 | "wayland-protocols", 1942 | ] 1943 | 1944 | [[package]] 1945 | name = "smithay-clipboard" 1946 | version = "0.6.6" 1947 | source = "registry+https://github.com/rust-lang/crates.io-index" 1948 | checksum = "0a345c870a1fae0b1b779085e81b51e614767c239e93503588e54c5b17f4b0e8" 1949 | dependencies = [ 1950 | "smithay-client-toolkit 0.16.0", 1951 | "wayland-client", 1952 | ] 1953 | 1954 | [[package]] 1955 | name = "socket2" 1956 | version = "0.4.4" 1957 | source = "registry+https://github.com/rust-lang/crates.io-index" 1958 | checksum = "66d72b759436ae32898a2af0a14218dbf55efde3feeb170eb623637db85ee1e0" 1959 | dependencies = [ 1960 | "libc", 1961 | "winapi", 1962 | ] 1963 | 1964 | [[package]] 1965 | name = "static_assertions" 1966 | version = "1.1.0" 1967 | source = "registry+https://github.com/rust-lang/crates.io-index" 1968 | checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" 1969 | 1970 | [[package]] 1971 | name = "str-buf" 1972 | version = "1.0.6" 1973 | source = "registry+https://github.com/rust-lang/crates.io-index" 1974 | checksum = "9e08d8363704e6c71fc928674353e6b7c23dcea9d82d7012c8faf2a3a025f8d0" 1975 | 1976 | [[package]] 1977 | name = "strsim" 1978 | version = "0.10.0" 1979 | source = "registry+https://github.com/rust-lang/crates.io-index" 1980 | checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623" 1981 | 1982 | [[package]] 1983 | name = "syn" 1984 | version = "1.0.98" 1985 | source = "registry+https://github.com/rust-lang/crates.io-index" 1986 | checksum = "c50aef8a904de4c23c788f104b7dddc7d6f79c647c7c8ce4cc8f73eb0ca773dd" 1987 | dependencies = [ 1988 | "proc-macro2", 1989 | "quote", 1990 | "unicode-ident", 1991 | ] 1992 | 1993 | [[package]] 1994 | name = "tempfile" 1995 | version = "3.3.0" 1996 | source = "registry+https://github.com/rust-lang/crates.io-index" 1997 | checksum = "5cdb1ef4eaeeaddc8fbd371e5017057064af0911902ef36b39801f67cc6d79e4" 1998 | dependencies = [ 1999 | "cfg-if 1.0.0", 2000 | "fastrand", 2001 | "libc", 2002 | "redox_syscall", 2003 | "remove_dir_all", 2004 | "winapi", 2005 | ] 2006 | 2007 | [[package]] 2008 | name = "thiserror" 2009 | version = "1.0.31" 2010 | source = "registry+https://github.com/rust-lang/crates.io-index" 2011 | checksum = "bd829fe32373d27f76265620b5309d0340cb8550f523c1dda251d6298069069a" 2012 | dependencies = [ 2013 | "thiserror-impl", 2014 | ] 2015 | 2016 | [[package]] 2017 | name = "thiserror-impl" 2018 | version = "1.0.31" 2019 | source = "registry+https://github.com/rust-lang/crates.io-index" 2020 | checksum = "0396bc89e626244658bef819e22d0cc459e795a5ebe878e6ec336d1674a8d79a" 2021 | dependencies = [ 2022 | "proc-macro2", 2023 | "quote", 2024 | "syn", 2025 | ] 2026 | 2027 | [[package]] 2028 | name = "thread_local" 2029 | version = "1.1.4" 2030 | source = "registry+https://github.com/rust-lang/crates.io-index" 2031 | checksum = "5516c27b78311c50bf42c071425c560ac799b11c30b31f87e3081965fe5e0180" 2032 | dependencies = [ 2033 | "once_cell", 2034 | ] 2035 | 2036 | [[package]] 2037 | name = "tiff" 2038 | version = "0.6.1" 2039 | source = "registry+https://github.com/rust-lang/crates.io-index" 2040 | checksum = "9a53f4706d65497df0c4349241deddf35f84cee19c87ed86ea8ca590f4464437" 2041 | dependencies = [ 2042 | "jpeg-decoder", 2043 | "miniz_oxide 0.4.4", 2044 | "weezl", 2045 | ] 2046 | 2047 | [[package]] 2048 | name = "tinyvec" 2049 | version = "1.6.0" 2050 | source = "registry+https://github.com/rust-lang/crates.io-index" 2051 | checksum = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50" 2052 | dependencies = [ 2053 | "tinyvec_macros", 2054 | ] 2055 | 2056 | [[package]] 2057 | name = "tinyvec_macros" 2058 | version = "0.1.0" 2059 | source = "registry+https://github.com/rust-lang/crates.io-index" 2060 | checksum = "cda74da7e1a664f795bb1f8a87ec406fb89a02522cf6e50620d016add6dbbf5c" 2061 | 2062 | [[package]] 2063 | name = "tistow" 2064 | version = "0.4.3" 2065 | dependencies = [ 2066 | "anyhow", 2067 | "arboard", 2068 | "device_query", 2069 | "directories", 2070 | "eframe", 2071 | "egui", 2072 | "figment", 2073 | "fuzzy-matcher", 2074 | "glow", 2075 | "glutin", 2076 | "meval", 2077 | "mlua", 2078 | "open", 2079 | "serde", 2080 | "shellexpand", 2081 | "toml", 2082 | "walkdir", 2083 | "windows", 2084 | ] 2085 | 2086 | [[package]] 2087 | name = "toml" 2088 | version = "0.5.9" 2089 | source = "registry+https://github.com/rust-lang/crates.io-index" 2090 | checksum = "8d82e1a7758622a465f8cee077614c73484dac5b836c02ff6a40d5d1010324d7" 2091 | dependencies = [ 2092 | "serde", 2093 | ] 2094 | 2095 | [[package]] 2096 | name = "tracing" 2097 | version = "0.1.35" 2098 | source = "registry+https://github.com/rust-lang/crates.io-index" 2099 | checksum = "a400e31aa60b9d44a52a8ee0343b5b18566b03a8321e0d321f695cf56e940160" 2100 | dependencies = [ 2101 | "cfg-if 1.0.0", 2102 | "pin-project-lite", 2103 | "tracing-attributes", 2104 | "tracing-core", 2105 | ] 2106 | 2107 | [[package]] 2108 | name = "tracing-attributes" 2109 | version = "0.1.22" 2110 | source = "registry+https://github.com/rust-lang/crates.io-index" 2111 | checksum = "11c75893af559bc8e10716548bdef5cb2b983f8e637db9d0e15126b61b484ee2" 2112 | dependencies = [ 2113 | "proc-macro2", 2114 | "quote", 2115 | "syn", 2116 | ] 2117 | 2118 | [[package]] 2119 | name = "tracing-core" 2120 | version = "0.1.28" 2121 | source = "registry+https://github.com/rust-lang/crates.io-index" 2122 | checksum = "7b7358be39f2f274f322d2aaed611acc57f382e8eb1e5b48cb9ae30933495ce7" 2123 | dependencies = [ 2124 | "once_cell", 2125 | ] 2126 | 2127 | [[package]] 2128 | name = "ttf-parser" 2129 | version = "0.15.2" 2130 | source = "registry+https://github.com/rust-lang/crates.io-index" 2131 | checksum = "7b3e06c9b9d80ed6b745c7159c40b311ad2916abb34a49e9be2653b90db0d8dd" 2132 | 2133 | [[package]] 2134 | name = "uds_windows" 2135 | version = "1.0.2" 2136 | source = "registry+https://github.com/rust-lang/crates.io-index" 2137 | checksum = "ce65604324d3cce9b966701489fbd0cf318cb1f7bd9dd07ac9a4ee6fb791930d" 2138 | dependencies = [ 2139 | "tempfile", 2140 | "winapi", 2141 | ] 2142 | 2143 | [[package]] 2144 | name = "uncased" 2145 | version = "0.9.7" 2146 | source = "registry+https://github.com/rust-lang/crates.io-index" 2147 | checksum = "09b01702b0fd0b3fadcf98e098780badda8742d4f4a7676615cad90e8ac73622" 2148 | dependencies = [ 2149 | "version_check", 2150 | ] 2151 | 2152 | [[package]] 2153 | name = "unicode-bidi" 2154 | version = "0.3.8" 2155 | source = "registry+https://github.com/rust-lang/crates.io-index" 2156 | checksum = "099b7128301d285f79ddd55b9a83d5e6b9e97c92e0ea0daebee7263e932de992" 2157 | 2158 | [[package]] 2159 | name = "unicode-ident" 2160 | version = "1.0.1" 2161 | source = "registry+https://github.com/rust-lang/crates.io-index" 2162 | checksum = "5bd2fe26506023ed7b5e1e315add59d6f584c621d037f9368fea9cfb988f368c" 2163 | 2164 | [[package]] 2165 | name = "unicode-normalization" 2166 | version = "0.1.21" 2167 | source = "registry+https://github.com/rust-lang/crates.io-index" 2168 | checksum = "854cbdc4f7bc6ae19c820d44abdc3277ac3e1b2b93db20a636825d9322fb60e6" 2169 | dependencies = [ 2170 | "tinyvec", 2171 | ] 2172 | 2173 | [[package]] 2174 | name = "url" 2175 | version = "2.2.2" 2176 | source = "registry+https://github.com/rust-lang/crates.io-index" 2177 | checksum = "a507c383b2d33b5fc35d1861e77e6b383d158b2da5e14fe51b83dfedf6fd578c" 2178 | dependencies = [ 2179 | "form_urlencoded", 2180 | "idna", 2181 | "matches", 2182 | "percent-encoding", 2183 | ] 2184 | 2185 | [[package]] 2186 | name = "version_check" 2187 | version = "0.9.4" 2188 | source = "registry+https://github.com/rust-lang/crates.io-index" 2189 | checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" 2190 | 2191 | [[package]] 2192 | name = "waker-fn" 2193 | version = "1.1.0" 2194 | source = "registry+https://github.com/rust-lang/crates.io-index" 2195 | checksum = "9d5b2c62b4012a3e1eca5a7e077d13b3bf498c4073e33ccd58626607748ceeca" 2196 | 2197 | [[package]] 2198 | name = "walkdir" 2199 | version = "2.3.2" 2200 | source = "registry+https://github.com/rust-lang/crates.io-index" 2201 | checksum = "808cf2735cd4b6866113f648b791c6adc5714537bc222d9347bb203386ffda56" 2202 | dependencies = [ 2203 | "same-file", 2204 | "winapi", 2205 | "winapi-util", 2206 | ] 2207 | 2208 | [[package]] 2209 | name = "wasi" 2210 | version = "0.11.0+wasi-snapshot-preview1" 2211 | source = "registry+https://github.com/rust-lang/crates.io-index" 2212 | checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" 2213 | 2214 | [[package]] 2215 | name = "wasm-bindgen" 2216 | version = "0.2.81" 2217 | source = "registry+https://github.com/rust-lang/crates.io-index" 2218 | checksum = "7c53b543413a17a202f4be280a7e5c62a1c69345f5de525ee64f8cfdbc954994" 2219 | dependencies = [ 2220 | "cfg-if 1.0.0", 2221 | "wasm-bindgen-macro", 2222 | ] 2223 | 2224 | [[package]] 2225 | name = "wasm-bindgen-backend" 2226 | version = "0.2.81" 2227 | source = "registry+https://github.com/rust-lang/crates.io-index" 2228 | checksum = "5491a68ab4500fa6b4d726bd67408630c3dbe9c4fe7bda16d5c82a1fd8c7340a" 2229 | dependencies = [ 2230 | "bumpalo", 2231 | "lazy_static", 2232 | "log", 2233 | "proc-macro2", 2234 | "quote", 2235 | "syn", 2236 | "wasm-bindgen-shared", 2237 | ] 2238 | 2239 | [[package]] 2240 | name = "wasm-bindgen-futures" 2241 | version = "0.4.31" 2242 | source = "registry+https://github.com/rust-lang/crates.io-index" 2243 | checksum = "de9a9cec1733468a8c657e57fa2413d2ae2c0129b95e87c5b72b8ace4d13f31f" 2244 | dependencies = [ 2245 | "cfg-if 1.0.0", 2246 | "js-sys", 2247 | "wasm-bindgen", 2248 | "web-sys", 2249 | ] 2250 | 2251 | [[package]] 2252 | name = "wasm-bindgen-macro" 2253 | version = "0.2.81" 2254 | source = "registry+https://github.com/rust-lang/crates.io-index" 2255 | checksum = "c441e177922bc58f1e12c022624b6216378e5febc2f0533e41ba443d505b80aa" 2256 | dependencies = [ 2257 | "quote", 2258 | "wasm-bindgen-macro-support", 2259 | ] 2260 | 2261 | [[package]] 2262 | name = "wasm-bindgen-macro-support" 2263 | version = "0.2.81" 2264 | source = "registry+https://github.com/rust-lang/crates.io-index" 2265 | checksum = "7d94ac45fcf608c1f45ef53e748d35660f168490c10b23704c7779ab8f5c3048" 2266 | dependencies = [ 2267 | "proc-macro2", 2268 | "quote", 2269 | "syn", 2270 | "wasm-bindgen-backend", 2271 | "wasm-bindgen-shared", 2272 | ] 2273 | 2274 | [[package]] 2275 | name = "wasm-bindgen-shared" 2276 | version = "0.2.81" 2277 | source = "registry+https://github.com/rust-lang/crates.io-index" 2278 | checksum = "6a89911bd99e5f3659ec4acf9c4d93b0a90fe4a2a11f15328472058edc5261be" 2279 | 2280 | [[package]] 2281 | name = "wayland-client" 2282 | version = "0.29.4" 2283 | source = "registry+https://github.com/rust-lang/crates.io-index" 2284 | checksum = "91223460e73257f697d9e23d401279123d36039a3f7a449e983f123292d4458f" 2285 | dependencies = [ 2286 | "bitflags", 2287 | "downcast-rs", 2288 | "libc", 2289 | "nix 0.22.3", 2290 | "scoped-tls", 2291 | "wayland-commons", 2292 | "wayland-scanner", 2293 | "wayland-sys", 2294 | ] 2295 | 2296 | [[package]] 2297 | name = "wayland-commons" 2298 | version = "0.29.4" 2299 | source = "registry+https://github.com/rust-lang/crates.io-index" 2300 | checksum = "94f6e5e340d7c13490eca867898c4cec5af56c27a5ffe5c80c6fc4708e22d33e" 2301 | dependencies = [ 2302 | "nix 0.22.3", 2303 | "once_cell", 2304 | "smallvec", 2305 | "wayland-sys", 2306 | ] 2307 | 2308 | [[package]] 2309 | name = "wayland-cursor" 2310 | version = "0.29.4" 2311 | source = "registry+https://github.com/rust-lang/crates.io-index" 2312 | checksum = "c52758f13d5e7861fc83d942d3d99bf270c83269575e52ac29e5b73cb956a6bd" 2313 | dependencies = [ 2314 | "nix 0.22.3", 2315 | "wayland-client", 2316 | "xcursor", 2317 | ] 2318 | 2319 | [[package]] 2320 | name = "wayland-egl" 2321 | version = "0.29.4" 2322 | source = "registry+https://github.com/rust-lang/crates.io-index" 2323 | checksum = "83281d69ee162b59031c666385e93bde4039ec553b90c4191cdb128ceea29a3a" 2324 | dependencies = [ 2325 | "wayland-client", 2326 | "wayland-sys", 2327 | ] 2328 | 2329 | [[package]] 2330 | name = "wayland-protocols" 2331 | version = "0.29.4" 2332 | source = "registry+https://github.com/rust-lang/crates.io-index" 2333 | checksum = "60147ae23303402e41fe034f74fb2c35ad0780ee88a1c40ac09a3be1e7465741" 2334 | dependencies = [ 2335 | "bitflags", 2336 | "wayland-client", 2337 | "wayland-commons", 2338 | "wayland-scanner", 2339 | ] 2340 | 2341 | [[package]] 2342 | name = "wayland-scanner" 2343 | version = "0.29.4" 2344 | source = "registry+https://github.com/rust-lang/crates.io-index" 2345 | checksum = "39a1ed3143f7a143187156a2ab52742e89dac33245ba505c17224df48939f9e0" 2346 | dependencies = [ 2347 | "proc-macro2", 2348 | "quote", 2349 | "xml-rs", 2350 | ] 2351 | 2352 | [[package]] 2353 | name = "wayland-sys" 2354 | version = "0.29.4" 2355 | source = "registry+https://github.com/rust-lang/crates.io-index" 2356 | checksum = "d9341df79a8975679188e37dab3889bfa57c44ac2cb6da166f519a81cbe452d4" 2357 | dependencies = [ 2358 | "dlib", 2359 | "lazy_static", 2360 | "pkg-config", 2361 | ] 2362 | 2363 | [[package]] 2364 | name = "web-sys" 2365 | version = "0.3.57" 2366 | source = "registry+https://github.com/rust-lang/crates.io-index" 2367 | checksum = "7b17e741662c70c8bd24ac5c5b18de314a2c26c32bf8346ee1e6f53de919c283" 2368 | dependencies = [ 2369 | "js-sys", 2370 | "wasm-bindgen", 2371 | ] 2372 | 2373 | [[package]] 2374 | name = "webbrowser" 2375 | version = "0.7.1" 2376 | source = "registry+https://github.com/rust-lang/crates.io-index" 2377 | checksum = "fc6a3cffdb686fbb24d9fb8f03a213803277ed2300f11026a3afe1f108dc021b" 2378 | dependencies = [ 2379 | "jni", 2380 | "ndk-glue", 2381 | "url", 2382 | "web-sys", 2383 | "widestring", 2384 | "winapi", 2385 | ] 2386 | 2387 | [[package]] 2388 | name = "weezl" 2389 | version = "0.1.6" 2390 | source = "registry+https://github.com/rust-lang/crates.io-index" 2391 | checksum = "9c97e489d8f836838d497091de568cf16b117486d529ec5579233521065bd5e4" 2392 | 2393 | [[package]] 2394 | name = "wepoll-ffi" 2395 | version = "0.1.2" 2396 | source = "registry+https://github.com/rust-lang/crates.io-index" 2397 | checksum = "d743fdedc5c64377b5fc2bc036b01c7fd642205a0d96356034ae3404d49eb7fb" 2398 | dependencies = [ 2399 | "cc", 2400 | ] 2401 | 2402 | [[package]] 2403 | name = "widestring" 2404 | version = "0.5.1" 2405 | source = "registry+https://github.com/rust-lang/crates.io-index" 2406 | checksum = "17882f045410753661207383517a6f62ec3dbeb6a4ed2acce01f0728238d1983" 2407 | 2408 | [[package]] 2409 | name = "winapi" 2410 | version = "0.3.9" 2411 | source = "registry+https://github.com/rust-lang/crates.io-index" 2412 | checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" 2413 | dependencies = [ 2414 | "winapi-i686-pc-windows-gnu", 2415 | "winapi-x86_64-pc-windows-gnu", 2416 | ] 2417 | 2418 | [[package]] 2419 | name = "winapi-i686-pc-windows-gnu" 2420 | version = "0.4.0" 2421 | source = "registry+https://github.com/rust-lang/crates.io-index" 2422 | checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" 2423 | 2424 | [[package]] 2425 | name = "winapi-util" 2426 | version = "0.1.5" 2427 | source = "registry+https://github.com/rust-lang/crates.io-index" 2428 | checksum = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178" 2429 | dependencies = [ 2430 | "winapi", 2431 | ] 2432 | 2433 | [[package]] 2434 | name = "winapi-wsapoll" 2435 | version = "0.1.1" 2436 | source = "registry+https://github.com/rust-lang/crates.io-index" 2437 | checksum = "44c17110f57155602a80dca10be03852116403c9ff3cd25b079d666f2aa3df6e" 2438 | dependencies = [ 2439 | "winapi", 2440 | ] 2441 | 2442 | [[package]] 2443 | name = "winapi-x86_64-pc-windows-gnu" 2444 | version = "0.4.0" 2445 | source = "registry+https://github.com/rust-lang/crates.io-index" 2446 | checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" 2447 | 2448 | [[package]] 2449 | name = "windows" 2450 | version = "0.38.0" 2451 | source = "registry+https://github.com/rust-lang/crates.io-index" 2452 | checksum = "0c47017195a790490df51a3e27f669a7d4f285920d90d03ef970c5d886ef0af1" 2453 | dependencies = [ 2454 | "windows_aarch64_msvc 0.38.0", 2455 | "windows_i686_gnu 0.38.0", 2456 | "windows_i686_msvc 0.38.0", 2457 | "windows_x86_64_gnu 0.38.0", 2458 | "windows_x86_64_msvc 0.38.0", 2459 | ] 2460 | 2461 | [[package]] 2462 | name = "windows-sys" 2463 | version = "0.36.1" 2464 | source = "registry+https://github.com/rust-lang/crates.io-index" 2465 | checksum = "ea04155a16a59f9eab786fe12a4a450e75cdb175f9e0d80da1e17db09f55b8d2" 2466 | dependencies = [ 2467 | "windows_aarch64_msvc 0.36.1", 2468 | "windows_i686_gnu 0.36.1", 2469 | "windows_i686_msvc 0.36.1", 2470 | "windows_x86_64_gnu 0.36.1", 2471 | "windows_x86_64_msvc 0.36.1", 2472 | ] 2473 | 2474 | [[package]] 2475 | name = "windows_aarch64_msvc" 2476 | version = "0.36.1" 2477 | source = "registry+https://github.com/rust-lang/crates.io-index" 2478 | checksum = "9bb8c3fd39ade2d67e9874ac4f3db21f0d710bee00fe7cab16949ec184eeaa47" 2479 | 2480 | [[package]] 2481 | name = "windows_aarch64_msvc" 2482 | version = "0.38.0" 2483 | source = "registry+https://github.com/rust-lang/crates.io-index" 2484 | checksum = "b12add87e2fb192fff3f4f7e4342b3694785d79f3a64e2c20d5ceb5ccbcfc3cd" 2485 | 2486 | [[package]] 2487 | name = "windows_i686_gnu" 2488 | version = "0.36.1" 2489 | source = "registry+https://github.com/rust-lang/crates.io-index" 2490 | checksum = "180e6ccf01daf4c426b846dfc66db1fc518f074baa793aa7d9b9aaeffad6a3b6" 2491 | 2492 | [[package]] 2493 | name = "windows_i686_gnu" 2494 | version = "0.38.0" 2495 | source = "registry+https://github.com/rust-lang/crates.io-index" 2496 | checksum = "4c98f2db372c23965c5e0f43896a8f0316dc0fbe48d1aa65bea9bdd295d43c15" 2497 | 2498 | [[package]] 2499 | name = "windows_i686_msvc" 2500 | version = "0.36.1" 2501 | source = "registry+https://github.com/rust-lang/crates.io-index" 2502 | checksum = "e2e7917148b2812d1eeafaeb22a97e4813dfa60a3f8f78ebe204bcc88f12f024" 2503 | 2504 | [[package]] 2505 | name = "windows_i686_msvc" 2506 | version = "0.38.0" 2507 | source = "registry+https://github.com/rust-lang/crates.io-index" 2508 | checksum = "cdf0569be0f2863ab6a12a6ba841fcfa7d107cbc7545a3ebd57685330db0a3ff" 2509 | 2510 | [[package]] 2511 | name = "windows_x86_64_gnu" 2512 | version = "0.36.1" 2513 | source = "registry+https://github.com/rust-lang/crates.io-index" 2514 | checksum = "4dcd171b8776c41b97521e5da127a2d86ad280114807d0b2ab1e462bc764d9e1" 2515 | 2516 | [[package]] 2517 | name = "windows_x86_64_gnu" 2518 | version = "0.38.0" 2519 | source = "registry+https://github.com/rust-lang/crates.io-index" 2520 | checksum = "905858262c8380a36f32cb8c1990d7e7c3b7a8170e58ed9a98ca6d940b7ea9f1" 2521 | 2522 | [[package]] 2523 | name = "windows_x86_64_msvc" 2524 | version = "0.36.1" 2525 | source = "registry+https://github.com/rust-lang/crates.io-index" 2526 | checksum = "c811ca4a8c853ef420abd8592ba53ddbbac90410fab6903b3e79972a631f7680" 2527 | 2528 | [[package]] 2529 | name = "windows_x86_64_msvc" 2530 | version = "0.38.0" 2531 | source = "registry+https://github.com/rust-lang/crates.io-index" 2532 | checksum = "890c3c6341d441ffb38f705f47196e3665dc6dd79f6d72fa185d937326730561" 2533 | 2534 | [[package]] 2535 | name = "winit" 2536 | version = "0.26.1" 2537 | source = "registry+https://github.com/rust-lang/crates.io-index" 2538 | checksum = "9b43cc931d58b99461188607efd7acb2a093e65fc621f54cad78517a6063e73a" 2539 | dependencies = [ 2540 | "bitflags", 2541 | "cocoa", 2542 | "core-foundation 0.9.3", 2543 | "core-graphics 0.22.3", 2544 | "core-video-sys", 2545 | "dispatch", 2546 | "instant", 2547 | "lazy_static", 2548 | "libc", 2549 | "log", 2550 | "mio", 2551 | "ndk", 2552 | "ndk-glue", 2553 | "ndk-sys", 2554 | "objc", 2555 | "parking_lot 0.11.2", 2556 | "percent-encoding", 2557 | "raw-window-handle", 2558 | "smithay-client-toolkit 0.15.4", 2559 | "wasm-bindgen", 2560 | "wayland-client", 2561 | "wayland-protocols", 2562 | "web-sys", 2563 | "winapi", 2564 | "x11-dl", 2565 | ] 2566 | 2567 | [[package]] 2568 | name = "winreg" 2569 | version = "0.8.0" 2570 | source = "registry+https://github.com/rust-lang/crates.io-index" 2571 | checksum = "d107f8c6e916235c4c01cabb3e8acf7bea8ef6a63ca2e7fa0527c049badfc48c" 2572 | dependencies = [ 2573 | "winapi", 2574 | ] 2575 | 2576 | [[package]] 2577 | name = "x11" 2578 | version = "2.19.1" 2579 | source = "registry+https://github.com/rust-lang/crates.io-index" 2580 | checksum = "6dd0565fa8bfba8c5efe02725b14dff114c866724eff2cfd44d76cea74bcd87a" 2581 | dependencies = [ 2582 | "libc", 2583 | "pkg-config", 2584 | ] 2585 | 2586 | [[package]] 2587 | name = "x11-dl" 2588 | version = "2.19.1" 2589 | source = "registry+https://github.com/rust-lang/crates.io-index" 2590 | checksum = "ea26926b4ce81a6f5d9d0f3a0bc401e5a37c6ae14a1bfaa8ff6099ca80038c59" 2591 | dependencies = [ 2592 | "lazy_static", 2593 | "libc", 2594 | "pkg-config", 2595 | ] 2596 | 2597 | [[package]] 2598 | name = "x11rb" 2599 | version = "0.9.0" 2600 | source = "registry+https://github.com/rust-lang/crates.io-index" 2601 | checksum = "6e99be55648b3ae2a52342f9a870c0e138709a3493261ce9b469afe6e4df6d8a" 2602 | dependencies = [ 2603 | "gethostname", 2604 | "nix 0.22.3", 2605 | "winapi", 2606 | "winapi-wsapoll", 2607 | ] 2608 | 2609 | [[package]] 2610 | name = "xcursor" 2611 | version = "0.3.4" 2612 | source = "registry+https://github.com/rust-lang/crates.io-index" 2613 | checksum = "463705a63313cd4301184381c5e8042f0a7e9b4bb63653f216311d4ae74690b7" 2614 | dependencies = [ 2615 | "nom 7.1.1", 2616 | ] 2617 | 2618 | [[package]] 2619 | name = "xml-rs" 2620 | version = "0.8.4" 2621 | source = "registry+https://github.com/rust-lang/crates.io-index" 2622 | checksum = "d2d7d3948613f75c98fd9328cfdcc45acc4d360655289d0a7d4ec931392200a3" 2623 | 2624 | [[package]] 2625 | name = "zbus" 2626 | version = "2.3.2" 2627 | source = "registry+https://github.com/rust-lang/crates.io-index" 2628 | checksum = "2d8f1a037b2c4a67d9654dc7bdfa8ff2e80555bbefdd3c1833c1d1b27c963a6b" 2629 | dependencies = [ 2630 | "async-broadcast", 2631 | "async-channel", 2632 | "async-executor", 2633 | "async-io", 2634 | "async-lock", 2635 | "async-recursion", 2636 | "async-task", 2637 | "async-trait", 2638 | "byteorder", 2639 | "derivative", 2640 | "dirs", 2641 | "enumflags2", 2642 | "event-listener", 2643 | "futures-core", 2644 | "futures-sink", 2645 | "futures-util", 2646 | "hex", 2647 | "lazy_static", 2648 | "nix 0.23.1", 2649 | "once_cell", 2650 | "ordered-stream", 2651 | "rand", 2652 | "serde", 2653 | "serde_repr", 2654 | "sha1", 2655 | "static_assertions", 2656 | "tracing", 2657 | "uds_windows", 2658 | "winapi", 2659 | "zbus_macros", 2660 | "zbus_names", 2661 | "zvariant", 2662 | ] 2663 | 2664 | [[package]] 2665 | name = "zbus_macros" 2666 | version = "2.3.2" 2667 | source = "registry+https://github.com/rust-lang/crates.io-index" 2668 | checksum = "1f8fb5186d1c87ae88cf234974c240671238b4a679158ad3b94ec465237349a6" 2669 | dependencies = [ 2670 | "proc-macro-crate", 2671 | "proc-macro2", 2672 | "quote", 2673 | "regex", 2674 | "syn", 2675 | ] 2676 | 2677 | [[package]] 2678 | name = "zbus_names" 2679 | version = "2.1.0" 2680 | source = "registry+https://github.com/rust-lang/crates.io-index" 2681 | checksum = "45dfcdcf87b71dad505d30cc27b1b7b88a64b6d1c435648f48f9dbc1fdc4b7e1" 2682 | dependencies = [ 2683 | "serde", 2684 | "static_assertions", 2685 | "zvariant", 2686 | ] 2687 | 2688 | [[package]] 2689 | name = "zvariant" 2690 | version = "3.4.1" 2691 | source = "registry+https://github.com/rust-lang/crates.io-index" 2692 | checksum = "cf2c71467724d4a77f0a1f0339dab10ca5d63f6a82411289cdcdfbfd47d2e407" 2693 | dependencies = [ 2694 | "byteorder", 2695 | "enumflags2", 2696 | "libc", 2697 | "serde", 2698 | "static_assertions", 2699 | "zvariant_derive", 2700 | ] 2701 | 2702 | [[package]] 2703 | name = "zvariant_derive" 2704 | version = "3.4.1" 2705 | source = "registry+https://github.com/rust-lang/crates.io-index" 2706 | checksum = "2c47f3630ce926a03abf21f5a8db90c60c81ed71599b5c86ad1a54fd3c7564c5" 2707 | dependencies = [ 2708 | "proc-macro-crate", 2709 | "proc-macro2", 2710 | "quote", 2711 | "syn", 2712 | ] 2713 | --------------------------------------------------------------------------------