use gpui::{App, ClipboardItem};
use super::Editor;
impl Editor {
pub fn delete_selection(&mut self) -> bool {
if let Some(selection) = self.selection.take() {
let range = selection.byte_range();
if !range.is_empty() {
self.buffer.delete_range(range);
return true;
}
}
false
}
pub fn replace_selection_or_insert(&mut self, text: &str) {
self.expand_fold_at_cursor();
if let Some(selection) = self.selection.take() {
let range = selection.byte_range();
if !range.is_empty() {
self.buffer.replace_range(range, text);
return;
}
}
self.buffer.insert(text);
}
pub fn copy(&self, cx: &App) {
if let Some(sel) = self.selection {
let range = sel.byte_range();
if !range.is_empty() {
let text = self.buffer.text().byte_slice(range).to_string();
cx.write_to_clipboard(ClipboardItem::new_string(text));
}
}
}
pub fn cut(&mut self, cx: &App) -> bool {
if let Some(sel) = self.selection.take() {
let range = sel.byte_range();
if !range.is_empty() {
let text = self.buffer.text().byte_slice(range.clone()).to_string();
cx.write_to_clipboard(ClipboardItem::new_string(text));
self.buffer.delete_range(range);
self.selection = None;
return true;
}
}
false
}
pub fn paste(&mut self, cx: &App) -> bool {
if let Some(text) = cx.read_from_clipboard().and_then(|item| item.text())
&& !text.is_empty()
{
self.replace_selection_or_insert(&text);
self.selection = None;
return true;
}
false
}
}