[package] name = "quicksearch-gui" version.workspace = true edition.workspace = true license.workspace = true authors.workspace = true repository.workspace = true description = "Fast full-text search across your files: desktop app and terminal search tool." [[bin]] name = "quicksearch" path = "src/main.rs" # Terminal search lives in its own binary because the two want opposite # Windows subsystems: a GUI built as a console app flashes a console window on # every launch, and a console tool built as a GUI app cannot write to the shell # that invoked it (cmd and PowerShell do not even wait for it). Splitting is # the only arrangement that is correct in both cases. On Unix the distinction # does not exist and `quicksearch` still does both. [[bin]] name = "quicksearch-cli" path = "src/cli_main.rs" [features] # Scripted self-capture driver used by packaging/capture.sh to regenerate the # website screenshots and screencasts. Adds no dependencies and is inert # unless QS_CAPTURE_SCRIPT is set at runtime. capture = [] [dependencies] quicksearch-core = { path = "../quicksearch-core" } # Index-password support: OS keychain for "remember on this device" # (Secret Service on Linux, Credential Manager on Windows), hidden terminal # prompt, and best-effort scrubbing of password buffers. # `vendored` compiles libdbus statically, so neither the build machine nor # the .deb needs a dbus development/runtime package. keyring = { version = "3", features = ["sync-secret-service", "vendored", "windows-native"] } rpassword = "7" zeroize = "1" eframe = { version = "0.32", default-features = false, features = [ "glow", "persistence", ] } egui = "0.32" egui_extras = "0.32" rfd = "0.15" open = "5" chrono = { version = "0.4", default-features = false, features = ["clock"] } # The system-wide search shortcut, where the display server lets an # application claim keys for itself: `RegisterHotKey` on Windows, `XGrabKey` # on X11. Wayland does not, and is handled by the portal below. global-hotkey = "0.8" # Display backends, which only exist on Linux/BSD. `default-features = false` # has to be repeated: feature resolution unions the two stanzas, so a single # permissive one would switch defaults back on for every target. [target.'cfg(all(unix, not(target_os = "macos")))'.dependencies] eframe = { version = "0.32", default-features = false, features = [ "wayland", "x11", ] } # The Wayland half of the search shortcut: `org.freedesktop.portal.GlobalShortcuts`, # the only way a Wayland application can be told about a key it does not own. # `rfd` already pulls all four in (it uses the file-chooser portal), so the # versions here are the ones already resolved and nothing extra is compiled. # `default-features = false` matters: ashpd defaults to Tokio, which would add # a second async runtime and switch `zbus` over to it underneath `rfd`. ashpd = { version = "0.11", default-features = false, features = ["async-std"] } futures-channel = "0.3" futures-util = "0.3" pollster = "0.4" # Raising the window from the shortcut on X11, which winit cannot do: it asks # with a source indication of "application", and every mainstream window # manager refuses that from a window that is not already focused. See # `hotkey::raise`. Both are already in the tree (winit's own X11 backend, and # eframe's window handle), so neither adds a crate. x11rb = "0.13" raw-window-handle = "0.6" # Console attachment for the GUI binary (which has no stdio when launched from # Explorer) and VT-mode enabling for the CLI binary. 0.59 matches what eframe # and rfd already resolve, so no extra crate is compiled. [target.'cfg(windows)'.dependencies] windows-sys = { version = "0.59", features = [ "Win32_Foundation", "Win32_System_Console", ] }