This repository has been archived by the owner on May 17, 2023. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathxephyr-xclip-put.rs
executable file
·54 lines (46 loc) · 1.74 KB
/
xephyr-xclip-put.rs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
#!/usr/bin/env run-cargo-script
use std::io::prelude::*;
use std::process::Command;
use std::process::Stdio;
use std::{thread, time};
// Vasya Novikov's personal script, makes little sense outside of my computer...
//
// Note: this script is written to get some additional familiarity with Rust.
// If you want something practical (time-effective, 1/4 LoC), consider using Bash.
fn main() {
thread::sleep(time::Duration::from_millis(200));
let window_name = Command::new("xdotool")
.arg("getactivewindow").arg("getwindowname")
.output().unwrap().stdout;
let window_name = String::from_utf8_lossy(&window_name);
let window_name = window_name.trim();
println!("current window: {}", window_name);
let display_list = std::fs::read_dir("/tmp/.X11-unix").unwrap();
for display_file in display_list {
let display_file = display_file.unwrap();
let display_name: String = display_file.file_name()
.into_string().unwrap()
.chars().skip(1).collect();
// println!("{}", display_name);
if window_name.contains(&display_name)
&& display_name.len() > 5
&& display_name.parse::<u32>().is_ok() {
display_name.parse::<u32>().unwrap();
println!("Found appropriate display: {}", display_name);
let output = Command::new("xclip")
// .arg("-selection").arg("XA_SECONDARY")
.arg("-selection").arg("XA_SECONDARY")
.arg("-o")
.output().unwrap();
assert!(output.status.success());
let output = String::from_utf8_lossy(&output.stdout);
println!("Input: {:?}", output);
let put_command = Command::new("xclip")
.arg("-selection").arg("clipboard")
.env("DISPLAY", format!(":{}", display_name))
.stdin(Stdio::piped())
.spawn().unwrap();
write!(put_command.stdin.unwrap(), "{}", output).unwrap();
}
}
}