/
dgrigorev
/
veda
Обзор
Документация
Войти
/
dgrigorev
/
veda
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
src/input/mod.rs
59 строк
3 KB
Дмитрий Григорьев
Initial commit
01 июн 2026, 17:44
01 июн 2026, 17:44
a063587
Код
Авторство
О чём код?
// ============================================================================ // input/mod.rs — фасад подсистемы ввода (клавиатура + мышь). // --------------------------------------------------------------------------- // Здесь собраны процессоры ввода и разбор «горячих клавиш» из конфига. // key_processor — клавиши -> escape-последовательности для PTY; // mouse_processor — мышь -> прокрутка/выделение. // // Горячие клавиши приложения (новая вкладка, сплит и т.п.) распознаются // отдельно от обычного ввода: если нажатие совпало с привязкой — оно // перехватывается приложением и НЕ уходит в shell. // ============================================================================ pub mod key_processor; pub mod mouse_processor; use winit::keyboard::{Key, ModifiersState, NamedKey}; /// Команды уровня приложения, инициируемые «горячими клавишами». #[derive(Debug, Clone, Copy, PartialEq, Eq)] pub enum AppCommand { NewTab, CloseTab, NextTab, SplitHorizontal, SplitVertical, Copy, Paste, } /// Распознать горячую клавишу приложения по нажатию + модификаторам. /// Возвращает None, если это обычный ввод (его надо отправить в PTY). /// /// Привязки здесь зашиты под значения по умолчанию из config (Ctrl+Shift+…). /// TODO: парсить строки привязок из Config и сопоставлять динамически. pub fn match_app_command(key: &Key, mods: ModifiersState) -> Option<AppCommand> { let ctrl = mods.control_key(); let shift = mods.shift_key(); // Ctrl+Tab — переключение вкладок. if ctrl && matches!(key, Key::Named(NamedKey::Tab)) && !shift { return Some(AppCommand::NextTab); } // Ctrl+Shift+<буква> — команды приложения. if ctrl && shift { if let Key::Character(s) = key { match s.to_lowercase().as_str() { "t" => return Some(AppCommand::NewTab), "w" => return Some(AppCommand::CloseTab), "h" => return Some(AppCommand::SplitHorizontal), "v" => return Some(AppCommand::SplitVertical), "c" => return Some(AppCommand::Copy), "p" => return Some(AppCommand::Paste), _ => {} } } } None }