pub mod difftool;
pub mod highlight;
pub mod input;
pub mod widgets;
use ratatui::DefaultTerminal;
use ratatui::crossterm::event::{
KeyboardEnhancementFlags, PopKeyboardEnhancementFlags, PushKeyboardEnhancementFlags,
};
use ratatui::crossterm::terminal::supports_keyboard_enhancement;
use ratatui::crossterm::{ExecutableCommand, execute};
use std::io::stdout;
pub fn push_keyboard_enhancement() -> bool {
if supports_keyboard_enhancement().unwrap_or(false) {
let _ = execute!(
stdout(),
PushKeyboardEnhancementFlags(KeyboardEnhancementFlags::DISAMBIGUATE_ESCAPE_CODES)
);
true
} else {
false
}
}
pub fn pop_keyboard_enhancement() {
let _ = stdout().execute(PopKeyboardEnhancementFlags);
}
pub fn pane_width(terminal: &DefaultTerminal) -> u16 {
terminal
.size()
.map(|s| s.width.saturating_sub(2))
.unwrap_or(120)
}
pub fn pane_height(terminal: &DefaultTerminal) -> u16 {
terminal
.size()
.map(|s| ((s.height as u32 * 6 / 10).saturating_sub(2).max(1)) as u16)
.unwrap_or(20)
}
pub fn half_page(terminal: &DefaultTerminal) -> u16 {
(pane_height(terminal) / 2).max(1)
}
pub fn clamp_scroll(scroll: u16, total_lines: usize, viewport: u16) -> u16 {
let max = (total_lines.min(u16::MAX as usize) as u16).saturating_sub(viewport);
scroll.min(max)
}
pub fn clamp_hscroll(hscroll: u16, max_line: usize, cell_w: u16) -> u16 {
let max = (max_line.min(u16::MAX as usize) as u16).saturating_sub(cell_w);
hscroll.min(max)
}