martinvonz / jj

A Git-compatible VCS that is both simple and powerful
https://martinvonz.github.io/jj/
Apache License 2.0
8.05k stars 263 forks source link

default pager repeats inputs on windows #3448

Open Zoybean opened 4 months ago

Zoybean commented 4 months ago

Description

inputs are duplicated in default pager cannot select text in default pager

Steps to Reproduce the Problem

  1. Open windows terminal
  2. navigate to a jj repo
  3. jj log
  4. press / and start typing (e.g. "cat")
  5. click and drag mouse to select text

Expected Behavior

pager searches for the entered term (e.g. "cat") terminal selects the moused-over text

Actual Behavior

pager has duplicated every keypress, so it is searching for e.g. "/ccatat" instead of "cat" cannot select text, and screen appears to refresh every time the mouse moves (flicker no longer happens in 0.16)

Specifications

ErichDonGubler commented 2 months ago

This actually goes a few layers down into dependencies. 😅 minus updated its crossterm dependency in https://github.com/AMythicDev/minus/commit/39224c3cba9c88c2822359b86279ba76e8c31f52, which started reporting key repeats and releases (distinguished by the KeyEvent::kind field) when the KeyboardEnhancementFlags::REPORT_EVENT_TYPES feature was set. minus didn't migrate code to distinguish these events, so it ends up duplicating input when the feature is set. crossterm always[^1] sets this feature on Windows, so this bubbled up to jj.

I've filed an issue and PR pair in minus upstream to handle this bug:

[^1]: This is slated to change to be opt-in with https://github.com/crossterm-rs/crossterm/pull/778.

ErichDonGubler commented 2 months ago

Update: minus upstream has merged https://github.com/AMythicDev/minus/pull/141, and is awaiting release.