Added support for duplication
This commit is contained in:
parent
cec0ae50e5
commit
5fcd147c8c
3 changed files with 35 additions and 0 deletions
|
|
@ -48,6 +48,7 @@ pub enum Action {
|
||||||
Copy,
|
Copy,
|
||||||
Cut,
|
Cut,
|
||||||
Paste,
|
Paste,
|
||||||
|
Duplicate,
|
||||||
}
|
}
|
||||||
|
|
||||||
/// How far should movement go?
|
/// How far should movement go?
|
||||||
|
|
@ -464,6 +465,12 @@ impl RawEvent {
|
||||||
kind: KeyEventKind::Press,
|
kind: KeyEventKind::Press,
|
||||||
..
|
..
|
||||||
}) => Some(Action::Paste),
|
}) => Some(Action::Paste),
|
||||||
|
TerminalEvent::Key(KeyEvent {
|
||||||
|
code: KeyCode::Char('d'),
|
||||||
|
modifiers: KeyModifiers::CONTROL,
|
||||||
|
kind: KeyEventKind::Press,
|
||||||
|
..
|
||||||
|
}) => Some(Action::Duplicate),
|
||||||
_ => None,
|
_ => None,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
23
src/state.rs
23
src/state.rs
|
|
@ -768,6 +768,29 @@ impl Buffer {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn duplicate(&mut self, cursor_id: CursorId) {
|
||||||
|
let Some(cursor) = self.cursors.get_mut(cursor_id) else {
|
||||||
|
return;
|
||||||
|
};
|
||||||
|
if let Some(s) = cursor.selection()
|
||||||
|
&& let Some(text) = cursor.selection().and_then(|s| self.text.chars().get(s))
|
||||||
|
{
|
||||||
|
// cursor.place_at(s.end);
|
||||||
|
self.insert_after(cursor_id, text.to_vec())
|
||||||
|
} else {
|
||||||
|
let coord = self.text.to_coord(cursor.pos);
|
||||||
|
let line = self
|
||||||
|
.text
|
||||||
|
.lines()
|
||||||
|
.nth(coord[1].max(0) as usize)
|
||||||
|
.map(|l| l.to_vec());
|
||||||
|
if let Some(line) = line {
|
||||||
|
let end_of_line = self.text.to_pos([0, coord[1] + 1]);
|
||||||
|
self.insert(end_of_line, line);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
pub fn start_session(&mut self) -> CursorId {
|
pub fn start_session(&mut self) -> CursorId {
|
||||||
self.cursors.insert(Cursor::default())
|
self.cursors.insert(Cursor::default())
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -188,6 +188,11 @@ impl Input {
|
||||||
Ok(Resp::handled(Some(Event::Bell)))
|
Ok(Resp::handled(Some(Event::Bell)))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Some(Action::Duplicate) => {
|
||||||
|
buffer.duplicate(cursor_id);
|
||||||
|
self.refocus(buffer, cursor_id);
|
||||||
|
Ok(Resp::handled(None))
|
||||||
|
}
|
||||||
_ => Err(event),
|
_ => Err(event),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue