aboutsummaryrefslogtreecommitdiff
path: root/alacritty_terminal
diff options
context:
space:
mode:
Diffstat (limited to 'alacritty_terminal')
-rw-r--r--alacritty_terminal/Cargo.toml2
-rw-r--r--alacritty_terminal/src/config/mod.rs25
-rw-r--r--alacritty_terminal/src/term/mod.rs18
3 files changed, 43 insertions, 2 deletions
diff --git a/alacritty_terminal/Cargo.toml b/alacritty_terminal/Cargo.toml
index 5782a8fb..2f5e930a 100644
--- a/alacritty_terminal/Cargo.toml
+++ b/alacritty_terminal/Cargo.toml
@@ -1,6 +1,6 @@
[package]
name = "alacritty_terminal"
-version = "0.19.2-dev"
+version = "0.20.0-dev"
authors = ["Christian Duerr <contact@christianduerr.com>", "Joe Wilm <joe@jwilm.com>"]
license = "Apache-2.0"
description = "Library for writing terminal emulators"
diff --git a/alacritty_terminal/src/config/mod.rs b/alacritty_terminal/src/config/mod.rs
index 80be4d16..e70389ec 100644
--- a/alacritty_terminal/src/config/mod.rs
+++ b/alacritty_terminal/src/config/mod.rs
@@ -31,11 +31,36 @@ pub struct Config {
/// Cursor configuration.
pub cursor: Cursor,
+ /// Terminal specific settings.
+ pub terminal: Terminal,
+
#[config(flatten)]
pub pty_config: PtyConfig,
}
#[derive(ConfigDeserialize, Clone, Debug, PartialEq, Eq, Default)]
+pub struct Terminal {
+ // OSC 52 handling (clipboard handling).
+ pub osc52: Osc52,
+}
+
+#[derive(ConfigDeserialize, Clone, Debug, PartialEq, Eq, Default)]
+pub enum Osc52 {
+ /// The handling of the escape sequence is disabled.
+ Disabled,
+ /// Only copy sequence is accepted.
+ ///
+ /// This option is the default as a compromiss between entirely
+ /// disabling it (the most secure) and allowing `paste` (the less secure).
+ #[default]
+ OnlyCopy,
+ /// Only paste sequence is accepted.
+ OnlyPaste,
+ /// Both are accepted.
+ CopyPaste,
+}
+
+#[derive(ConfigDeserialize, Clone, Debug, PartialEq, Eq, Default)]
pub struct PtyConfig {
/// Path to a shell program to run on startup.
pub shell: Option<Program>,
diff --git a/alacritty_terminal/src/term/mod.rs b/alacritty_terminal/src/term/mod.rs
index 7c4abb57..2e66b402 100644
--- a/alacritty_terminal/src/term/mod.rs
+++ b/alacritty_terminal/src/term/mod.rs
@@ -12,7 +12,7 @@ use vte::ansi::{Hyperlink as VteHyperlink, Rgb as VteRgb};
use crate::ansi::{
self, Attr, CharsetIndex, Color, CursorShape, CursorStyle, Handler, NamedColor, StandardCharset,
};
-use crate::config::Config;
+use crate::config::{Config, Osc52, Terminal};
use crate::event::{Event, EventListener};
use crate::grid::{Dimensions, Grid, GridIterator, Scroll};
use crate::index::{self, Boundary, Column, Direction, Line, Point, Side};
@@ -304,6 +304,9 @@ pub struct Term<T> {
/// Information about damaged cells.
damage: TermDamageState,
+
+ /// Config directly for the terminal.
+ config: Terminal,
}
impl<T> Term<T> {
@@ -363,6 +366,7 @@ impl<T> Term<T> {
title_stack: Vec::new(),
selection: None,
damage,
+ config: config.terminal.clone(),
}
}
@@ -461,6 +465,8 @@ impl<T> Term<T> {
self.grid.update_history(config.scrolling.history() as usize);
}
+ self.config = config.terminal.clone();
+
// Damage everything on config updates.
self.mark_fully_damaged();
}
@@ -1539,6 +1545,11 @@ impl<T: EventListener> Handler for Term<T> {
/// Store data into clipboard.
#[inline]
fn clipboard_store(&mut self, clipboard: u8, base64: &[u8]) {
+ if !matches!(self.config.osc52, Osc52::OnlyCopy | Osc52::CopyPaste) {
+ debug!("Denied osc52 store");
+ return;
+ }
+
let clipboard_type = match clipboard {
b'c' => ClipboardType::Clipboard,
b'p' | b's' => ClipboardType::Selection,
@@ -1555,6 +1566,11 @@ impl<T: EventListener> Handler for Term<T> {
/// Load data from clipboard.
#[inline]
fn clipboard_load(&mut self, clipboard: u8, terminator: &str) {
+ if !matches!(self.config.osc52, Osc52::OnlyPaste | Osc52::CopyPaste) {
+ debug!("Denied osc52 load");
+ return;
+ }
+
let clipboard_type = match clipboard {
b'c' => ClipboardType::Clipboard,
b'p' | b's' => ClipboardType::Selection,