refactor: split main.rs into more files; add docs

This commit is contained in:
swaits committed 2025-07-27 14:25:47 -04:00
1 parent 8b647a2380
commit de6b4f4d30
6 files changed
+709 -597

No files matched your search

+38
View File
@@ -0,0 +1,38 @@
//! Input handling utilities for interactive features.
//!
//! This module provides functions for reading raw keyboard input,
//! particularly for handling arrow keys in the interactive review mode.
use std::io::{self, Read};
use termion::raw::IntoRawMode;
/// Reads raw keyboard input including arrow keys and special characters.
/// Handles ANSI escape sequences for arrow keys and returns string representations.
/// Used for interactive navigation in review mode.
pub fn read_key_input() -> io::Result<String> {
let _stdout = io::stdout().into_raw_mode()?;
let mut buffer = [0; 3];
// Read first byte
io::stdin().read_exact(&mut buffer[0..1])?;
match buffer[0] {
27 => {
// ESC sequence, read next two bytes
io::stdin().read_exact(&mut buffer[1..3])?;
match (buffer[1], buffer[2]) {
(91, 65) => Ok("up".to_string()), // ESC[A
(91, 66) => Ok("down".to_string()), // ESC[B
(91, 67) => Ok("right".to_string()), // ESC[C
(91, 68) => Ok("left".to_string()), // ESC[D
_ => Ok("unknown".to_string()),
}
}
b'\n' | b'\r' => Ok("enter".to_string()),
b'q' => Ok("q".to_string()),
b'p' => Ok("p".to_string()),
b'a' => Ok("a".to_string()),
b's' => Ok("s".to_string()),
_ => Ok("unknown".to_string()),
}
}