mirror of
https://github.com/youwen5/iamb.git
synced 2025-06-20 05:39:52 -07:00
Support bracketed paste (#28)
This commit is contained in:
parent
8c010d7e7e
commit
e8205df21d
1 changed files with 21 additions and 4 deletions
25
src/main.rs
25
src/main.rs
|
@ -23,7 +23,7 @@ use matrix_sdk::ruma::OwnedUserId;
|
||||||
use modalkit::crossterm::{
|
use modalkit::crossterm::{
|
||||||
self,
|
self,
|
||||||
cursor::Show as CursorShow,
|
cursor::Show as CursorShow,
|
||||||
event::{poll, read, Event},
|
event::{poll, read, DisableBracketedPaste, EnableBracketedPaste, Event},
|
||||||
execute,
|
execute,
|
||||||
terminal::{EnterAlternateScreen, LeaveAlternateScreen, SetTitle},
|
terminal::{EnterAlternateScreen, LeaveAlternateScreen, SetTitle},
|
||||||
};
|
};
|
||||||
|
@ -77,6 +77,8 @@ use modalkit::{
|
||||||
EditError,
|
EditError,
|
||||||
EditInfo,
|
EditInfo,
|
||||||
Editable,
|
Editable,
|
||||||
|
EditorAction,
|
||||||
|
InsertTextAction,
|
||||||
Jumpable,
|
Jumpable,
|
||||||
Promptable,
|
Promptable,
|
||||||
Scrollable,
|
Scrollable,
|
||||||
|
@ -85,7 +87,7 @@ use modalkit::{
|
||||||
WindowAction,
|
WindowAction,
|
||||||
WindowContainer,
|
WindowContainer,
|
||||||
},
|
},
|
||||||
base::{OpenTarget, RepeatType},
|
base::{MoveDir1D, OpenTarget, RepeatType},
|
||||||
context::Resolve,
|
context::Resolve,
|
||||||
key::KeyManager,
|
key::KeyManager,
|
||||||
store::Store,
|
store::Store,
|
||||||
|
@ -126,6 +128,7 @@ impl Application {
|
||||||
let mut stdout = stdout();
|
let mut stdout = stdout();
|
||||||
crossterm::terminal::enable_raw_mode()?;
|
crossterm::terminal::enable_raw_mode()?;
|
||||||
crossterm::execute!(stdout, EnterAlternateScreen)?;
|
crossterm::execute!(stdout, EnterAlternateScreen)?;
|
||||||
|
crossterm::execute!(stdout, EnableBracketedPaste)?;
|
||||||
|
|
||||||
let title = format!("iamb ({})", settings.profile.user_id);
|
let title = format!("iamb ({})", settings.profile.user_id);
|
||||||
crossterm::execute!(stdout, SetTitle(title))?;
|
crossterm::execute!(stdout, SetTitle(title))?;
|
||||||
|
@ -218,8 +221,21 @@ impl Application {
|
||||||
Event::Resize(_, _) => {
|
Event::Resize(_, _) => {
|
||||||
// We'll redraw for the new size next time step() is called.
|
// We'll redraw for the new size next time step() is called.
|
||||||
},
|
},
|
||||||
Event::Paste(_) => {
|
Event::Paste(s) => {
|
||||||
// Do nothing for now.
|
let act = InsertTextAction::Transcribe(s, MoveDir1D::Previous, 1.into());
|
||||||
|
let act = EditorAction::from(act);
|
||||||
|
let ctx = ProgramContext::default();
|
||||||
|
let mut store = self.store.lock().await;
|
||||||
|
|
||||||
|
match self.screen.editor_command(&act, &ctx, store.deref_mut()) {
|
||||||
|
Ok(None) => {},
|
||||||
|
Ok(Some(info)) => {
|
||||||
|
self.screen.push_info(info);
|
||||||
|
},
|
||||||
|
Err(e) => {
|
||||||
|
self.screen.push_error(e);
|
||||||
|
},
|
||||||
|
}
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -473,6 +489,7 @@ async fn run(settings: ApplicationSettings) -> IambResult<()> {
|
||||||
let orig_hook = std::panic::take_hook();
|
let orig_hook = std::panic::take_hook();
|
||||||
std::panic::set_hook(Box::new(move |panic_info| {
|
std::panic::set_hook(Box::new(move |panic_info| {
|
||||||
let _ = crossterm::terminal::disable_raw_mode();
|
let _ = crossterm::terminal::disable_raw_mode();
|
||||||
|
let _ = crossterm::execute!(stdout(), DisableBracketedPaste);
|
||||||
let _ = crossterm::execute!(stdout(), LeaveAlternateScreen);
|
let _ = crossterm::execute!(stdout(), LeaveAlternateScreen);
|
||||||
let _ = crossterm::execute!(stdout(), CursorShow);
|
let _ = crossterm::execute!(stdout(), CursorShow);
|
||||||
orig_hook(panic_info);
|
orig_hook(panic_info);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue