1
0
зеркало из https://github.com/glebtv/tui-textarea.git synced 2026-09-05 23:25:50 +03:00

feat: add screen/data cursor maps for wrapped movement (#17)

* feat!: remove tui-rs support and map screen cursors

* docs(examples): add fixed-size recording mode

* chore(release): bump to v0.11.0
Этот коммит содержится в:
srothgan
2026-05-03 08:48:05 +02:00
коммит произвёл GitHub
родитель f20df6b965
Коммит 8f708cfdc7
28 изменённых файлов: 782 добавлений и 925 удалений

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

@@ -1,3 +1,5 @@
mod common;
use crossterm::event::{DisableMouseCapture, EnableMouseCapture};
use crossterm::terminal::{
EnterAlternateScreen, LeaveAlternateScreen, disable_raw_mode, enable_raw_mode,
@@ -14,6 +16,7 @@ use std::fmt::Display;
use std::fs;
use std::io;
use std::io::{BufRead, Write};
use std::mem;
use std::path::PathBuf;
use tui_textarea::{CursorMove, Input, Key, TextArea};
@@ -135,6 +138,7 @@ struct Editor<'a> {
current: usize,
buffers: Vec<Buffer<'a>>,
term: Terminal<CrosstermBackend<io::Stdout>>,
recording: common::RecordingSizeGuard,
message: Option<Cow<'static, str>>,
search: SearchBox<'a>,
}
@@ -154,12 +158,14 @@ impl Editor<'_> {
let mut stdout = io::stdout();
enable_raw_mode()?;
crossterm::execute!(stdout, EnterAlternateScreen, EnableMouseCapture)?;
let recording = common::maybe_force_recording_size(&mut stdout)?;
let backend = CrosstermBackend::new(stdout);
let term = Terminal::new(backend)?;
Ok(Self {
current: 0,
buffers,
term,
recording,
message: None,
search: SearchBox::default(),
})
@@ -348,12 +354,14 @@ impl Drop for Editor<'_> {
fn drop(&mut self) {
self.term.show_cursor().unwrap();
disable_raw_mode().unwrap();
let recording = mem::take(&mut self.recording);
crossterm::execute!(
self.term.backend_mut(),
LeaveAlternateScreen,
DisableMouseCapture
)
.unwrap();
recording.restore(self.term.backend_mut()).unwrap();
}
}