crossterm icon indicating copy to clipboard operation
crossterm copied to clipboard

Event::Mouse doesn't capture modifiers in zellij

Open TornaxO7 opened this issue 1 year ago • 1 comments

Describe the bug If I'm in a session of zellij, hold shift and create some mouse-events, my shift key doesn't get registered.

To Reproduce Steps to reproduce the behavior:

  1. Install zellij. (latest version: 0.39.2)
  2. create a session (just execute zellij)
  3. create a new project (cargo init demo && cd demo)
  4. cargo add crossterm
  5. Now add the following code to main.rs:
//! Demonstrates how to block read events.
//!
//! cargo run --example event-read

use std::io;

use crossterm::event::{
    KeyboardEnhancementFlags, PopKeyboardEnhancementFlags, PushKeyboardEnhancementFlags,
};
use crossterm::{
    event::{
        read, DisableBracketedPaste, DisableFocusChange, DisableMouseCapture, EnableBracketedPaste,
        EnableFocusChange, EnableMouseCapture, Event, KeyCode,
    },
    execute, queue,
    terminal::{disable_raw_mode, enable_raw_mode},
};

fn print_events() -> io::Result<()> {
    loop {
        let event = read()?;

        if let Event::Mouse(event) = event {
            println!("{:?}", event.modifiers);
        }

        if event == Event::Key(KeyCode::Esc.into()) {
            break;
        }
    }

    Ok(())
}

fn main() -> io::Result<()> {
    enable_raw_mode()?;

    let mut stdout = io::stdout();

    let supports_keyboard_enhancement = matches!(
        crossterm::terminal::supports_keyboard_enhancement(),
        Ok(true)
    );

    if supports_keyboard_enhancement {
        queue!(
            stdout,
            PushKeyboardEnhancementFlags(KeyboardEnhancementFlags::all())
        )?;
    }

    execute!(
        stdout,
        EnableBracketedPaste,
        EnableFocusChange,
        EnableMouseCapture,
    )?;

    if let Err(e) = print_events() {
        println!("Error: {:?}\r", e);
    }

    if supports_keyboard_enhancement {
        queue!(stdout, PopKeyboardEnhancementFlags)?;
    }

    execute!(
        stdout,
        DisableBracketedPaste,
        PopKeyboardEnhancementFlags,
        DisableFocusChange,
        DisableMouseCapture
    )?;

    disable_raw_mode()
}
6. Now start the program in the session: `cargo run` 7. Hold `shift` and roll your mouse wheel.

The output I'm getting:

KeyModifiers(0x0)
KeyModifiers(0x0)
KeyModifiers(0x0)
KeyModifiers(0x0)
KeyModifiers(0x0)
KeyModifiers(0x0)
KeyModifiers(0x0)
KeyModifiers(0x0)
KeyModifiers(0x0)
KeyModifiers(0x0)

Expected behavior The following output:

KeyModifiers(SHIFT)
KeyModifiers(SHIFT)
KeyModifiers(SHIFT)
KeyModifiers(SHIFT)
KeyModifiers(SHIFT)
KeyModifiers(SHIFT)
KeyModifiers(SHIFT)

OS NixOS

Terminal/Console

TornaxO7 avatar Dec 08 '23 15:12 TornaxO7

hm... maybe I need to report this to zellij and not here.

TornaxO7 avatar Dec 08 '23 15:12 TornaxO7