1
0
зеркало из https://github.com/glebtv/tui-textarea.git synced 2026-08-28 11:36:17 +03:00

invert ratatui-* features with tuirs-*

Этот коммит содержится в:
rhysd
2023-10-24 12:51:29 +09:00
родитель e3783d1baf
Коммит ef3b3188f4
9 изменённых файлов: 102 добавлений и 101 удалений

Просмотреть файл

@@ -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"

Просмотреть файл

@@ -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);
}
}
}

Просмотреть файл

@@ -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 {

Просмотреть файл

@@ -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};

Просмотреть файл

@@ -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 {
@@ -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 {

Просмотреть файл

@@ -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};