2026-04-21 23:00:47 -04:00
|
|
|
[package]
|
|
|
|
|
name = "quicksearch-gui"
|
|
|
|
|
version.workspace = true
|
|
|
|
|
edition.workspace = true
|
2026-08-02 19:04:30 -04:00
|
|
|
license.workspace = true
|
|
|
|
|
authors.workspace = true
|
|
|
|
|
repository.workspace = true
|
|
|
|
|
description = "Fast full-text search across your files: desktop app and terminal search tool."
|
2026-04-21 23:00:47 -04:00
|
|
|
|
|
|
|
|
[[bin]]
|
|
|
|
|
name = "quicksearch"
|
|
|
|
|
path = "src/main.rs"
|
|
|
|
|
|
2026-08-23 00:33:53 -04:00
|
|
|
# Terminal search is its own binary because the two need opposite Windows
|
|
|
|
|
# subsystems: a GUI console app flashes a console on launch; a console tool
|
|
|
|
|
# built as a GUI app cannot write to the invoking shell. On Unix the
|
|
|
|
|
# distinction does not exist and `quicksearch` still does both.
|
2026-08-02 19:04:30 -04:00
|
|
|
[[bin]]
|
|
|
|
|
name = "quicksearch-cli"
|
|
|
|
|
path = "src/cli_main.rs"
|
|
|
|
|
|
2026-08-04 23:33:28 -04:00
|
|
|
[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 = []
|
|
|
|
|
|
2026-04-21 23:00:47 -04:00
|
|
|
[dependencies]
|
|
|
|
|
quicksearch-core = { path = "../quicksearch-core" }
|
|
|
|
|
|
2026-08-02 20:21:19 -04:00
|
|
|
# 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"
|
|
|
|
|
|
2026-08-02 19:04:30 -04:00
|
|
|
eframe = { version = "0.32", default-features = false, features = [
|
|
|
|
|
"glow",
|
|
|
|
|
"persistence",
|
|
|
|
|
] }
|
2026-08-23 00:33:53 -04:00
|
|
|
# `default-features = false` for one feature, `default_fonts` (~1.4 MB of
|
|
|
|
|
# embedded TTFs; `src/fonts.rs` installs the faces actually painted). eframe's
|
|
|
|
|
# `default-features = false` above does NOT cover this: feature resolution
|
|
|
|
|
# unions the declarations, so naming egui plainly switches it back on.
|
2026-08-17 22:30:43 -04:00
|
|
|
egui = { version = "0.32", default-features = false }
|
2026-08-23 00:33:53 -04:00
|
|
|
# Only `Column`/`TableBuilder` are used; the lone default feature is an image
|
|
|
|
|
# loader that is never registered, so this compiles one crate less.
|
2026-08-17 22:30:43 -04:00
|
|
|
egui_extras = { version = "0.32", default-features = false }
|
2026-08-02 19:04:30 -04:00
|
|
|
rfd = "0.15"
|
|
|
|
|
open = "5"
|
|
|
|
|
chrono = { version = "0.4", default-features = false, features = ["clock"] }
|
|
|
|
|
|
2026-09-04 21:39:54 -04:00
|
|
|
# The shortcut QuickSearch claims for itself while running, where the display
|
|
|
|
|
# server lets an application claim keys: `RegisterHotKey` on Windows,
|
|
|
|
|
# `XGrabKey` on X11. Wayland does not, and is handled by the portal below.
|
|
|
|
|
# This is the zero-setup path; `--toggle` covers the app not running.
|
2026-08-09 02:58:13 -04:00
|
|
|
global-hotkey = "0.8"
|
|
|
|
|
|
2026-09-05 03:09:12 -04:00
|
|
|
# The window handle behind both native raise paths — `activate::raise`'s X11
|
|
|
|
|
# `_NET_ACTIVE_WINDOW` message and its Win32 `SetForegroundWindow` — neither of
|
|
|
|
|
# which winit will do for us. Not target-gated: eframe depends on this
|
|
|
|
|
# unconditionally (it is what `HasWindowHandle for Frame` is written against),
|
|
|
|
|
# so naming it here adds no crate on any platform.
|
|
|
|
|
raw-window-handle = "0.6"
|
|
|
|
|
|
2026-08-02 19:04:30 -04:00
|
|
|
# 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",
|
|
|
|
|
] }
|
|
|
|
|
|
2026-09-04 21:39:54 -04:00
|
|
|
# The Wayland half of the in-application 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`.
|
2026-08-09 02:58:13 -04:00
|
|
|
ashpd = { version = "0.11", default-features = false, features = ["async-std"] }
|
|
|
|
|
futures-channel = "0.3"
|
|
|
|
|
futures-util = "0.3"
|
|
|
|
|
pollster = "0.4"
|
|
|
|
|
|
2026-09-04 21:39:54 -04:00
|
|
|
# Raising the window from either 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
|
2026-09-05 03:09:12 -04:00
|
|
|
# `activate::raise`. Already in the tree as winit's own X11 backend, so this
|
|
|
|
|
# adds no crate.
|
2026-08-09 02:58:13 -04:00
|
|
|
x11rb = "0.13"
|
|
|
|
|
|
2026-09-04 21:39:54 -04:00
|
|
|
# XTEST, for `examples/raiseprobe.rs` only: it synthesises the global key
|
|
|
|
|
# press that proves the shortcut path end to end, which no command-line tool
|
|
|
|
|
# here can do. A dev-dependency feature, so the shipped binary never gets it —
|
|
|
|
|
# `cargo build --bin quicksearch` does not build dev-dependencies at all.
|
|
|
|
|
[target.'cfg(all(unix, not(target_os = "macos")))'.dev-dependencies]
|
|
|
|
|
x11rb = { version = "0.13", features = ["xtest"] }
|
|
|
|
|
|
2026-08-02 19:04:30 -04:00
|
|
|
# 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",
|
2026-09-04 21:39:54 -04:00
|
|
|
# The `--toggle` named pipe in `activate`. `Win32_System_IO` and
|
|
|
|
|
# `Win32_Security` are not used directly: they carry the `OVERLAPPED` and
|
|
|
|
|
# `SECURITY_ATTRIBUTES` types naming the pointers we pass as null.
|
|
|
|
|
"Win32_System_Pipes",
|
|
|
|
|
"Win32_Storage_FileSystem",
|
|
|
|
|
"Win32_System_IO",
|
|
|
|
|
"Win32_Security",
|
2026-09-05 01:55:59 -04:00
|
|
|
# The foreground handshake (`activate`) and native raise (`activate::raise`):
|
|
|
|
|
# GetCurrentProcessId, AllowSetForegroundWindow / SetForegroundWindow.
|
|
|
|
|
"Win32_System_Threading",
|
|
|
|
|
"Win32_UI_WindowsAndMessaging",
|
2026-08-02 19:04:30 -04:00
|
|
|
] }
|