[ANNOUNCEMENT] Updated: mintty 3.1.6
Takashi Yano
takashi.yano@nifty.ne.jp
Fri May 22 14:56:32 GMT 2020
On Fri, 22 May 2020 22:54:05 +0900
Takashi Yano via Cygwin <cygwin@cygwin.com> wrote:
> On Fri, 22 May 2020 21:58:00 +0900
> Takashi Yano via Cygwin <cygwin@cygwin.com> wrote:
> > On Fri, 22 May 2020 20:01:31 +0900
> > Takashi Yano via Cygwin <cygwin@cygwin.com> wrote:
> > > On Fri, 22 May 2020 12:14:43 +0200
> > > Thomas Wolff wrote:
> > > > Hi Takashi,
> > > >
> > > > Am 22.05.2020 um 11:22 schrieb Takashi Yano via Cygwin:
> > > > > Hi Thomas,
> > > > >
> > > > > On Thu, 21 May 2020 19:41:27 +0200
> > > > > Thomas Wolff wrote:
> > > > >> I have uploaded mintty 3.1.6 with the following changes:
> > > > >>
> > > > >> Window handling
> > > > >> * Fixed resource leak when displaying images (#995).
> > > > >> * Fixed crash condition on keyboard auto-repeat (#996). (Apologies
> > > > >> for this one.)
> > > > >>
> > > > >> The homepage is at http://mintty.github.io/
> > > > >> It also links to the issue tracker.
> > > > > After v3.1.5, the key repeat rate becomes almost halfened.
> > > > > Is this behaviour by design?
> > > > >
> > > > > The key repeat rate is about 30 chars/sec in v3.1.4, but
> > > > > it is 15 chars/sec in v3.1.5 and v3.1.6.
> > > > >
> > > > > It is little bit flustrating in editor cursor movement.
> > > > >
> > > > I've uploaded a commit: keyboard auto-repeat handling is now unaffected
> > > > by default
> > > > Explanation: the new auto-repeat rate limitation with a maximum of 30
> > > > cps (following the DECARR sequence of VT520) was effectively slowing
> > > > down keyboards; I had the impression 30 would be enough... sorry
> > >
> > > I also think 30 cps would be enough, however, the key repeat rate
> > > is not as setting by ESC[n-p sequence. Measured results in v3.1.6
> > > are as follows. Actual key repeat rate does not increase linearly.
> > >
> > > ^[[1-p : 1 cps
> > > ^[[2-p : 2 cps
> > > ^[[3-p : 3 cps
> > > ^[[5-p : 4.7cps
> > > ^[[10-p : 8.2cps
> > > ^[[20-p : 14.8cps
> > > ^[[30-p : 16.3cps
> >
> > Revising code in wininput.c as follows resolve this problem.
> >
> > static LONG last_key_time = 0;
> > static LONG last_message_time = 0;
> >
> > LONG message_time = GetMessageTime();
> > LONG last_key_time_new = message_time;
> > if (repeat) {
> > #ifdef auto_repeat_cursor_keys_option
> > switch (key) {
> > when VK_PRIOR ... VK_DOWN: do not return...;
> > }
> > #endif
> > if (!term.auto_repeat)
> > return true;
> > if (message_time - last_message_time < 2*1000/term.repeat_rate)
> > /* Key repeat seems to be continued. */
> > last_key_time_new = last_key_time + 1000/term.repeat_rate;
> > last_message_time = message_time;
> > if (message_time - last_key_time < 1000/term.repeat_rate)
> > return true;
> > }
> > last_key_time = last_key_time_new;
> >
> > ^[[1-p : 1 cps
> > ^[[2-p : 2 cps
> > ^[[3-p : 3 cps
> > ^[[5-p : 5 cps
> > ^[[10-p : 9.7cps
> > ^[[20-p : 19.4cps
> > ^[[30-p : 29.0cps
>
> The simplified following code also work as expected.
> Protection for division by 0 is added as well.
>
> static LONG last_key_time = 0;
>
> LONG message_time = GetMessageTime();
> if (repeat) {
> #ifdef auto_repeat_cursor_keys_option
> switch (key) {
> when VK_PRIOR ... VK_DOWN: do not return...;
> }
> #endif
> if (!term.auto_repeat)
> return true;
> if (term.repeat_rate &&
> message_time - last_key_time < 1000 / term.repeat_rate)
> return true;
> }
> if (term.repeat_rate &&
> message_time - last_key_time < 2*1000 / term.repeat_rate)
> /* Key repeat seems to be continued. */
> last_key_time += 1000 / term.repeat_rate;
> else
> last_key_time = message_time;
Sorry again and again. After all, the code above doesn't work
as expected. I would like to propose the code below.
static LONG last_key_time = 0;
LONG message_time = GetMessageTime();
if (repeat) {
#ifdef auto_repeat_cursor_keys_option
switch (key) {
when VK_PRIOR ... VK_DOWN: do not return...;
}
#endif
if (!term.auto_repeat)
return true;
if (term.repeat_rate &&
message_time - last_key_time < 1000 / term.repeat_rate)
return true;
}
if (term.repeat_rate && repeat &&
message_time - last_key_time < 2*1000 / term.repeat_rate)
/* Key repeat seems to be continued. */
last_key_time += 1000 / term.repeat_rate;
else
last_key_time = message_time;
--
Takashi Yano <takashi.yano@nifty.ne.jp>
More information about the Cygwin
mailing list