mirror of
https://github.com/sxyazi/yazi.git
synced 2026-07-25 08:41:05 +00:00
45 lines
888 B
Rust
45 lines
888 B
Rust
use crate::TermOption;
|
|
|
|
#[derive(Clone, Copy)]
|
|
pub struct TermState {
|
|
pub bg: bool,
|
|
pub csi_u: bool,
|
|
pub mouse: bool,
|
|
pub title: bool,
|
|
pub cursor_shape: u8,
|
|
pub cursor_blink: bool,
|
|
}
|
|
|
|
impl TermState {
|
|
pub(super) const fn default() -> Self {
|
|
Self {
|
|
bg: false,
|
|
csi_u: false,
|
|
mouse: false,
|
|
title: false,
|
|
cursor_shape: 0,
|
|
cursor_blink: false,
|
|
}
|
|
}
|
|
|
|
pub(super) fn new(resp: &str, opt: &TermOption) -> Self {
|
|
let csi_u = resp.contains("\x1b[?0u");
|
|
|
|
let cursor_shape = resp
|
|
.split_once("\x1bP1$r")
|
|
.and_then(|(_, s)| s.bytes().next())
|
|
.filter(|&b| matches!(b, b'0'..=b'6'))
|
|
.map_or(u8::MAX, |b| b - b'0');
|
|
|
|
let cursor_blink = resp.contains("\x1b[?12;1$y");
|
|
|
|
Self {
|
|
bg: !opt.bg.is_empty(),
|
|
csi_u,
|
|
mouse: opt.mouse,
|
|
title: false,
|
|
cursor_shape,
|
|
cursor_blink,
|
|
}
|
|
}
|
|
}
|