From 9428172a1dd2219eaf82ae06ad90f835b5c3b8e4 Mon Sep 17 00:00:00 2001 From: rhysd Date: Thu, 13 Apr 2023 21:57:33 +0900 Subject: [PATCH] support `ratatui` crate by `editor` and `termion` example --- Cargo.toml | 3 +-- examples/editor.rs | 28 ++++++++++++++++++++++------ examples/termion.rs | 19 ++++++++++++++++--- 3 files changed, 39 insertions(+), 11 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 480befe..88c8972 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -43,11 +43,10 @@ name = "minimal" [[example]] name = "termion" -required-features = ["termion"] [[example]] name = "editor" -required-features = ["crossterm", "search"] +required-features = ["search"] [[example]] name = "split" diff --git a/examples/editor.rs b/examples/editor.rs index 67a80e6..7de14ea 100644 --- a/examples/editor.rs +++ b/examples/editor.rs @@ -1,3 +1,6 @@ +#[cfg(feature = "ratatui-crossterm")] +use crossterm_026 as crossterm; + use crossterm::event::{DisableMouseCapture, EnableMouseCapture}; use crossterm::terminal::{ disable_raw_mode, enable_raw_mode, is_raw_mode_enabled, EnterAlternateScreen, @@ -10,14 +13,27 @@ 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}; +#[cfg(feature = "ratatui-crossterm")] +use ratatui::{ + backend::CrosstermBackend, + layout::{Constraint, Direction, Layout}, + style::{Color, Modifier, Style}, + text::{Span, Spans}, + widgets::{Block, Borders, Paragraph}, + Terminal, +}; +#[cfg(not(feature = "ratatui-crossterm"))] +use tui::{ + backend::CrosstermBackend, + layout::{Constraint, Direction, Layout}, + style::{Color, Modifier, Style}, + text::{Span, Spans}, + widgets::{Block, Borders, Paragraph}, + Terminal, +}; + macro_rules! error { ($fmt: expr $(, $args:tt)*) => {{ Err(io::Error::new(io::ErrorKind::Other, format!($fmt $(, $args)*))) diff --git a/examples/termion.rs b/examples/termion.rs index 3d7e2b4..ac5ecef 100644 --- a/examples/termion.rs +++ b/examples/termion.rs @@ -1,3 +1,6 @@ +#[cfg(all(not(feature = "termion"), not(feature = "ratatui-termion")))] +compile_error!("termion example requires \"termion\" feature or \"ratatui-termion\" feature. see https://github.com/rhysd/tui-textarea"); + use std::error::Error; use std::io; use std::sync::mpsc; @@ -7,11 +10,21 @@ use termion::event::Event as TermEvent; use termion::input::{MouseTerminal, TermRead}; use termion::raw::IntoRawMode; use termion::screen::AlternateScreen; -use tui::backend::TermionBackend; -use tui::widgets::{Block, Borders}; -use tui::Terminal; use tui_textarea::{Input, Key, TextArea}; +#[cfg(feature = "ratatui-termion")] +use ratatui::{ + backend::TermionBackend, + widgets::{Block, Borders}, + Terminal, +}; +#[cfg(feature = "termion")] +use tui::{ + backend::TermionBackend, + widgets::{Block, Borders}, + Terminal, +}; + enum Event { Term(TermEvent), Tick,