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; -- Takashi Yano <takashi.y...@nifty.ne.jp> -- Problem reports: https://cygwin.com/problems.html FAQ: https://cygwin.com/faq/ Documentation: https://cygwin.com/docs.html Unsubscribe info: https://cygwin.com/ml/#unsubscribe-simple