diff --git a/Cargo.toml b/Cargo.toml index 2cf7897..10a6470 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -24,28 +24,28 @@ 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" diff --git a/src/cursor.rs b/src/cursor.rs index f863c3c..68c4890 100644 --- a/src/cursor.rs +++ b/src/cursor.rs @@ -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(); diff --git a/src/highlight.rs b/src/highlight.rs index c827855..df9bad5 100644 --- a/src/highlight.rs +++ b/src/highlight.rs @@ -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); } } } diff --git a/src/input.rs b/src/input.rs index ed62996..04b2c24 100644 --- a/src/input.rs +++ b/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 for Input { /// Convert [`crossterm::event::Event`] to [`Input`]. fn from(event: CrosstermEvent) -> Self { @@ -113,7 +113,7 @@ impl From for Input { } } -#[cfg(any(feature = "crossterm", feature = "ratatui-crossterm"))] +#[cfg(any(feature = "crossterm", feature = "tuirs-crossterm"))] impl From for Input { /// Convert [`crossterm::event::KeyEvent`] to [`Input`]. fn from(key: KeyEvent) -> Self { @@ -141,7 +141,7 @@ impl From for Input { } } -#[cfg(any(feature = "crossterm", feature = "ratatui-crossterm"))] +#[cfg(any(feature = "crossterm", feature = "tuirs-crossterm"))] impl From for Input { /// Convert [`crossterm::event::MouseEvent`] to [`Input`]. fn from(mouse: MouseEvent) -> Self { @@ -156,7 +156,7 @@ impl From for Input { } } -#[cfg(any(feature = "termion", feature = "ratatui-termion"))] +#[cfg(any(feature = "termion", feature = "tuirs-termion"))] impl From for Input { /// Convert [`termion::event::Event`] to [`Input`]. fn from(event: TermionEvent) -> Self { @@ -168,7 +168,7 @@ impl From for Input { } } -#[cfg(any(feature = "termion", feature = "ratatui-termion"))] +#[cfg(any(feature = "termion", feature = "tuirs-termion"))] impl From for Input { /// Convert [`termion::event::Key`] to [`Input`]. fn from(key: TermionKey) -> Self { @@ -207,7 +207,7 @@ impl From for Input { } } -#[cfg(any(feature = "termion", feature = "ratatui-termion"))] +#[cfg(any(feature = "termion", feature = "tuirs-termion"))] impl From for Input { /// Convert [`termion::event::MouseEvent`] to [`Input`]. fn from(mouse: TermionMouseEvent) -> Self { @@ -225,7 +225,7 @@ impl From for Input { } } -#[cfg(feature = "ratatui-termwiz")] +#[cfg(feature = "termwiz")] impl From for Input { /// Convert [`termwiz::input::InputEvent`] to [`Input`]. fn from(input: TermwizInputEvent) -> Self { @@ -238,7 +238,7 @@ impl From for Input { } } -#[cfg(feature = "ratatui-termwiz")] +#[cfg(feature = "termwiz")] impl From for Input { /// Convert [`termwiz::input::KeyEvent`] to [`Input`]. fn from(key: TermwizKeyEvent) -> Self { @@ -270,7 +270,7 @@ impl From for Input { } } -#[cfg(feature = "ratatui-termwiz")] +#[cfg(feature = "termwiz")] impl From for Key { /// Convert [`termwiz::input::MouseButtons`] to [`Key`]. fn from(buttons: TermwizMouseButtons) -> Self { @@ -286,7 +286,7 @@ impl From for Key { } } -#[cfg(feature = "ratatui-termwiz")] +#[cfg(feature = "termwiz")] impl From for Input { /// Convert [`termwiz::input::MouseEvent`] to [`Input`]. fn from(mouse: TermwizMouseEvent) -> Self { @@ -305,7 +305,7 @@ impl From for Input { } } -#[cfg(feature = "ratatui-termwiz")] +#[cfg(feature = "termwiz")] impl From for Input { /// Convert [`termwiz::input::PixelMouseEvent`] to [`Input`]. fn from(mouse: PixelMouseEvent) -> Self { diff --git a/src/lib.rs b/src/lib.rs index ecbe412..c73a83b 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -5,12 +5,16 @@ #![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"); @@ -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}; diff --git a/src/scroll.rs b/src/scroll.rs index 7e97fc3..32a7d39 100644 --- a/src/scroll.rs +++ b/src/scroll.rs @@ -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(); diff --git a/src/search.rs b/src/search.rs index cf1bf6b..e0b706b 100644 --- a/src/search.rs +++ b/src/search.rs @@ -1,4 +1,4 @@ -use crate::tui::style::{Color, Style}; +use crate::ratatui::style::{Color, Style}; use regex::Regex; #[derive(Clone, Debug)] diff --git a/src/textarea.rs b/src/textarea.rs index 0505a3c..ff2e900 100644 --- a/src/textarea.rs +++ b/src/textarea.rs @@ -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 { @@ -1749,12 +1748,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 { diff --git a/src/widget.rs b/src/widget.rs index bd8d06a..291df41 100644 --- a/src/widget.rs +++ b/src/widget.rs @@ -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};