pub struct HotkeyManager { /* private fields */ }Expand description
Public manager API.
Implementations§
Source§impl HotkeyManager
impl HotkeyManager
Sourcepub fn new() -> Result<Self, StartupError>
pub fn new() -> Result<Self, StartupError>
Create a manager with backend auto-detection.
§Errors
Returns an error if the backend cannot be initialized or input devices are not accessible.
Sourcepub fn builder() -> HotkeyManagerBuilder
pub fn builder() -> HotkeyManagerBuilder
Configure manager startup options.
Sourcepub const fn active_backend(&self) -> Backend
pub const fn active_backend(&self) -> Backend
Returns the backend this manager is using.
Sourcepub fn register<F>(
&self,
hotkey: impl HotkeyInput,
callback: F,
) -> Result<BindingGuard, RegisterError>
pub fn register<F>( &self, hotkey: impl HotkeyInput, callback: F, ) -> Result<BindingGuard, RegisterError>
Register a simple hotkey callback.
Accepts any type implementing HotkeyInput: a Hotkey, a
Key, or a string (&str / String).
§Errors
Returns RegisterError::Parse when
string input conversion fails,
RegisterError::AlreadyRegistered
if the hotkey is already bound, or
RegisterError::ManagerStopped
if the engine has shut down.
Sourcepub fn register_sequence<F>(
&self,
sequence: impl SequenceInput,
callback: F,
) -> Result<BindingGuard, RegisterError>
pub fn register_sequence<F>( &self, sequence: impl SequenceInput, callback: F, ) -> Result<BindingGuard, RegisterError>
Register a multi-step sequence callback.
§Errors
Returns RegisterError::Parse when
sequence input conversion fails,
RegisterError::AlreadyRegistered
if the sequence is already bound, or
RegisterError::ManagerStopped
if the engine has shut down.
Sourcepub fn register_sequence_with_options(
&self,
sequence: impl SequenceInput,
action: impl Into<Action>,
options: SequenceOptions,
) -> Result<BindingGuard, RegisterError>
pub fn register_sequence_with_options( &self, sequence: impl SequenceInput, action: impl Into<Action>, options: SequenceOptions, ) -> Result<BindingGuard, RegisterError>
Register a multi-step sequence with explicit action and options.
§Errors
Returns RegisterError::Parse when
sequence input conversion fails,
RegisterError::AlreadyRegistered
if the sequence is already bound, or
RegisterError::ManagerStopped
if the engine has shut down.
Sourcepub fn register_with_options(
&self,
hotkey: impl HotkeyInput,
action: impl Into<Action>,
options: BindingOptions,
) -> Result<BindingGuard, RegisterError>
pub fn register_with_options( &self, hotkey: impl HotkeyInput, action: impl Into<Action>, options: BindingOptions, ) -> Result<BindingGuard, RegisterError>
Register a hotkey with an explicit action and binding options.
Accepts any type implementing HotkeyInput: a Hotkey, a
Key, or a string (&str / String).
Use when you need metadata (description, overlay visibility) or
behavioral options beyond what register() provides.
§Errors
Returns RegisterError::Parse when
string input conversion fails,
RegisterError::AlreadyRegistered
if the hotkey is already bound, or
RegisterError::ManagerStopped
if the engine has shut down.
Sourcepub fn is_registered(
&self,
hotkey: impl HotkeyInput,
) -> Result<bool, QueryError>
pub fn is_registered( &self, hotkey: impl HotkeyInput, ) -> Result<bool, QueryError>
Query whether a hotkey is currently registered.
Accepts any type implementing HotkeyInput: a Hotkey, a
Key, or a string (&str / String).
§Errors
Returns QueryError::Parse when string
input conversion fails, or
QueryError::ManagerStopped if
the engine has shut down.
Sourcepub fn is_key_pressed(&self, key: Key) -> Result<bool, ManagerStopped>
pub fn is_key_pressed(&self, key: Key) -> Result<bool, ManagerStopped>
Query whether a specific key is currently pressed on any device.
§Errors
Returns ManagerStopped if the engine has shut down.
Sourcepub fn active_modifiers(&self) -> Result<ModifierSet, ManagerStopped>
pub fn active_modifiers(&self) -> Result<ModifierSet, ManagerStopped>
Query the set of modifiers currently held, derived from key state.
Left/right variants are canonicalized: if either LeftCtrl or RightCtrl
is held, Modifier::Ctrl is in the returned set.
§Errors
Returns ManagerStopped if the engine has shut down.
Sourcepub fn define_layer(&self, layer: Layer) -> Result<(), LayerError>
pub fn define_layer(&self, layer: Layer) -> Result<(), LayerError>
Define a named layer.
Sends the layer definition to the engine for storage. The layer
is not active until explicitly pushed via push_layer().
§Errors
Returns LayerError::AlreadyDefined
if a layer with the same name has already been defined, or
LayerError::ManagerStopped
if the engine has shut down.
Sourcepub fn shutdown(self) -> Result<(), ShutdownError>
pub fn shutdown(self) -> Result<(), ShutdownError>
Stop the manager and join the engine thread.
All registered bindings are dropped. This is also called automatically when the manager is dropped.
§Errors
Returns ShutdownError::Engine if
the engine thread panicked.
Sourcepub fn push_layer(&self, name: impl Into<LayerName>) -> Result<(), LayerError>
pub fn push_layer(&self, name: impl Into<LayerName>) -> Result<(), LayerError>
Push a named layer onto the layer stack.
The layer must have been previously defined via define_layer.
The pushed layer becomes the highest-priority layer for matching.
§Errors
Returns LayerError::NotDefined if
no layer with the given name exists, or
LayerError::ManagerStopped if
the engine has shut down.
Sourcepub fn pop_layer(&self) -> Result<LayerName, LayerError>
pub fn pop_layer(&self) -> Result<LayerName, LayerError>
Pop the topmost layer from the layer stack.
Returns the name of the popped layer.
§Errors
Returns LayerError::EmptyStack
if no layers are active, or
LayerError::ManagerStopped if
the engine has shut down.
Sourcepub fn toggle_layer(&self, name: impl Into<LayerName>) -> Result<(), LayerError>
pub fn toggle_layer(&self, name: impl Into<LayerName>) -> Result<(), LayerError>
Toggle a named layer on or off.
If the layer is currently in the stack, it is removed. If the layer is not in the stack, it is pushed.
§Errors
Returns LayerError::NotDefined if
no layer with the given name exists, or
LayerError::ManagerStopped if
the engine has shut down.
Sourcepub fn list_bindings(&self) -> Result<Vec<BindingInfo>, ManagerStopped>
pub fn list_bindings(&self) -> Result<Vec<BindingInfo>, ManagerStopped>
List all registered bindings with current shadowed status.
Returns global bindings and all layer bindings (active or not). Each entry includes whether the binding is currently reachable or shadowed by a higher-priority layer.
§Errors
Returns ManagerStopped if the engine has shut down.
Sourcepub fn bindings_for_key(
&self,
hotkey: impl HotkeyInput,
) -> Result<Option<BindingInfo>, QueryError>
pub fn bindings_for_key( &self, hotkey: impl HotkeyInput, ) -> Result<Option<BindingInfo>, QueryError>
Query what would fire if the given hotkey were pressed now.
Considers the current layer stack. Returns None if no binding
matches the hotkey.
§Errors
Returns QueryError::Parse when string
input conversion fails, or
QueryError::ManagerStopped if
the engine has shut down.
Sourcepub fn active_layers(&self) -> Result<Vec<ActiveLayerInfo>, ManagerStopped>
pub fn active_layers(&self) -> Result<Vec<ActiveLayerInfo>, ManagerStopped>
Query the current layer stack.
Returns layers in stack order (bottom to top).
§Errors
Returns ManagerStopped if the engine has shut down.
Sourcepub fn pending_sequence(
&self,
) -> Result<Option<PendingSequenceInfo>, ManagerStopped>
pub fn pending_sequence( &self, ) -> Result<Option<PendingSequenceInfo>, ManagerStopped>
Return current in-progress sequence state, if any.
§Errors
Returns ManagerStopped if the engine has shut down.
Sourcepub fn register_tap_hold(
&self,
key: Key,
tap_action: impl Into<Action>,
hold_action: impl Into<Action>,
options: TapHoldOptions,
) -> Result<BindingGuard, RegisterError>
pub fn register_tap_hold( &self, key: Key, tap_action: impl Into<Action>, hold_action: impl Into<Action>, options: TapHoldOptions, ) -> Result<BindingGuard, RegisterError>
Register a tap-hold binding for a dual-function key.
The tap_action fires when the key is pressed and released quickly
(before the threshold). The hold_action fires when the key is held
past the threshold or interrupted by another keypress.
Requires grab mode. Tap-hold must intercept and buffer key events before they reach other applications — without grab, the original key event would be delivered immediately.
§Errors
Returns RegisterError::UnsupportedFeature
if grab mode is not enabled,
RegisterError::AlreadyRegistered
if the key already has a tap-hold binding, or
RegisterError::ManagerStopped
if the engine has shut down.
Sourcepub fn conflicts(&self) -> Result<Vec<ConflictInfo>, ManagerStopped>
pub fn conflicts(&self) -> Result<Vec<ConflictInfo>, ManagerStopped>
Find bindings that are shadowed by higher-priority layers.
Returns conflict pairs: each entry shows the shadowed binding and the binding that shadows it.
§Errors
Returns ManagerStopped if the engine has shut down.
Trait Implementations§
Source§impl Debug for HotkeyManager
impl Debug for HotkeyManager
Auto Trait Implementations§
impl !Freeze for HotkeyManager
impl RefUnwindSafe for HotkeyManager
impl Send for HotkeyManager
impl Sync for HotkeyManager
impl Unpin for HotkeyManager
impl UnsafeUnpin for HotkeyManager
impl UnwindSafe for HotkeyManager
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> FmtForward for T
impl<T> FmtForward for T
Source§fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
self to use its Binary implementation when Debug-formatted.Source§fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
self to use its Display implementation when
Debug-formatted.Source§fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
self to use its LowerExp implementation when
Debug-formatted.Source§fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
self to use its LowerHex implementation when
Debug-formatted.Source§fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
self to use its Octal implementation when Debug-formatted.Source§fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
self to use its Pointer implementation when
Debug-formatted.Source§fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
self to use its UpperExp implementation when
Debug-formatted.Source§fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
self to use its UpperHex implementation when
Debug-formatted.Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> Pipe for Twhere
T: ?Sized,
impl<T> Pipe for Twhere
T: ?Sized,
Source§fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
Source§fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
self and passes that borrow into the pipe function. Read moreSource§fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
self and passes that borrow into the pipe function. Read moreSource§fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
Source§fn pipe_borrow_mut<'a, B, R>(
&'a mut self,
func: impl FnOnce(&'a mut B) -> R,
) -> R
fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R, ) -> R
Source§fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
self, then passes self.as_ref() into the pipe function.Source§fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
self, then passes self.as_mut() into the pipe
function.Source§fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
self, then passes self.deref() into the pipe function.Source§impl<T> Tap for T
impl<T> Tap for T
Source§fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
Borrow<B> of a value. Read moreSource§fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
BorrowMut<B> of a value. Read moreSource§fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
AsRef<R> view of a value. Read moreSource§fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
AsMut<R> view of a value. Read moreSource§fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
Deref::Target of a value. Read moreSource§fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
Deref::Target of a value. Read moreSource§fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
.tap() only in debug builds, and is erased in release builds.Source§fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
.tap_mut() only in debug builds, and is erased in release
builds.Source§fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
.tap_borrow() only in debug builds, and is erased in release
builds.Source§fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
.tap_borrow_mut() only in debug builds, and is erased in release
builds.Source§fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
.tap_ref() only in debug builds, and is erased in release
builds.Source§fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
.tap_ref_mut() only in debug builds, and is erased in release
builds.Source§fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
.tap_deref() only in debug builds, and is erased in release
builds.