aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJan Edmund Lazo <jan.lazo@mail.utoronto.ca>2020-02-01 18:53:01 -0500
committerJan Edmund Lazo <jan.lazo@mail.utoronto.ca>2020-02-01 22:15:21 -0500
commitd6625349f50bb7326a39728d182d58808a6f0f29 (patch)
tree01cd39dad3d4e24cdfb2324d0a28fca024da36b3 /src
parent9c1a31927d946e6e3d25cb31cbf62e2ba1c0e8f2 (diff)
downloadrneovim-d6625349f50bb7326a39728d182d58808a6f0f29.tar.gz
rneovim-d6625349f50bb7326a39728d182d58808a6f0f29.tar.bz2
rneovim-d6625349f50bb7326a39728d182d58808a6f0f29.zip
vim-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 vim/vim#3143) https://github.com/vim/vim/commit/972bfddc6b3f52ae0865ad8c0bf6089bc8a9883a
Diffstat (limited to 'src')
-rw-r--r--src/nvim/getchar.c38
-rw-r--r--src/nvim/keymap.h4
2 files changed, 28 insertions, 14 deletions
diff --git a/src/nvim/getchar.c b/src/nvim/getchar.c
index 419c6328ee..bf72f03729 100644
--- a/src/nvim/getchar.c
+++ b/src/nvim/getchar.c
@@ -1096,26 +1096,40 @@ void del_typebuf(int len, int offset)
* Write typed characters to script file.
* If recording is on put the character in the recordbuffer.
*/
-static void gotchars(char_u *chars, size_t len)
+static void gotchars(const char_u *chars, size_t len)
+ FUNC_ATTR_NONNULL_ALL
{
- char_u *s = chars;
- int c;
+ const char_u *s = chars;
+ static char_u buf[4] = { 0 };
+ static size_t buflen = 0;
+ size_t todo = len;
- // remember how many chars were last recorded
- if (reg_recording != 0) {
- last_recorded_len += 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;
+ }
- while (len--) {
// Handle one byte at a time; no translation to be done.
- c = *s++;
- updatescript(c);
+ for (size_t i = 0; i < buflen; i++) {
+ updatescript(buf[i]);
+ }
if (reg_recording != 0) {
- char buf[2] = { (char)c, NUL };
- add_buff(&recordbuff, buf, 1L);
+ buf[buflen] = NUL;
+ add_buff(&recordbuff, (char *)buf, (ptrdiff_t)buflen);
+ // remember how many chars were last recorded
+ last_recorded_len += buflen;
}
+ buflen = 0;
}
+
may_sync_undo();
/* output "debug mode" message next time in debug mode */
diff --git a/src/nvim/keymap.h b/src/nvim/keymap.h
index cc02a6fb4f..d3e887badc 100644
--- a/src/nvim/keymap.h
+++ b/src/nvim/keymap.h
@@ -240,8 +240,8 @@ enum key_extra {
, KE_DROP = 95 // DnD data is available
// , KE_CURSORHOLD = 96 // CursorHold event
, KE_NOP = 97 // no-op: does nothing
- , KE_FOCUSGAINED = 98 // focus gained
- , KE_FOCUSLOST = 99 // focus lost
+ // , KE_FOCUSGAINED = 98 // focus gained
+ // , KE_FOCUSLOST = 99 // focus lost
// , KE_MOUSEMOVE = 100 // mouse moved with no button down
// , KE_CANCEL = 101 // return from vgetc
, KE_EVENT = 102 // event