зеркало из
https://github.com/glebtv/tui-textarea.git
synced 2026-09-03 14:26:17 +03:00
Merge branch 'invert'
Этот коммит содержится в:
@@ -1,3 +1,3 @@
|
||||
[alias]
|
||||
watch-check = ["watch", "-x", "clippy --features ratatui-crossterm,search --no-default-features --examples --tests", "-x", "clippy --features search --examples --tests"]
|
||||
watch-check = ["watch", "-x", "clippy --features search --examples --tests", "-x", "clippy --features tuirs-crossterm,search --no-default-features --examples --tests"]
|
||||
watch-test = ["watch", "-x", "test --features=search", "-w", "src", "-w", "tests"]
|
||||
|
||||
21
.github/workflows/ci.yml
поставляемый
21
.github/workflows/ci.yml
поставляемый
@@ -15,12 +15,11 @@ jobs:
|
||||
- uses: dtolnay/rust-toolchain@stable
|
||||
- uses: Swatinem/rust-cache@v2
|
||||
- run: cargo test --features=search
|
||||
- run: cargo test --no-default-features --features=ratatui-crossterm,search -- --skip .rs
|
||||
- run: cargo test --no-default-features --features=ratatui-termion,search -- --skip .rs
|
||||
- run: cargo test --no-default-features --features=tuirs-crossterm,search -- --skip .rs
|
||||
- run: cargo test --no-default-features --features=tuirs-termion,search -- --skip .rs
|
||||
if: ${{ matrix.os != 'windows-latest' }}
|
||||
- run: cargo test --no-default-features --features=ratatui-termwiz,search -- --skip .rs
|
||||
- run: cargo test --no-default-features --features=your-backend,search -- --skip .rs
|
||||
- run: cargo test --no-default-features --features=ratatui-your-backend,search -- --skip .rs
|
||||
- run: cargo test --no-default-features --features=tuirs-your-backend,search -- --skip .rs
|
||||
lint:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
@@ -32,16 +31,14 @@ jobs:
|
||||
- run: cargo fmt -- --check
|
||||
- run: cargo clippy --examples -- -D warnings
|
||||
- run: cargo clippy --examples --features search -- -D warnings
|
||||
- run: cargo clippy --examples --no-default-features --features ratatui-crossterm -- -D warnings
|
||||
- run: cargo clippy --examples --no-default-features --features ratatui-crossterm,search -- -D warnings
|
||||
- run: cargo clippy --examples --no-default-features --features ratatui-termion -- -D warnings
|
||||
- run: cargo clippy --examples --no-default-features --features ratatui-termion,search -- -D warnings
|
||||
- run: cargo clippy --examples --no-default-features --features ratatui-termwiz -- -D warnings
|
||||
- run: cargo clippy --examples --no-default-features --features ratatui-termwiz,search -- -D warnings
|
||||
- run: cargo clippy --examples --no-default-features --features termion -- -D warnings
|
||||
- run: cargo clippy --examples --no-default-features --features termion,search -- -D warnings
|
||||
- run: cargo clippy --examples --no-default-features --features your-backend -- -D warnings
|
||||
- run: cargo clippy --examples --no-default-features --features your-backend,search -- -D warnings
|
||||
- run: cargo clippy --examples --no-default-features --features ratatui-your-backend -- -D warnings
|
||||
- run: cargo clippy --examples --no-default-features --features ratatui-your-backend,search -- -D warnings
|
||||
- run: cargo clippy --examples --no-default-features --features tuirs-crossterm -- -D warnings
|
||||
- run: cargo clippy --examples --no-default-features --features tuirs-crossterm,search -- -D warnings
|
||||
- run: cargo clippy --examples --no-default-features --features tuirs-termion -- -D warnings
|
||||
- run: cargo clippy --examples --no-default-features --features tuirs-termion,search -- -D warnings
|
||||
- run: cargo clippy --examples --no-default-features --features tuirs-your-backend -- -D warnings
|
||||
- run: cargo clippy --examples --no-default-features --features tuirs-your-backend,search -- -D warnings
|
||||
- run: cargo rustdoc --features=search -p tui-textarea -- -D warnings
|
||||
|
||||
@@ -10,7 +10,7 @@ For reporting a bug, please make sure your report includes the following points.
|
||||
- Environment
|
||||
- Your terminal
|
||||
- Rust version
|
||||
- `tui` or `ratatui` crate version
|
||||
- `ratatui` or `tui` crate version
|
||||
- Enabled features of `tui-textarea` crate
|
||||
|
||||
An example of bug report: https://github.com/rhysd/tui-textarea/issues/1
|
||||
@@ -29,7 +29,7 @@ To run linters:
|
||||
|
||||
```sh
|
||||
cargo clippy --features=search --tests --examples
|
||||
cargo clippy --features=ratatui-crossterm,search --no-default-features --tests --examples
|
||||
cargo clippy --features=tuirs-crossterm,search --no-default-features --tests --examples
|
||||
cargo fmt -- --check
|
||||
```
|
||||
|
||||
@@ -67,7 +67,7 @@ tail -F debug.txt
|
||||
|
||||
## Running a fuzzer
|
||||
|
||||
To run fuzzing tests, [cargo-fuzz][] is necessary.
|
||||
To run fuzzing tests, [cargo-fuzz][] and Rust nightly toolchain are necessary.
|
||||
|
||||
```sh
|
||||
cargo +nightly fuzz run edit
|
||||
|
||||
82
Cargo.toml
82
Cargo.toml
@@ -2,10 +2,10 @@
|
||||
name = "tui-textarea"
|
||||
version = "0.2.4"
|
||||
edition = "2021"
|
||||
rust-version = "1.56.1"
|
||||
rust-version = "1.56.1" # for `tui` crate support
|
||||
authors = ["rhysd <lin90162@yahoo.co.jp>"]
|
||||
description = """
|
||||
tui-textarea is a simple yet powerful text editor widget for tui-rs and ratatui. Multi-line
|
||||
tui-textarea is a simple yet powerful text editor widget for ratatui and tui-rs. Multi-line
|
||||
text editor can be easily put as part of your TUI application.
|
||||
"""
|
||||
license = "MIT"
|
||||
@@ -24,37 +24,33 @@ include = [
|
||||
|
||||
[features]
|
||||
default = ["crossterm"]
|
||||
# Features to use tui-rs
|
||||
crossterm = ["dep:crossterm", "tui/crossterm"]
|
||||
termion = ["dep:termion", "tui/termion"]
|
||||
your-backend = ["tui"]
|
||||
# Features to use ratatui
|
||||
ratatui-crossterm = ["dep:crossterm-027", "ratatui/crossterm"]
|
||||
ratatui-termion = ["dep:termion", "ratatui/termion"]
|
||||
ratatui-termwiz = ["dep:termwiz", "ratatui/termwiz"]
|
||||
ratatui-your-backend = ["ratatui"]
|
||||
crossterm = ["dep:crossterm", "ratatui/crossterm"]
|
||||
termion = ["dep:termion", "ratatui/termion"]
|
||||
termwiz = ["dep:termwiz", "ratatui/termwiz"]
|
||||
your-backend = ["ratatui"]
|
||||
# Features to use tui-rs
|
||||
tuirs-crossterm = ["dep:crossterm-025", "tui/crossterm"]
|
||||
tuirs-termion = ["dep:termion", "tui/termion"]
|
||||
tuirs-your-backend = ["tui"]
|
||||
# Other optional features
|
||||
search = ["dep:regex"]
|
||||
|
||||
[dependencies]
|
||||
crossterm = { package = "crossterm", version = "0.25", optional = true }
|
||||
arbitrary = { version = "1", features = ["derive"], optional = true }
|
||||
crossterm = { package = "crossterm", version = "0.27", optional = true }
|
||||
crossterm-025 = { package = "crossterm", version = "0.25", optional = true }
|
||||
ratatui = { version = "0.23.0", default-features = false, optional = true }
|
||||
regex = { version = "1", optional = true }
|
||||
termion = { version = "2.0", optional = true }
|
||||
tui = { version = "0.19", default-features = false, optional = true }
|
||||
arbitrary = { version = "1", features = ["derive"], optional = true }
|
||||
crossterm-027 = { package = "crossterm", version = "0.27", optional = true }
|
||||
ratatui = { version = "0.23.0", default-features = false, optional = true }
|
||||
unicode-width = "0.1.11"
|
||||
termwiz = { version = "0.20.0", optional = true }
|
||||
tui = { version = "0.19", default-features = false, optional = true }
|
||||
unicode-width = "0.1.11"
|
||||
|
||||
[[example]]
|
||||
name = "minimal"
|
||||
required-features = ["crossterm"]
|
||||
|
||||
[[example]]
|
||||
name = "termion"
|
||||
required-features = ["termion"]
|
||||
|
||||
[[example]]
|
||||
name = "editor"
|
||||
required-features = ["crossterm", "search"]
|
||||
@@ -67,10 +63,6 @@ required-features = ["crossterm"]
|
||||
name = "single_line"
|
||||
required-features = ["crossterm"]
|
||||
|
||||
[[example]]
|
||||
name = "password"
|
||||
required-features = ["crossterm"]
|
||||
|
||||
[[example]]
|
||||
name = "variable"
|
||||
required-features = ["crossterm"]
|
||||
@@ -79,29 +71,37 @@ required-features = ["crossterm"]
|
||||
name = "modal"
|
||||
required-features = ["crossterm"]
|
||||
|
||||
[[example]]
|
||||
name = "password"
|
||||
required-features = ["crossterm"]
|
||||
|
||||
[[example]]
|
||||
name = "popup_placeholder"
|
||||
required-features = ["crossterm"]
|
||||
|
||||
[[example]]
|
||||
name = "ratatui_minimal"
|
||||
required-features = ["ratatui-crossterm"]
|
||||
|
||||
[[example]]
|
||||
name = "ratatui_popup_placeholder"
|
||||
required-features = ["ratatui-crossterm"]
|
||||
|
||||
[[example]]
|
||||
name = "ratatui_editor"
|
||||
required-features = ["ratatui-crossterm", "search"]
|
||||
|
||||
[[example]]
|
||||
name = "ratatui_termion"
|
||||
required-features = ["ratatui-termion"]
|
||||
|
||||
[[example]]
|
||||
name = "termwiz"
|
||||
required-features = ["ratatui-termwiz"]
|
||||
required-features = ["termwiz"]
|
||||
|
||||
[[example]]
|
||||
name = "termion"
|
||||
required-features = ["termion"]
|
||||
|
||||
[[example]]
|
||||
name = "tuirs_minimal"
|
||||
required-features = ["tuirs-crossterm"]
|
||||
|
||||
[[example]]
|
||||
name = "tuirs_editor"
|
||||
required-features = ["tuirs-crossterm", "search"]
|
||||
|
||||
[[example]]
|
||||
name = "tuirs_popup_placeholder"
|
||||
required-features = ["tuirs-crossterm"]
|
||||
|
||||
[[example]]
|
||||
name = "tuirs_termion"
|
||||
required-features = ["tuirs-termion"]
|
||||
|
||||
[workspace]
|
||||
members = [
|
||||
|
||||
119
README.md
119
README.md
@@ -4,7 +4,7 @@ tui-textarea
|
||||
[![docs][doc-badge]][doc]
|
||||
[![CI][ci-badge]][ci]
|
||||
|
||||
[tui-textarea][crate] is a simple yet powerful text editor widget like `<textarea>` in HTML for [tui-rs][] and [ratatui][].
|
||||
[tui-textarea][crate] is a simple yet powerful text editor widget like `<textarea>` in HTML for [ratatui][] and [tui-rs][].
|
||||
Multi-line text editor can be easily put as part of your TUI application.
|
||||
|
||||
**Features:**
|
||||
@@ -19,7 +19,7 @@ Multi-line text editor can be easily put as part of your TUI application.
|
||||
- Yank support. Paste text deleted with `C-k`, `C-j`, ...
|
||||
- Backend agnostic. [crossterm][], [termion][], [termwiz][], and your own backend are all supported
|
||||
- Multiple textarea widgets in the same screen
|
||||
- Support both [tui-rs][] (the original) and [ratatui][] (the fork by community)
|
||||
- Support both [ratatui][] (the fork by community) and [tui-rs][] (the original)
|
||||
|
||||
[Documentation][doc]
|
||||
|
||||
@@ -67,14 +67,6 @@ Two split textareas in a screen and switch them. An example for multiple textare
|
||||
|
||||
<img src="https://raw.githubusercontent.com/rhysd/ss/master/tui-textarea/split.gif" width=539 height=124 alt="multiple textareas example">
|
||||
|
||||
### [`termion`](./examples/termion.rs)
|
||||
|
||||
```sh
|
||||
cargo run --example termion --features=termion
|
||||
```
|
||||
|
||||
Minimal usage with [termion][] support.
|
||||
|
||||
### [`variable`](./examples/variable.rs)
|
||||
|
||||
```sh
|
||||
@@ -111,40 +103,48 @@ Password input form with masking text with ●.
|
||||
|
||||
<img src="https://raw.githubusercontent.com/rhysd/ss/master/tui-textarea/password.gif" width=589 height=92 alt="password example">
|
||||
|
||||
### Examples for [ratatui][] support
|
||||
|
||||
All above examples use [tui-rs][], but some examples provide [ratatui][] version. Try `ratatui_` prefix. In these cases,
|
||||
you need to specify features to use ratatui and `--no-default-features` flag explicitly.
|
||||
### [`termion`](./examples/termion.rs)
|
||||
|
||||
```sh
|
||||
# ratatui version of `minimal` example
|
||||
cargo run --example ratatui_minimal --no-default-features --features=ratatui-crossterm
|
||||
|
||||
# ratatui version of `editor` example
|
||||
cargo run --example ratatui_editor --no-default-features --features=ratatui-crossterm,search file.txt
|
||||
|
||||
# ratatui version of `termion` example
|
||||
cargo run --example ratatui_termion --no-default-features --features=ratatui-termion
|
||||
|
||||
# ratatui version of `popup_placeholder` example
|
||||
cargo run --example ratatui_popup_placeholder --no-default-features --features=ratatui-crossterm
|
||||
cargo run --example termion --no-default-features --features=termion
|
||||
```
|
||||
|
||||
Minimal usage with [termion][] support.
|
||||
|
||||
### [`termwiz`](./examples/termwiz.rs)
|
||||
|
||||
```sh
|
||||
cargo run --example termwiz --no-default-features --features=ratatui-termwiz
|
||||
cargo run --example termwiz --no-default-features --features=termwiz
|
||||
```
|
||||
|
||||
Minimal usage with [termwiz][] support.
|
||||
|
||||
### Examples for [tui-rs][] support
|
||||
|
||||
All above examples use [ratatui][], but some examples provide tui-rs version. Try `tuirs_` prefix. In these cases, you
|
||||
need to specify features to use tui-rs and `--no-default-features` flag explicitly.
|
||||
|
||||
```sh
|
||||
# tui-rs version of `minimal` example
|
||||
cargo run --example tuirs_minimal --no-default-features --features=tuirs-crossterm
|
||||
|
||||
# tui-rs version of `editor` example
|
||||
cargo run --example tuirs_editor --no-default-features --features=tuirs-crossterm,search file.txt
|
||||
|
||||
# tui-rs version of `termion` example
|
||||
cargo run --example tuirs_termion --no-default-features --features=tuirs-termion
|
||||
|
||||
# tui-rs version of `popup_placeholder` example
|
||||
cargo run --example tuirs_popup_placeholder --no-default-features --features=tuirs-crossterm
|
||||
```
|
||||
|
||||
## Installation
|
||||
|
||||
Add `tui-textarea` crate to dependencies in your `Cargo.toml`. This enables crossterm backend support by default.
|
||||
|
||||
```toml
|
||||
[dependencies]
|
||||
tui = "*"
|
||||
ratatui = "*"
|
||||
tui-textarea = "*"
|
||||
```
|
||||
|
||||
@@ -153,40 +153,46 @@ dependency.
|
||||
|
||||
```toml
|
||||
[dependencies]
|
||||
tui = "*"
|
||||
ratatui = "*"
|
||||
tui-textarea = { version = "*", features = ["search"] }
|
||||
```
|
||||
|
||||
If you're using tui-rs with [termion][], enable `termion` feature instead of `crossterm` feature.
|
||||
If you're using ratatui with [termion][] or [termwiz][], enable respective feature instead of `crossterm` feature.
|
||||
|
||||
```toml
|
||||
[dependencies]
|
||||
tui = { version = "*", default-features = false, features = ["termion"] }
|
||||
|
||||
# For termion
|
||||
ratatui = { version = "*", default-features = false, features = ["termion"] }
|
||||
tui-textarea = { version = "*", default-features = false, features = ["termion"] }
|
||||
|
||||
# For termwiz
|
||||
ratatui = { version = "*", default-features = false, features = ["termwiz"] }
|
||||
tui-textarea = { version = "*", default-features = false, features = ["termwiz"] }
|
||||
```
|
||||
|
||||
If you're using [ratatui][] instead of [tui-rs][], you need to enable features for using ratatui crate. The following table
|
||||
shows feature names corresponding to the dependencies.
|
||||
If you're using [tui-rs][] instead of [ratatui][], you need to enable features for using tui-rs crate and to disable
|
||||
default features. The following table shows feature names corresponding to the dependencies.
|
||||
|
||||
| | crossterm | termion | termwiz | Your own backend |
|
||||
|---------|----------------------------------|-------------------|-------------------|------------------------|
|
||||
| tui-rs | `crossterm` (enabled by default) | `termion` | N/A | `your-backend` |
|
||||
| ratatui | `ratatui-crossterm` | `ratatui-termion` | `ratatui-termwiz` | `ratatui-your-backend` |
|
||||
| | crossterm | termion | termwiz | Your own backend |
|
||||
|---------|----------------------------------|-----------------|-----------|----------------------|
|
||||
| ratatui | `crossterm` (enabled by default) | `termion` | `termwiz` | `your-backend` |
|
||||
| tui-rs | `tuirs-crossterm` | `tuirs-termion` | N/A | `tuirs-your-backend` |
|
||||
|
||||
For example, when you want to use the combination of [ratatui][] and [crossterm][],
|
||||
For example, when you want to use the combination of [tui-rs][] and [crossterm][],
|
||||
|
||||
```toml
|
||||
[dependencies]
|
||||
ratatui = "*"
|
||||
tui-textarea = { version = "*", features = ["ratatui-crossterm"], default-features = false }
|
||||
tui = "*"
|
||||
tui-textarea = { version = "*", features = ["tuirs-crossterm"], default-features = false }
|
||||
```
|
||||
|
||||
Note that [tui-rs][] support and [ratatui][] support are exclusive. When you use [ratatui][] support, you must disable
|
||||
[tui-rs][] support by `default-features = false`.
|
||||
Note that [ratatui][] support and [tui-rs][] support are exclusive. When you use [tui-rs][] support, you must disable
|
||||
[ratatui][] support by `default-features = false`.
|
||||
|
||||
In addition to above dependencies, you also need to install [crossterm][] or [termion][] or [termwiz][] to initialize
|
||||
your application and to receive key inputs. Note that version of [crossterm][] crate is different between [tui-rs][]
|
||||
and [ratatui][]. Please select the correct version.
|
||||
your application and to receive key inputs. Note that version of [crossterm][] crate is different between [ratatui][]
|
||||
and [tui-rs][]. Please select the correct version.
|
||||
|
||||
## Minimal Usage
|
||||
|
||||
@@ -194,7 +200,7 @@ and [ratatui][]. Please select the correct version.
|
||||
use tui_textarea::TextArea;
|
||||
use crossterm::event::{Event, read};
|
||||
|
||||
let mut term = tui::Terminal::new(...);
|
||||
let mut term = ratatui::Terminal::new(...);
|
||||
|
||||
// Create an empty `TextArea` instance which manages the editor state
|
||||
let mut textarea = TextArea::default();
|
||||
@@ -202,7 +208,7 @@ let mut textarea = TextArea::default();
|
||||
// Event loop
|
||||
loop {
|
||||
term.draw(|f| {
|
||||
// Get `tui::layout::Rect` where the editor should be rendered
|
||||
// Get `ratatui::layout::Rect` where the editor should be rendered
|
||||
let rect = ...;
|
||||
// `TextArea::widget` builds a widget to render the editor with tui
|
||||
let widget = textarea.widget();
|
||||
@@ -338,7 +344,7 @@ By default, `TextArea` does now show line numbers. To enable, set a style for re
|
||||
color.
|
||||
|
||||
```rust,ignore
|
||||
use tui::style::{Style, Color};
|
||||
use ratatui::style::{Style, Color};
|
||||
|
||||
let style = Style::default().bg(Color::DarkGray);
|
||||
textarea.set_line_number_style(style);
|
||||
@@ -351,7 +357,7 @@ is. To change the style of cursor line, use `TextArea::set_cursor_line_style()`.
|
||||
cursor line with bold text.
|
||||
|
||||
```rust,ignore
|
||||
use tui::style::{Style, Modifier};
|
||||
use ratatui::style::{Style, Modifier};
|
||||
|
||||
let style = Style::default().add_modifier(Modifier::BOLD);
|
||||
textarea.set_line_number_style(style);
|
||||
@@ -360,7 +366,7 @@ textarea.set_line_number_style(style);
|
||||
To disable cursor line style, set the default style as follows:
|
||||
|
||||
```rust,ignore
|
||||
use tui::style::{Style, Modifier};
|
||||
use ratatui::style::{Style, Modifier};
|
||||
|
||||
textarea.set_line_number_style(Style::default());
|
||||
```
|
||||
@@ -559,17 +565,16 @@ match read()?.into() {
|
||||
|
||||
### Use your own backend
|
||||
|
||||
tui-rs allows to make your own backend by implementing [`tui::backend::Backend`][tui-backend] trait. tui-textarea also
|
||||
supports it. In this case, please use `your-backend` feature for [tui-rs][] or `ratatui-your-backend` feature for
|
||||
[ratatui][]. They avoid adding backend crates (crossterm, termion, and termwiz) since you're using your own backend.
|
||||
ratatui and tui-rs allows to make your own backend by implementing [`ratatui::backend::Backend`][ratatui-backend] trait.
|
||||
tui-textarea supports it as well. Please use `your-backend` feature for [ratatui][] or `tuirs-your-backend` feature for
|
||||
[tui-rs][]. They avoid adding backend crates (crossterm, termion, or termwiz) since you're using your own backend.
|
||||
|
||||
```toml
|
||||
[dependencies]
|
||||
tui = { version = "*", default-features = false }
|
||||
# For tui-rs
|
||||
tui-textarea = { version = "*", default-features = false, features = ["your-backend"] }
|
||||
# For ratatui
|
||||
tui-textarea = { version = "*", default-features = false, features = ["ratatui-your-backend"] }
|
||||
tui-textarea = { version = "*", default-features = false, features = ["your-backend"] }
|
||||
# For tui-rs
|
||||
tui-textarea = { version = "*", default-features = false, features = ["tuirs-your-backend"] }
|
||||
```
|
||||
|
||||
`tui_textarea::Input` is a type for backend-agnostic key input. What you need to do is converting key event in your own
|
||||
@@ -691,7 +696,7 @@ This project is developed [on GitHub][repo].
|
||||
For feature requests or bug reports, please [create an issue][new-issue]. For submitting patches, please [create a pull
|
||||
request][pulls].
|
||||
|
||||
Please see [CONTRIBUTING.md](./CONTRIBUTING.md) before reporting an issue or making a PR.
|
||||
Please read [CONTRIBUTING.md](./CONTRIBUTING.md) before reporting an issue or making a PR.
|
||||
|
||||
## License
|
||||
|
||||
@@ -708,7 +713,7 @@ tui-textarea is distributed under [The MIT License](./LICENSE.txt).
|
||||
[crossterm]: https://docs.rs/crossterm/latest/crossterm/
|
||||
[termion]: https://docs.rs/termion/latest/termion/
|
||||
[termwiz]: https://docs.rs/termwiz/latest/termwiz/
|
||||
[tui-backend]: https://docs.rs/tui/latest/tui/backend/trait.Backend.html
|
||||
[ratatui-backend]: https://docs.rs/ratatui/latest/ratatui/backend/trait.Backend.html
|
||||
[repo]: https://github.com/rhysd/tui-textarea
|
||||
[new-issue]: https://github.com/rhysd/tui-textarea/issues/new
|
||||
[pulls]: https://github.com/rhysd/tui-textarea/pulls
|
||||
|
||||
@@ -9,8 +9,8 @@ license = "MIT"
|
||||
bench = false
|
||||
|
||||
[dependencies]
|
||||
tui-textarea = { path = "..", features = ["search"] }
|
||||
tui = { version = "0.19", default-features = false }
|
||||
tui-textarea = { path = "..", features = ["your-backend", "search"] }
|
||||
ratatui = { version = "0.23.0", default-features = false }
|
||||
|
||||
[dev-dependencies]
|
||||
criterion = "0.5"
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
// We use empty backend for our benchmark instead of tui::backend::TestBackend to make impact of benchmark from tui-rs
|
||||
// as small as possible.
|
||||
|
||||
use ratatui::backend::Backend;
|
||||
use ratatui::buffer::Cell;
|
||||
use ratatui::layout::Rect;
|
||||
use ratatui::Terminal;
|
||||
use std::io;
|
||||
use tui::backend::Backend;
|
||||
use tui::buffer::Cell;
|
||||
use tui::layout::Rect;
|
||||
use tui::Terminal;
|
||||
use tui_textarea::TextArea;
|
||||
|
||||
pub const LOREM: &[&str] = &[
|
||||
|
||||
@@ -3,6 +3,12 @@ use crossterm::terminal::{
|
||||
disable_raw_mode, enable_raw_mode, is_raw_mode_enabled, EnterAlternateScreen,
|
||||
LeaveAlternateScreen,
|
||||
};
|
||||
use ratatui::backend::CrosstermBackend;
|
||||
use ratatui::layout::{Constraint, Direction, Layout};
|
||||
use ratatui::style::{Color, Modifier, Style};
|
||||
use ratatui::text::{Line, Span};
|
||||
use ratatui::widgets::{Block, Borders, Paragraph};
|
||||
use ratatui::Terminal;
|
||||
use std::borrow::Cow;
|
||||
use std::env;
|
||||
use std::fmt::Display;
|
||||
@@ -10,12 +16,6 @@ use std::fs;
|
||||
use std::io;
|
||||
use std::io::{BufRead, Write};
|
||||
use std::path::PathBuf;
|
||||
use tui::backend::CrosstermBackend;
|
||||
use tui::layout::{Constraint, Direction, Layout};
|
||||
use tui::style::{Color, Modifier, Style};
|
||||
use tui::text::{Span, Spans};
|
||||
use tui::widgets::{Block, Borders, Paragraph};
|
||||
use tui::Terminal;
|
||||
use tui_textarea::{CursorMove, Input, Key, TextArea};
|
||||
|
||||
macro_rules! error {
|
||||
@@ -223,9 +223,9 @@ impl<'a> Editor<'a> {
|
||||
|
||||
// Render message at bottom
|
||||
let message = if let Some(message) = self.message.take() {
|
||||
Spans::from(Span::raw(message))
|
||||
Line::from(Span::raw(message))
|
||||
} else if search_height > 0 {
|
||||
Spans::from(vec![
|
||||
Line::from(vec![
|
||||
Span::raw("Press "),
|
||||
Span::styled("Enter", Style::default().add_modifier(Modifier::BOLD)),
|
||||
Span::raw(" to jump to first match and close, "),
|
||||
@@ -243,7 +243,7 @@ impl<'a> Editor<'a> {
|
||||
Span::raw(" to search previous"),
|
||||
])
|
||||
} else {
|
||||
Spans::from(vec![
|
||||
Line::from(vec![
|
||||
Span::raw("Press "),
|
||||
Span::styled("^Q", Style::default().add_modifier(Modifier::BOLD)),
|
||||
Span::raw(" to quit, "),
|
||||
|
||||
@@ -2,10 +2,10 @@ use crossterm::event::{DisableMouseCapture, EnableMouseCapture};
|
||||
use crossterm::terminal::{
|
||||
disable_raw_mode, enable_raw_mode, EnterAlternateScreen, LeaveAlternateScreen,
|
||||
};
|
||||
use ratatui::backend::CrosstermBackend;
|
||||
use ratatui::widgets::{Block, Borders};
|
||||
use ratatui::Terminal;
|
||||
use std::io;
|
||||
use tui::backend::CrosstermBackend;
|
||||
use tui::widgets::{Block, Borders};
|
||||
use tui::Terminal;
|
||||
use tui_textarea::{Input, Key, TextArea};
|
||||
|
||||
fn main() -> io::Result<()> {
|
||||
|
||||
@@ -2,15 +2,15 @@ use crossterm::event::{DisableMouseCapture, EnableMouseCapture};
|
||||
use crossterm::terminal::{
|
||||
disable_raw_mode, enable_raw_mode, EnterAlternateScreen, LeaveAlternateScreen,
|
||||
};
|
||||
use ratatui::backend::CrosstermBackend;
|
||||
use ratatui::style::{Color, Modifier, Style};
|
||||
use ratatui::widgets::{Block, Borders};
|
||||
use ratatui::Terminal;
|
||||
use std::env;
|
||||
use std::fmt;
|
||||
use std::fs;
|
||||
use std::io;
|
||||
use std::io::BufRead;
|
||||
use tui::backend::CrosstermBackend;
|
||||
use tui::style::{Color, Modifier, Style};
|
||||
use tui::widgets::{Block, Borders};
|
||||
use tui::Terminal;
|
||||
use tui_textarea::{CursorMove, Input, Key, Scrolling, TextArea};
|
||||
|
||||
enum Mode {
|
||||
|
||||
@@ -2,12 +2,12 @@ use crossterm::event::{DisableMouseCapture, EnableMouseCapture};
|
||||
use crossterm::terminal::{
|
||||
disable_raw_mode, enable_raw_mode, EnterAlternateScreen, LeaveAlternateScreen,
|
||||
};
|
||||
use ratatui::backend::CrosstermBackend;
|
||||
use ratatui::layout::{Constraint, Layout};
|
||||
use ratatui::style::{Color, Style};
|
||||
use ratatui::widgets::{Block, Borders};
|
||||
use ratatui::Terminal;
|
||||
use std::io;
|
||||
use tui::backend::CrosstermBackend;
|
||||
use tui::layout::{Constraint, Layout};
|
||||
use tui::style::{Color, Style};
|
||||
use tui::widgets::{Block, Borders};
|
||||
use tui::Terminal;
|
||||
use tui_textarea::{Input, Key, TextArea};
|
||||
|
||||
fn main() -> io::Result<()> {
|
||||
|
||||
@@ -2,12 +2,12 @@ use crossterm::event::{DisableMouseCapture, EnableMouseCapture};
|
||||
use crossterm::terminal::{
|
||||
disable_raw_mode, enable_raw_mode, EnterAlternateScreen, LeaveAlternateScreen,
|
||||
};
|
||||
use ratatui::backend::CrosstermBackend;
|
||||
use ratatui::layout::Rect;
|
||||
use ratatui::style::{Color, Style};
|
||||
use ratatui::widgets::{Block, Borders};
|
||||
use ratatui::Terminal;
|
||||
use std::io;
|
||||
use tui::backend::CrosstermBackend;
|
||||
use tui::layout::Rect;
|
||||
use tui::style::{Color, Style};
|
||||
use tui::widgets::{Block, Borders};
|
||||
use tui::Terminal;
|
||||
use tui_textarea::{Input, Key, TextArea};
|
||||
|
||||
fn main() -> io::Result<()> {
|
||||
@@ -34,9 +34,6 @@ fn main() -> io::Result<()> {
|
||||
y: 5,
|
||||
};
|
||||
textarea.set_style(Style::default().fg(Color::Yellow));
|
||||
|
||||
// set placeholder
|
||||
|
||||
textarea.set_placeholder_style(Style::default());
|
||||
textarea.set_placeholder_text("prompt message");
|
||||
loop {
|
||||
|
||||
@@ -2,12 +2,12 @@ use crossterm::event::{DisableMouseCapture, EnableMouseCapture};
|
||||
use crossterm::terminal::{
|
||||
disable_raw_mode, enable_raw_mode, EnterAlternateScreen, LeaveAlternateScreen,
|
||||
};
|
||||
use ratatui::backend::CrosstermBackend;
|
||||
use ratatui::layout::{Constraint, Layout};
|
||||
use ratatui::style::{Color, Style};
|
||||
use ratatui::widgets::{Block, Borders};
|
||||
use ratatui::Terminal;
|
||||
use std::io;
|
||||
use tui::backend::CrosstermBackend;
|
||||
use tui::layout::{Constraint, Layout};
|
||||
use tui::style::{Color, Style};
|
||||
use tui::widgets::{Block, Borders};
|
||||
use tui::Terminal;
|
||||
use tui_textarea::{Input, Key, TextArea};
|
||||
|
||||
fn validate(textarea: &mut TextArea) -> bool {
|
||||
|
||||
@@ -2,12 +2,12 @@ use crossterm::event::{DisableMouseCapture, EnableMouseCapture};
|
||||
use crossterm::terminal::{
|
||||
disable_raw_mode, enable_raw_mode, EnterAlternateScreen, LeaveAlternateScreen,
|
||||
};
|
||||
use ratatui::backend::CrosstermBackend;
|
||||
use ratatui::layout::{Constraint, Direction, Layout};
|
||||
use ratatui::style::{Color, Modifier, Style};
|
||||
use ratatui::widgets::{Block, Borders};
|
||||
use ratatui::Terminal;
|
||||
use std::io;
|
||||
use tui::backend::CrosstermBackend;
|
||||
use tui::layout::{Constraint, Direction, Layout};
|
||||
use tui::style::{Color, Modifier, Style};
|
||||
use tui::widgets::{Block, Borders};
|
||||
use tui::Terminal;
|
||||
use tui_textarea::{Input, Key, TextArea};
|
||||
|
||||
fn inactivate(textarea: &mut TextArea<'_>) {
|
||||
@@ -54,9 +54,9 @@ fn main() -> io::Result<()> {
|
||||
loop {
|
||||
term.draw(|f| {
|
||||
let chunks = layout.split(f.size());
|
||||
for (textarea, chunk) in textarea.iter().zip(chunks) {
|
||||
for (textarea, chunk) in textarea.iter().zip(chunks.iter()) {
|
||||
let widget = textarea.widget();
|
||||
f.render_widget(widget, chunk);
|
||||
f.render_widget(widget, *chunk);
|
||||
}
|
||||
})?;
|
||||
match crossterm::event::read()?.into() {
|
||||
|
||||
@@ -1,3 +1,6 @@
|
||||
use ratatui::backend::TermionBackend;
|
||||
use ratatui::widgets::{Block, Borders};
|
||||
use ratatui::Terminal;
|
||||
use std::error::Error;
|
||||
use std::io;
|
||||
use std::sync::mpsc;
|
||||
@@ -7,9 +10,6 @@ use termion::event::Event as TermEvent;
|
||||
use termion::input::{MouseTerminal, TermRead};
|
||||
use termion::raw::IntoRawMode;
|
||||
use termion::screen::IntoAlternateScreen;
|
||||
use tui::backend::TermionBackend;
|
||||
use tui::widgets::{Block, Borders};
|
||||
use tui::Terminal;
|
||||
use tui_textarea::{Input, Key, TextArea};
|
||||
|
||||
enum Event {
|
||||
|
||||
@@ -1,16 +1,10 @@
|
||||
use crossterm_027 as crossterm;
|
||||
use crossterm_025 as crossterm;
|
||||
|
||||
use crossterm::event::{DisableMouseCapture, EnableMouseCapture};
|
||||
use crossterm::terminal::{
|
||||
disable_raw_mode, enable_raw_mode, is_raw_mode_enabled, EnterAlternateScreen,
|
||||
LeaveAlternateScreen,
|
||||
};
|
||||
use ratatui::backend::CrosstermBackend;
|
||||
use ratatui::layout::{Constraint, Direction, Layout};
|
||||
use ratatui::style::{Color, Modifier, Style};
|
||||
use ratatui::text::{Line, Span};
|
||||
use ratatui::widgets::{Block, Borders, Paragraph};
|
||||
use ratatui::Terminal;
|
||||
use std::borrow::Cow;
|
||||
use std::env;
|
||||
use std::fmt::Display;
|
||||
@@ -18,6 +12,12 @@ use std::fs;
|
||||
use std::io;
|
||||
use std::io::{BufRead, Write};
|
||||
use std::path::PathBuf;
|
||||
use tui::backend::CrosstermBackend;
|
||||
use tui::layout::{Constraint, Direction, Layout};
|
||||
use tui::style::{Color, Modifier, Style};
|
||||
use tui::text::{Span, Spans};
|
||||
use tui::widgets::{Block, Borders, Paragraph};
|
||||
use tui::Terminal;
|
||||
use tui_textarea::{CursorMove, Input, Key, TextArea};
|
||||
|
||||
macro_rules! error {
|
||||
@@ -225,9 +225,9 @@ impl<'a> Editor<'a> {
|
||||
|
||||
// Render message at bottom
|
||||
let message = if let Some(message) = self.message.take() {
|
||||
Line::from(Span::raw(message))
|
||||
Spans::from(Span::raw(message))
|
||||
} else if search_height > 0 {
|
||||
Line::from(vec![
|
||||
Spans::from(vec![
|
||||
Span::raw("Press "),
|
||||
Span::styled("Enter", Style::default().add_modifier(Modifier::BOLD)),
|
||||
Span::raw(" to jump to first match and close, "),
|
||||
@@ -245,7 +245,7 @@ impl<'a> Editor<'a> {
|
||||
Span::raw(" to search previous"),
|
||||
])
|
||||
} else {
|
||||
Line::from(vec![
|
||||
Spans::from(vec![
|
||||
Span::raw("Press "),
|
||||
Span::styled("^Q", Style::default().add_modifier(Modifier::BOLD)),
|
||||
Span::raw(" to quit, "),
|
||||
@@ -1,13 +1,13 @@
|
||||
use crossterm_027 as crossterm;
|
||||
use crossterm_025 as crossterm;
|
||||
|
||||
use crossterm::event::{DisableMouseCapture, EnableMouseCapture};
|
||||
use crossterm::terminal::{
|
||||
disable_raw_mode, enable_raw_mode, EnterAlternateScreen, LeaveAlternateScreen,
|
||||
};
|
||||
use ratatui::backend::CrosstermBackend;
|
||||
use ratatui::widgets::{Block, Borders};
|
||||
use ratatui::Terminal;
|
||||
use std::io;
|
||||
use tui::backend::CrosstermBackend;
|
||||
use tui::widgets::{Block, Borders};
|
||||
use tui::Terminal;
|
||||
use tui_textarea::{Input, Key, TextArea};
|
||||
|
||||
fn main() -> io::Result<()> {
|
||||
@@ -1,14 +1,15 @@
|
||||
use crossterm_025 as crossterm;
|
||||
|
||||
use crossterm::event::{DisableMouseCapture, EnableMouseCapture};
|
||||
use crossterm::terminal::{
|
||||
disable_raw_mode, enable_raw_mode, EnterAlternateScreen, LeaveAlternateScreen,
|
||||
};
|
||||
use crossterm_027 as crossterm;
|
||||
use ratatui::backend::CrosstermBackend;
|
||||
use ratatui::layout::Rect;
|
||||
use ratatui::style::{Color, Style};
|
||||
use ratatui::widgets::{Block, Borders};
|
||||
use ratatui::Terminal;
|
||||
use std::io;
|
||||
use tui::backend::CrosstermBackend;
|
||||
use tui::layout::Rect;
|
||||
use tui::style::{Color, Style};
|
||||
use tui::widgets::{Block, Borders};
|
||||
use tui::Terminal;
|
||||
use tui_textarea::{Input, Key, TextArea};
|
||||
|
||||
fn main() -> io::Result<()> {
|
||||
@@ -35,6 +36,9 @@ fn main() -> io::Result<()> {
|
||||
y: 5,
|
||||
};
|
||||
textarea.set_style(Style::default().fg(Color::Yellow));
|
||||
|
||||
// set placeholder
|
||||
|
||||
textarea.set_placeholder_style(Style::default());
|
||||
textarea.set_placeholder_text("prompt message");
|
||||
loop {
|
||||
@@ -1,6 +1,3 @@
|
||||
use ratatui::backend::TermionBackend;
|
||||
use ratatui::widgets::{Block, Borders};
|
||||
use ratatui::Terminal;
|
||||
use std::error::Error;
|
||||
use std::io;
|
||||
use std::sync::mpsc;
|
||||
@@ -10,6 +7,9 @@ use termion::event::Event as TermEvent;
|
||||
use termion::input::{MouseTerminal, TermRead};
|
||||
use termion::raw::IntoRawMode;
|
||||
use termion::screen::IntoAlternateScreen;
|
||||
use tui::backend::TermionBackend;
|
||||
use tui::widgets::{Block, Borders};
|
||||
use tui::Terminal;
|
||||
use tui_textarea::{Input, Key, TextArea};
|
||||
|
||||
enum Event {
|
||||
@@ -2,12 +2,12 @@ use crossterm::event::{DisableMouseCapture, EnableMouseCapture};
|
||||
use crossterm::terminal::{
|
||||
disable_raw_mode, enable_raw_mode, EnterAlternateScreen, LeaveAlternateScreen,
|
||||
};
|
||||
use ratatui::backend::CrosstermBackend;
|
||||
use ratatui::layout::{Constraint, Direction, Layout};
|
||||
use ratatui::widgets::{Block, Borders};
|
||||
use ratatui::Terminal;
|
||||
use std::cmp;
|
||||
use std::io;
|
||||
use tui::backend::CrosstermBackend;
|
||||
use tui::layout::{Constraint, Direction, Layout};
|
||||
use tui::widgets::{Block, Borders};
|
||||
use tui::Terminal;
|
||||
use tui_textarea::{Input, Key, TextArea};
|
||||
|
||||
fn main() -> io::Result<()> {
|
||||
|
||||
141
fuzz/Cargo.lock
сгенерированный
141
fuzz/Cargo.lock
сгенерированный
@@ -32,6 +32,12 @@ version = "1.3.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
|
||||
|
||||
[[package]]
|
||||
name = "bitflags"
|
||||
version = "2.4.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "327762f6e5a765692301e5bb513e0d9fef63be86bbc14528052b1cd3e6f03e07"
|
||||
|
||||
[[package]]
|
||||
name = "cassowary"
|
||||
version = "0.3.0"
|
||||
@@ -52,11 +58,11 @@ checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
|
||||
|
||||
[[package]]
|
||||
name = "crossterm"
|
||||
version = "0.23.2"
|
||||
version = "0.27.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "a2102ea4f781910f8a5b98dd061f4c2023f479ce7bb1236330099ceb5a93cf17"
|
||||
checksum = "f476fe445d41c9e991fd07515a6f463074b782242ccf4a5b7b1d1012e70824df"
|
||||
dependencies = [
|
||||
"bitflags",
|
||||
"bitflags 2.4.1",
|
||||
"crossterm_winapi",
|
||||
"libc",
|
||||
"mio",
|
||||
@@ -68,9 +74,9 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "crossterm_winapi"
|
||||
version = "0.9.0"
|
||||
version = "0.9.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "2ae1b35a484aa10e07fe0638d02301c5ad24de82d310ccbd2f3693da5f09bf1c"
|
||||
checksum = "acdd7c62a3665c7f6830a51635d9ac9b23ed385797f70a83bb8bafe9c572ab2b"
|
||||
dependencies = [
|
||||
"winapi",
|
||||
]
|
||||
@@ -83,7 +89,34 @@ checksum = "8728db27dd9033a7456655aaeb35fde74425d0f130b4cb18a19171ef38a1b454"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"syn",
|
||||
"syn 1.0.96",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "either"
|
||||
version = "1.9.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "a26ae43d7bcc3b814de94796a5e736d4029efb0ee900c12e2d54c993ad1a1e07"
|
||||
|
||||
[[package]]
|
||||
name = "heck"
|
||||
version = "0.4.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8"
|
||||
|
||||
[[package]]
|
||||
name = "indoc"
|
||||
version = "2.0.4"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "1e186cfbae8084e513daff4240b4797e342f988cecda4fb6c939150f96315fd8"
|
||||
|
||||
[[package]]
|
||||
name = "itertools"
|
||||
version = "0.11.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "b1c173a5686ce8bfa551b3563d0c2170bf24ca44da99c7ca4bfdab5418c3fe57"
|
||||
dependencies = [
|
||||
"either",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
@@ -170,30 +203,53 @@ dependencies = [
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "proc-macro2"
|
||||
version = "1.0.39"
|
||||
name = "paste"
|
||||
version = "1.0.14"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "c54b25569025b7fc9651de43004ae593a75ad88543b17178aa5e1b9c4f15f56f"
|
||||
checksum = "de3145af08024dea9fa9914f381a17b8fc6034dfb00f3a84013f7ff43f29ed4c"
|
||||
|
||||
[[package]]
|
||||
name = "proc-macro2"
|
||||
version = "1.0.69"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "134c189feb4956b20f6f547d2cf727d4c0fe06722b20a0eec87ed445a97f92da"
|
||||
dependencies = [
|
||||
"unicode-ident",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "quote"
|
||||
version = "1.0.18"
|
||||
version = "1.0.33"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "a1feb54ed693b93a84e14094943b84b7c4eae204c512b7ccb95ab0c66d278ad1"
|
||||
checksum = "5267fca4496028628a95160fc423a33e8b2e6af8a5302579e322e4b520293cae"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "ratatui"
|
||||
version = "0.23.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "2e2e4cd95294a85c3b4446e63ef054eea43e0205b1fd60120c16b74ff7ff96ad"
|
||||
dependencies = [
|
||||
"bitflags 2.4.1",
|
||||
"cassowary",
|
||||
"crossterm",
|
||||
"indoc",
|
||||
"itertools",
|
||||
"paste",
|
||||
"strum",
|
||||
"unicode-segmentation",
|
||||
"unicode-width",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "redox_syscall"
|
||||
version = "0.2.13"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "62f25bc4c7e55e0b0b7a1d43fb893f4fa1361d0abe38b9ce4f323c2adfe6ef42"
|
||||
dependencies = [
|
||||
"bitflags",
|
||||
"bitflags 1.3.2",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
@@ -213,6 +269,12 @@ version = "0.6.27"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "a3f87b73ce11b1619a3c6332f45341e0047173771e8b8b73f87bfeefb7b56244"
|
||||
|
||||
[[package]]
|
||||
name = "rustversion"
|
||||
version = "1.0.14"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "7ffc183a10b4478d04cbbbfc96d0873219d962dd5accaff2ffbd4ceb7df837f4"
|
||||
|
||||
[[package]]
|
||||
name = "scopeguard"
|
||||
version = "1.1.0"
|
||||
@@ -221,9 +283,9 @@ checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd"
|
||||
|
||||
[[package]]
|
||||
name = "signal-hook"
|
||||
version = "0.3.14"
|
||||
version = "0.3.17"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "a253b5e89e2698464fc26b545c9edceb338e18a89effeeecfea192c3025be29d"
|
||||
checksum = "8621587d4798caf8eb44879d42e56b9a93ea5dcd315a6487c357130095b62801"
|
||||
dependencies = [
|
||||
"libc",
|
||||
"signal-hook-registry",
|
||||
@@ -255,6 +317,28 @@ version = "1.9.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "2fd0db749597d91ff862fd1d55ea87f7855a744a8425a64695b6fca237d1dad1"
|
||||
|
||||
[[package]]
|
||||
name = "strum"
|
||||
version = "0.25.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "290d54ea6f91c969195bdbcd7442c8c2a2ba87da8bf60a7ee86a235d4bc1e125"
|
||||
dependencies = [
|
||||
"strum_macros",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "strum_macros"
|
||||
version = "0.25.3"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "23dc1fa9ac9c169a78ba62f0b841814b7abae11bdd047b9c58f893439e309ea0"
|
||||
dependencies = [
|
||||
"heck",
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"rustversion",
|
||||
"syn 2.0.38",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "syn"
|
||||
version = "1.0.96"
|
||||
@@ -267,33 +351,32 @@ dependencies = [
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "tui"
|
||||
version = "0.18.0"
|
||||
name = "syn"
|
||||
version = "2.0.38"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "96fe69244ec2af261bced1d9046a6fee6c8c2a6b0228e59e5ba39bc8ba4ed729"
|
||||
checksum = "e96b79aaa137db8f61e26363a0c9b47d8b4ec75da28b7d1d614c2303e232408b"
|
||||
dependencies = [
|
||||
"bitflags",
|
||||
"cassowary",
|
||||
"crossterm",
|
||||
"unicode-segmentation",
|
||||
"unicode-width",
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"unicode-ident",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "tui-textarea"
|
||||
version = "0.1.4"
|
||||
version = "0.2.4"
|
||||
dependencies = [
|
||||
"arbitrary",
|
||||
"crossterm",
|
||||
"ratatui",
|
||||
"regex",
|
||||
"tui",
|
||||
"unicode-width",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "tui-textarea-bench"
|
||||
version = "0.0.0"
|
||||
dependencies = [
|
||||
"tui",
|
||||
"ratatui",
|
||||
"tui-textarea",
|
||||
]
|
||||
|
||||
@@ -315,15 +398,15 @@ checksum = "5bd2fe26506023ed7b5e1e315add59d6f584c621d037f9368fea9cfb988f368c"
|
||||
|
||||
[[package]]
|
||||
name = "unicode-segmentation"
|
||||
version = "1.9.0"
|
||||
version = "1.10.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "7e8820f5d777f6224dc4be3632222971ac30164d4a258d595640799554ebfd99"
|
||||
checksum = "1dd624098567895118886609431a7c3b8f516e41d30e0643f03d94592a147e36"
|
||||
|
||||
[[package]]
|
||||
name = "unicode-width"
|
||||
version = "0.1.9"
|
||||
version = "0.1.11"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "3ed742d4ea2bd1176e236172c8429aaf54486e7ac098db29ffe6529e0ce50973"
|
||||
checksum = "e51733f11c9c4f72aa0c160008246859e340b00807569a0da0e7a1079b27ba85"
|
||||
|
||||
[[package]]
|
||||
name = "wasi"
|
||||
|
||||
@@ -199,9 +199,9 @@ pub enum CursorMove {
|
||||
///
|
||||
/// This is useful when you moved a cursor but you don't want to move the viewport.
|
||||
/// ```
|
||||
/// # use tui::buffer::Buffer;
|
||||
/// # use tui::layout::Rect;
|
||||
/// # use tui::widgets::Widget;
|
||||
/// # use ratatui::buffer::Buffer;
|
||||
/// # use ratatui::layout::Rect;
|
||||
/// # use ratatui::widgets::Widget;
|
||||
/// use tui_textarea::{TextArea, CursorMove};
|
||||
///
|
||||
/// // Let's say terminal height is 8.
|
||||
@@ -324,12 +324,12 @@ impl CursorMove {
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
// Seaparate tests for ratatui support
|
||||
// Seaparate tests for tui-rs support
|
||||
#[test]
|
||||
fn in_viewport() {
|
||||
use crate::tui::buffer::Buffer;
|
||||
use crate::tui::layout::Rect;
|
||||
use crate::tui::widgets::Widget;
|
||||
use crate::ratatui::buffer::Buffer;
|
||||
use crate::ratatui::layout::Rect;
|
||||
use crate::ratatui::widgets::Widget;
|
||||
use crate::{CursorMove, TextArea};
|
||||
|
||||
let mut textarea: TextArea = (0..20).map(|i| i.to_string()).collect();
|
||||
|
||||
@@ -1,19 +1,18 @@
|
||||
use crate::tui::style::Style;
|
||||
use crate::ratatui::style::Style;
|
||||
#[cfg(any(
|
||||
feature = "ratatui-crossterm",
|
||||
feature = "ratatui-termion",
|
||||
feature = "ratatui-termwiz",
|
||||
feature = "ratatui-your-backend",
|
||||
feature = "crossterm",
|
||||
feature = "termion",
|
||||
feature = "termwiz",
|
||||
feature = "your-backend",
|
||||
))]
|
||||
use crate::tui::text::Line as Spans;
|
||||
use crate::tui::text::Span;
|
||||
#[cfg(not(any(
|
||||
feature = "ratatui-crossterm",
|
||||
feature = "ratatui-termion",
|
||||
feature = "ratatui-termwiz",
|
||||
feature = "ratatui-your-backend",
|
||||
)))]
|
||||
use crate::tui::text::Spans;
|
||||
use crate::ratatui::text::Line;
|
||||
use crate::ratatui::text::Span;
|
||||
#[cfg(any(
|
||||
feature = "tuirs-crossterm",
|
||||
feature = "tuirs-termion",
|
||||
feature = "tuirs-your-backend",
|
||||
))]
|
||||
use crate::ratatui::text::Spans as Line;
|
||||
use crate::util::{num_digits, spaces};
|
||||
use std::borrow::Cow;
|
||||
use std::cmp::Ordering;
|
||||
@@ -138,7 +137,7 @@ impl<'a> LineHighlighter<'a> {
|
||||
}
|
||||
}
|
||||
|
||||
pub fn into_spans(self) -> Spans<'a> {
|
||||
pub fn into_spans(self) -> Line<'a> {
|
||||
let Self {
|
||||
line,
|
||||
mut spans,
|
||||
@@ -158,7 +157,7 @@ impl<'a> LineHighlighter<'a> {
|
||||
if cursor_at_end {
|
||||
spans.push(Span::styled(" ", cursor_style));
|
||||
}
|
||||
return Spans::from(spans);
|
||||
return Line::from(spans);
|
||||
}
|
||||
|
||||
boundaries.sort_unstable_by(|(l, i), (r, j)| match i.cmp(j) {
|
||||
@@ -197,7 +196,7 @@ impl<'a> LineHighlighter<'a> {
|
||||
if cursor_at_end {
|
||||
spans.push(Span::styled(" ", cursor_style));
|
||||
}
|
||||
return Spans::from(spans);
|
||||
return Line::from(spans);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
30
src/input.rs
30
src/input.rs
@@ -1,13 +1,13 @@
|
||||
#[cfg(any(feature = "crossterm", feature = "ratatui-crossterm"))]
|
||||
#[cfg(any(feature = "crossterm", feature = "tuirs-crossterm"))]
|
||||
use crate::crossterm::event::{
|
||||
Event as CrosstermEvent, KeyCode, KeyEvent, KeyEventKind, KeyModifiers, MouseEvent,
|
||||
MouseEventKind as CrosstermMouseEventKind,
|
||||
};
|
||||
#[cfg(feature = "arbitrary")]
|
||||
use arbitrary::Arbitrary;
|
||||
#[cfg(any(feature = "termion", feature = "ratatui-termion"))]
|
||||
#[cfg(any(feature = "termion", feature = "tuirs-termion"))]
|
||||
use termion::event::{Event as TermionEvent, Key as TermionKey, MouseEvent as TermionMouseEvent};
|
||||
#[cfg(feature = "ratatui-termwiz")]
|
||||
#[cfg(feature = "termwiz")]
|
||||
use termwiz::input::{
|
||||
InputEvent as TermwizInputEvent, KeyEvent as TermwizKeyEvent,
|
||||
MouseButtons as TermwizMouseButtons, MouseEvent as TermwizMouseEvent, PixelMouseEvent,
|
||||
@@ -47,7 +47,7 @@ pub enum Key {
|
||||
|
||||
/// Backend-agnostic key input type.
|
||||
///
|
||||
/// When `crossterm`, `termion`, `ratatui-termwiz` features are enabled, converting respective key input types into this
|
||||
/// When `crossterm`, `termion`, `termwiz` features are enabled, converting respective key input types into this
|
||||
/// `Input` type is defined.
|
||||
/// ```no_run
|
||||
/// use tui_textarea::{TextArea, Input, Key};
|
||||
@@ -101,7 +101,7 @@ impl Default for Input {
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(any(feature = "crossterm", feature = "ratatui-crossterm"))]
|
||||
#[cfg(any(feature = "crossterm", feature = "tuirs-crossterm"))]
|
||||
impl From<CrosstermEvent> for Input {
|
||||
/// Convert [`crossterm::event::Event`] to [`Input`].
|
||||
fn from(event: CrosstermEvent) -> Self {
|
||||
@@ -113,7 +113,7 @@ impl From<CrosstermEvent> for Input {
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(any(feature = "crossterm", feature = "ratatui-crossterm"))]
|
||||
#[cfg(any(feature = "crossterm", feature = "tuirs-crossterm"))]
|
||||
impl From<KeyEvent> for Input {
|
||||
/// Convert [`crossterm::event::KeyEvent`] to [`Input`].
|
||||
fn from(key: KeyEvent) -> Self {
|
||||
@@ -141,7 +141,7 @@ impl From<KeyEvent> for Input {
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(any(feature = "crossterm", feature = "ratatui-crossterm"))]
|
||||
#[cfg(any(feature = "crossterm", feature = "tuirs-crossterm"))]
|
||||
impl From<MouseEvent> for Input {
|
||||
/// Convert [`crossterm::event::MouseEvent`] to [`Input`].
|
||||
fn from(mouse: MouseEvent) -> Self {
|
||||
@@ -156,7 +156,7 @@ impl From<MouseEvent> for Input {
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(any(feature = "termion", feature = "ratatui-termion"))]
|
||||
#[cfg(any(feature = "termion", feature = "tuirs-termion"))]
|
||||
impl From<TermionEvent> for Input {
|
||||
/// Convert [`termion::event::Event`] to [`Input`].
|
||||
fn from(event: TermionEvent) -> Self {
|
||||
@@ -168,7 +168,7 @@ impl From<TermionEvent> for Input {
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(any(feature = "termion", feature = "ratatui-termion"))]
|
||||
#[cfg(any(feature = "termion", feature = "tuirs-termion"))]
|
||||
impl From<TermionKey> for Input {
|
||||
/// Convert [`termion::event::Key`] to [`Input`].
|
||||
fn from(key: TermionKey) -> Self {
|
||||
@@ -207,7 +207,7 @@ impl From<TermionKey> for Input {
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(any(feature = "termion", feature = "ratatui-termion"))]
|
||||
#[cfg(any(feature = "termion", feature = "tuirs-termion"))]
|
||||
impl From<TermionMouseEvent> for Input {
|
||||
/// Convert [`termion::event::MouseEvent`] to [`Input`].
|
||||
fn from(mouse: TermionMouseEvent) -> Self {
|
||||
@@ -225,7 +225,7 @@ impl From<TermionMouseEvent> for Input {
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(feature = "ratatui-termwiz")]
|
||||
#[cfg(feature = "termwiz")]
|
||||
impl From<TermwizInputEvent> for Input {
|
||||
/// Convert [`termwiz::input::InputEvent`] to [`Input`].
|
||||
fn from(input: TermwizInputEvent) -> Self {
|
||||
@@ -238,7 +238,7 @@ impl From<TermwizInputEvent> for Input {
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(feature = "ratatui-termwiz")]
|
||||
#[cfg(feature = "termwiz")]
|
||||
impl From<TermwizKeyEvent> for Input {
|
||||
/// Convert [`termwiz::input::KeyEvent`] to [`Input`].
|
||||
fn from(key: TermwizKeyEvent) -> Self {
|
||||
@@ -270,7 +270,7 @@ impl From<TermwizKeyEvent> for Input {
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(feature = "ratatui-termwiz")]
|
||||
#[cfg(feature = "termwiz")]
|
||||
impl From<TermwizMouseButtons> for Key {
|
||||
/// Convert [`termwiz::input::MouseButtons`] to [`Key`].
|
||||
fn from(buttons: TermwizMouseButtons) -> Self {
|
||||
@@ -286,7 +286,7 @@ impl From<TermwizMouseButtons> for Key {
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(feature = "ratatui-termwiz")]
|
||||
#[cfg(feature = "termwiz")]
|
||||
impl From<TermwizMouseEvent> for Input {
|
||||
/// Convert [`termwiz::input::MouseEvent`] to [`Input`].
|
||||
fn from(mouse: TermwizMouseEvent) -> Self {
|
||||
@@ -305,7 +305,7 @@ impl From<TermwizMouseEvent> for Input {
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(feature = "ratatui-termwiz")]
|
||||
#[cfg(feature = "termwiz")]
|
||||
impl From<PixelMouseEvent> for Input {
|
||||
/// Convert [`termwiz::input::PixelMouseEvent`] to [`Input`].
|
||||
fn from(mouse: PixelMouseEvent) -> Self {
|
||||
|
||||
43
src/lib.rs
43
src/lib.rs
@@ -5,15 +5,19 @@
|
||||
#![doc = include_str!("../README.md")]
|
||||
|
||||
#[cfg(all(
|
||||
any(feature = "crossterm", feature = "termion", feature = "your-backend"),
|
||||
any(
|
||||
feature = "ratatui-crossterm",
|
||||
feature = "ratatui-termion",
|
||||
feature = "ratatui-termwiz",
|
||||
feature = "ratatui-your-backend"
|
||||
feature = "crossterm",
|
||||
feature = "termion",
|
||||
feature = "termwiz",
|
||||
feature = "your-backend"
|
||||
),
|
||||
any(
|
||||
feature = "tuirs-crossterm",
|
||||
feature = "tuirs-termion",
|
||||
feature = "tuirs-your-backend"
|
||||
),
|
||||
))]
|
||||
compile_error!("tui-rs support and ratatui support are exclussive. only one of them can be enabled at the same time. see https://github.com/rhysd/tui-textarea#installation");
|
||||
compile_error!("ratatui support and tui-rs support are exclussive. only one of them can be enabled at the same time. see https://github.com/rhysd/tui-textarea#installation");
|
||||
|
||||
mod cursor;
|
||||
mod highlight;
|
||||
@@ -28,26 +32,25 @@ mod widget;
|
||||
mod word;
|
||||
|
||||
#[cfg(any(
|
||||
feature = "ratatui-crossterm",
|
||||
feature = "ratatui-termion",
|
||||
feature = "ratatui-termwiz",
|
||||
feature = "ratatui-your-backend",
|
||||
feature = "crossterm",
|
||||
feature = "termion",
|
||||
feature = "termwiz",
|
||||
feature = "your-backend",
|
||||
))]
|
||||
use ratatui as tui;
|
||||
#[cfg(not(any(
|
||||
feature = "ratatui-crossterm",
|
||||
feature = "ratatui-termion",
|
||||
feature = "ratatui-termwiz",
|
||||
feature = "ratatui-your-backend",
|
||||
)))]
|
||||
#[allow(clippy::single_component_path_imports)]
|
||||
use tui;
|
||||
use ratatui;
|
||||
#[cfg(any(
|
||||
feature = "tuirs-crossterm",
|
||||
feature = "tuirs-termion",
|
||||
feature = "tuirs-your-backend",
|
||||
))]
|
||||
use tui as ratatui;
|
||||
|
||||
#[cfg(feature = "crossterm")]
|
||||
#[allow(clippy::single_component_path_imports)]
|
||||
use crossterm;
|
||||
#[cfg(feature = "ratatui-crossterm")]
|
||||
use crossterm_027 as crossterm;
|
||||
#[cfg(feature = "tuirs-crossterm")]
|
||||
use crossterm_025 as crossterm;
|
||||
|
||||
pub use cursor::CursorMove;
|
||||
pub use input::{Input, Key};
|
||||
|
||||
@@ -13,9 +13,9 @@ pub enum Scrolling {
|
||||
/// `Scrolling::Delta` where 1st element means rows and 2nd means columns.
|
||||
///
|
||||
/// ```
|
||||
/// # use tui::buffer::Buffer;
|
||||
/// # use tui::layout::Rect;
|
||||
/// # use tui::widgets::Widget;
|
||||
/// # use ratatui::buffer::Buffer;
|
||||
/// # use ratatui::layout::Rect;
|
||||
/// # use ratatui::widgets::Widget;
|
||||
/// use tui_textarea::{TextArea, Scrolling};
|
||||
///
|
||||
/// // Let's say terminal height is 8.
|
||||
@@ -39,9 +39,9 @@ pub enum Scrolling {
|
||||
/// Scroll down the textarea by one page.
|
||||
///
|
||||
/// ```
|
||||
/// # use tui::buffer::Buffer;
|
||||
/// # use tui::layout::Rect;
|
||||
/// # use tui::widgets::Widget;
|
||||
/// # use ratatui::buffer::Buffer;
|
||||
/// # use ratatui::layout::Rect;
|
||||
/// # use ratatui::widgets::Widget;
|
||||
/// use tui_textarea::{TextArea, Scrolling};
|
||||
///
|
||||
/// // Let's say terminal height is 8.
|
||||
@@ -65,9 +65,9 @@ pub enum Scrolling {
|
||||
/// Scroll up the textarea by one page.
|
||||
///
|
||||
/// ```
|
||||
/// # use tui::buffer::Buffer;
|
||||
/// # use tui::layout::Rect;
|
||||
/// # use tui::widgets::Widget;
|
||||
/// # use ratatui::buffer::Buffer;
|
||||
/// # use ratatui::layout::Rect;
|
||||
/// # use ratatui::widgets::Widget;
|
||||
/// use tui_textarea::{TextArea, Scrolling, CursorMove};
|
||||
///
|
||||
/// // Let's say terminal height is 8.
|
||||
@@ -95,9 +95,9 @@ pub enum Scrolling {
|
||||
/// Scroll down the textarea by half of the page.
|
||||
///
|
||||
/// ```
|
||||
/// # use tui::buffer::Buffer;
|
||||
/// # use tui::layout::Rect;
|
||||
/// # use tui::widgets::Widget;
|
||||
/// # use ratatui::buffer::Buffer;
|
||||
/// # use ratatui::layout::Rect;
|
||||
/// # use ratatui::widgets::Widget;
|
||||
/// use tui_textarea::{TextArea, Scrolling};
|
||||
///
|
||||
/// // Let's say terminal height is 8.
|
||||
@@ -121,9 +121,9 @@ pub enum Scrolling {
|
||||
/// Scroll up the textarea by half of the page.
|
||||
///
|
||||
/// ```
|
||||
/// # use tui::buffer::Buffer;
|
||||
/// # use tui::layout::Rect;
|
||||
/// # use tui::widgets::Widget;
|
||||
/// # use ratatui::buffer::Buffer;
|
||||
/// # use ratatui::layout::Rect;
|
||||
/// # use ratatui::widgets::Widget;
|
||||
/// use tui_textarea::{TextArea, Scrolling, CursorMove};
|
||||
///
|
||||
/// // Let's say terminal height is 8.
|
||||
@@ -185,12 +185,12 @@ impl From<(i16, i16)> for Scrolling {
|
||||
mod tests {
|
||||
use super::*;
|
||||
|
||||
// Seaparate tests for ratatui support
|
||||
// Seaparate tests for tui-rs support
|
||||
#[test]
|
||||
fn delta() {
|
||||
use crate::tui::buffer::Buffer;
|
||||
use crate::tui::layout::Rect;
|
||||
use crate::tui::widgets::Widget;
|
||||
use crate::ratatui::buffer::Buffer;
|
||||
use crate::ratatui::layout::Rect;
|
||||
use crate::ratatui::widgets::Widget;
|
||||
use crate::TextArea;
|
||||
|
||||
let mut textarea: TextArea = (0..20).map(|i| i.to_string()).collect();
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
use crate::tui::style::{Color, Style};
|
||||
use crate::ratatui::style::{Color, Style};
|
||||
use regex::Regex;
|
||||
|
||||
#[derive(Clone, Debug)]
|
||||
|
||||
@@ -2,26 +2,25 @@ use crate::cursor::CursorMove;
|
||||
use crate::highlight::LineHighlighter;
|
||||
use crate::history::{Edit, EditKind, History};
|
||||
use crate::input::{Input, Key};
|
||||
use crate::ratatui::layout::Alignment;
|
||||
use crate::ratatui::style::{Color, Modifier, Style};
|
||||
#[cfg(any(
|
||||
feature = "crossterm",
|
||||
feature = "termion",
|
||||
feature = "termwiz",
|
||||
feature = "your-backend",
|
||||
))]
|
||||
use crate::ratatui::text::Line;
|
||||
#[cfg(any(
|
||||
feature = "tuirs-crossterm",
|
||||
feature = "tuirs-termion",
|
||||
feature = "tuirs-your-backend",
|
||||
))]
|
||||
use crate::ratatui::text::Spans as Line;
|
||||
use crate::ratatui::widgets::{Block, Widget};
|
||||
use crate::scroll::Scrolling;
|
||||
#[cfg(feature = "search")]
|
||||
use crate::search::Search;
|
||||
use crate::tui::layout::Alignment;
|
||||
use crate::tui::style::{Color, Modifier, Style};
|
||||
#[cfg(any(
|
||||
feature = "ratatui-crossterm",
|
||||
feature = "ratatui-termion",
|
||||
feature = "ratatui-termwiz",
|
||||
feature = "ratatui-your-backend",
|
||||
))]
|
||||
use crate::tui::text::Line as Spans;
|
||||
#[cfg(not(any(
|
||||
feature = "ratatui-crossterm",
|
||||
feature = "ratatui-termion",
|
||||
feature = "ratatui-termwiz",
|
||||
feature = "ratatui-your-backend",
|
||||
)))]
|
||||
use crate::tui::text::Spans;
|
||||
use crate::tui::widgets::{Block, Widget};
|
||||
use crate::util::spaces;
|
||||
use crate::widget::{Renderer, Viewport};
|
||||
use crate::word::{find_word_end_forward, find_word_start_backward};
|
||||
@@ -172,7 +171,7 @@ impl<'a> TextArea<'a> {
|
||||
|
||||
/// Handle a key input with default key mappings. For default key mappings, see the table in
|
||||
/// [the module document](./index.html).
|
||||
/// `crossterm`, `termion`, and `ratatui-termwiz` features enable conversion from their own key event types into
|
||||
/// `crossterm`, `termion`, and `termwiz` features enable conversion from their own key event types into
|
||||
/// [`Input`] so this method can take the event values directly.
|
||||
/// This method returns if the input modified text contents or not in the textarea.
|
||||
/// ```ignore
|
||||
@@ -1010,7 +1009,7 @@ impl<'a> TextArea<'a> {
|
||||
}
|
||||
}
|
||||
|
||||
pub(crate) fn line_spans<'b>(&'b self, line: &'b str, row: usize, lnum_len: u8) -> Spans<'b> {
|
||||
pub(crate) fn line_spans<'b>(&'b self, line: &'b str, row: usize, lnum_len: u8) -> Line<'b> {
|
||||
let mut hl = LineHighlighter::new(line, self.cursor_style, self.tab_len, self.mask);
|
||||
|
||||
if let Some(style) = self.line_number_style {
|
||||
@@ -1029,12 +1028,12 @@ impl<'a> TextArea<'a> {
|
||||
hl.into_spans()
|
||||
}
|
||||
|
||||
/// Build a tui-rs widget to render the current state of the textarea. The widget instance returned from this
|
||||
/// method can be rendered with [`tui::terminal::Frame::render_widget`].
|
||||
/// Build a ratatui (or tui-rs) widget to render the current state of the textarea. The widget instance returned
|
||||
/// from this method can be rendered with [`ratatui::terminal::Frame::render_widget`].
|
||||
/// ```no_run
|
||||
/// use tui::backend::CrosstermBackend;
|
||||
/// use tui::layout::{Constraint, Direction, Layout};
|
||||
/// use tui::Terminal;
|
||||
/// use ratatui::backend::CrosstermBackend;
|
||||
/// use ratatui::layout::{Constraint, Direction, Layout};
|
||||
/// use ratatui::Terminal;
|
||||
/// use tui_textarea::TextArea;
|
||||
///
|
||||
/// let mut textarea = TextArea::default();
|
||||
@@ -1061,7 +1060,7 @@ impl<'a> TextArea<'a> {
|
||||
|
||||
/// Set the style of textarea. By default, textarea is not styled.
|
||||
/// ```
|
||||
/// use tui::style::{Style, Color};
|
||||
/// use ratatui::style::{Style, Color};
|
||||
/// use tui_textarea::TextArea;
|
||||
///
|
||||
/// let mut textarea = TextArea::default();
|
||||
@@ -1081,7 +1080,7 @@ impl<'a> TextArea<'a> {
|
||||
/// Set the block of textarea. By default, no block is set.
|
||||
/// ```
|
||||
/// use tui_textarea::TextArea;
|
||||
/// use tui::widgets::{Block, Borders};
|
||||
/// use ratatui::widgets::{Block, Borders};
|
||||
///
|
||||
/// let mut textarea = TextArea::default();
|
||||
/// let block = Block::default().borders(Borders::ALL).title("Block Title");
|
||||
@@ -1095,7 +1094,7 @@ impl<'a> TextArea<'a> {
|
||||
/// Remove the block of textarea which was set by [`TextArea::set_block`].
|
||||
/// ```
|
||||
/// use tui_textarea::TextArea;
|
||||
/// use tui::widgets::{Block, Borders};
|
||||
/// use ratatui::widgets::{Block, Borders};
|
||||
///
|
||||
/// let mut textarea = TextArea::default();
|
||||
/// let block = Block::default().borders(Borders::ALL).title("Block Title");
|
||||
@@ -1112,8 +1111,7 @@ impl<'a> TextArea<'a> {
|
||||
self.block.as_ref()
|
||||
}
|
||||
|
||||
/// Set the length of tab character. Due to limitation of tui-rs, hard tab is not supported. Setting 0 disables tab
|
||||
/// inputs.
|
||||
/// Set the length of tab character. Setting 0 disables tab inputs.
|
||||
/// ```
|
||||
/// use tui_textarea::{TextArea, Input, Key};
|
||||
///
|
||||
@@ -1199,7 +1197,7 @@ impl<'a> TextArea<'a> {
|
||||
/// Set the style of line at cursor. By default, the cursor line is styled with underline. To stop styling the
|
||||
/// cursor line, set the default style.
|
||||
/// ```
|
||||
/// use tui::style::{Style, Color};
|
||||
/// use ratatui::style::{Style, Color};
|
||||
/// use tui_textarea::TextArea;
|
||||
///
|
||||
/// let mut textarea = TextArea::default();
|
||||
@@ -1224,7 +1222,7 @@ impl<'a> TextArea<'a> {
|
||||
/// that line numbers are disabled by default. If you want to show line numbers but don't want to style them, set
|
||||
/// the default style.
|
||||
/// ```
|
||||
/// use tui::style::{Style, Color};
|
||||
/// use ratatui::style::{Style, Color};
|
||||
/// use tui_textarea::TextArea;
|
||||
///
|
||||
/// let mut textarea = TextArea::default();
|
||||
@@ -1241,7 +1239,7 @@ impl<'a> TextArea<'a> {
|
||||
/// Remove the style of line number which was set by [`TextArea::set_line_number_style`]. After calling this
|
||||
/// method, Line numbers will no longer be shown.
|
||||
/// ```
|
||||
/// use tui::style::{Style, Color};
|
||||
/// use ratatui::style::{Style, Color};
|
||||
/// use tui_textarea::TextArea;
|
||||
///
|
||||
/// let mut textarea = TextArea::default();
|
||||
@@ -1279,7 +1277,7 @@ impl<'a> TextArea<'a> {
|
||||
|
||||
/// Set the style of the placeholder text. The default style is a dark gray text.
|
||||
/// ```
|
||||
/// use tui::style::{Style, Color};
|
||||
/// use ratatui::style::{Style, Color};
|
||||
/// use tui_textarea::TextArea;
|
||||
///
|
||||
/// let mut textarea = TextArea::default();
|
||||
@@ -1373,7 +1371,7 @@ impl<'a> TextArea<'a> {
|
||||
/// Set the style of cursor. By default, a cursor is rendered in the reversed color. Setting the same style as
|
||||
/// cursor line hides a cursor.
|
||||
/// ```
|
||||
/// use tui::style::{Style, Color};
|
||||
/// use ratatui::style::{Style, Color};
|
||||
/// use tui_textarea::TextArea;
|
||||
///
|
||||
/// let mut textarea = TextArea::default();
|
||||
@@ -1449,8 +1447,8 @@ impl<'a> TextArea<'a> {
|
||||
/// Set text alignment. When [`Alignment::Center`] or [`Alignment::Right`] is set, line number is automatically
|
||||
/// disabled because those alignments don't work well with line numbers.
|
||||
/// ```
|
||||
/// use ratatui::layout::Alignment;
|
||||
/// use tui_textarea::TextArea;
|
||||
/// use tui::layout::Alignment;
|
||||
///
|
||||
/// let mut textarea = TextArea::default();
|
||||
///
|
||||
@@ -1466,8 +1464,8 @@ impl<'a> TextArea<'a> {
|
||||
|
||||
/// Get current text alignment. The default alignment is [`Alignment::Left`].
|
||||
/// ```
|
||||
/// use ratatui::layout::Alignment;
|
||||
/// use tui_textarea::TextArea;
|
||||
/// use tui::layout::Alignment;
|
||||
///
|
||||
/// let mut textarea = TextArea::default();
|
||||
///
|
||||
@@ -1669,7 +1667,7 @@ impl<'a> TextArea<'a> {
|
||||
/// Get the text style at matches of text search. The default style is colored with blue in background.
|
||||
///
|
||||
/// ```
|
||||
/// use tui::style::{Style, Color};
|
||||
/// use ratatui::style::{Style, Color};
|
||||
/// use tui_textarea::TextArea;
|
||||
///
|
||||
/// let textarea = TextArea::default();
|
||||
@@ -1685,7 +1683,7 @@ impl<'a> TextArea<'a> {
|
||||
/// Set the text style at matches of text search. The default style is colored with blue in background.
|
||||
///
|
||||
/// ```
|
||||
/// use tui::style::{Style, Color};
|
||||
/// use ratatui::style::{Style, Color};
|
||||
/// use tui_textarea::TextArea;
|
||||
///
|
||||
/// let mut textarea = TextArea::default();
|
||||
@@ -1706,9 +1704,9 @@ impl<'a> TextArea<'a> {
|
||||
/// the cursor position will be adjusted to stay in the viewport using the same logic as [`CursorMove::InViewport`].
|
||||
///
|
||||
/// ```
|
||||
/// # use tui::buffer::Buffer;
|
||||
/// # use tui::layout::Rect;
|
||||
/// # use tui::widgets::Widget;
|
||||
/// # use ratatui::buffer::Buffer;
|
||||
/// # use ratatui::layout::Rect;
|
||||
/// # use ratatui::widgets::Widget;
|
||||
/// use tui_textarea::TextArea;
|
||||
///
|
||||
/// // Let's say terminal height is 8.
|
||||
@@ -1749,12 +1747,12 @@ impl<'a> TextArea<'a> {
|
||||
mod tests {
|
||||
use super::*;
|
||||
|
||||
// Seaparate tests for ratatui support
|
||||
// Seaparate tests for tui-rs support
|
||||
#[test]
|
||||
fn scroll() {
|
||||
use crate::tui::buffer::Buffer;
|
||||
use crate::tui::layout::Rect;
|
||||
use crate::tui::widgets::Widget;
|
||||
use crate::ratatui::buffer::Buffer;
|
||||
use crate::ratatui::layout::Rect;
|
||||
use crate::ratatui::widgets::Widget;
|
||||
|
||||
let mut textarea: TextArea = (0..20).map(|i| i.to_string()).collect();
|
||||
let r = Rect {
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
use crate::ratatui::buffer::Buffer;
|
||||
use crate::ratatui::layout::Rect;
|
||||
use crate::ratatui::text::Text;
|
||||
use crate::ratatui::widgets::{Paragraph, Widget};
|
||||
use crate::textarea::TextArea;
|
||||
use crate::tui::buffer::Buffer;
|
||||
use crate::tui::layout::Rect;
|
||||
use crate::tui::text::Text;
|
||||
use crate::tui::widgets::{Paragraph, Widget};
|
||||
use crate::util::num_digits;
|
||||
use std::cmp;
|
||||
use std::sync::atomic::{AtomicU64, Ordering};
|
||||
|
||||
Ссылка в новой задаче
Block a user