//! 事件循环：从 crossterm 读取键盘事件。
//!
//! 写操作需要弹出 osascript 图形授权对话框。在 raw 模式 + alternate screen 下
//! 调用 osascript 一般也能弹出（osascript 走的是 WindowServer，不是终端），
//! 但为了稳妥，提权过程本身不读 tty，所以这里保持简单的同步读取即可。

use anyhow::Result;
use crossterm::event::{self, Event, KeyEvent};

/// 阻塞读取下一个键盘事件（鼠标事件忽略）。
pub fn next_event() -> Result<KeyEvent> {
    loop {
        let ev = event::read()?;
        if let Event::Key(k) = ev {
            return Ok(k);
        }
        // 鼠标/窗口大小变化等忽略，继续等下一个键盘事件
    }
}
