aboutsummaryrefslogtreecommitdiff
path: root/alacritty/src/event.rs
diff options
context:
space:
mode:
authorKirill Chibisov <contact@kchibisov.com>2020-06-07 00:33:20 +0300
committerGitHub <noreply@github.com>2020-06-07 00:33:20 +0300
commit4f5f8412966626771043bd3a90800124fed44ebe (patch)
tree264e8ffa917324b5e30b7532fcf7d773382012c3 /alacritty/src/event.rs
parent7aafbb757d485c5ff065324464dde8b5322cdd92 (diff)
downloadr-alacritty-4f5f8412966626771043bd3a90800124fed44ebe.tar.gz
r-alacritty-4f5f8412966626771043bd3a90800124fed44ebe.tar.bz2
r-alacritty-4f5f8412966626771043bd3a90800124fed44ebe.zip
Remove copypasta dependency from alacritty_terminal
Diffstat (limited to 'alacritty/src/event.rs')
-rw-r--r--alacritty/src/event.rs26
1 files changed, 23 insertions, 3 deletions
diff --git a/alacritty/src/event.rs b/alacritty/src/event.rs
index 21149ad0..4e2a0578 100644
--- a/alacritty/src/event.rs
+++ b/alacritty/src/event.rs
@@ -27,7 +27,6 @@ use serde_json as json;
use font::set_font_smoothing;
use font::{self, Size};
-use alacritty_terminal::clipboard::ClipboardType;
use alacritty_terminal::config::Font;
use alacritty_terminal::config::LOG_TARGET_CONFIG;
use alacritty_terminal::event::OnResize;
@@ -38,12 +37,13 @@ use alacritty_terminal::message_bar::{Message, MessageBuffer};
use alacritty_terminal::selection::{Selection, SelectionType};
use alacritty_terminal::sync::FairMutex;
use alacritty_terminal::term::cell::Cell;
-use alacritty_terminal::term::{SizeInfo, Term, TermMode};
+use alacritty_terminal::term::{ClipboardType, SizeInfo, Term, TermMode};
#[cfg(not(windows))]
use alacritty_terminal::tty;
use alacritty_terminal::util::{limit, start_daemon};
use crate::cli::Options;
+use crate::clipboard::Clipboard;
use crate::config;
use crate::config::Config;
use crate::display::Display;
@@ -68,6 +68,7 @@ impl DisplayUpdate {
pub struct ActionContext<'a, N, T> {
pub notifier: &'a mut N,
pub terminal: &'a mut Term<T>,
+ pub clipboard: &'a mut Clipboard,
pub size_info: &'a mut SizeInfo,
pub mouse: &'a mut Mouse,
pub received_count: &'a mut usize,
@@ -111,7 +112,7 @@ impl<'a, N: Notify + 'a, T: EventListener> input::ActionContext<T> for ActionCon
fn copy_selection(&mut self, ty: ClipboardType) {
if let Some(selected) = self.terminal.selection_to_string() {
if !selected.is_empty() {
- self.terminal.clipboard().store(ty, selected);
+ self.clipboard.store(ty, selected);
}
}
}
@@ -281,6 +282,10 @@ impl<'a, N: Notify + 'a, T: EventListener> input::ActionContext<T> for ActionCon
self.urls
}
+ fn clipboard(&mut self) -> &mut Clipboard {
+ self.clipboard
+ }
+
/// Spawn URL launcher when clicking on URLs.
fn launch_url(&self, url: Url) {
if self.mouse.block_url_launcher {
@@ -358,6 +363,7 @@ pub struct Processor<N> {
mouse: Mouse,
received_count: usize,
suppress_chars: bool,
+ clipboard: Clipboard,
modifiers: ModifiersState,
config: Config,
message_buffer: MessageBuffer,
@@ -376,6 +382,11 @@ impl<N: Notify + OnResize> Processor<N> {
config: Config,
display: Display,
) -> Processor<N> {
+ #[cfg(not(any(target_os = "macos", windows)))]
+ let clipboard = Clipboard::new(display.window.wayland_display());
+ #[cfg(any(target_os = "macos", windows))]
+ let clipboard = Clipboard::new();
+
Processor {
notifier,
mouse: Default::default(),
@@ -387,6 +398,7 @@ impl<N: Notify + OnResize> Processor<N> {
message_buffer,
display,
event_queue: Vec::new(),
+ clipboard,
}
}
@@ -472,6 +484,7 @@ impl<N: Notify + OnResize> Processor<N> {
terminal: &mut terminal,
notifier: &mut self.notifier,
mouse: &mut self.mouse,
+ clipboard: &mut self.clipboard,
size_info: &mut self.display.size_info,
received_count: &mut self.received_count,
suppress_chars: &mut self.suppress_chars,
@@ -569,6 +582,13 @@ impl<N: Notify + OnResize> Processor<N> {
processor.ctx.display_update_pending.message_buffer = true;
processor.ctx.terminal.dirty = true;
},
+ Event::ClipboardStore(clipboard_type, content) => {
+ processor.ctx.clipboard.store(clipboard_type, content);
+ },
+ Event::ClipboardLoad(clipboard_type, format) => {
+ let text = format(processor.ctx.clipboard.load(clipboard_type).as_str());
+ processor.ctx.write_to_pty(text.into_bytes());
+ },
Event::MouseCursorDirty => processor.reset_mouse_cursor(),
Event::Exit => (),
},