Skip to content

Commit

Permalink
Add terminal config section to control OSCs
Browse files Browse the repository at this point in the history
Some environments demand certain OSC sequences to be disabled or
some escape sequence could require handling which is out of scope
of alacritty, but could be done by external script (OSC 777).

Added section for now just handles the `OSC 52` sequence and changes
its default to be `OnlyCopy`, which is handy for remote copy, but
`Paste` is redundant because normal `Paste` hotkey could be used as
well.

Fixes alacritty#3386.

Co-authored-by: Christian Duerr <contact@christianduerr.com>
  • Loading branch information
kchibisov and chrisduerr authored Jul 22, 2023
1 parent f2e5438 commit 0c94e4a
Show file tree
Hide file tree
Showing 7 changed files with 60 additions and 4 deletions.
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
- The default colorscheme is now based on base16 classic dark
- IME popup now tries to not obscure the current cursor line
- The double click threshold was raised to `400ms`
- OSC 52 paste ability is now **disabled by default**; use `terminal.osc52` to adjust it

### Fixed

Expand Down
2 changes: 1 addition & 1 deletion Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion alacritty/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ rust-version = "1.65.0"

[dependencies.alacritty_terminal]
path = "../alacritty_terminal"
version = "0.19.2-dev"
version = "0.20.0-dev"
default-features = false

[dependencies.alacritty_config_derive]
Expand Down
2 changes: 1 addition & 1 deletion alacritty_terminal/Cargo.toml
Original file line number Diff line number Diff line change
@@ -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"
Expand Down
25 changes: 25 additions & 0 deletions alacritty_terminal/src/config/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -31,10 +31,35 @@ 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.
Expand Down
18 changes: 17 additions & 1 deletion alacritty_terminal/src/term/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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};
Expand Down Expand Up @@ -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> {
Expand Down Expand Up @@ -363,6 +366,7 @@ impl<T> Term<T> {
title_stack: Vec::new(),
selection: None,
damage,
config: config.terminal.clone(),
}
}

Expand Down Expand Up @@ -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();
}
Expand Down Expand Up @@ -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,
Expand All @@ -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,
Expand Down
14 changes: 14 additions & 0 deletions extra/man/alacritty.5.scd
Original file line number Diff line number Diff line change
Expand Up @@ -534,6 +534,20 @@ This section documents the *[cursor]* table of the configuration file.

Default: _0.15_

# Terminal

This section documents the *[terminal]* table of the configuration file.

*osc52* "Disabled" | "OnlyCopy" | "OnlyPaste" | "CopyPaste"

Controls the ability to write to the system clipboard with the _OSC 52_
escape sequence. While this escape sequence is useful to copy contents
from the remote server, allowing any application to read from the clipboard
can be easily abused while not providing significant benefits over
explicitly pasting text.

Default: _"OnlyCopy"_

# Mouse

This section documents the *[mouse]* table of the configuration file.
Expand Down

0 comments on commit 0c94e4a

Please sign in to comment.