crossterm
crossterm copied to clipboard
Can not capture `MediaKeyCode`s
Describe the bug
When listening to keyboard events, we should be able to also capture media key code events, such as for example MediaKeyCode::Stop
, but this doesn't work.
To Reproduce Run this code:
use std::io::stdout;
use std::time::Duration;
use crossterm::event::{
self, Event, KeyCode, KeyEvent, KeyboardEnhancementFlags, MediaKeyCode,
PopKeyboardEnhancementFlags, PushKeyboardEnhancementFlags,
};
use crossterm::execute;
use crossterm::terminal::{
disable_raw_mode, enable_raw_mode, EnterAlternateScreen, LeaveAlternateScreen,
};
fn main() -> std::result::Result<(), Box<dyn std::error::Error>> {
let mut stdout = stdout();
execute!(stdout, EnterAlternateScreen)?;
enable_raw_mode();
let push_result = execute!(
stdout,
PushKeyboardEnhancementFlags(
KeyboardEnhancementFlags::DISAMBIGUATE_ESCAPE_CODES
| KeyboardEnhancementFlags::REPORT_ALTERNATE_KEYS
)
);
println!("PushKeyboardEnhancementFlags: {:?}", push_result);
loop {
// Wait for an event with a timeout of 500 milliseconds
if crossterm::event::poll(Duration::from_millis(500))? {
// Read the event
if let Event::Key(KeyEvent {
code,
modifiers,
kind,
state,
}) = event::read()?
{
println!("modifiers: {:?}", modifiers);
println!("kind: {:?}", kind);
println!("state: {:?}", state);
match code {
KeyCode::Media(code) => match code {
MediaKeyCode::Stop => {
println!("Stop!")
}
_ => println!("Other media key pressed: {:?}", code),
},
// Handle other KeyCode variants here
KeyCode::Char('q') => {
println!("Exiting...");
break;
}
_ => println!("Other key pressed: {:?}", code),
}
}
}
}
let pop_result = execute!(stdout, PopKeyboardEnhancementFlags);
println!("PushKeyboardEnhancementFlags: {:?}", pop_result);
execute!(stdout, LeaveAlternateScreen)?;
disable_raw_mode();
Ok(())
}
Expected behavior We should see the MediaKeyCode events triggering, but they do not.
OS Linux (Ubuntu 20.04)
Terminal/Console Standard default GNOME terminal.