refactor: split main.rs into more files; add docs
This commit is contained in:
6 files changed
+709
-597
No files matched your search
@@ -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()),
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user