floem_editor_core/
register.rs

1use crate::mode::VisualMode;
2
3pub trait Clipboard {
4    fn get_string(&mut self) -> Option<String>;
5    fn put_string(&mut self, s: impl AsRef<str>);
6}
7
8#[derive(Clone, Default)]
9pub struct RegisterData {
10    pub content: String,
11    pub mode: VisualMode,
12}
13
14#[derive(Clone, Default)]
15pub struct Register {
16    pub unnamed: RegisterData,
17    last_yank: RegisterData,
18}
19
20pub enum RegisterKind {
21    Delete,
22    Yank,
23}
24
25impl Register {
26    pub fn add(&mut self, kind: RegisterKind, data: RegisterData) {
27        match kind {
28            RegisterKind::Delete => self.add_delete(data),
29            RegisterKind::Yank => self.add_yank(data),
30        }
31    }
32
33    pub fn add_delete(&mut self, data: RegisterData) {
34        self.unnamed = data;
35    }
36
37    pub fn add_yank(&mut self, data: RegisterData) {
38        self.unnamed = data.clone();
39        self.last_yank = data;
40    }
41}