[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 is its own binary because Windows needs opposite subsystems # for the two: a console-subsystem GUI flashes a console on launch, and a # window-subsystem tool cannot write to the invoking shell. On Unix # `quicksearch` does both. [[bin]] name = "quicksearch-cli" path = "src/cli_main.rs" [features] # Scripted self-capture driver that packaging/capture.sh uses to regenerate # the website screenshots and screencasts. Adds no dependencies and is inert # unless QS_CAPTURE_SCRIPT is set. capture = [] [dependencies] quicksearch-core = { path = "../quicksearch-core" } # Index-password support: the OS keychain for "remember on this device" # (Secret Service on Linux, Credential Manager on Windows), a hidden terminal # prompt, and best-effort scrubbing of password buffers. `vendored` links # libdbus statically, so neither the build machine nor the .deb needs a dbus # 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", ] } # Drops `default_fonts` (~1.4 MB of embedded TTFs; `src/fonts.rs` installs # the faces we paint). eframe's `default-features = false` does not cover it: # feature resolution unions the declarations, so naming egui plainly would # switch it back on. egui = { version = "0.32", default-features = false } # Only `Column`/`TableBuilder` are used; the one default feature is an image # loader we never register. egui_extras = { version = "0.32", default-features = false } rfd = "0.15" open = "5" chrono = { version = "0.4", default-features = false, features = ["clock"] } # The shortcut QuickSearch claims while running: `RegisterHotKey` on Windows, # `XGrabKey` on X11. Wayland lets no application claim keys; there, and # whenever the app is not running, the desktop's binding of `--toggle` does it. global-hotkey = "0.8" # The window handle both native raise paths in `activate::raise` need (X11 # `_NET_ACTIVE_WINDOW`, Win32 `SetForegroundWindow`). eframe depends on it on # every target, so it adds no crate. raw-window-handle = "0.6" # 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", ] } # Raises the window on X11, which winit cannot do (see `activate::raise`). # Already in the tree as winit's X11 backend. x11rb = "0.13" # The Wayland half of `activate::raise`: a guest connection over winit's # wl_display that hands the compositor an xdg-activation token for our # surface. winit and sctk already enable all three with these features, so # nothing new compiles. wayland-client = "0.31" wayland-backend = { version = "0.3", features = ["client_system"] } wayland-protocols = { version = "0.32", features = ["client", "staging"] } # Console attachment for the GUI binary (which has no stdio when launched from # Explorer) and VT mode for the CLI binary. 0.59 matches what eframe and rfd # resolve, so no extra crate compiles. [target.'cfg(windows)'.dependencies] windows-sys = { version = "0.59", features = [ "Win32_Foundation", "Win32_System_Console", # The `--toggle` named pipe in `activate`. `Win32_System_IO` and # `Win32_Security` only carry the `OVERLAPPED` and `SECURITY_ATTRIBUTES` # types of pointers we pass as null. "Win32_System_Pipes", "Win32_Storage_FileSystem", "Win32_System_IO", "Win32_Security", # The foreground handshake (`activate`) and native raise (`activate::raise`): # GetCurrentProcessId, AllowSetForegroundWindow / SetForegroundWindow. "Win32_System_Threading", "Win32_UI_WindowsAndMessaging", ] }