|
1 | | -use anyhow::{anyhow, bail}; |
| 1 | +use anyhow::{anyhow, bail, Context}; |
2 | 2 | use crossterm::event::{ |
3 | 3 | KeyCode, KeyEvent, KeyEventKind, KeyEventState, KeyModifiers, MediaKeyCode, |
4 | 4 | ModifierKeyCode, MouseButton, MouseEvent, MouseEventKind, |
@@ -296,10 +296,11 @@ where |
296 | 296 |
|
297 | 297 | let (mods, kind) = if let Some(mods_param) = params.next() { |
298 | 298 | let mut mods_param = mods_param.split(':'); |
299 | | - let mods = |
300 | | - parse_modifiers(mods_param.next().unwrap_or_default().parse::<u8>()?); |
| 299 | + let mods = parse_modifiers( |
| 300 | + mods_param.next().unwrap_or("0").parse::<u8>().unwrap_or(0), |
| 301 | + ); |
301 | 302 | let kind = parse_key_event_kind( |
302 | | - mods_param.next().unwrap_or("").parse().unwrap_or_default(), |
| 303 | + mods_param.next().unwrap_or("").parse().unwrap_or(0), |
303 | 304 | ); |
304 | 305 | (mods, kind) |
305 | 306 | } else { |
@@ -330,7 +331,8 @@ where |
330 | 331 | } else { |
331 | 332 | // CSI unicode-key-code:alternate-key-codes ; modifiers:event-type ; text-as-codepoints u |
332 | 333 |
|
333 | | - let (code, alt_code, mods_param, kind) = parse_csi_u(params)?; |
| 334 | + let (code, alt_code, mods_param, kind) = |
| 335 | + parse_csi_u(params).context("parse_csi_u")?; |
334 | 336 |
|
335 | 337 | let mut mods = parse_modifiers(mods_param); |
336 | 338 | let kind = parse_key_event_kind(kind); |
@@ -564,20 +566,18 @@ fn parse_csi_u(params: &[u8]) -> anyhow::Result<(u32, Option<u32>, u8, u8)> { |
564 | 566 | let params = str::from_utf8(params)?; |
565 | 567 | let mut params = params.split(';'); |
566 | 568 |
|
567 | | - let code_param = params.next().ok_or_else(|| anyhow!("No code param"))?; |
| 569 | + let code_param = params.next().unwrap_or(""); |
568 | 570 | let mut code_param = code_param.split(':'); |
569 | | - let code = code_param.next().ok_or_else(|| anyhow!("No code param"))?; |
| 571 | + let code = code_param.next().unwrap_or("0"); |
570 | 572 | let code = code.parse::<u32>()?; |
571 | 573 |
|
572 | | - let alt_code = code_param.next().map(|c| c.parse::<u32>()).transpose()?; |
| 574 | + let alt_code = code_param.next().map(|c| c.parse::<u32>().ok()).flatten(); |
573 | 575 |
|
574 | 576 | let mods_param = params.next().unwrap_or("0"); |
575 | 577 | let mut mods_param = mods_param.split(':'); |
576 | | - let mods = mods_param |
577 | | - .next() |
578 | | - .ok_or_else(|| anyhow!("No modifiers param"))?; |
579 | | - let mods = mods.parse::<u8>()?; |
580 | | - let kind = mods_param.next().map_or(Ok(1), |n| n.parse::<u8>())?; |
| 578 | + let mods = mods_param.next().unwrap_or("0"); |
| 579 | + let mods = mods.parse::<u8>().unwrap_or(0); |
| 580 | + let kind = mods_param.next().unwrap_or("1").parse::<u8>().unwrap_or(1); |
581 | 581 |
|
582 | 582 | Ok((code, alt_code, mods, kind)) |
583 | 583 | } |
|
0 commit comments