Skip to main content

InputHandler

Struct InputHandler 

Source
pub struct InputHandler {
    pub modifiers: Modifiers,
    pub left_option_key_mode: OptionKeyMode,
    pub right_option_key_mode: OptionKeyMode,
    /* private fields */
}
Expand description

Input handler for converting winit events to terminal input

Fields§

§modifiers: Modifiers§left_option_key_mode: OptionKeyMode

Option key mode for left Option/Alt key

§right_option_key_mode: OptionKeyMode

Option key mode for right Option/Alt key

Implementations§

Source§

impl InputHandler

Source

pub fn new() -> Self

Create a new input handler

Source

pub fn update_modifiers(&mut self, modifiers: Modifiers)

Update the current modifier state

Source

pub fn update_option_key_modes( &mut self, left: OptionKeyMode, right: OptionKeyMode, )

Update Option/Alt key modes from config

Source

pub fn track_alt_key(&mut self, event: &KeyEvent)

Track Alt key press/release to know which Alt is active

Source

pub fn sync_modifier_from_key_event(&mut self, event: &KeyEvent)

Defensive modifier-state sync from physical key events.

On Windows, WM_NCACTIVATE(false) fires when a notification, popup, or system dialog briefly steals visual focus. Winit responds by emitting ModifiersChanged(empty), which clears our modifier state. Because keyboard focus is never actually lost, no WM_SETFOCUS fires to restore the state. Subsequent WM_KEYDOWN messages should re-trigger update_modifiers inside winit, but in practice there is a window where the state stays zeroed, causing Shift/Ctrl/Alt to stop working until the key is physically released and re-pressed.

To guard against this, we synthesize modifier updates directly from KeyboardInput events for physical modifier keys. This runs after ModifiersChanged has already been applied (winit guarantees ModifiersChanged fires before KeyboardInput for the same key), so it is a no-op in the normal path and only corrects state when winit’s ModifiersChanged is stale or missing.

Source

pub fn handle_key_event(&mut self, event: KeyEvent) -> Option<Vec<u8>>

Convert a keyboard event to terminal input bytes

If modify_other_keys_mode is > 0, keys with modifiers will be reported using the XTerm modifyOtherKeys format: CSI 27 ; modifier ; keycode ~

Source

pub fn handle_key_event_with_mode( &mut self, event: KeyEvent, modify_other_keys_mode: u8, application_cursor: bool, ) -> Option<Vec<u8>>

Convert a keyboard event to terminal input bytes with modifyOtherKeys support

modify_other_keys_mode:

  • 0: Disabled (normal key handling)
  • 1: Report modifiers for special keys only
  • 2: Report modifiers for all keys

application_cursor: When true (DECCKM mode enabled), arrow keys send SS3 sequences (ESC O A) instead of CSI sequences (ESC [ A).

Source

pub fn paste_from_clipboard(&mut self) -> Option<String>

Paste text from clipboard (returns raw text, caller handles terminal conversion)

Source

pub fn clipboard_has_image(&mut self) -> bool

Check if clipboard contains an image (used when text paste returns None to determine if we should forward the paste event to the terminal for image-aware applications like Claude Code)

Source

pub fn copy_to_clipboard(&mut self, text: &str) -> Result<(), String>

Copy text to clipboard

Source

pub fn copy_to_primary_selection(&mut self, text: &str) -> Result<(), String>

Copy text to primary selection (Linux X11 only)

Source

pub fn paste_from_primary_selection(&mut self) -> Option<String>

Paste text from primary selection (Linux X11 only, returns raw text)

Trait Implementations§

Source§

impl Default for InputHandler

Source§

fn default() -> Self

Returns the “default value” for a type. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> Downcast for T
where T: Any,

Source§

fn into_any(self: Box<T>) -> Box<dyn Any>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
Source§

fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
Source§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot generate &Any’s vtable from &Trait’s.
Source§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot generate &mut Any’s vtable from &mut Trait’s.
Source§

impl<T> DowncastSync for T
where T: Any + Send + Sync,

Source§

fn into_any_arc(self: Arc<T>) -> Arc<dyn Any + Sync + Send>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

impl<T> Pointable for T

Source§

const ALIGN: usize

The alignment of pointer.
Source§

type Init = T

The type for initializers.
Source§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
Source§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
Source§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
Source§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<R, P> ReadPrimitive<R> for P
where R: Read + ReadEndian<P>, P: Default,

Source§

fn read_from_little_endian(read: &mut R) -> Result<Self, Error>

Read this value from the supplied reader. Same as ReadEndian::read_from_little_endian().
Source§

fn read_from_big_endian(read: &mut R) -> Result<Self, Error>

Read this value from the supplied reader. Same as ReadEndian::read_from_big_endian().
Source§

fn read_from_native_endian(read: &mut R) -> Result<Self, Error>

Read this value from the supplied reader. Same as ReadEndian::read_from_native_endian().
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more