#[derive(Debug, Clone, Copy, PartialEq, Eq)]
#[allow(dead_code)] pub enum MouseInputMode {
TerminalEmulator,
Tty,
Framebuffer,
}
impl MouseInputMode {
#[allow(dead_code)] pub fn detect(framebuffer_requested: bool) -> Self {
let term = std::env::var("TERM").unwrap_or_default();
if term == "linux" {
if framebuffer_requested {
return MouseInputMode::Framebuffer;
} else {
return MouseInputMode::Tty;
}
}
#[cfg(target_os = "freebsd")]
{
if term == "cons25" || term == "xterm" {
if let Ok(tty) = std::env::var("TTY") {
if tty.starts_with("/dev/ttyv") {
return MouseInputMode::Tty;
}
}
}
}
#[cfg(any(target_os = "netbsd", target_os = "openbsd"))]
{
if term == "wsvt25" || term == "vt220" {
return MouseInputMode::Tty;
}
if let Ok(tty) = std::env::var("TTY") {
if tty.starts_with("/dev/ttyC") || tty.starts_with("/dev/ttyE") {
return MouseInputMode::Tty;
}
}
}
MouseInputMode::TerminalEmulator
}
#[cfg_attr(
not(any(
target_os = "linux",
target_os = "freebsd",
target_os = "netbsd",
target_os = "openbsd"
)),
allow(dead_code)
)]
pub fn uses_raw_input(&self) -> bool {
matches!(self, MouseInputMode::Tty | MouseInputMode::Framebuffer)
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
#[allow(dead_code)] pub enum Protocol {
Ps2,
InputEvent,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Default)]
pub struct MouseButtons {
pub left: bool,
pub right: bool,
pub middle: bool,
}
#[derive(Debug, Clone, Copy)]
#[allow(dead_code)] pub struct RawMouseEvent {
pub dx: i8,
pub dy: i8,
pub buttons: MouseButtons,
pub scroll: i8,
pub scroll_h: i8,
}