mirror of
https://github.com/wez/wezterm.git
synced 2024-12-18 02:42:05 +03:00
Add support for OSC 52, clipboard
We only allow setting, not reading, the clipboard.
This commit is contained in:
parent
80f114c3ee
commit
7b7b7cff46
@ -4,6 +4,7 @@ name = "term"
|
|||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
|
base64 = "0.9.0"
|
||||||
bitflags = "1.0.1"
|
bitflags = "1.0.1"
|
||||||
failure = "0.1.1"
|
failure = "0.1.1"
|
||||||
maplit = "1.0.1"
|
maplit = "1.0.1"
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
//! Terminal model
|
//! Terminal model
|
||||||
#![feature(slice_patterns)]
|
#![feature(slice_patterns)]
|
||||||
|
|
||||||
|
extern crate base64;
|
||||||
#[macro_use]
|
#[macro_use]
|
||||||
extern crate bitflags;
|
extern crate bitflags;
|
||||||
#[allow(unused_imports)]
|
#[allow(unused_imports)]
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
use super::*;
|
use super::*;
|
||||||
|
use base64;
|
||||||
use std::fmt::Write;
|
use std::fmt::Write;
|
||||||
use unicode_segmentation::UnicodeSegmentation;
|
use unicode_segmentation::UnicodeSegmentation;
|
||||||
|
|
||||||
@ -1286,6 +1287,33 @@ impl<'a> vte::Perform for Performer<'a> {
|
|||||||
eprintln!("OSC: failed to decode utf title for {:?}", title);
|
eprintln!("OSC: failed to decode utf title for {:?}", title);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
&[b"52", _selection_number] => {
|
||||||
|
// Clear selection
|
||||||
|
self.host.set_clipboard(None).ok();
|
||||||
|
}
|
||||||
|
|
||||||
|
&[b"52", _selection_number, b"?"] => {
|
||||||
|
// query selection
|
||||||
|
}
|
||||||
|
|
||||||
|
&[b"52", _selection_number, selection_data] => {
|
||||||
|
// Set selection
|
||||||
|
fn decode_and_clip(data: &[u8], host: &mut TerminalHost) -> Result<(), Error> {
|
||||||
|
let bytes = base64::decode(data)?;
|
||||||
|
let s = str::from_utf8(&bytes)?;
|
||||||
|
host.set_clipboard(Some(s.to_string()))?;
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
|
||||||
|
match decode_and_clip(selection_data, self.host) {
|
||||||
|
Ok(_) => (),
|
||||||
|
Err(err) => {
|
||||||
|
eprintln!("failed to set clipboard in response to OSC 52: {:?}", err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
&[b"8", params, url] => {
|
&[b"8", params, url] => {
|
||||||
// Hyperlinks per:
|
// Hyperlinks per:
|
||||||
// https://gist.github.com/egmontkob/eb114294efbcd5adb1944c9f3cb5feda
|
// https://gist.github.com/egmontkob/eb114294efbcd5adb1944c9f3cb5feda
|
||||||
@ -1304,7 +1332,7 @@ impl<'a> vte::Perform for Performer<'a> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
&[b"777", ..] => {
|
&[b"777", _..] => {
|
||||||
// Appears to be an old RXVT command to address perl extensions
|
// Appears to be an old RXVT command to address perl extensions
|
||||||
}
|
}
|
||||||
&[b"7", _cwd_uri] => {
|
&[b"7", _cwd_uri] => {
|
||||||
|
Loading…
Reference in New Issue
Block a user