iced_selection 0.3.0

Text selection for `iced`
iced_selection-0.3.0 has been yanked.
Visit the last successful build: iced_selection-0.5.0

iced_selection

builds.sr.ht status   docs

Text selection API for iced, with reference widget implementations.

Text in iced currently isn't selectable except for TextEditor and TextInput. This is my solution, but others exist as well (see Special thanks).

Check out the examples, or read the documentation to get an idea about the crate.

Roughly:

  • selection.rs: The main selection API, built around iced's Paragraph.
  • text.rs: Reference implementation for a selectable text widget.
    • text/rich.rs: Reference implementation for a selectable rich text widget.
  • markdown.rs: A custom Viewer and its corresponding custom methods.
  • lib.rs: Helper methods, macros and re-exports.

Wrapped text support

Wrapped text currently isn't supported. Although single-click mouse selection and most keyboard shortcuts will select text correctly, the selection box(es) drawn will be incorrect for wrapped segments and by-line selection (Shift + Up Arrow / Shift + Down Arrow & triple-click mouse selection) will treat all wrapped segments as part of the same line.

Installation

Simply add it to under your Cargo.toml's dependencies section.

# ...

[dependencies]
iced = { git = "https://github.com/iced-rs/iced", branch = "master" }
iced_selection = { git = "https://git.sr.ht/~pml68/iced_selection" }

Features

  • default:
  • markdown: Provides support for rendering markdown through a custom viewer.

TODO

  • allow out-of-bounds selection dragging
  • custom markdown Viewer
  • double-click + drag for by-word selection
  • triple-click + drag for by-line selection
  • support wrapped lines

Special thanks

  • iced, for making this possible in the first place, and for the modified source code of Text, Rich and Selection (based on text_input/cursor.rs).
  • Halloy, for its amazing selectable text implementation (check it out, but mind the GPLv3!).