Fix: copy/paste multi-step
This commit is contained in:
@@ -111,6 +111,14 @@ impl Editor {
|
|||||||
self.text.paste()
|
self.text.paste()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn yank_text(&self) -> String {
|
||||||
|
self.text.yank_text()
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn set_yank_text(&mut self, text: impl Into<String>) {
|
||||||
|
self.text.set_yank_text(text);
|
||||||
|
}
|
||||||
|
|
||||||
pub fn select_all(&mut self) {
|
pub fn select_all(&mut self) {
|
||||||
self.text.select_all();
|
self.text.select_all();
|
||||||
}
|
}
|
||||||
@@ -138,7 +146,11 @@ impl Editor {
|
|||||||
}
|
}
|
||||||
|
|
||||||
pub fn set_content(&mut self, lines: Vec<String>) {
|
pub fn set_content(&mut self, lines: Vec<String>) {
|
||||||
|
let yank = self.text.yank_text();
|
||||||
self.text = TextArea::new(lines);
|
self.text = TextArea::new(lines);
|
||||||
|
if !yank.is_empty() {
|
||||||
|
self.text.set_yank_text(yank);
|
||||||
|
}
|
||||||
self.completion.active = false;
|
self.completion.active = false;
|
||||||
self.sample_finder.active = false;
|
self.sample_finder.active = false;
|
||||||
self.search.query.clear();
|
self.search.query.clear();
|
||||||
|
|||||||
@@ -343,13 +343,26 @@ pub(super) fn handle_modal_input(ctx: &mut InputContext, key: KeyEvent) -> Input
|
|||||||
editor.select_all();
|
editor.select_all();
|
||||||
}
|
}
|
||||||
KeyCode::Char('c') if ctrl => {
|
KeyCode::Char('c') if ctrl => {
|
||||||
editor.copy();
|
ctx.app.editor_ctx.editor.copy();
|
||||||
|
let text = ctx.app.editor_ctx.editor.yank_text();
|
||||||
|
if let Some(clip) = &mut ctx.app.clipboard {
|
||||||
|
let _ = clip.set_text(text);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
KeyCode::Char('x') if ctrl => {
|
KeyCode::Char('x') if ctrl => {
|
||||||
editor.cut();
|
ctx.app.editor_ctx.editor.cut();
|
||||||
|
let text = ctx.app.editor_ctx.editor.yank_text();
|
||||||
|
if let Some(clip) = &mut ctx.app.clipboard {
|
||||||
|
let _ = clip.set_text(text);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
KeyCode::Char('v') if ctrl => {
|
KeyCode::Char('v') if ctrl => {
|
||||||
editor.paste();
|
if let Some(clip) = &mut ctx.app.clipboard {
|
||||||
|
if let Ok(text) = clip.get_text() {
|
||||||
|
ctx.app.editor_ctx.editor.set_yank_text(text);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
ctx.app.editor_ctx.editor.paste();
|
||||||
}
|
}
|
||||||
KeyCode::Left | KeyCode::Right | KeyCode::Up | KeyCode::Down if shift => {
|
KeyCode::Left | KeyCode::Right | KeyCode::Up | KeyCode::Down if shift => {
|
||||||
if !editor.is_selecting() {
|
if !editor.is_selecting() {
|
||||||
|
|||||||
Reference in New Issue
Block a user