# HG changeset patch # User Christian Brabandt # Date 1530622809 -7200 # Node ID 381b01f77461bd41d64fb8775a17a6e6e40fa522 # Parent bdcaa04baead79da4649a9a75433c01f993ed746 patch 8.1.0140: recording into a register has focus events commit https://github.com/vim/vim/commit/972bfddc6b3f52ae0865ad8c0bf6089bc8a9883a Author: Bram Moolenaar Date: Tue Jul 3 14:48:15 2018 +0200 patch 8.1.0140: recording into a register has focus events Problem: Recording into a register has focus events. (Michael Naumann) Solution: Don't record K_FOCUSGAINED and K_FOCUSLOST. (closes https://github.com/vim/vim/issues/3143) diff --git a/src/getchar.c b/src/getchar.c --- a/src/getchar.c +++ b/src/getchar.c @@ -1246,27 +1246,43 @@ del_typebuf(int len, int offset) static void gotchars(char_u *chars, int len) { - char_u *s = chars; - int c; - char_u buf[2]; - int todo = len; - - /* remember how many chars were last recorded */ - if (reg_recording != 0) - last_recorded_len += len; - - buf[1] = NUL; + char_u *s = chars; + int i; + static char_u buf[4]; + static int buflen = 0; + int todo = len; + while (todo--) { + buf[buflen++] = *s++; + + // When receiving a special key sequence, store it until we have all + // the bytes and we can decide what to do with it. + if (buflen == 1 && buf[0] == K_SPECIAL) + continue; + if (buflen == 2) + continue; + if (buflen == 3 && buf[1] == KS_EXTRA + && (buf[2] == KE_FOCUSGAINED || buf[2] == KE_FOCUSLOST)) + { + // Drop K_FOCUSGAINED and K_FOCUSLOST, they are not useful in a + // recording. + buflen = 0; + continue; + } + /* Handle one byte at a time; no translation to be done. */ - c = *s++; - updatescript(c); + for (i = 0; i < buflen; ++i) + updatescript(buf[i]); if (reg_recording != 0) { - buf[0] = c; - add_buff(&recordbuff, buf, 1L); + buf[buflen] = NUL; + add_buff(&recordbuff, buf, (long)buflen); + /* remember how many chars were last recorded */ + last_recorded_len += buflen; } + buflen = 0; } may_sync_undo(); diff --git a/src/version.c b/src/version.c --- a/src/version.c +++ b/src/version.c @@ -790,6 +790,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 140, +/**/ 139, /**/ 138,