Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix for not providing the correct information on Ctrl-[ and CTRL-] in Windows #3696

Open
wants to merge 1 commit into
base: v0.29.x
Choose a base branch
from

Conversation

zbyna
Copy link

@zbyna zbyna commented May 14, 2024

This fixes #3621 .
I tested it in neovide OS: Windows 10 Pro 22H2, Neovide Version 0.12.2
with Czech, German and English layout:

TRACE [neovide::window::keyboard_manager] KeyEvent {
    physical_key: Code(
        ControlLeft,
    ),
    logical_key: Named(
        Control,
    ),
    text: None,
    location: Left,
    state: Pressed,
    repeat: false,
    platform_specific: KeyEventExtra {
        text_with_all_modifers: None,
        key_without_modifiers: Named(
            Control,
        ),
    },
}
TRACE [neovide::window::keyboard_manager] KeyEvent {
    physical_key: Code(
        BracketRight,
    ),
    logical_key: Character(
        ")",
    ),
    text: Some(
        "]",
    ),
    location: Standard,
    state: Pressed,
    repeat: false,
    platform_specific: KeyEventExtra {
        text_with_all_modifers: Some(
            "\u{1d}",
        ),
        key_without_modifiers: Character(
            ")",
        ),
    },
}
TRACE [neovide::window::keyboard_manager] Key pressed <C-]> ModifiersState(CONTROL)
TRACE [neovide::channel_utils] UICommand Serial(Keyboard("<C-]>"))
TRACE [neovide::bridge::ui_commands] In Serial Command
TRACE [neovide::bridge::ui_commands] Keyboard Input Sent: <C-]>
TRACE [neovide::window::keyboard_manager] KeyEvent {
    physical_key: Code(
        BracketRight,
    ),
    logical_key: Character(
        ")",
    ),
    text: None,
    location: Standard,
    state: Released,
    repeat: false,
    platform_specific: KeyEventExtra {
        text_with_all_modifers: None,
        key_without_modifiers: Character(
            ")",
        ),
    },
}
TRACE [neovide::window::keyboard_manager] Modifiers { state: ModifiersState(0x0), pressed_mods: ModifiersKeys(0x0) }
TRACE [neovide::window::keyboard_manager] KeyEvent {
    physical_key: Code(
        ControlLeft,
    ),
    logical_key: Named(
        Control,
    ),
    text: None,
    location: Left,
    state: Released,
    repeat: false,
    platform_specific: KeyEventExtra {
        text_with_all_modifers: None,
        key_without_modifiers: Named(
            Control,
        ),
    },
}
TRACE [neovide::window::keyboard_manager] Modifiers { state: ModifiersState(CONTROL), pressed_mods: ModifiersKeys(0x0) }
TRACE [neovide::window::keyboard_manager] KeyEvent {
    physical_key: Code(
        ControlLeft,
    ),
    logical_key: Named(
        Control,
    ),
    text: None,
    location: Left,
    state: Pressed,
    repeat: false,
    platform_specific: KeyEventExtra {
        text_with_all_modifers: None,
        key_without_modifiers: Named(
            Control,
        ),
    },
}
TRACE [neovide::window::keyboard_manager] KeyEvent {
    physical_key: Code(
        BracketLeft,
    ),
    logical_key: Character(
        "ú",
    ),
    text: Some(
        "[",
    ),
    location: Standard,
    state: Pressed,
    repeat: false,
    platform_specific: KeyEventExtra {
        text_with_all_modifers: Some(
            "\u{1b}",
        ),
        key_without_modifiers: Character(
            "ú",
        ),
    },
}
TRACE [neovide::window::keyboard_manager] Key pressed <C-[> ModifiersState(CONTROL)
TRACE [neovide::channel_utils] UICommand Serial(Keyboard("<C-[>"))
TRACE [neovide::bridge::ui_commands] In Serial Command
TRACE [neovide::bridge::ui_commands] Keyboard Input Sent: <C-[>
TRACE [neovide::bridge::handler] Neovim notification: "redraw"
...
TRACE [neovide::window::keyboard_manager] KeyEvent {
    physical_key: Code(
        BracketLeft,
    ),
    logical_key: Character(
        "ú",
    ),
    text: None,
    location: Standard,
    state: Released,
    repeat: false,
    platform_specific: KeyEventExtra {
        text_with_all_modifers: None,
        key_without_modifiers: Character(
            "ú",
        ),
    },
}
DEBUG [neovide::renderer] zindex: 18446744073709551615, base: 0

I am new in Rust, so please be patient 🙂 Thank you for possible merge.

src/platform_impl/windows/keyboard.rs Outdated Show resolved Hide resolved
@zbyna
Copy link
Author

zbyna commented May 29, 2024

I have a feeling it is needed to describe better (possibly 🙂 ) what I try to achieve in this PR.

The goal is to force two keys with scan codes 1A and 1B to behave as control characters ^[ and ^]

DEC HEX Symbol Description Caret notaion
27 1B ESC Escape ^[
29 1D GS   Group Separator ^]

image

Now I will dive in to how windows handle keys when pressed with CTRL It is a little bit mess in my opinion that is
why I consider it to be important.

  1. All (English) alphabetic keys (from A to Z all included) get mapped to their control codes (ASCII 1 to 26) in WM_CHAR.
    That means that if you press Ctrl-M, your program will receive a nice WM_CHAR message with the 13 code, usually corresponding to the RETURN key.

  2. Further you can generate WM_CHAR with:

    • ASCII code 27, that is, ESC, can be both generated by the ESC key and by the CTRL-[ combination.
    • ASCII 28 with CTRL-\ ,
    • ASCII 29 with CTRL-],
    • ASCII 30 with CTRL-SHIFT-6 (which is more like CTRL-^), and
    • ASCII 31 with CTRL-SHIFT-hyphen (which should be read as CTRL-_).
    • ASCII 127 DEL character with CTRL-BACKSPACE
    • ASCII 10 with CTRL-Return

    I usually use a non-US keyboard, for which I can tell you that the ASCII mapping is a bit lousier than for the US mapping, the ‘[]^' symbols are moved around to other keys but Windows still performs the mapping as if the keyboard had US keytops,

    Means scan codes 1A 1B generates WM_KEYDOWN and WM_CHAR message witth ascii control code 27 and 29 no matter what local characters are printed on their top apparently by design decision you know whom:

    • Czech Layout cs-CZ
      image

    • German Layout de-DE
      image

    This fact is the main reason for the first commit: c29f9ad to alter KeyEvent.Text in WM_CHAR event.

  3. Other non-alphabetic keys don't get an WM_CHAR when pressed together with CTRL, only WM_KEYDOWN.

    • iin Dvorak layout another design decision by you know whom caused that keys for ascii control codes 27 and 29 were moved from scan codes 1A, 1B to 0C, 0D means on the row above, and it also means that WM_CHAR is not fired
    • Dvorak Layout
      image

    This was the reason for the second commit: 54328ca to alter KeyEvent.logical_key in WM_KEYDOWN event.

Not regarding this PR and only in my humble opinion, control codes should be treated in WM_CHAR message using caret notation this way:

  • KeyEvent.logical_key fill with the second char from caret notation and assign the whole caret notion to KeyEvent.text .
  • ^[
    KeyEvent.logical_key = '['
    KeyEvent.text = "^["

Fix  for rust-windowing#3621 part 2

Discard part 1 and part 2

Fix  for rust-windowing#3621 adjusted
@zbyna
Copy link
Author

zbyna commented May 30, 2024

After digging info from kbdlayout.info - only 98 from 215 keyboards use this key:
obrazek
I prepared a new version based on ASCII code emitted by WM_CHAR.

Tested as working in:

  • Dvorak Right-Hand US English Keyboard Layout
  • German Keyboard Layout
  • Czech Keyboard Layout
  • United Kingdom Keyboard Layout
  • Russia(Typewriter) Keyboard Layout

@zbyna zbyna requested a review from kchibisov May 30, 2024 23:40
Copy link
Member

@kchibisov kchibisov left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Could you show me what KeyboardInput events are now compared to before when you press [, Shift+[, Ctrl+[, Shift+Ctrl+[. For regular keys, like A and Shift+A logical key should change as well.

In general, the only value that should change from ctrl is the text_with_all_modifiers IIRC.

If that's all good, it should be fine after you fix the CI issue.

@fredizzimo
Copy link

@kchibisov, I don't know if this fix is correct or not, but the Windows keyboard layouts do in fact allow mapping of ctrl+key to something. Check VK_OEM_4 here https://www.kbdlayout.info/kbdcz/shiftstates/VK_CONTROL. So together with CTRL it should produce ESC.

BTW, if you can ignore my analysis in the original Neovide report, since I don't think it's correct.

I'm not sure what's the best way to fix this is, without further studing, but my first impression is that if the layout maps ctrl, then that should be respected and the winit handling of ctrl disabled for that key.

If @zbyna doesn't want to continue (see neovide/neovide#2459 (comment)) looking at this and at least provide the logs that were requested, I make take a stab at some point. But it will take at least one month before doing that, or even have a windows machine available. I think we have a few other keyboard bugs on Windows as well that could be looked at at the same time. For example this #3012, which might very well be closely related.

@zbyna
Copy link
Author

zbyna commented Jun 7, 2024

EDIT: added table from log

@fredizzimo
Thanks.
Log was created with this:

Log:

Click to here.
TRACE [neovide] Neovide version: 0.13.1
DEBUG [neovide::settings::window_size] Loaded window settings: Windowed { position: PhysicalPosition { x: 200, y: 200 }, pixel_size: Some(PhysicalSize { width: 500, height: 500 }), grid_size: Some(50x22) }
DEBUG [neovide::bridge::command] Starting neovim with: Command { std: "C:\\Program Files\\Neovim\\bin\\nvim.exe" "--embed" "-p", kill_on_drop: false }
INFO [neovide::bridge] Neovide registered to nvim with channel id 1
...
TRACE [neovide::window::keyboard_manager] KeyEvent {
    physical_key: Code(
        KeyI,
    ),
    logical_key: Character(
        "i",
    ),
    text: Some(
        "i",
    ),
    location: Standard,
    state: Pressed,
    repeat: false,
    platform_specific: KeyEventExtra {
        text_with_all_modifers: Some(
            "i",
        ),
        key_without_modifiers: Character(
            "i",
        ),
    },
}
TRACE [neovide::window::keyboard_manager] Key pressed i ModifiersState(0x0)
TRACE [neovide::channel_utils] UIComand Serial(Keyboard("i"))
TRACE [neovide::bridge::ui_commands] In Serial Command
TRACE [neovide::bridge::ui_commands] Keyboard Input Sent: i
TRACE [neovide::bridge::handler] Neovim notification: "redraw"
TRACE [neovide::channel_utils] neovim_handler GridLine { grid: 3, row: 0, column_start: 39, cells: [GridLineCell { text: "i", highlight_id: Some(1), repeat: None }] }
...
TRACE [neovide::window::keyboard_manager] KeyEvent {
    physical_key: Code(
        KeyI,
    ),
    logical_key: Character(
        "i",
    ),
    text: None,
    location: Standard,
    state: Released,
    repeat: false,
    platform_specific: KeyEventExtra {
        text_with_all_modifers: None,
        key_without_modifiers: Character(
            "i",
        ),
    },
}
DEBUG [neovide::renderer] zindex: 18446744073709551615, base: 0
...
TRACE [neovide::window::keyboard_manager] KeyEvent {
    physical_key: Code(
        BracketLeft,
    ),
    logical_key: Character(
        "ú",
    ),
    text: Some(
        "ú",
    ),
    location: Standard,
    state: Pressed,
    repeat: false,
    platform_specific: KeyEventExtra {
        text_with_all_modifers: Some(
            "ú",
        ),
        key_without_modifiers: Character(
            "ú",
        ),
    },
}
TRACE [neovide::window::keyboard_manager] Key pressed ú ModifiersState(0x0)
TRACE [neovide::channel_utils] UIComand Serial(Keyboard("ú"))
TRACE [neovide::bridge::ui_commands] In Serial Command
TRACE [neovide::bridge::ui_commands] Keyboard Input Sent: ú
...
TRACE [neovide::window::keyboard_manager] KeyEvent {
    physical_key: Code(
        BracketLeft,
    ),
    logical_key: Character(
        "ú",
    ),
    text: None,
    location: Standard,
    state: Released,
    repeat: false,
    platform_specific: KeyEventExtra {
        text_with_all_modifers: None,
        key_without_modifiers: Character(
            "ú",
        ),
    },
}
DEBUG [neovide::renderer] zindex: 18446744073709551615, base: 0
...
TRACE [neovide::window::keyboard_manager] Modifiers { state: ModifiersState(SHIFT), pressed_mods: ModifiersKeys(0x0) }
TRACE [neovide::window::keyboard_manager] KeyEvent {
    physical_key: Code(
        ShiftLeft,
    ),
    logical_key: Named(
        Shift,
    ),
    text: None,
    location: Left,
    state: Pressed,
    repeat: false,
    platform_specific: KeyEventExtra {
        text_with_all_modifers: None,
        key_without_modifiers: Named(
            Shift,
        ),
    },
}
TRACE [neovide::window::keyboard_manager] KeyEvent {
    physical_key: Code(
        BracketLeft,
    ),
    logical_key: Character(
        "/",
    ),
    text: Some(
        "/",
    ),
    location: Standard,
    state: Pressed,
    repeat: false,
    platform_specific: KeyEventExtra {
        text_with_all_modifers: Some(
            "/",
        ),
        key_without_modifiers: Character(
            "ú",
        ),
    },
}
TRACE [neovide::window::keyboard_manager] Key pressed / ModifiersState(SHIFT)
TRACE [neovide::channel_utils] UIComand Serial(Keyboard("/"))
TRACE [neovide::bridge::ui_commands] In Serial Command
TRACE [neovide::bridge::ui_commands] Keyboard Input Sent: /
TRACE [neovide::bridge::handler] Neovim notification: "redraw"
..
TRACE [neovide::window::keyboard_manager] KeyEvent {
    physical_key: Code(
        BracketLeft,
    ),
    logical_key: Character(
        "/",
    ),
    text: None,
    location: Standard,
    state: Released,
    repeat: false,
    platform_specific: KeyEventExtra {
        text_with_all_modifers: None,
        key_without_modifiers: Character(
            "ú",
        ),
    },
}
..
TRACE [neovide::window::keyboard_manager] Modifiers { state: ModifiersState(0x0), pressed_mods: ModifiersKeys(0x0) }
TRACE [neovide::window::keyboard_manager] KeyEvent {
    physical_key: Code(
        ShiftLeft,
    ),
    logical_key: Named(
        Shift,
    ),
    text: None,
    location: Left,
    state: Released,
    repeat: false,
    platform_specific: KeyEventExtra {
        text_with_all_modifers: None,
        key_without_modifiers: Named(
            Shift,
        ),
    },
}
DEBUG [neovide::renderer] zindex: 18446744073709551615, base: 0
DEBUG [neovide::renderer] layer: [(3, 18446744073709551615)]
TRACE [neovide::renderer::rendered_window] region: Box2D((0.0, 0.0), (500.0, 484.0)), inner: Rect { left: 0.0, top: 0.0, right: 500.0, bottom: 484.0 }, pics: 2
TRACE [neovide::renderer::rendered_window] region: Box2D((0.0, 22.0), (500.0, 440.0)), inner: Rect { left: 0.0, top: 22.0, right: 500.0, bottom: 440.0 }, pics: 19
TRACE [neovide::renderer::rendered_window] region: Box2D((0.0, 462.0), (500.0, 946.0)), inner: Rect { left: 0.0, top: 462.0, right: 500.0, bottom: 946.0 }, pics: 1
TRACE [neovide::window::keyboard_manager] Modifiers { state: ModifiersState(CONTROL), pressed_mods: ModifiersKeys(0x0) }
TRACE [neovide::window::keyboard_manager] KeyEvent {
    physical_key: Code(
        ControlLeft,
    ),
    logical_key: Named(
        Control,
    ),
    text: None,
    location: Left,
    state: Pressed,
    repeat: false,
    platform_specific: KeyEventExtra {
        text_with_all_modifers: None,
        key_without_modifiers: Named(
            Control,
        ),
    },
}
TRACE [neovide::window::keyboard_manager] KeyEvent {
    physical_key: Code(
        BracketLeft,
    ),
    logical_key: Character(
        "\u{1b}",
    ),
    text: Some(
        "\u{1b}",
    ),
    location: Standard,
    state: Pressed,
    repeat: false,
    platform_specific: KeyEventExtra {
        text_with_all_modifers: Some(
            "\u{1b}",
        ),
        key_without_modifiers: Character(
            "ú",
        ),
    },
}
TRACE [neovide::window::keyboard_manager] Key pressed <C-�> ModifiersState(CONTROL)
TRACE [neovide::channel_utils] UIComand Serial(Keyboard("<C-\u{1b}>"))
TRACE [neovide::bridge::ui_commands] In Serial Command
TRACE [neovide::bridge::ui_commands] Keyboard Input Sent: <C-�>
TRACE [neovide::bridge::handler] Neovim notification: "redraw"
...
TRACE [neovide::window::keyboard_manager] KeyEvent {
    physical_key: Code(
        BracketLeft,
    ),
    logical_key: Character(
        "ú",
    ),
    text: None,
    location: Standard,
    state: Released,
    repeat: false,
    platform_specific: KeyEventExtra {
        text_with_all_modifers: None,
        key_without_modifiers: Character(
            "ú",
        ),
    },
}
...
TRACE [neovide::renderer::rendered_window] region: Box2D((0.0, 462.0), (500.0, 946.0)), inner: Rect { left: 0.0, top: 462.0, right: 500.0, bottom: 946.0 }, pics: 1
TRACE [neovide::window::keyboard_manager] Modifiers { state: ModifiersState(0x0), pressed_mods: ModifiersKeys(0x0) }
TRACE [neovide::window::keyboard_manager] KeyEvent {
    physical_key: Code(
        ControlLeft,
    ),
    logical_key: Named(
        Control,
    ),
    text: None,
    location: Left,
    state: Released,
    repeat: false,
    platform_specific: KeyEventExtra {
        text_with_all_modifers: None,
        key_without_modifiers: Named(
            Control,
        ),
    },
}
TRACE [neovide::window::keyboard_manager] Modifiers { state: ModifiersState(CONTROL), pressed_mods: ModifiersKeys(0x0) }
TRACE [neovide::window::keyboard_manager] KeyEvent {
    physical_key: Code(
        ControlLeft,
    ),
    logical_key: Named(
        Control,
    ),
    text: None,
    location: Left,
    state: Pressed,
    repeat: false,
    platform_specific: KeyEventExtra {
        text_with_all_modifers: None,
        key_without_modifiers: Named(
            Control,
        ),
    },
}
TRACE [neovide::window::keyboard_manager] Modifiers { state: ModifiersState(SHIFT | CONTROL), pressed_mods: ModifiersKeys(0x0) }
TRACE [neovide::window::keyboard_manager] KeyEvent {
    physical_key: Code(
        ShiftLeft,
    ),
    logical_key: Named(
        Shift,
    ),
    text: None,
    location: Left,
    state: Pressed,
    repeat: false,
    platform_specific: KeyEventExtra {
        text_with_all_modifers: None,
        key_without_modifiers: Named(
            Shift,
        ),
    },
}
TRACE [neovide::window::keyboard_manager] KeyEvent {
    physical_key: Code(
        BracketLeft,
    ),
    logical_key: Character(
        "/",
    ),
    text: None,
    location: Standard,
    state: Pressed,
    repeat: false,
    platform_specific: KeyEventExtra {
        text_with_all_modifers: None,
        key_without_modifiers: Character(
            "ú",
        ),
    },
}
TRACE [neovide::window::keyboard_manager] Key pressed <C-/> ModifiersState(SHIFT | CONTROL)
TRACE [neovide::channel_utils] UIComand Serial(Keyboard("<C-/>"))
TRACE [neovide::bridge::ui_commands] In Serial Command
TRACE [neovide::bridge::ui_commands] Keyboard Input Sent: <C-/>
TRACE [neovide::bridge::handler] Neovim notification: "redraw"
TRACE [neovide::channel_utils] neovim_handler GridLine { grid: 3, row: 0, column_start: 39, cells: [GridLineCell { text: "/", highlight_id: Some(1), repeat: None }] }
...
TRACE [neovide::window::keyboard_manager] KeyEvent {
    physical_key: Code(
        BracketLeft,
    ),
    logical_key: Character(
        "/",
    ),
    text: None,
    location: Standard,
    state: Released,
    repeat: false,
    platform_specific: KeyEventExtra {
        text_with_all_modifers: None,
        key_without_modifiers: Character(
            "ú",
        ),
    },
}
DEBUG [neovide::renderer] zindex: 18446744073709551615, base: 0
...
TRACE [neovide::window::keyboard_manager] Modifiers { state: ModifiersState(SHIFT), pressed_mods: ModifiersKeys(0x0) }
TRACE [neovide::window::keyboard_manager] KeyEvent {
    physical_key: Code(
        ControlLeft,
    ),
    logical_key: Named(
        Control,
    ),
    text: None,
    location: Left,
    state: Released,
    repeat: false,
    platform_specific: KeyEventExtra {
        text_with_all_modifers: None,
        key_without_modifiers: Named(
            Control,
        ),
    },
}
TRACE [neovide::window::keyboard_manager] Modifiers { state: ModifiersState(0x0), pressed_mods: ModifiersKeys(0x0) }
TRACE [neovide::window::keyboard_manager] KeyEvent {
    physical_key: Code(
        ShiftLeft,
    ),
    logical_key: Named(
        Shift,
    ),
    text: None,
    location: Left,
    state: Released,
    repeat: false,
    platform_specific: KeyEventExtra {
        text_with_all_modifers: None,
        key_without_modifiers: Named(
            Shift,
        ),
    },
}
DEBUG [neovide::renderer] zindex: 18446744073709551615, base: 0
...
TRACE [neovide::window::keyboard_manager] KeyEvent {
    physical_key: Code(
        Escape,
    ),
    logical_key: Named(
        Escape,
    ),
    text: Some(
        "\u{1b}",
    ),
    location: Standard,
    state: Pressed,
    repeat: false,
    platform_specific: KeyEventExtra {
        text_with_all_modifers: Some(
            "\u{1b}",
        ),
        key_without_modifiers: Named(
            Escape,
        ),
    },
}
TRACE [neovide::window::keyboard_manager] Key pressed <Esc> ModifiersState(0x0)
TRACE [neovide::channel_utils] UIComand Serial(Keyboard("<Esc>"))
TRACE [neovide::bridge::ui_commands] In Serial Command
TRACE [neovide::bridge::ui_commands] Keyboard Input Sent: <Esc>
TRACE [neovide::bridge::handler] Neovim notification: "redraw"
...
TTRACE [neovide::window::keyboard_manager] KeyEvent {
    physical_key: Code(
        Escape,
    ),
    logical_key: Named(
        Escape,
    ),
    text: None,
    location: Standard,
    state: Released,
    repeat: false,
    platform_specific: KeyEventExtra {
        text_with_all_modifers: None,
        key_without_modifiers: Named(
            Escape,
        ),
    },
}
TRACE [neovide::renderer::rendered_window] prepare_lines force: false
...
TRACE [neovide::window::keyboard_manager] Modifiers { state: ModifiersState(SHIFT), pressed_mods: ModifiersKeys(0x0) }
TRACE [neovide::window::keyboard_manager] KeyEvent {
    physical_key: Code(
        ShiftLeft,
    ),
    logical_key: Named(
        Shift,
    ),
    text: None,
    location: Left,
    state: Pressed,
    repeat: false,
    platform_specific: KeyEventExtra {
        text_with_all_modifers: None,
        key_without_modifiers: Named(
            Shift,
        ),
    },
}
TRACE [neovide::window::keyboard_manager] KeyEvent {
    physical_key: Code(
        Period,
    ),
    logical_key: Character(
        ":",
    ),
    text: Some(
        ":",
    ),
    location: Standard,
    state: Pressed,
    repeat: false,
    platform_specific: KeyEventExtra {
        text_with_all_modifers: Some(
            ":",
        ),
        key_without_modifiers: Character(
            ".",
        ),
    },
}
TRACE [neovide::window::keyboard_manager] Key pressed : ModifiersState(SHIFT)
TRACE [neovide::channel_utils] UIComand Serial(Keyboard(":"))
TRACE [neovide::bridge::ui_commands] In Serial Command
TRACE [neovide::bridge::ui_commands] Keyboard Input Sent: :
TRACE [neovide::bridge::handler] Neovim notification: "redraw"
...
TRACE [neovide::window::keyboard_manager] KeyEvent {
    physical_key: Code(
        Period,
    ),
    logical_key: Character(
        ":",
    ),
    text: None,
    location: Standard,
    state: Released,
    repeat: false,
    platform_specific: KeyEventExtra {
        text_with_all_modifers: None,
        key_without_modifiers: Character(
            ".",
        ),
    },
}
DEBUG [neovide::renderer] zindex: 18446744073709551615, base: 0
...
TRACE [neovide::window::keyboard_manager] Modifiers { state: ModifiersState(0x0), pressed_mods: ModifiersKeys(0x0) }
TRACE [neovide::window::keyboard_manager] KeyEvent {
    physical_key: Code(
        ShiftLeft,
    ),
    logical_key: Named(
        Shift,
    ),
    text: None,
    location: Left,
    state: Released,
    repeat: false,
    platform_specific: KeyEventExtra {
        text_with_all_modifers: None,
        key_without_modifiers: Named(
            Shift,
        ),
    },
}
DEBUG [neovide::renderer] zindex: 18446744073709551615, base: 0
...
TRACE [neovide::window::keyboard_manager] KeyEvent {
    physical_key: Code(
        KeyQ,
    ),
    logical_key: Character(
        "q",
    ),
    text: Some(
        "q",
    ),
    location: Standard,
    state: Pressed,
    repeat: false,
    platform_specific: KeyEventExtra {
        text_with_all_modifers: Some(
            "q",
        ),
        key_without_modifiers: Character(
            "q",
        ),
    },
}
TRACE [neovide::window::keyboard_manager] Key pressed q ModifiersState(0x0)
TRACE [neovide::channel_utils] UIComand Serial(Keyboard("q"))
TRACE [neovide::bridge::ui_commands] In Serial Command
TRACE [neovide::bridge::ui_commands] Keyboard Input Sent: q
TRACE [neovide::bridge::handler] Neovim notification: "redraw"
...
TRACE [neovide::window::keyboard_manager] KeyEvent {
    physical_key: Code(
        KeyQ,
    ),
    logical_key: Character(
        "q",
    ),
    text: None,
    location: Standard,
    state: Released,
    repeat: false,
    platform_specific: KeyEventExtra {
        text_with_all_modifers: None,
        key_without_modifiers: Character(
            "q",
        ),
    },
}
TRACE [neovide::window::keyboard_manager] Modifiers { state: ModifiersState(SHIFT), pressed_mods: ModifiersKeys(0x0) }
TRACE [neovide::window::keyboard_manager] KeyEvent {
    physical_key: Code(
        ShiftLeft,
    ),
    logical_key: Named(
        Shift,
    ),
    text: None,
    location: Left,
    state: Pressed,
    repeat: false,
    platform_specific: KeyEventExtra {
        text_with_all_modifers: None,
        key_without_modifiers: Named(
            Shift,
        ),
    },
}
TRACE [neovide::window::keyboard_manager] KeyEvent {
    physical_key: Code(
        Quote,
    ),
    logical_key: Character(
        "!",
    ),
    text: Some(
        "!",
    ),
    location: Standard,
    state: Pressed,
    repeat: false,
    platform_specific: KeyEventExtra {
        text_with_all_modifers: Some(
            "!",
        ),
        key_without_modifiers: Character(
            "§",
        ),
    },
}
TRACE [neovide::window::keyboard_manager] Key pressed ! ModifiersState(SHIFT)
TRACE [neovide::channel_utils] UIComand Serial(Keyboard("!"))
TRACE [neovide::bridge::ui_commands] In Serial Command
TRACE [neovide::bridge::ui_commands] Keyboard Input Sent: !
TRACE [neovide::bridge::handler] Neovim notification: "redraw"
...
TRACE [neovide::window::keyboard_manager] KeyEvent {
    physical_key: Code(
        Quote,
    ),
    logical_key: Character(
        "!",
    ),
    text: None,
    location: Standard,
    state: Released,
    repeat: false,
    platform_specific: KeyEventExtra {
        text_with_all_modifers: None,
        key_without_modifiers: Character(
            "§",
        ),
    },
}
DEBUG [neovide::renderer] zindex: 18446744073709551615, base: 0
...
TRACE [neovide::window::keyboard_manager] Modifiers { state: ModifiersState(0x0), pressed_mods: ModifiersKeys(0x0) }
TRACE [neovide::window::keyboard_manager] KeyEvent {
    physical_key: Code(
        ShiftLeft,
    ),
    logical_key: Named(
        Shift,
    ),
    text: None,
    location: Left,
    state: Released,
    repeat: false,
    platform_specific: KeyEventExtra {
        text_with_all_modifers: None,
        key_without_modifiers: Named(
            Shift,
        ),
    },
}
TRACE [neovide::window::keyboard_manager] KeyEvent {
    physical_key: Code(
        Enter,
    ),
    logical_key: Named(
        Enter,
    ),
    text: Some(
        "\r",
    ),
    location: Standard,
    state: Pressed,
    repeat: false,
    platform_specific: KeyEventExtra {
        text_with_all_modifers: Some(
            "\r",
        ),
        key_without_modifiers: Named(
            Enter,
        ),
    },
}
TRACE [neovide::window::keyboard_manager] Key pressed <Enter> ModifiersState(0x0)
TRACE [neovide::channel_utils] UIComand Serial(Keyboard("<Enter>"))
TRACE [neovide::bridge::ui_commands] In Serial Command
TRACE [neovide::bridge::ui_commands] Keyboard Input Sent: <Enter>
TRACE [neovide::bridge::handler] Neovim notification: "redraw"
...
TRACE [neovide::bridge::handler] Neovim notification: "redraw"
TRACE [neovide::channel_utils] neovim_handler ModeChange { mode: Normal, mode_index: 0 }
TRACE [neovide::channel_utils] neovim_handler MouseOn
TRACE [neovide::channel_utils] neovim_handler Flush
TRACE [neovide::editor] Image flushed
TRACE [neovide::editor] send_batch
INFO [neovide::bridge] Neovim has quit
DEBUG [neovide::settings::window_size] Saved Window Settings: {"window":{"Windowed":{"position":{"x":200,"y":200},"pixel_size":{"width":500,"height":500},"grid_size":[50,22]}}}

Table:

Click to here.

image

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Development

Successfully merging this pull request may close these issues.

None yet

4 participants