Skip to main content

InputHandler

Trait InputHandler 

Source
pub trait InputHandler: 'static {
    // Required methods
    fn selected_text_range(
        &mut self,
        ignore_disabled_input: bool,
        window: &mut Window,
        cx: &mut App,
    ) -> Option<UTF16Selection>;
    fn marked_text_range(
        &mut self,
        window: &mut Window,
        cx: &mut App,
    ) -> Option<Range<usize>>;
    fn text_for_range(
        &mut self,
        range_utf16: Range<usize>,
        adjusted_range: &mut Option<Range<usize>>,
        window: &mut Window,
        cx: &mut App,
    ) -> Option<String>;
    fn replace_text_in_range(
        &mut self,
        replacement_range: Option<Range<usize>>,
        text: &str,
        window: &mut Window,
        cx: &mut App,
    );
    fn replace_and_mark_text_in_range(
        &mut self,
        range_utf16: Option<Range<usize>>,
        new_text: &str,
        new_selected_range: Option<Range<usize>>,
        window: &mut Window,
        cx: &mut App,
    );
    fn unmark_text(&mut self, window: &mut Window, cx: &mut App);
    fn bounds_for_range(
        &mut self,
        range_utf16: Range<usize>,
        window: &mut Window,
        cx: &mut App,
    ) -> Option<Bounds<Pixels>>;
    fn character_index_for_point(
        &mut self,
        point: Point<Pixels>,
        window: &mut Window,
        cx: &mut App,
    ) -> Option<usize>;

    // Provided methods
    fn apple_press_and_hold_enabled(&mut self) -> bool { ... }
    fn accepts_text_input(
        &mut self,
        _window: &mut Window,
        _cx: &mut App,
    ) -> bool { ... }
    fn prefers_ime_for_printable_keys(
        &mut self,
        _window: &mut Window,
        _cx: &mut App,
    ) -> bool { ... }
}
Expand description

Zed’s interface for handling text input from the platform’s IME system This is currently a 1:1 exposure of the NSTextInputClient API:

https://developer.apple.com/documentation/appkit/nstextinputclient

Required Methods§

Source

fn selected_text_range( &mut self, ignore_disabled_input: bool, window: &mut Window, cx: &mut App, ) -> Option<UTF16Selection>

Get the range of the user’s currently selected text, if any Corresponds to selectedRange()

Return value is in terms of UTF-16 characters, from 0 to the length of the document

Source

fn marked_text_range( &mut self, window: &mut Window, cx: &mut App, ) -> Option<Range<usize>>

Get the range of the currently marked text, if any Corresponds to markedRange()

Return value is in terms of UTF-16 characters, from 0 to the length of the document

Source

fn text_for_range( &mut self, range_utf16: Range<usize>, adjusted_range: &mut Option<Range<usize>>, window: &mut Window, cx: &mut App, ) -> Option<String>

Get the text for the given document range in UTF-16 characters Corresponds to attributedSubstring(forProposedRange: actualRange:)

range_utf16 is in terms of UTF-16 characters

Source

fn replace_text_in_range( &mut self, replacement_range: Option<Range<usize>>, text: &str, window: &mut Window, cx: &mut App, )

Replace the text in the given document range with the given text Corresponds to insertText(_:replacementRange:)

replacement_range is in terms of UTF-16 characters

Source

fn replace_and_mark_text_in_range( &mut self, range_utf16: Option<Range<usize>>, new_text: &str, new_selected_range: Option<Range<usize>>, window: &mut Window, cx: &mut App, )

Replace the text in the given document range with the given text, and mark the given text as part of an IME ‘composing’ state Corresponds to setMarkedText(_:selectedRange:replacementRange:)

range_utf16 is in terms of UTF-16 characters new_selected_range is in terms of UTF-16 characters

Source

fn unmark_text(&mut self, window: &mut Window, cx: &mut App)

Remove the IME ‘composing’ state from the document Corresponds to unmarkText()

Source

fn bounds_for_range( &mut self, range_utf16: Range<usize>, window: &mut Window, cx: &mut App, ) -> Option<Bounds<Pixels>>

Get the bounds of the given document range in screen coordinates Corresponds to firstRect(forCharacterRange:actualRange:)

This is used for positioning the IME candidate window

Source

fn character_index_for_point( &mut self, point: Point<Pixels>, window: &mut Window, cx: &mut App, ) -> Option<usize>

Get the character offset for the given point in terms of UTF16 characters

Corresponds to characterIndexForPoint:

Provided Methods§

Source

fn apple_press_and_hold_enabled(&mut self) -> bool

Allows a given input context to opt into getting raw key repeats instead of sending these to the platform. TODO: Ideally we should be able to set ApplePressAndHoldEnabled in NSUserDefaults (which is how iTerm does it) but it doesn’t seem to work for me.

Source

fn accepts_text_input(&mut self, _window: &mut Window, _cx: &mut App) -> bool

Returns whether this handler is accepting text input to be inserted.

Source

fn prefers_ime_for_printable_keys( &mut self, _window: &mut Window, _cx: &mut App, ) -> bool

Returns whether printable keys should be routed to the IME before keybinding matching when a non-ASCII input source (e.g. Japanese, Korean, Chinese IME) is active. This prevents multi-stroke keybindings like jj from intercepting keys that the IME should compose.

Defaults to false. The editor overrides this based on whether it expects character input (e.g. Vim insert mode returns true, normal mode returns false). The terminal keeps the default false so that raw keys reach the terminal process.

Implementors§