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
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
use std::{env, io};
use terminfo::Database;
use crate::config::Config;
#[cfg(not(windows))]
mod unix;
#[cfg(not(windows))]
pub use self::unix::*;
#[cfg(windows)]
pub mod windows;
#[cfg(windows)]
pub use self::windows::*;
pub trait EventedReadWrite {
type Reader: io::Read;
type Writer: io::Write;
fn register(
&mut self,
_: &mio::Poll,
_: &mut dyn Iterator<Item = mio::Token>,
_: mio::Ready,
_: mio::PollOpt,
) -> io::Result<()>;
fn reregister(&mut self, _: &mio::Poll, _: mio::Ready, _: mio::PollOpt) -> io::Result<()>;
fn deregister(&mut self, _: &mio::Poll) -> io::Result<()>;
fn reader(&mut self) -> &mut Self::Reader;
fn read_token(&self) -> mio::Token;
fn writer(&mut self) -> &mut Self::Writer;
fn write_token(&self) -> mio::Token;
}
#[derive(Debug, PartialEq)]
pub enum ChildEvent {
Exited,
}
pub trait EventedPty: EventedReadWrite {
fn child_event_token(&self) -> mio::Token;
fn next_child_event(&mut self) -> Option<ChildEvent>;
}
pub fn setup_env<C>(config: &Config<C>) {
env::set_var(
"TERM",
if Database::from_name("alacritty").is_ok() { "alacritty" } else { "xterm-256color" },
);
env::set_var("COLORTERM", "truecolor");
env::remove_var("DESKTOP_STARTUP_ID");
for (key, value) in config.env.iter() {
env::set_var(key, value);
}
}