use alloc::{string::String, vec, vec::Vec}; // use crate::String; // use crate::Vec; use lazy_static::lazy_static; #[derive(Debug)] pub enum Mime { None, Text(String), } lazy_static! { pub static ref CLIPBOARD: spin::Mutex = { let clipboard = Clipboard::new(); spin::Mutex::new(clipboard) }; } // ctrl+v paste but not pop and pastes // ctrl+shift+v pops from the stack and pastes // ctrl+c pushes to the stack // ctrl+shift+< move stack pointer left // ctrl+shift+> move stack pointer right pub struct Clipboard { pub index: usize, pub pages: Vec, } impl Clipboard { pub fn new() -> Clipboard { Clipboard { index: 0, pages: vec![], } } pub fn clear(&mut self) { self.pages = vec![]; } pub fn set_index(&mut self, index_new: usize) { self.index = index_new; } pub fn clip_end(&mut self) { self.index = 0; } pub fn clip_home(&mut self) { self.index = self.pages.len(); } pub fn copy(&mut self, copy_mime: Mime) { self.pages.push(copy_mime); } pub fn paste(&mut self) -> &Mime { let paste_pos = &self.pages[self.index]; paste_pos } }