)]}'
{
  "log": [
    {
      "commit": "926e2af42e922a89731b99e7c8e2261d50edadb1",
      "tree": "cd143b6b3208a707b64b79c42cccfc916ae09dc1",
      "parents": [
        "16341e70904c03eb810b3be223ab732c3f21e8ab"
      ],
      "author": {
        "name": "Hirohito Higashi",
        "email": "h.east.727@gmail.com",
        "time": "Mon Apr 21 11:23:12 2025 +0200"
      },
      "committer": {
        "name": "Christian Brabandt",
        "email": "cb@256bit.org",
        "time": "Mon Apr 21 11:23:12 2025 +0200"
      },
      "message": "patch 9.1.1330: may receive E315 in terminal\n\nProblem:  may receive E315 in terminal\nSolution: call check_cursor() (Hirohito Higashi)\n\nfixes: #16024\nfixes: #16211\nfixes: #17099\ncloses: #17170\n\nSigned-off-by: Hirohito Higashi \u003ch.east.727@gmail.com\u003e\nSigned-off-by: Christian Brabandt \u003ccb@256bit.org\u003e\n"
    },
    {
      "commit": "baa8c90cc0d214e036a3a7980d5cf95cae88a68d",
      "tree": "88a0b5e2514b6e78527dcc7431d1221f8821e5c6",
      "parents": [
        "81677996513e8f186acc93122673e6741c563477"
      ],
      "author": {
        "name": "Christian Brabandt",
        "email": "cb@256bit.org",
        "time": "Sat Apr 19 11:14:11 2025 +0200"
      },
      "committer": {
        "name": "Christian Brabandt",
        "email": "cb@256bit.org",
        "time": "Sat Apr 19 11:14:11 2025 +0200"
      },
      "message": "patch 9.1.1323: b:undo_ftplugin not executed when re-using buffer\n\nProblem:  b:undo_ftplugin not executed when re-using buffer\n          (archy3)\nSolution: explicitly execute b:undo_ftplugin in buflist_new() when\n          re-using the current buffer\n\nfixes: #17113\ncloses: #17133\n\nSigned-off-by: Christian Brabandt \u003ccb@256bit.org\u003e\n"
    },
    {
      "commit": "7746348c5d0f4c4707503f856d0335d8921e8d50",
      "tree": "27779783db4cd86dbb43407acc3fa55e86ff6514",
      "parents": [
        "2726821d389e08f8bb5630de1ee2d39ce0f53197"
      ],
      "author": {
        "name": "phanium",
        "email": "91544758+phanen@users.noreply.github.com",
        "time": "Tue Mar 25 20:15:31 2025 +0100"
      },
      "committer": {
        "name": "Christian Brabandt",
        "email": "cb@256bit.org",
        "time": "Tue Mar 25 20:15:31 2025 +0100"
      },
      "message": "patch 9.1.1238: wrong cursor column with \u0027set splitkeep\u003dscreen\u0027\n\nProblem:  With \u0027:set splitkeep\u003dscreen\u0027, cursor did\u0027t restore column\n          correctly when splitting a window on a line longer than the\n          last line on the screen (after v9.1.0707)\nSolution: Restore cursor column in `win_fix_scroll()` since it may be\n          changed in `getvcol()` after 396fd1ec2956 (phanium).\n\nExample:\n```\necho longlonglongling\\nshort | vim - -u NONE --cmd \u0027set\nsplitkeep\u003dscreen\u0027 +\u0027norm $\u0027 +new +q\n```\n\nfixes: #16968\ncloses: #16971\n\nSigned-off-by: phanium \u003c91544758+phanen@users.noreply.github.com\u003e\nSigned-off-by: Christian Brabandt \u003ccb@256bit.org\u003e\n"
    },
    {
      "commit": "b42b9fc41f27f92aaf4f96cd4149f3160e9fe588",
      "tree": "a65a92cb9d516626221ecf8ec5975a568f3fdbad",
      "parents": [
        "92e109fc139772727783bc9f3c333e4b346e3ef4"
      ],
      "author": {
        "name": "zeertzjq",
        "email": "zeertzjq@outlook.com",
        "time": "Mon Mar 24 20:22:23 2025 +0100"
      },
      "committer": {
        "name": "Christian Brabandt",
        "email": "cb@256bit.org",
        "time": "Mon Mar 24 20:22:23 2025 +0100"
      },
      "message": "patch 9.1.1233: Coverity warns about NULL pointer when triggering WinResized\n\nProblem:  Coverity warns about NULL pointer when triggering WinResized\nSolution: Add OOM checks for windows_list like for scroll_dict. Remove\n          void casts that are unnecessary after 9.1.1084 (zeertzjq).\n\ncloses: #16959\n\nSigned-off-by: zeertzjq \u003czeertzjq@outlook.com\u003e\nSigned-off-by: Christian Brabandt \u003ccb@256bit.org\u003e\n"
    },
    {
      "commit": "bcf66e014141982192e2743829bceef60ce77727",
      "tree": "6cd7596c3c3a4808f9259f26ed8610b8aeb8f59a",
      "parents": [
        "21ac3a49b52330bbac5815971a15b51bda405f96"
      ],
      "author": {
        "name": "Jim Zhou",
        "email": "jimzhouzzy@gmail.com",
        "time": "Sun Mar 16 20:24:57 2025 +0100"
      },
      "committer": {
        "name": "Christian Brabandt",
        "email": "cb@256bit.org",
        "time": "Sun Mar 16 20:24:57 2025 +0100"
      },
      "message": "patch 9.1.1211: TabClosedPre is triggered just before the tab is being freed\n\nProblem:  TabClosedPre is triggered just before the tab is being freed,\n          which limited its functionality.\nSolution: Trigger it a bit earlier and also on :tabclose and :tabonly\n          (Jim Zhou)\n\ncloses: #16890\n\nSigned-off-by: Jim Zhou \u003cjimzhouzzy@gmail.com\u003e\nSigned-off-by: Christian Brabandt \u003ccb@256bit.org\u003e\n"
    },
    {
      "commit": "5606ca5349982fe53cc6a2ec6345aa66f0613d40",
      "tree": "15157191c26f9ef7ceda206d6a14c5e3dc5576e5",
      "parents": [
        "587601671cd06ddc4d78f907d98578cdab96003f"
      ],
      "author": {
        "name": "Jim Zhou",
        "email": "jimzhouzzy@gmail.com",
        "time": "Thu Mar 13 21:58:25 2025 +0100"
      },
      "committer": {
        "name": "Christian Brabandt",
        "email": "cb@256bit.org",
        "time": "Thu Mar 13 21:58:25 2025 +0100"
      },
      "message": "patch 9.1.1202: Missing TabClosedPre autocommand\n\nProblem:  Missing TabClosedPre autocommand\n          (zoumi)\nSolution: Add the TabClosedPre autcommand (Jim Zhou).\n\nfixes: #16518\ncloses: #16855\n\nSigned-off-by: Jim Zhou \u003cjimzhouzzy@gmail.com\u003e\nSigned-off-by: Christian Brabandt \u003ccb@256bit.org\u003e\n"
    },
    {
      "commit": "b7147f8236c962cd74d1ce028d9106f1c449ea6c",
      "tree": "bb956aec8d2570740e6d727edf9f632f8cdb55a9",
      "parents": [
        "a35040f795fbf217b0a1e21b6b3a94ad56c2298b"
      ],
      "author": {
        "name": "Luuk van Baal",
        "email": "luukvbaal@gmail.com",
        "time": "Sat Feb 08 18:52:39 2025 +0100"
      },
      "committer": {
        "name": "Christian Brabandt",
        "email": "cb@256bit.org",
        "time": "Sat Feb 08 18:52:39 2025 +0100"
      },
      "message": "patch 9.1.1084: Unable to persistently ignore events in a window and its buffers\n\nProblem:  Unable to persistently ignore events in a window and its buffers.\nSolution: Add \u0027eventignorewin\u0027 option to ignore events in a window and buffer\n          (Luuk van Baal)\n\nAdd the window-local \u0027eventignorewin\u0027 option that is analogous to\n\u0027eventignore\u0027, but applies to a certain window and its buffers. Identify\nevents that should be allowed in \u0027eventignorewin\u0027, adapt \"auto_event\"\nand \"event_tab\" to encode this information. Window context is not passed\nonto apply_autocmds_group(), and when to ignore an event is a bit\nambiguous when \"buf\" is not \"curbuf\", rather than a large refactor, only\nignore an event when all windows into \"buf\" are ignoring the event.\n\ncloses: #16530\n\nSigned-off-by: Luuk van Baal \u003cluukvbaal@gmail.com\u003e\nSigned-off-by: Christian Brabandt \u003ccb@256bit.org\u003e\n"
    },
    {
      "commit": "c97e8695353565d6b20adffa48aad47f6e09967f",
      "tree": "47c5be877c3b68cd66d0cb59b9fb0bd33a5b2ff2",
      "parents": [
        "3159b6494ec08fbe780d14e54ad4e89e7b55bb16"
      ],
      "author": {
        "name": "Luuk van Baal",
        "email": "luukvbaal@gmail.com",
        "time": "Mon Jan 06 18:58:21 2025 +0100"
      },
      "committer": {
        "name": "Christian Brabandt",
        "email": "cb@256bit.org",
        "time": "Mon Jan 06 18:58:21 2025 +0100"
      },
      "message": "patch 9.1.0993: New \u0027cmdheight\u0027 behavior may be surprising\n\nProblem:  Although patch 9.1.0990 fixed a real problem/inconsistency,\n          it also introduced new behavior that may break BWC and/or be\n          unexpected. Before 9.1.0990, window commands could make the\n          topframe smaller (without changing \u0027cmdheight\u0027; quirk that is\n          now fixed), but did not allow extending the topframe beyond\n          the \u0027cmdheight\u0027 set by the user. After 9.1.0990, the user can\n          reduce the \u0027cmdheight\u0027 below the value they set explicitly,\n          through window commands, which may lead to confusion.\n          (aftere v9.1.0990)\nSolution: Store the value explicitly set by the user and clamp the\n          \u0027cmdheight\u0027 when resizing the topframe. This also applies to\n          dragging laststatus, which in contrast to window commands\n          _did_ allow reducing the \u0027cmdheight\u0027 to values below the one\n          set by the user. So with this patch there is still new\n          behavior, but I think in a way that is less surprising.\n          While at it, also fix a Coverity warning, introduced in\n          v9.1.0990 (Luuk van Baal)\n\ncloses: #16385\n\nSigned-off-by: Luuk van Baal \u003cluukvbaal@gmail.com\u003e\nSigned-off-by: Christian Brabandt \u003ccb@256bit.org\u003e\n"
    },
    {
      "commit": "e15cbc1af47e9dea90448c714eb4908e5d4302fc",
      "tree": "c8cc27eba0875076128c22010f9a87a104a14486",
      "parents": [
        "dbe39edb29cf5f899d475ee783a059cb6f678286"
      ],
      "author": {
        "name": "Luuk van Baal",
        "email": "luukvbaal@gmail.com",
        "time": "Sat Jan 04 17:18:08 2025 +0100"
      },
      "committer": {
        "name": "Christian Brabandt",
        "email": "cb@256bit.org",
        "time": "Sat Jan 04 17:18:08 2025 +0100"
      },
      "message": "patch 9.1.0990: Inconsistent behavior when changing cmdheight\n\nProblem:  Inconsistent behavior when changing cmdheight by resizing the\n          topframe through wincmds and dragging laststatus. Changing\n\t  cmdheight by resizing the topframe does not trigger OptionSet.\nSolution: Consolidate logic for changing the cmdheight, set the option\n\t  value to handle side-effects (Luuk van Baal)\n\ncloses: #16359\n\nSigned-off-by: Luuk van Baal \u003cluukvbaal@gmail.com\u003e\nSigned-off-by: Christian Brabandt \u003ccb@256bit.org\u003e\n"
    },
    {
      "commit": "3a3a2c921c78a12eac35ef6d6b9cceb117fcc7e1",
      "tree": "5f367d409cdb0574179540d50d9017b0bfbab352",
      "parents": [
        "b34622579ca2ffa701ea6cf27a09b17bf74e6f62"
      ],
      "author": {
        "name": "h-east",
        "email": "h.east.727@gmail.com",
        "time": "Sun Dec 15 19:36:11 2024 +0100"
      },
      "committer": {
        "name": "Christian Brabandt",
        "email": "cb@256bit.org",
        "time": "Sun Dec 15 19:36:11 2024 +0100"
      },
      "message": "patch 9.1.0931: ml_get error in terminal buffer\n\nProblem:  ml_get error in terminal buffer (user202729)\nSolution: call update_topline() in win_enter_ext() for terminal buffers\n          (h-east)\n\nfixes: #16024\ncloses: #16211\n\nSigned-off-by: h-east \u003ch.east.727@gmail.com\u003e\nSigned-off-by: Christian Brabandt \u003ccb@256bit.org\u003e\n"
    },
    {
      "commit": "2cddf0e85a7f8304476397e1c51dcd0e41835ac3",
      "tree": "bb301b0e2b22ef8b117325f8367065d671fef795",
      "parents": [
        "511eb84c08ea28a0a1363a4e780ee4311818f459"
      ],
      "author": {
        "name": "Milly",
        "email": "milly.ca@gmail.com",
        "time": "Thu Nov 28 18:16:55 2024 +0100"
      },
      "committer": {
        "name": "Christian Brabandt",
        "email": "cb@256bit.org",
        "time": "Thu Nov 28 18:16:55 2024 +0100"
      },
      "message": "patch 9.1.0892: the max value of \u0027tabheight\u0027 is limited by other tabpages\n\nProblem:  the max value of \u0027tabheight\u0027 is limited by other tabpages\nSolution: Limit the maximum value of \u0027cmdheight\u0027 to the current tabpage only.\n          (Milly)\n\nThe Help says that cmdheight is local to the tab page, but says nothing\nabout the maximum value depending on the state of all tab pages. Users\nmay wonder why they can\u0027t increase cmdheight when there are still rows\navailable on the current tab page. This PR changes the behavior of\ncmdheight so that its maximum value depends only on the state of the\ncurrent tab page.\n\nAlso, since magic numbers were embedded in various places with the\nminimum value of cmdheight being 1, we defined a constant to make it\neasier to understand.\n\ncloses: #16131\n\nSigned-off-by: Milly \u003cmilly.ca@gmail.com\u003e\nSigned-off-by: Christian Brabandt \u003ccb@256bit.org\u003e\n"
    },
    {
      "commit": "2e48567007f2becd484a3c3dd0706bf3a0beeae7",
      "tree": "1d16e8aa1aacaddd225becb6bcdeef8d0cb4bcf3",
      "parents": [
        "feea1b444e8dabddc10f380ff61ef97f4ff6fa62"
      ],
      "author": {
        "name": "nwounkn",
        "email": "nwounkn@gmail.com",
        "time": "Mon Nov 11 21:48:30 2024 +0100"
      },
      "committer": {
        "name": "Christian Brabandt",
        "email": "cb@256bit.org",
        "time": "Mon Nov 11 21:48:30 2024 +0100"
      },
      "message": "patch 9.1.0855: setting \u0027cmdheight\u0027 may cause hit-enter-prompt\n\nProblem:  setting \u0027cmdheight\u0027 may cause hit-enter-prompt and echo output\n          to be missing\nSolution: Before cleaning the cmdline, check the need_wait_return flag\n          (nwounkn)\n\ncloses: #13432\n\nSigned-off-by: nwounkn \u003cnwounkn@gmail.com\u003e\nSigned-off-by: Christian Brabandt \u003ccb@256bit.org\u003e\n"
    },
    {
      "commit": "d0809869d6445faecd323fb33dc271d8c74a94fb",
      "tree": "ee83936cc8bf2ff77a004b54a4df04bba01d122c",
      "parents": [
        "2f6efaccfd5c4e7df1f54ed0f41f329abbe05f60"
      ],
      "author": {
        "name": "Christian Brabandt",
        "email": "cb@256bit.org",
        "time": "Wed Oct 23 21:32:31 2024 +0200"
      },
      "committer": {
        "name": "Christian Brabandt",
        "email": "cb@256bit.org",
        "time": "Wed Oct 23 21:32:31 2024 +0200"
      },
      "message": "patch 9.1.0812: Coverity warns about dereferencing NULL ptr\n\nProblem:  Coverity warns about dereferencing NULL ptr\n          in check_colorcolumn()\nSolution: verify that wp is not null before accessing it\n\nrelated: #15914\n\nSigned-off-by: Christian Brabandt \u003ccb@256bit.org\u003e\n"
    },
    {
      "commit": "a441a3eaabbfc14b4772e07ecbecaaff3bd06a58",
      "tree": "3e20dbeb47a03922cc788b2efd97f42c3d457b89",
      "parents": [
        "5e7a6a4a106923e45c67dae6810e4c9753f88025"
      ],
      "author": {
        "name": "Milly",
        "email": "milly.ca@gmail.com",
        "time": "Tue Oct 22 22:43:01 2024 +0200"
      },
      "committer": {
        "name": "Christian Brabandt",
        "email": "cb@256bit.org",
        "time": "Tue Oct 22 22:43:01 2024 +0200"
      },
      "message": "patch 9.1.0804: tests: no error check when setting global \u0027cc\u0027\n\nProblem:  tests: no error check when setting global \u0027cc\u0027\nSolution: also parse and check global \u0027cc\u0027 value (Milly)\n\ncloses: #15914\n\nSigned-off-by: Milly \u003cmilly.ca@gmail.com\u003e\nSigned-off-by: Christian Brabandt \u003ccb@256bit.org\u003e\n"
    },
    {
      "commit": "8feed3a52548591b2eaef66f4d53e1a49b2dabe5",
      "tree": "d47d98055aac7caaea3501bdfa4974f179ed5fde",
      "parents": [
        "fa117387eea97306e4c59043b607ccb1533f64ea"
      ],
      "author": {
        "name": "zeertzjq",
        "email": "zeertzjq@outlook.com",
        "time": "Sun Sep 29 10:37:47 2024 +0200"
      },
      "committer": {
        "name": "Christian Brabandt",
        "email": "cb@256bit.org",
        "time": "Sun Sep 29 10:37:47 2024 +0200"
      },
      "message": "patch 9.1.0747: various typos in repo found\n\nProblem:  various typos in repo found\nSolution: Fix typos (zeertzjq)\n\ncloses: #15749\n\nSigned-off-by: zeertzjq \u003czeertzjq@outlook.com\u003e\nSigned-off-by: Christian Brabandt \u003ccb@256bit.org\u003e\n"
    },
    {
      "commit": "0a6e57b09bc8c76691b367a5babfb79b31b770e8",
      "tree": "03442904cdd3bd40c7748a313f9cb66a3d6c3bbf",
      "parents": [
        "3b59be4ed8a145d3188934f1a5cd85432bd2433d"
      ],
      "author": {
        "name": "Christian Brabandt",
        "email": "cb@256bit.org",
        "time": "Thu Aug 15 22:15:28 2024 +0200"
      },
      "committer": {
        "name": "Christian Brabandt",
        "email": "cb@256bit.org",
        "time": "Thu Aug 15 22:15:28 2024 +0200"
      },
      "message": "patch 9.1.0678: [security]: use-after-free in alist_add()\n\nProblem:  [security]: use-after-free in alist_add()\n          (SuyueGuo)\nSolution: Lock the current window, so that the reference to\n          the argument list remains valid.\n\nThis fixes CVE-2024-43374\n\nSigned-off-by: Christian Brabandt \u003ccb@256bit.org\u003e\n"
    },
    {
      "commit": "fb3f9699362f8d51c3b48fcaea1eb2ed16c81454",
      "tree": "fd915cb29431b76767b109e45909c103063f3583",
      "parents": [
        "e20aeb875c5da145922696823d893de5f61807ae"
      ],
      "author": {
        "name": "Christian Brabandt",
        "email": "cb@256bit.org",
        "time": "Sun Aug 11 20:09:17 2024 +0200"
      },
      "committer": {
        "name": "Christian Brabandt",
        "email": "cb@256bit.org",
        "time": "Sun Aug 11 20:09:17 2024 +0200"
      },
      "message": "Problem:  crash with WinNewPre autocommand\n\nProblem:  crash with WinNewPre autocommand, because window\n          structures are not yet safe to use\nSolution: Don\u0027t trigger WinNewPre on :tabnew\n\nSigned-off-by: Christian Brabandt \u003ccb@256bit.org\u003e\n"
    },
    {
      "commit": "8a0bbe7b8aad6f8da28dee218c01bc8a0185a2d5",
      "tree": "f127f5240f1a3070619e1635dd376e00411306f4",
      "parents": [
        "5b07213c0b365f2a7fcdd10c7e7cd00aae3560a5"
      ],
      "author": {
        "name": "Christian Brabandt",
        "email": "cb@256bit.org",
        "time": "Thu Aug 01 20:16:51 2024 +0200"
      },
      "committer": {
        "name": "Christian Brabandt",
        "email": "cb@256bit.org",
        "time": "Thu Aug 01 22:35:18 2024 +0200"
      },
      "message": "patch 9.1.0647: [security] use-after-free in tagstack_clear_entry\n\nProblem:  [security] use-after-free in tagstack_clear_entry\n          (Suyue Guo )\nSolution: Instead of manually calling vim_free() on each of the tagstack\n          entries, let\u0027s use tagstack_clear_entry(), which will\n          also free the stack, but using the VIM_CLEAR macro,\n          which prevents a use-after-free by setting those pointers\n          to NULL\n\nThis addresses CVE-2024-41957\n\nGithub advisory:\nhttps://github.com/vim/vim/security/advisories/GHSA-f9cr-gv85-hcr4\n\nSigned-off-by: Christian Brabandt \u003ccb@256bit.org\u003e\n"
    },
    {
      "commit": "0268ff3af3d598e18454a3ce1c510f411427b6c0",
      "tree": "a30035da8078b82f4a528aa1c855af4d363af3c9",
      "parents": [
        "073cb02cb5fd3209a9f0ff65fa2dc748c792792f"
      ],
      "author": {
        "name": "Dominique Pellé",
        "email": "dominique.pelle@gmail.com",
        "time": "Sun Jul 28 21:12:20 2024 +0200"
      },
      "committer": {
        "name": "Christian Brabandt",
        "email": "cb@256bit.org",
        "time": "Sun Jul 28 21:12:20 2024 +0200"
      },
      "message": "patch 9.1.0633: Compilation warnings with `-Wunused-parameter`\n\nProblem:  Compilation warnings with `-Wunused-parameter`\nSolution: Add the `UNUSED` macro where needed, and remove some\n          superfluous ones (Dominique Pellé)\n\nChange fixes these kind of warnings when building without the channel\nfeature:\n\n```\neval.c:6122:15: warning: unused parameter ‘tv’ [-Wunused-parameter]\n     typval_T *tv,\n               ^\neval.c:6123:14: warning: unused parameter ‘tofree’ [-Wunused-parameter]\n     char_u **tofree,\n              ^\neval.c:6124:13: warning: unused parameter ‘numbuf’ [-Wunused-parameter]\n     char_u *numbuf,\n             ^\neval.c:6125:10: warning: unused parameter ‘composite_val’ [-Wunused-parameter]\n     int  composite_val)\n```\n\ncloses: #15378\n\nSigned-off-by: Dominique Pellé \u003cdominique.pelle@gmail.com\u003e\nSigned-off-by: Christian Brabandt \u003ccb@256bit.org\u003e\n"
    },
    {
      "commit": "1a3dd7dc7847a3568fe96192a21e478f46c07929",
      "tree": "fedb7e72e43738da304608c348916623a63d395f",
      "parents": [
        "8c446da34998f6350911e07fbfd7932412c83185"
      ],
      "author": {
        "name": "zeertzjq",
        "email": "zeertzjq@outlook.com",
        "time": "Sat Jul 13 18:53:54 2024 +0200"
      },
      "committer": {
        "name": "Christian Brabandt",
        "email": "cb@256bit.org",
        "time": "Sat Jul 13 18:53:54 2024 +0200"
      },
      "message": "patch 9.1.0575: Wrong comments in alt_tabpage()\n\nProblem:  Wrong comments in alt_tabpage()\n          (after v9.1.0572)\nSolution: Correct the comments (zeertzjq).\n\ncloses: #15235\n\nSigned-off-by: zeertzjq \u003czeertzjq@outlook.com\u003e\nSigned-off-by: Christian Brabandt \u003ccb@256bit.org\u003e\n"
    },
    {
      "commit": "5247b0b92e191a046b034171a3b34031e317735f",
      "tree": "cedcbae8ce173ce4006262f069d3ce81ed26f877",
      "parents": [
        "74703f1086e7815f356123736666d9930db8683a"
      ],
      "author": {
        "name": "LemonBoy",
        "email": "thatlemon@gmail.com",
        "time": "Fri Jul 12 19:30:58 2024 +0200"
      },
      "committer": {
        "name": "Christian Brabandt",
        "email": "cb@256bit.org",
        "time": "Fri Jul 12 19:36:53 2024 +0200"
      },
      "message": "patch 9.1.0572: cannot specify tab page closing behaviour\n\nProblem:  cannot specify tab page closing behaviour\n          (Gianluca Pacchiella)\nSolution: Add the \u0027tabclose\u0027 option (LemonBoy).\n\nfixes: #5967\ncloses: #15204\n\nSigned-off-by: LemonBoy \u003cthatlemon@gmail.com\u003e\nSigned-off-by: Christian Brabandt \u003ccb@256bit.org\u003e\n"
    },
    {
      "commit": "eb80b8304efb6dfeaa8d01dd41fe281df4894240",
      "tree": "b990d2df9fddb8194bfe49e9205005a0d952bc1f",
      "parents": [
        "4b9fc8247aede14a440cfe5da58a466b3af04720"
      ],
      "author": {
        "name": "Jaehwang Jung",
        "email": "tomtomjhj@gmail.com",
        "time": "Fri Apr 26 18:48:48 2024 +0200"
      },
      "committer": {
        "name": "Christian Brabandt",
        "email": "cb@256bit.org",
        "time": "Fri Apr 26 18:48:48 2024 +0200"
      },
      "message": "patch 9.1.0374: wrong botline in BufEnter\n\nProblem:  When :edit an existing buffer, line(\u0027w$\u0027) may return a\n          wrong result.\nSolution: Reset w_valid in curwin_init() (Jaehwang Jung)\n\n`do_ecmd()` reinitializes the current window (`curwin_init()`) whose\n`w_valid` field may have `VALID_BOTLINE` set. Resetting `w_botline`\nwithout marking it as invalid makes subsequent `validate_botline()`\ncalls a no-op, thus resulting in wrong `line(\u0027w$\u0027)` value.\n\ncloses: #14642\n\nSigned-off-by: Jaehwang Jung \u003ctomtomjhj@gmail.com\u003e\nSigned-off-by: Christian Brabandt \u003ccb@256bit.org\u003e\n"
    },
    {
      "commit": "9d956ee8eab64a0d412b045305fde5bc03d95d4a",
      "tree": "cf646584973d74b7d376f065c013d94667de7063",
      "parents": [
        "a44ced5763d377c71c96562b894c1c026ba89328"
      ],
      "author": {
        "name": "zeertzjq",
        "email": "zeertzjq@outlook.com",
        "time": "Sun Apr 07 18:16:10 2024 +0200"
      },
      "committer": {
        "name": "Christian Brabandt",
        "email": "cb@256bit.org",
        "time": "Sun Apr 07 18:16:10 2024 +0200"
      },
      "message": "patch 9.1.0272: autocmd may change cwd after :tcd and :lcd\n\nProblem:  Autocommand may change currect directory after :tcd and :lcd.\nSolution: Also clear tp_localdir and w_localdir when using aucmd_win.\n          (zeertzjq)\n\ncloses: #14435\n\nSigned-off-by: zeertzjq \u003czeertzjq@outlook.com\u003e\nSigned-off-by: Christian Brabandt \u003ccb@256bit.org\u003e\n"
    },
    {
      "commit": "5866bc3a0f54115d5982fdc09bdbe4c45069265a",
      "tree": "16adcfa76b9bef4aaab8df06f39e420dd3e02f83",
      "parents": [
        "21b0a3df8c4abb884489dfcc0c92b1bbe058f291"
      ],
      "author": {
        "name": "Sean Dewar",
        "email": "6256228+seandewar@users.noreply.github.com",
        "time": "Wed Mar 13 20:17:24 2024 +0100"
      },
      "committer": {
        "name": "Christian Brabandt",
        "email": "cb@256bit.org",
        "time": "Wed Mar 13 20:17:24 2024 +0100"
      },
      "message": "patch 9.1.0175: wrong window positions with \u0027winfix{width,height}\u0027\n\nProblem:  winframe functions incorrectly recompute window positions if\n          the altframe wasn\u0027t adjacent to the closed frame, which is\n          possible if adjacent windows had \u0027winfix{width,height}\u0027 set.\n\nSolution: recompute for windows within the parent of the altframe and\n          closed frame. Skip this (as before) if the altframe was\n          top/left, but only if adjacent to the closed frame, as\n          positions won\u0027t change in that case. Also correct the return\n          value documentation for win_screenpos. (Sean Dewar)\n\nThe issue revealed itself after removing the win_comp_pos call below\nwinframe_restore in win_splitmove. Similarly, wrong positions could result from\nwindows closed in other tabpages, as win_free_mem uses winframe_remove (at least\nuntil it is entered later, where enter_tabpage calls win_comp_pos).\n\nNOTE: As win_comp_pos handles only curtab, it\u0027s possible via other means for\npositions in non-current tabpages to be wrong (e.g: after changing \u0027laststatus\u0027,\n\u0027showtabline\u0027, etc.). Given enter_tabpage recomputes it, maybe it\u0027s intentional\nas an optimization? Should probably be documented in win_screenpos then, but I\nwon\u0027t address that here.\n\ncloses: #14191\n\nSigned-off-by: Sean Dewar \u003c6256228+seandewar@users.noreply.github.com\u003e\nSigned-off-by: Christian Brabandt \u003ccb@256bit.org\u003e\n"
    },
    {
      "commit": "5cac1a9bee0798d70a7fd80363a1f697759638e8",
      "tree": "650d1931517199cb9a0bf386b44af21ebe73fb06",
      "parents": [
        "d64801e913314d2e19dbb38f60e6d285238debff"
      ],
      "author": {
        "name": "Sean Dewar",
        "email": "6256228+seandewar@users.noreply.github.com",
        "time": "Tue Mar 12 21:11:39 2024 +0100"
      },
      "committer": {
        "name": "Christian Brabandt",
        "email": "cb@256bit.org",
        "time": "Tue Mar 12 21:11:39 2024 +0100"
      },
      "message": "patch 9.1.0171: Small split-move related improvements\n\nProblem:  small improvements can be made to split-move related\n          functions.\nSolution: apply them (Sean Dewar):\n\n- Improve some doc comments (frame_flatten should still work for non-current\n  tabpages, despite the topframe check, which looks benign, though I\u0027m unsure if\n  it\u0027s still needed; see #2467).\n\n- f_win_splitmove should check_split_disallowed on wp, not targetwin, as that\u0027s\n  what win_splitmove checks (though it\u0027s probably unnecessary to check\n  b_locked_split at all; see #14109, which I hope to get around to finishing at\n  some point).\n\n- Make winframe_restore restore window positions for the altframe, which\n  winframe_remove changes. This doesn\u0027t affect the prior behaviour, as we called\n  win_comp_pos after, but as win_comp_pos only works for curtab, and\n  winframe_remove supports non-current tabpages, we should undo it. Regardless,\n  this should mean we don\u0027t need win_comp_pos anymore; adjust tests to check\n  that window positions remain unchanged.\n\n  I\u0027m not sure win_comp_pos is needed after last_status anyway if it doesn\u0027t\n  steal rows from another frame to make room for a new statusline, which\n  shouldn\u0027t be the case after winframe_remove? To be safe, I\u0027ll leave it as is.\n\ncloses: #14185\n\nSigned-off-by: Sean Dewar \u003c6256228+seandewar@users.noreply.github.com\u003e\nSigned-off-by: Christian Brabandt \u003ccb@256bit.org\u003e\n"
    },
    {
      "commit": "d64801e913314d2e19dbb38f60e6d285238debff",
      "tree": "fe7364699adeb10a8e835e6d2a17b06b339dbd68",
      "parents": [
        "e101028a5c896480c61fef7ea16855255925709b"
      ],
      "author": {
        "name": "Sean Dewar",
        "email": "6256228+seandewar@users.noreply.github.com",
        "time": "Tue Mar 12 20:46:12 2024 +0100"
      },
      "committer": {
        "name": "Christian Brabandt",
        "email": "cb@256bit.org",
        "time": "Tue Mar 12 20:50:27 2024 +0100"
      },
      "message": "patch 9.1.0170: Re-allow curwin \u003d\u003d prevwin, but document it instead\n\nProblem:  more places exist where curwin \u003d\u003d prevwin, and it may even be\n          expected in some cases.\nSolution: revert v9.1.0001, but document that it\u0027s possible instead.\n          (Sean Dewar)\n\nI\u0027ve had a change of heart for the following reasons:\n\n- A quick \u0027n dirty [GitHub code\n  search](https://github.com/search?q\u003d%2F%28winnr%5C%28%5C%29%5Cs*%3D%3D%5Cs*winnr%5C%28%5B%27%22%5D%23%5B%27%22%5D%5C%29%7Cwinnr%5C%28%5B%27%22%5D%23%5B%27%22%5D%5C%29%5Cs*%3D%3D%5Cs*winnr%5C%28%5C%29%29%2F\u0026type\u003dcode)\n  reveals some cases where it\u0027s expected in the wild.\n\n  Particularly, it made me aware `winnr() \u003d\u003d winnr(\u0027#\u0027)` is possible when curwin\n  is changed temporarily during the evaluation of a \u0026statusline expression item\n  (`%{...}`), and is used to show something different on the statusline\n  belonging to the previous window; that behaviour wasn\u0027t changed in v9.1.0001,\n  but it means curwin \u003d\u003d prevwin makes sense in some cases.\n\n- The definition and call sites of back_to_prevwin imply some expectation that\n  prevwin \u003d\u003d wp (\u003d\u003d curwin) is possible, as it\u0027s used to skip entering the\n  prevwin in that case.\n\n- Prior to v9.1.0001, `:wincmd p` would not beep in the case that was patched in\n  v9.1.0001, but now does. That resulted in #14047 being opened, as it affected\n  the CtrlP plugin.\n\n  I find it odd that `:wincmd p` had cases where it wouldn\u0027t beep despite doing\n  nothing, but it may be preferable to keep things that way (or instead also\n  beep if curwin \u003d\u003d prevwin, if that\u0027s preferred).\n\n- After more digging, I found cases in win_free_mem, enter_tabpage,\n  aucmd_restbuf and qf_open_new_cwindow where curwin \u003d\u003d prevwin is possible\n  (many of them from autocommands). Others probably exist too, especially in\n  places where curwin is changed temporarily.\n\nfixes: #14047\ncloses: #14186\n\nSigned-off-by: Sean Dewar \u003c6256228+seandewar@users.noreply.github.com\u003e\nSigned-off-by: Christian Brabandt \u003ccb@256bit.org\u003e\n"
    },
    {
      "commit": "b2ec0da080fb24f12a8d6f54bd7318a078ca4e6c",
      "tree": "63cd179682ebabe10dffe4103435df762ed01f36",
      "parents": [
        "8a01744c563f615ae7f6b3ab7f5208214a45a8e2"
      ],
      "author": {
        "name": "zeertzjq",
        "email": "zeertzjq@outlook.com",
        "time": "Sat Mar 09 15:39:27 2024 +0100"
      },
      "committer": {
        "name": "Christian Brabandt",
        "email": "cb@256bit.org",
        "time": "Sat Mar 09 15:39:27 2024 +0100"
      },
      "message": "patch 9.1.0159: Crash in WinClosed after BufUnload closes other windows\n\nProblem:  Crash in WinClosed after BufUnload closes other windows\nSolution: Don\u0027t trigger WinClosed if the buffer is NULL (zeertzjq)\n\nNow win_close_othertab() doesn\u0027t trigger any autocommands if the buffer\nis NULL, so remove the autocmd blocking above (which was added not long\nago in patch v9.0.0550) for consistency.\n\nAlso remove an unreachable close_last_window_tabpage() above:\n- It is only reached if only_one_window() returns TRUE and last_window()\n  returns FALSE.\n- If only_one_window() returns TRUE, there is only one tabpage.\n- If there is only one tabpage and last_window() returns FALSE, the\n  one_window() in last_window() must return FALSE, and the ONE_WINDOW\n  in close_last_window_tabpage() must also be FALSE.\n- So close_last_window_tabpage() doesn\u0027t do anything and returns FALSE.\n\nThen the curtab !\u003d prev_curtab check also doesn\u0027t make much sense, and\nthe only_one_window() can be replaced with a check for popup and a call\nto last_window() since this is a stricter check than only_one_window().\n\ncloses: #14166\n\nSigned-off-by: zeertzjq \u003czeertzjq@outlook.com\u003e\nSigned-off-by: Christian Brabandt \u003ccb@256bit.org\u003e\n"
    },
    {
      "commit": "4bb505e28cac0389561fff78d8bbe0319c2bcf2f",
      "tree": "f99457a9745c01a0a6edc83121431a681aae6716",
      "parents": [
        "e1051924c7ca1f9f9346daef756619d4e7fb7a83"
      ],
      "author": {
        "name": "Sean Dewar",
        "email": "6256228+seandewar@users.noreply.github.com",
        "time": "Tue Mar 05 20:39:07 2024 +0100"
      },
      "committer": {
        "name": "Christian Brabandt",
        "email": "cb@256bit.org",
        "time": "Tue Mar 05 20:39:07 2024 +0100"
      },
      "message": "patch 9.1.0150: Several minor \u0027winfixbuf\u0027 issues\n\nProblem:  several minor \u0027winfixbuf\u0027 issues exist, mostly relating to the\n          quickfix list\nSolution: address them and adjust tests. Retab and reflow a few things too.\n          (Sean Dewar)\n\nThings touched include:\n\n- Replace the semsgs with gettext\u0027d emsgs.\n\n- Handle window switching in ex_listdo properly, so curbuf and curwin\n  are kept in-sync and trigger autocommands; handle those properly.\n\n- Don\u0027t change the list entry index in qf_jump_edit_buffer if we fail\n  due to \u0027wfb\u0027 (achieved by returning FAIL; QF_ABORT should only be used\n  if the list was changed).\n\n- Make qf_jump_edit_buffer actually switch to prevwin when using `:cXX`\n  commands **outside** of the list window if \u0027wfb\u0027 is set in curwin.\n  Handle autocommands properly in case they mess with the list.\n\n  NOTE: previously, it seemed to split if \u0027wfb\u0027 was set, but do nothing\n  and fail if prevwin is *valid*. This behaviour seemed strange, and maybe\n  unintentional? Now it aligns more with what\u0027s described for the `:cXX`\n  commands in the original PR description when used outside a list window,\n  I think.\n\n- In both functions, only consider prevwin if \u0027wfb\u0027 isn\u0027t set for it;\n  fallback to splitting otherwise.\n\n- Use win_split to split. Not sure if there was a specific reason for\n  using ex_splitview. win_split is simpler and respects modifiers like\n  :vertical that may have been used. Plus, its return value can be checked\n  for setting opened_window in qf code (technically win_split_ins autocmds\n  could immediately close it or change windows, in which the qf code might\n  close some other window on failure; it\u0027s already the case elsewhere,\n  though).\n\ncloses: #14142\n\nSigned-off-by: Sean Dewar \u003c6256228+seandewar@users.noreply.github.com\u003e\nSigned-off-by: Christian Brabandt \u003ccb@256bit.org\u003e\n"
    },
    {
      "commit": "215703563757a4464907ead6fb9edaeb7f430bea",
      "tree": "380d7492e2fc174d13a073c6fd4e8dae6714030f",
      "parents": [
        "353faa373eb132987a1985cf3abe18c006f8cdf0"
      ],
      "author": {
        "name": "Colin Kennedy",
        "email": "colinvfx@gmail.com",
        "time": "Sun Mar 03 16:16:47 2024 +0100"
      },
      "committer": {
        "name": "Christian Brabandt",
        "email": "cb@256bit.org",
        "time": "Sun Mar 03 16:16:47 2024 +0100"
      },
      "message": "patch 9.1.0147: Cannot keep a buffer focused in a window\n\nProblem:  Cannot keep a buffer focused in a window\n          (Amit Levy)\nSolution: Add the \u0027winfixbuf\u0027 window-local option\n          (Colin Kennedy)\n\nfixes:  #6445\ncloses: #13903\n\nSigned-off-by: Colin Kennedy \u003ccolinvfx@gmail.com\u003e\nSigned-off-by: Christian Brabandt \u003ccb@256bit.org\u003e\n"
    },
    {
      "commit": "55f8bba73be5f9c3a5a4d0d6c5f56e65f2c7d3fc",
      "tree": "a793a9f5c73a9e252ec61a23a0671a281c128958",
      "parents": [
        "0fdd18596f504774bc5993d029d68eecea827439"
      ],
      "author": {
        "name": "Christian Brabandt",
        "email": "cb@256bit.org",
        "time": "Wed Feb 28 23:32:00 2024 +0100"
      },
      "committer": {
        "name": "Christian Brabandt",
        "email": "cb@256bit.org",
        "time": "Wed Feb 28 23:32:00 2024 +0100"
      },
      "message": "patch 9.1.0143: [security]: autocmd causes use-after-free in set_curbuf()\n\nProblem:  [security]: autocmd cause use-after-free in set_curbuf()\n          (kawarimidoll)\nSolution: check side-effect of BufLeave autocommand, when the number\n          of windows changed, close windows containing buffers that will\n          be wiped, if curbuf changed unexpectedly make sure b_nwindows\n          is decremented otherwise it cannot be wiped\n\nset_curbuf() already makes some efforts to ensure the BufLeave\nautocommands do not cause issues.  However there are still 2 issues\nthat are not taken care of:\n\n1) If a BufLeave autocommand opens a new window containing the same\nbuffer as that is going got be closed in close_buffer() a bit later,\nwe suddenly have another window open, containing a free\u0027d buffer.  So we\nmust check if the number of windows changed and if it does (and the\ncurrent buffer is going to be wiped (according to the \u0027bufhidden\u0027\nsetting), let\u0027s immediately close all windows containing the current\nbuffer using close_windows()\n\n2) If a BufLeave autocommand changes our current buffer (displays it in\nthe current window), buf-\u003eb_nwindow will be incremented. As part of\nset_curbuf() we will however enter another buffer soon, which means, the\nnewly created curbuf will have b_nwindows still have set, even so the\nbuffer is no longer displayed in a window. This causes later problems,\nbecause it will no longer be possible to wipe such a buffer. So just\nbefore entering the final buffer, check if the curbuf changed when\ncalling the BufLeave autocommand and if it does (and curbuf is still\nvalid), decrement curbuf-\u003eb_nwindows.\n\nBoth issues can be verified using the provided test (however the second\nissue only because such an impacted buffer won\u0027t be wiped, causing\nfuther issues in later tests).\n\nfixes: #13839\ncloses: #14104\n\nSigned-off-by: Christian Brabandt \u003ccb@256bit.org\u003e\n"
    },
    {
      "commit": "abf7030a5c22257f066fa9c4061ad150d5a82577",
      "tree": "184d5d96f930bd0bb36324b8943cd34749332bfe",
      "parents": [
        "f548ae7b6357c7934411df243bc987800c9b76d1"
      ],
      "author": {
        "name": "Sean Dewar",
        "email": "6256228+seandewar@users.noreply.github.com",
        "time": "Sat Feb 24 10:20:24 2024 +0100"
      },
      "committer": {
        "name": "Christian Brabandt",
        "email": "cb@256bit.org",
        "time": "Sat Feb 24 10:20:24 2024 +0100"
      },
      "message": "patch 9.1.0130: [security]: UAF if win_split_ins autocommands delete \"wp\"\n\nProblem:  heap-use-after-free in win_splitmove if Enter/Leave\n          autocommands from win_split_ins immediately closes \"wp\".\nSolution: check that \"wp\" is valid after win_split_ins.\n          (Sean Dewar)\n\ncloses: #14078\n\nSigned-off-by: Sean Dewar \u003c6256228+seandewar@users.noreply.github.com\u003e\nSigned-off-by: Christian Brabandt \u003ccb@256bit.org\u003e\n"
    },
    {
      "commit": "02fcae02a926e4e8379d77fb716da4202029882d",
      "tree": "01ee180ae7ee548383c405ca06a8f7f965032c96",
      "parents": [
        "3f905ab3c4f66562f4a224bf00f49d98a0b0da91"
      ],
      "author": {
        "name": "Sean Dewar",
        "email": "6256228+seandewar@users.noreply.github.com",
        "time": "Wed Feb 21 19:40:44 2024 +0100"
      },
      "committer": {
        "name": "Christian Brabandt",
        "email": "cb@256bit.org",
        "time": "Wed Feb 21 19:40:44 2024 +0100"
      },
      "message": "patch 9.1.0121: Infinite loop or signed overflow with \u0027smoothscroll\u0027\n\nProblem:  infinite loop in win_update with \u0027smoothscroll\u0027 set when\n          window width is equal to textoff, or signed integer overflow\n          if smaller.\nSolution: don\u0027t revalidate wp-\u003ew_skipcol in that case, as no buffer text\n          is being shown. (Sean Dewar)\n\nDon\u0027t instead reset w_skipcol; that would lose the scroll position\nwithin the line, which may be undesirable if the window is made wider\nlater.\n\nAlso include changes from the splitmove PR #14042 that I (in my infinite\nGit wisdom) forgot to commit. This includes a change to\nTest_window_split_no_room to ensure it doesn\u0027t fail for some screen\nsizes.\n\nMove Test_smoothscroll_in_zero_width_window to test_scroll_opt.vim, as\nthat file feels more appropriate.\n\ncloses: #14068\n\nSigned-off-by: Sean Dewar \u003c6256228+seandewar@users.noreply.github.com\u003e\nSigned-off-by: Christian Brabandt \u003ccb@256bit.org\u003e\n"
    },
    {
      "commit": "704966c2545897dfcf426dd9ef946aeb6fa80c38",
      "tree": "a885bfc35d182242ca75d1a000638e97b72d6f08",
      "parents": [
        "96cc4aef3d47d0fd70e68908af3d48a0dce8ea70"
      ],
      "author": {
        "name": "Sean Dewar",
        "email": "6256228+seandewar@users.noreply.github.com",
        "time": "Tue Feb 20 22:00:33 2024 +0100"
      },
      "committer": {
        "name": "Christian Brabandt",
        "email": "cb@256bit.org",
        "time": "Tue Feb 20 22:00:33 2024 +0100"
      },
      "message": "patch 9.1.0118: Use different restoration strategy in win_splitmove\n\nProblem:  saving and restoring all frames to split-move is overkill now\n          that WinNewPre is not fired when split-moving.\nSolution: defer the flattening of frames until win_split_ins begins\n          reorganising them, and attempt to restore the layout by\n          undoing our changes. (Sean Dewar)\n\nThis also means we no longer must allocate.\n\nrelated: #14042\n\nSigned-off-by: Sean Dewar \u003c6256228+seandewar@users.noreply.github.com\u003e\nSigned-off-by: Christian Brabandt \u003ccb@256bit.org\u003e\n"
    },
    {
      "commit": "96cc4aef3d47d0fd70e68908af3d48a0dce8ea70",
      "tree": "c03c09e722515ed74ceea5e43e220334e0ec38af",
      "parents": [
        "0fd44a5ad81ade342cb54d8984965bdedd2272c8"
      ],
      "author": {
        "name": "Sean Dewar",
        "email": "6256228+seandewar@users.noreply.github.com",
        "time": "Tue Feb 20 21:52:31 2024 +0100"
      },
      "committer": {
        "name": "Christian Brabandt",
        "email": "cb@256bit.org",
        "time": "Tue Feb 20 21:52:31 2024 +0100"
      },
      "message": "patch 9.1.0117: Stop split-moving from firing WinNew and WinNewPre autocommands\n\nProblem:  win_splitmove fires WinNewPre and possibly WinNew when moving\n          windows, even though no new windows are created.\nSolution: don\u0027t fire WinNew and WinNewPre when inserting an existing\n          window, even if it isn\u0027t the current window. Improve the\n          accuracy of related documentation. (Sean Dewar)\n\nLikewise, before this patch, WinClosed was not fired anyway (even for :wincmd\nH/J/K/L, which also didn\u0027t fire WinNew, but did still fire WinNewPre), despite\ndocumentation saying windows are \"closed\". Note that :wincmd T actually indeed\nworks by creating a new window (and closing the old one), unlike the others.\n\nThis also fixes issues where WinNewPre is fired when split-moving while curwin\ndoesn\u0027t yet have a frame or entry in the window list, causing many things to not\nwork (it\u0027s not considered valid at that point). This was guaranteed when using\n:wincmd H/J/K/L.\n\nBecause WinNewPre is no longer fired when split-moving, this makes restoring the\nprevious window layout on failure easier, as we can be sure that frames are not\nresized from WinNewPre autocommands if win_split_ins fails. This allows us to\nuse a different strategy in the following commit.\n\n--\n\nIn my opinion, this leaves questions about the current usefulness of WinNewPre.\nA motivation described in #10635 states how creating a new window can steal room\nfrom other windows, and how WinNewPre will be useful for detecting that, but\nthis is also true when inserting an existing window, which now doesn\u0027t fire it.\nMaybe the autocommand should be changed to have a better name?\n\nThere are also other issues I found with the current implementation of WinNewPre\nthat need addressing:\n\n- it allows switching windows and tabpages, which can cause incorrect windows to\n  be split/moved, and big problems when switching tabpages.\n\n- it fires before win_split_ins checks for room, before it makes any changes to\n  window sizes or before it considers allocating a new window. This should be\n  changed or documented.\n\nI hope to address some of this stuff in a different PR, if possible.\n\nrelated: #14038\n\nSigned-off-by: Sean Dewar \u003c6256228+seandewar@users.noreply.github.com\u003e\nSigned-off-by: Christian Brabandt \u003ccb@256bit.org\u003e\n"
    },
    {
      "commit": "0fd44a5ad81ade342cb54d8984965bdedd2272c8",
      "tree": "5216a619a29fec38045aa617717ced39b7d55685",
      "parents": [
        "15935e7f54f0e00782a55ebc39a68e4cd94c2571"
      ],
      "author": {
        "name": "Sean Dewar",
        "email": "6256228+seandewar@users.noreply.github.com",
        "time": "Tue Feb 20 20:28:15 2024 +0100"
      },
      "committer": {
        "name": "Christian Brabandt",
        "email": "cb@256bit.org",
        "time": "Tue Feb 20 20:35:41 2024 +0100"
      },
      "message": "patch 9.1.0116: win_split_ins may not check available room\n\nProblem:  win_split_ins has no check for E36 when moving an existing\n          window\nSolution: check for room and fix the issues in f_win_splitmove()\n          (Sean Dewar)\n\nwin_split_ins has no check for E36 when moving an existing window,\nallowing for layouts with many overlapping zero-sized windows to be\ncreated (which may also cause drawing issues with tablines and such).\nf_win_splitmove also has some bugs.\n\nSo check for room and fix the issues in f_win_splitmove. Handle failure\nin the two relevant win_split_ins callers by restoring the original\nlayout, and factor the common logic into win_splitmove.\n\nDon\u0027t check for room when opening an autocommand window, as it\u0027s a\ntemporary window that\u0027s rarely interacted with or drawn anyhow, and is\nrather important for some autocommands.\n\nIssues fixed in f_win_splitmove:\n- Error if splitting is disallowed.\n- Fix heap-use-after-frees if autocommands fired from switching to \"targetwin\"\n  close \"wp\" or \"oldwin\".\n- Fix splitting the wrong window if autocommands fired from switching to\n  \"targetwin\" switch to a different window.\n- Ensure -1 is returned for all errors.\n\nAlso handle allocation failure a bit earlier in make_snapshot (callers,\nexcept win_splitmove, don\u0027t really care if a snapshot can\u0027t be made, so\njust ignore the return value).\n\nNote: Test_smoothscroll_in_zero_width_window failed after these changes with\nE36, as it was using the previous behaviour to create a zero-width window.\nI\u0027ve fixed the test such that it fails with UBSAN as expected when v9.0.1367 is\nreverted (and simplified it too).\n\nrelated: #14042\n\nSigned-off-by: Sean Dewar \u003c6256228+seandewar@users.noreply.github.com\u003e\nSigned-off-by: Christian Brabandt \u003ccb@256bit.org\u003e\n"
    },
    {
      "commit": "e06e43766500ecb4cd1031fa16cf9cbebdb222c1",
      "tree": "5594099ce9de3e526002cd8601f3e734475f11eb",
      "parents": [
        "c9e79e52845d51f48f5ea3753a62ab3fe0e40184"
      ],
      "author": {
        "name": "Christian Brabandt",
        "email": "cb@256bit.org",
        "time": "Fri Feb 09 19:39:14 2024 +0100"
      },
      "committer": {
        "name": "Christian Brabandt",
        "email": "cb@256bit.org",
        "time": "Fri Feb 09 19:39:14 2024 +0100"
      },
      "message": "patch 9.1.0089: qsort() comparison functions should be transitive\n\nProblem:  qsort() comparison functions should be transitive\nSolution: Do not subtract values, but rather use explicit comparisons\n\nImprove qsort() comparison functions\n\nThere has been a recent report on qsort() causing out-of-bounds read \u0026\nwrite in glibc for non transitive comparison functions\nhttps://www.qualys.com/2024/01/30/qsort.txt\n\nEven so the bug is in glibc\u0027s implementation of the qsort() algorithm,\nit\u0027s bad style to just use substraction for the comparison functions,\nwhich may cause overflow issues and as hinted at in OpenBSD\u0027s manual\npage for qsort(): \"It is almost always an error to use subtraction to\ncompute the return value of the comparison function.\"\n\nSo check the qsort() comparison functions and change them to be safe.\n\ncloses: #13980\n\nSigned-off-by: Christian Brabandt \u003ccb@256bit.org\u003e\n"
    },
    {
      "commit": "1f47db75fdc8c53c5c778b26ecfa0942ac801f22",
      "tree": "3e08bda69c9a77e744431b723f6e50fb74b06955",
      "parents": [
        "92e90a1e102825aa9149262cacfc991264db05df"
      ],
      "author": {
        "name": "Sergey Vlasov",
        "email": "sergey@vlasov.me",
        "time": "Thu Jan 25 23:07:00 2024 +0100"
      },
      "committer": {
        "name": "Christian Brabandt",
        "email": "cb@256bit.org",
        "time": "Thu Jan 25 23:07:00 2024 +0100"
      },
      "message": "patch 9.1.0059: No event triggered before creating a window\n\nProblem:  No event is triggered before creating a window.\n          (Sergey Vlasov)\nSolution: Add the WinNewPre event (Sergey Vlasov)\n\nfixes: #10635\ncloses: #12761\n\nSigned-off-by: Sergey Vlasov \u003csergey@vlasov.me\u003e\nSigned-off-by: Christian Brabandt \u003ccb@256bit.org\u003e\n"
    },
    {
      "commit": "43b395ec2e7d24a067d7cb00109818b64da144a5",
      "tree": "fd8dfe4d22990fb00eab5d341ff2eaf1987b4c76",
      "parents": [
        "988f74311c26ea9917e84fbae608de226dba7e5f"
      ],
      "author": {
        "name": "Sean Dewar",
        "email": "seandewar@users.noreply.github.com",
        "time": "Wed Aug 16 16:17:31 2023 +0100"
      },
      "committer": {
        "name": "Christian Brabandt",
        "email": "cb@256bit.org",
        "time": "Tue Jan 23 22:35:05 2024 +0100"
      },
      "message": "patch 9.1.0048: Abort opening cmdwin if autocmds screw things up\n\nProblem:  Autocmds triggered from opening the cmdwin (in win_split and\n          do_ecmd) can cause issues such as E199, as the current checks\n          are insufficient.\n\nSolution: Commands executed from the cmdwin apply to the old curwin/buf,\n          so they should be kept in a \"suspended\" state; abort if\n          they\u0027ve changed. Also abort if cmdwin/buf was tampered with,\n          and check that curwin is correct. Try to clean up the cmdwin\n          buffer (only if hidden and non-current to simplify things; the\n          same approach is used when closing cmdwin normally), and add a\n          beep. (Sean Dewar)\n\nIt\u0027d be nice to also check that curwin was *really* created by win_split, as\nautocommands can change curwin before it returns (so it can\u0027t be assumed to be\nthat of the split); for now, this means that the cmdwin may not be the botwin in\nthat case, which is probably OK.\n\ncloses: #12819\n\nSigned-off-by: Sean Dewar \u003cseandewar@users.noreply.github.com\u003e\nSigned-off-by: Christian Brabandt \u003ccb@256bit.org\u003e\n"
    },
    {
      "commit": "988f74311c26ea9917e84fbae608de226dba7e5f",
      "tree": "95c475b5966ba8fac1f241e604d437bfed19c693",
      "parents": [
        "4927110a434e75f8f22188a95b366cfd1fa17e07"
      ],
      "author": {
        "name": "Sean Dewar",
        "email": "seandewar@users.noreply.github.com",
        "time": "Wed Aug 16 14:17:36 2023 +0100"
      },
      "committer": {
        "name": "Christian Brabandt",
        "email": "cb@256bit.org",
        "time": "Tue Jan 23 22:31:55 2024 +0100"
      },
      "message": "patch 9.1.0047: issues with temp curwin/buf while cmdwin is open\n\nProblem:  Things that temporarily change/restore curwin/buf (e.g:\n          win_execute, some autocmds) may break assumptions that\n          curwin/buf is the cmdwin when \"cmdwin_type !\u003d 0\", causing\n          issues.\n\nSolution: Expose the cmdwin\u0027s real win/buf and check that instead. Also\n          try to ensure these variables are NULL if \"cmdwin_type \u003d\u003d 0\",\n          allowing them to be used directly in most cases without\n          checking cmdwin_type. (Sean Dewar)\n\nAlternatively, we could ban win_execute in the cmdwin and audit all places that\ntemporarily change/restore curwin/buf, but I didn\u0027t notice any problems arising\nfrom allowing this (standard cmdwin restrictions still apply, so things that may\nactually break the cmdwin are still forbidden).\n\ncloses: #12819\n\nSigned-off-by: Sean Dewar \u003cseandewar@users.noreply.github.com\u003e\nSigned-off-by: Christian Brabandt \u003ccb@256bit.org\u003e\n"
    },
    {
      "commit": "96958366ad6159efe708b694055320ed19357e61",
      "tree": "3a18368475fd3def1c844ad8de8056be233afe57",
      "parents": [
        "1a9aba8ad49ef77e69f429093d44888e7eafde7c"
      ],
      "author": {
        "name": "zeertzjq",
        "email": "zeertzjq@outlook.com",
        "time": "Tue Jan 16 17:19:59 2024 +0100"
      },
      "committer": {
        "name": "Christian Brabandt",
        "email": "cb@256bit.org",
        "time": "Tue Jan 16 17:21:04 2024 +0100"
      },
      "message": "patch 9.1.0033: Insert mode not stopped if closing prompt buffer modifies hidden buffer\n\nProblem:  Insert mode not stopped if an autocommand modifies a hidden\n          buffer while closing a prompt buffer.\nSolution: Don\u0027t set b_prompt_insert if stop_insert_mode is already set.\n          (zeertzjq)\n\ncloses: #13872\n\nSigned-off-by: zeertzjq \u003czeertzjq@outlook.com\u003e\nSigned-off-by: Christian Brabandt \u003ccb@256bit.org\u003e\n"
    },
    {
      "commit": "8610f74382039c9c54d6c4aeb978d252e762360a",
      "tree": "039a6fbf21637fca9898082edef0b0a06af33aac",
      "parents": [
        "b52600d5613316e5b6e89514a02df1f97e27a5ff"
      ],
      "author": {
        "name": "Christian Brabandt",
        "email": "cb@256bit.org",
        "time": "Fri Jan 12 17:34:40 2024 +0100"
      },
      "committer": {
        "name": "Christian Brabandt",
        "email": "cb@256bit.org",
        "time": "Fri Jan 12 17:34:40 2024 +0100"
      },
      "message": "patch 9.1.0019: cmdline may disappear when changing \u0027cmdheight\u0027\n\nProblem:  cmdline may disappear when changing \u0027cmdheight\u0027\n          (after Patch 9.0.0190, @markonm)\nSolution: always re-calculate the old_p_ch value, not only\n          when cmdline_row was higher than expected\n\nfixes: #13822\ncloses: #13826\n\nSigned-off-by: Christian Brabandt \u003ccb@256bit.org\u003e\n"
    },
    {
      "commit": "bf44b69d1f91d9778ae1887128c63d35d9a3d19b",
      "tree": "3c66fa07c2c6baa3a2a81c75b64799306e806cf3",
      "parents": [
        "b5352931b354eb67eb7d223cc09c98dcf1b547b6"
      ],
      "author": {
        "name": "Sean Dewar",
        "email": "seandewar@users.noreply.github.com",
        "time": "Wed Jan 03 18:52:52 2024 +0100"
      },
      "committer": {
        "name": "Christian Brabandt",
        "email": "cb@256bit.org",
        "time": "Wed Jan 03 19:07:21 2024 +0100"
      },
      "message": "patch 9.1.0001: when closing window, wincmd p may fail\n\nAvoid `prevwin \u003d\u003d curwin` when closing `curwin`\n\nProblem:  When closing the current window (or when moving it to a tabpage), the\n          previous window may refer to the new current window\n          (`winnr() \u003d\u003d winnr(\u0027#\u0027)`) if that window is selected as the\n          new current window.\n\nSolution: Set `prevwin \u003d NULL` when switching away from an invalid `curwin` and\n          the target window was the `prevwin`.\n          (Sean Dewar)\n\nrelated: #4537\ncloses: #13762\n\nSigned-off-by: Sean Dewar \u003cseandewar@users.noreply.github.com\u003e\nSigned-off-by: Christian Brabandt \u003ccb@256bit.org\u003e\n"
    },
    {
      "commit": "df12e39b8b9dd39056e22b452276622cb7b617fd",
      "tree": "01462ce0832fb7a78def6d49d2b1ed857c8e77f7",
      "parents": [
        "3afc9f2556faf2574d7950d879f2bf61612f3367"
      ],
      "author": {
        "name": "Christian Brabandt",
        "email": "cb@256bit.org",
        "time": "Sat Dec 16 13:55:32 2023 +0100"
      },
      "committer": {
        "name": "Christian Brabandt",
        "email": "cb@256bit.org",
        "time": "Sat Dec 16 13:55:32 2023 +0100"
      },
      "message": "patch 9.0.2168: Moving tabpages on :drop may cause an endless loop\n\nProblem:  Moving tabpages on :drop may cause an endless loop\nSolution: Disallow moving tabpages on :drop when cleaning up the arglist\n          first\n\nMoving tabpages during drop command may cause an endless loop\n\nWhen executing a :tab drop command, Vim will close all windows not in\nthe argument list. This triggers various autocommands. If a user has\ncreated an \u0027au Tabenter * :tabmove -\u0027 autocommand, this can cause Vim to\nend up in an endless loop, when trying to iterate over all tabs (which\nwould trigger the tabmove autocommand, which will change the tpnext\npointer, etc).\n\nSo instead of blocking all autocommands before we actually try to edit\nthe given file, lets simply disallow to move tabpages around. Otherwise,\nwe may change the expected number of events triggered during a :drop\ncommand, which users may rely on (there is actually a test, that expects\nvarious TabLeave/TabEnter autocommands) and would therefore be a\nbackwards incompatible change.\n\nDon\u0027t make this an error, as this could trigger several times during the\ndrop command, but silently ignore the :tabmove command in this case (and\nit should in fact finally trigger successfully when loading the given\nfile in a new tab). So let\u0027s just be quiet here instead.\n\nfixes:  #13676\ncloses: #13686\n\nSigned-off-by: Christian Brabandt \u003ccb@256bit.org\u003e\n"
    },
    {
      "commit": "eec0c2b3a4cfab93dd8d4adaa60638d47a2bbc8a",
      "tree": "2f60c6c3095b52818325cbd6c92dcb293f8c8727",
      "parents": [
        "9cc95aa0d8f52bb0c906ca13297ce3a2ba615f2b"
      ],
      "author": {
        "name": "Christian Brabandt",
        "email": "cb@256bit.org",
        "time": "Tue Nov 28 22:03:48 2023 +0100"
      },
      "committer": {
        "name": "Christian Brabandt",
        "email": "cb@256bit.org",
        "time": "Fri Dec 01 18:58:50 2023 +0100"
      },
      "message": "patch 9.0.2140: [security]: use-after-free in win-enter\n\nProblem:  [security]: use-after-free in win-enter\nSolution: validate window pointer before calling win_enter()\n\nwin_goto() may stop visual mode, if it is active. However, this may in\nturn trigger the ModeChanged autocommand, which could potentially free\nthe wp pointer which was valid before now became stale and points to now\nfreed memory.\n\nSo before calling win_enter(), let\u0027s verify one more time, that the\nwp pointer still points to a valid window structure.\n\nReported by @henices, thanks!\n\nSigned-off-by: Christian Brabandt \u003ccb@256bit.org\u003e\n"
    },
    {
      "commit": "c4ffeddfe5bd1824650e9b911ed9245bf56c69e3",
      "tree": "70ce689983063144a5cf7eaba328933d8c141193",
      "parents": [
        "d1c3ef1f47c87d1da056c56564e1985fe6f2931d"
      ],
      "author": {
        "name": "Christian Brabandt",
        "email": "cb@256bit.org",
        "time": "Mon Nov 27 23:25:03 2023 +0100"
      },
      "committer": {
        "name": "Christian Brabandt",
        "email": "cb@256bit.org",
        "time": "Mon Nov 27 23:25:03 2023 +0100"
      },
      "message": "patch 9.0.2134: ml_get error when scrolling\n\nProblem:  ml_get error when scrolling after delete\nSolution: mark topline to be validated in main_loop\n          if it is larger than current buffers line\n          count\n\nreset_lnums() is called after e.g. TextChanged autocommands and it may\naccidentally cause curwin-\u003ew_topline to become invalid, e.g. if the\nautocommand has deleted some lines.\n\nSo verify that curwin-\u003ew_topline points to a valid line and if not, mark\nthe window to have w_topline recalculated in main_loop() in\nupdate_topline() after reset_lnums() returns.\n\nfixes: #13568\nfixes: #13578\n\nSigned-off-by: Christian Brabandt \u003ccb@256bit.org\u003e\n"
    },
    {
      "commit": "25aabc2b8ee1e19ced6f4da9d866cf9378fc4c5a",
      "tree": "9b56e90635d6bc6b124bda1d179348bcd6a2cf8d",
      "parents": [
        "67abf1592c83c910c7815478f67e0a8989d51417"
      ],
      "author": {
        "name": "Christian Brabandt",
        "email": "cb@256bit.org",
        "time": "Tue Nov 14 19:31:34 2023 +0100"
      },
      "committer": {
        "name": "Christian Brabandt",
        "email": "cb@256bit.org",
        "time": "Thu Nov 16 22:04:00 2023 +0100"
      },
      "message": "patch 9.0.2106: [security]: Use-after-free in win_close()\n\nProblem:  [security]: Use-after-free in win_close()\nSolution: Check window is valid, before accessing it\n\nIf the current window structure is no longer valid (because a previous\nautocommand has already freed this window), fail and return before\nattempting to set win-\u003ew_closing variable.\n\nAdd a test to trigger ASAN in CI\n\nSigned-off-by: Christian Brabandt \u003ccb@256bit.org\u003e\n"
    },
    {
      "commit": "f6d28fe2c95c678cc3202cc5dc825a3fcc709e93",
      "tree": "a0acea7e99632dae8fd280bdadf932fc59435b2b",
      "parents": [
        "d2a08ba0fa4a25f31cee9d9f33b0aa8237227387"
      ],
      "author": {
        "name": "Christian Brabandt",
        "email": "cb@256bit.org",
        "time": "Tue Sep 05 20:18:06 2023 +0200"
      },
      "committer": {
        "name": "Christian Brabandt",
        "email": "cb@256bit.org",
        "time": "Tue Sep 05 20:18:06 2023 +0200"
      },
      "message": "patch 9.0.1873: [security] heap-buffer-overflow in vim_regsub_both\n\nProblem:  heap-buffer-overflow in vim_regsub_both\nSolution: Disallow exchanging windows when textlock is active\n\nSigned-off-by: Christian Brabandt \u003ccb@256bit.org\u003e\n"
    },
    {
      "commit": "623ba31821a41acee7e948794e84867680b97885",
      "tree": "bf6c964be7cd4f4c8885c139096b3b434dc81444",
      "parents": [
        "e073a8b79f1d3398b27f35b7920746b564a169e9"
      ],
      "author": {
        "name": "Christian Brabandt",
        "email": "cb@256bit.org",
        "time": "Mon Sep 04 22:09:12 2023 +0200"
      },
      "committer": {
        "name": "Christian Brabandt",
        "email": "cb@256bit.org",
        "time": "Mon Sep 04 22:09:12 2023 +0200"
      },
      "message": "patch 9.0.1864: still crash with bt_quickfix1_poc\n\nProblem:  crash with bt_quickfix1_poc when cleaning up\n          and EXITFREE is defined\nSolution: Test if buffer is valid in a window, else close\n          window directly, don\u0027t try to access buffer properties\n\nWhile at it, increase the crash timeout slightly, so that CI has a\nchance to finish processing the test_crash() test.\n\nSigned-off-by: Christian Brabandt \u003ccb@256bit.org\u003e\n"
    },
    {
      "commit": "16af913eeefb288ce968fb87e09a597413861900",
      "tree": "4184b8e4c195d1f2f79ae48320fc68583e3c13ab",
      "parents": [
        "478668013f060a75b8cd8cc6ca2cf2abb3bcc4a5"
      ],
      "author": {
        "name": "Luuk van Baal",
        "email": "luukvbaal@gmail.com",
        "time": "Sun Aug 20 20:44:59 2023 +0200"
      },
      "committer": {
        "name": "Christian Brabandt",
        "email": "cb@256bit.org",
        "time": "Sun Aug 20 20:44:59 2023 +0200"
      },
      "message": "patch 9.0.1772: Cursor may be adjusted in \u0027splitkeep\u0027ed windows\n\nProblem:    Cursor is adjusted in window that did not change in size by\n            \u0027splitkeep\u0027.\nSolution:   Only check that cursor position is valid in a window that\n            has changed in size.\n\ncloses: #12509\n\nSigned-off-by: Christian Brabandt \u003ccb@256bit.org\u003e\nCo-authored-by: Luuk van Baal \u003cluukvbaal@gmail.com\u003e\n"
    },
    {
      "commit": "876f5fb570d8401aa4c58af4a5da91f10520aa9d",
      "tree": "a8092cac4d320598313b9860078ea6836243360f",
      "parents": [
        "e500ae8e29ad921378085f5d70ee5c0c537be1ba"
      ],
      "author": {
        "name": "Sean Dewar",
        "email": "seandewar@users.noreply.github.com",
        "time": "Thu Aug 17 22:40:05 2023 +0200"
      },
      "committer": {
        "name": "Christian Brabandt",
        "email": "cb@256bit.org",
        "time": "Thu Aug 17 22:40:05 2023 +0200"
      },
      "message": "patch 9.0.1726: incorrect heights in win_size_restore()\n\nProblem: incorrect heights in win_size_restore()\nSolution: avoid restoring incorrect heights in win_size_restore()\n\nChanging \u0027showtabline\u0027 or \u0027cmdheight\u0027 in the cmdwin restores incorrect\nwindow heights after closing the cmdwin.\n\nThis may produce a gap between the cmdline and the window above.\n\nSolution: restore window sizes only if the number of lines available for windows\nchanged; subtract the rows of the tabline, cmdline and last window\u0027s statusline\nfrom \u0027lines\u0027 (other statuslines don\u0027t matter).\n\ncloses: #12704\n\nSigned-off-by: Christian Brabandt \u003ccb@256bit.org\u003e\nCo-authored-by: Sean Dewar \u003cseandewar@users.noreply.github.com\u003e\n"
    },
    {
      "commit": "4a8eb6e7a9df10f79bf95301ced012f0d6a13088",
      "tree": "711e5d8845667ef5a03c73926f66a4708c86e3ed",
      "parents": [
        "e5e4709a6ac02dc2a17bd6e4d02e799269ba5ea9"
      ],
      "author": {
        "name": "Christian Brabandt",
        "email": "cb@256bit.org",
        "time": "Sun Aug 13 19:43:42 2023 +0200"
      },
      "committer": {
        "name": "Christian Brabandt",
        "email": "cb@256bit.org",
        "time": "Sun Aug 13 19:43:42 2023 +0200"
      },
      "message": "patch 9.0.1710: scrolloff options work slightly different\n\nProblem: sidescrolloff and scrolloff options work slightly\n         different than other global-local options\nSolution: Make it behave consistent for all global-local options\n\nIt was noticed, that sidescrolloff and scrolloff options behave\ndifferently in comparison to other global-local window options like\n\u0027listchars\u0027\n\nSo make those two behave like other global-local options. Also add some\nextra documentation for a few special local-window options.\n\nAdd a few tests to make sure all global-local window options behave\nsimilar\n\ncloses: #12956\ncloses: #12643\n\nSigned-off-by: Christian Brabandt \u003ccb@256bit.org\u003e\n"
    },
    {
      "commit": "5c606846b9a43c7e6b94c7e96838f7532792f557",
      "tree": "5e5f0a0b79d637e58032c3c04be6e071bf0ed6b2",
      "parents": [
        "55daae392157823dc5434e6be1344f4336bfe96f"
      ],
      "author": {
        "name": "Luuk van Baal",
        "email": "luukvbaal@gmail.com",
        "time": "Mon Jun 05 15:00:05 2023 +0100"
      },
      "committer": {
        "name": "Bram Moolenaar",
        "email": "Bram@vim.org",
        "time": "Mon Jun 05 15:00:05 2023 +0100"
      },
      "message": "patch 9.0.1608: update_topline() is called twice\n\nProblem:    update_topline() is called twice.\nSolution:   Do not call update_topline() before curs_columns(). (Luuk van\n            Baal, closes #12495)\n"
    },
    {
      "commit": "a109f39ef54bc3894768170f02c1b6ac56164488",
      "tree": "2991683d08efbba19c489753c0c606c247860252",
      "parents": [
        "47eec6716b8621fd43bac8ecc9c19089df26705e"
      ],
      "author": {
        "name": "Luuk van Baal",
        "email": "luukvbaal@gmail.com",
        "time": "Fri Jun 02 14:16:35 2023 +0100"
      },
      "committer": {
        "name": "Bram Moolenaar",
        "email": "Bram@vim.org",
        "time": "Fri Jun 02 14:16:35 2023 +0100"
      },
      "message": "patch 9.0.1599: Cursor not adjusted when \u0027splitkeep\u0027 is not \"cursor\"\n\nProblem:    Cursor not adjusted when near top or bottom of window and\n            \u0027splitkeep\u0027 is not \"cursor\".\nSolution:   Move boundary checks to outer cursor move functions, inner\n            functions should only return valid cursor positions. (Luuk van\n            Baal, closes #12480)\n"
    },
    {
      "commit": "097c5370ea8abab17ceb0f3bcd74f57b1655c7f7",
      "tree": "031d9928ff74a50cb4f7eb25270e13561a2d8d27",
      "parents": [
        "a8490a4952c320f234ae4528d4a1e812a27f3a0a"
      ],
      "author": {
        "name": "Bram Moolenaar",
        "email": "Bram@vim.org",
        "time": "Wed May 24 21:02:24 2023 +0100"
      },
      "committer": {
        "name": "Bram Moolenaar",
        "email": "Bram@vim.org",
        "time": "Wed May 24 21:02:24 2023 +0100"
      },
      "message": "patch 9.0.1576: users may not know what to do with an internal error\n\nProblem:    Users may not know what to do with an internal error.\nSolution:   Add a translated message with instructions.\n"
    },
    {
      "commit": "79cdf026f1b8a16298ee73be497c4bd5f3458cde",
      "tree": "2f2381a497126df7030b96450b1b1bfd4257c487",
      "parents": [
        "bf63011a52a3cc32609ae5945665875062a5ae50"
      ],
      "author": {
        "name": "Bram Moolenaar",
        "email": "Bram@vim.org",
        "time": "Sat May 20 14:07:00 2023 +0100"
      },
      "committer": {
        "name": "Bram Moolenaar",
        "email": "Bram@vim.org",
        "time": "Sat May 20 14:07:00 2023 +0100"
      },
      "message": "patch 9.0.1571: RedrawingDisabled not used consistently\n\nProblem:    RedrawingDisabled not used consistently.\nSolution:   Avoid RedrawingDisabled going negative.  Set RedrawingDisabled in\n            win_split_ins(). (closes #11961)\n"
    },
    {
      "commit": "e42c27d9e8a18e3786f13f17663914cdd0f63f9e",
      "tree": "c0dc0141813003df4a767dfd90863ff6870be3c3",
      "parents": [
        "b6a19594b29a7d4f33a1f4324a0579df61f48d06"
      ],
      "author": {
        "name": "Yegappan Lakshmanan",
        "email": "yegappan@yahoo.com",
        "time": "Sun May 14 17:24:22 2023 +0100"
      },
      "committer": {
        "name": "Bram Moolenaar",
        "email": "Bram@vim.org",
        "time": "Sun May 14 17:24:22 2023 +0100"
      },
      "message": "patch 9.0.1554: code for handling \u0027switchbuf\u0027 is repeated\n\nProblem:    Code for handling \u0027switchbuf\u0027 is repeated.\nSolution:   Add a function to handle \u0027switchbuf\u0027. (Yegappan Lakshmanan,\n            closes #12397)\n"
    },
    {
      "commit": "54be5fb382d2bf25fd1b17ddab8b21f599019b81",
      "tree": "2f8247870b818760f7dac718281ed4067090baf5",
      "parents": [
        "8667a5678f983ba899825b810ab849952d49bcb8"
      ],
      "author": {
        "name": "Yegappan Lakshmanan",
        "email": "yegappan@yahoo.com",
        "time": "Fri May 12 17:49:13 2023 +0100"
      },
      "committer": {
        "name": "Bram Moolenaar",
        "email": "Bram@vim.org",
        "time": "Fri May 12 17:49:13 2023 +0100"
      },
      "message": "patch 9.0.1546: some commands for opening a file don\u0027t use \u0027switchbuf\u0027\n\nProblem:    Some commands for opening a file don\u0027t use \u0027switchbuf\u0027.\nSolution:   Use \u0027switchbuf\u0027 for more commands. (Yegappan Lakshmanan,\n            closes #12383, closes #12381)\n"
    },
    {
      "commit": "b926bf47d61360a4ec5e4867714a08d70fd49965",
      "tree": "9517e3efd8bcf94d6d561e6f3f78a6f5a1a64258",
      "parents": [
        "c8502f9b880b6d23baa4f9d28b60e1ceb442e35f"
      ],
      "author": {
        "name": "Luuk van Baal",
        "email": "luukvbaal@gmail.com",
        "time": "Sat May 06 12:53:50 2023 +0100"
      },
      "committer": {
        "name": "Bram Moolenaar",
        "email": "Bram@vim.org",
        "time": "Sat May 06 12:53:50 2023 +0100"
      },
      "message": "patch 9.0.1513: text scrolls unnecessarily when splitting\n\nProblem:    Text scrolls unnecessarily when splitting and \u0027splitkeep\u0027 is not\n            \"cursor\".\nSolution:   Avoid resetting w_skipcol. (Luuk van Baal, closes #12334)\n"
    },
    {
      "commit": "fbf2071ac9ef08302a1df86c15f3d4ddbe871243",
      "tree": "386c9967797386ebc3d029f586ddda6f91088db0",
      "parents": [
        "73916bac5ac2a054a0c71adfe8d742691cdfd95c"
      ],
      "author": {
        "name": "zeertzjq",
        "email": "zeertzjq@outlook.com",
        "time": "Wed Apr 26 19:01:44 2023 +0100"
      },
      "committer": {
        "name": "Bram Moolenaar",
        "email": "Bram@vim.org",
        "time": "Wed Apr 26 19:01:44 2023 +0100"
      },
      "message": "patch 9.0.1491: wrong scrolling with ls\u003d0 and :botright split\n\nProblem:    Wrong scrolling with ls\u003d0 and :botright split.\nSolution:   Add statusline before calling frame_new_height(). (closes #12299)\n"
    },
    {
      "commit": "f39d9e9dca443e42920066be3a98fd9780e4ed33",
      "tree": "fc55b4f846fe60b7bb21613b26b796fba38eff1b",
      "parents": [
        "71badf9547e8f89571b9a095183671cbb333d528"
      ],
      "author": {
        "name": "Bram Moolenaar",
        "email": "Bram@vim.org",
        "time": "Sat Apr 22 22:54:40 2023 +0100"
      },
      "committer": {
        "name": "Bram Moolenaar",
        "email": "Bram@vim.org",
        "time": "Sat Apr 22 22:54:40 2023 +0100"
      },
      "message": "patch 9.0.1479: small source file problems; outdated list of distrib. files\n\nProblem:    Small source file problems; outdated list of distributed files.\nSolution:   Small updates to source files and list of distributed files.\n"
    },
    {
      "commit": "cde8de034524d00aba4ff4142e658baff511e12d",
      "tree": "3546be90832d785283ee31a4001205b3a0cc892c",
      "parents": [
        "065088d5549e7711668321cc5a77c9a9b684b142"
      ],
      "author": {
        "name": "orbital",
        "email": "orbital@holgerines.de",
        "time": "Sun Apr 02 22:05:13 2023 +0100"
      },
      "committer": {
        "name": "Bram Moolenaar",
        "email": "Bram@vim.org",
        "time": "Sun Apr 02 22:05:13 2023 +0100"
      },
      "message": "patch 9.0.1439: start Insert mode when accessing a hidden prompt buffer\n\nProblem:    Start Insert mode when accessing a hidden prompt buffer.\nSolution:   Call leaving_window() in aucmd_restbuf(). (Thorben Tröbst,\n            closes #12148, closes #12147)\n"
    },
    {
      "commit": "14113fdf9cb3d588c0d1c3a210246b981cf5aad3",
      "tree": "a0f17ad3f6c5b31a0463e452122ba9e5aaa9705a",
      "parents": [
        "663ee88a8260d69d9310e22f2bfdec49af6a102e"
      ],
      "author": {
        "name": "Yegappan Lakshmanan",
        "email": "yegappan@yahoo.com",
        "time": "Tue Mar 07 17:13:51 2023 +0000"
      },
      "committer": {
        "name": "Bram Moolenaar",
        "email": "Bram@vim.org",
        "time": "Tue Mar 07 17:13:51 2023 +0000"
      },
      "message": "patch 9.0.1390: FOR_ALL_ macros are defined in an unexpected file\n\nProblem:    FOR_ALL_ macros are defined in an unexpected file.\nSolution:   Move FOR_ALL_ macros to macros.h.  Add FOR_ALL_HASHTAB_ITEMS.\n            (Yegappan Lakshmanan, closes #12109)\n"
    },
    {
      "commit": "99ad3a8bb95c6f860545a050472b6181e33bac1a",
      "tree": "038ff903aeb50dc88815a9d61d2ef52bdf7140bc",
      "parents": [
        "dd60c365cd2630794be84d63c4fe287124a30b97"
      ],
      "author": {
        "name": "Bram Moolenaar",
        "email": "Bram@vim.org",
        "time": "Mon Feb 27 17:18:01 2023 +0000"
      },
      "committer": {
        "name": "Bram Moolenaar",
        "email": "Bram@vim.org",
        "time": "Mon Feb 27 17:18:01 2023 +0000"
      },
      "message": "patch 9.0.1362: ml_get error when going to another tab\n\nProblem:    ml_get error when going to another tab. (Daniel J. Perry)\nSolution:   Do not call update_topline() if \"curwin\" is invalid.\n            (closes #11907)\n"
    },
    {
      "commit": "a23a11b5bf03454b71fdb5deac0d5f641e222160",
      "tree": "5ce9eb5b9668eb891072ee7e03823b1c68214656",
      "parents": [
        "d950984489e50b12d87c85f0cce1d672c880aa23"
      ],
      "author": {
        "name": "Yegappan Lakshmanan",
        "email": "yegappan@yahoo.com",
        "time": "Tue Feb 21 14:27:41 2023 +0000"
      },
      "committer": {
        "name": "Bram Moolenaar",
        "email": "Bram@vim.org",
        "time": "Tue Feb 21 14:27:41 2023 +0000"
      },
      "message": "patch 9.0.1336: functions without arguments are not always declared properly\n\nProblem:    Functions without arguments are not always declared properly.\nSolution:   Use \"(void)\" instead of \"()\". (Yegappan Lakshmanan, closes #12031)\n"
    },
    {
      "commit": "bc3dc298b37820a8212e7d839e882e07d6cc98c8",
      "tree": "163ffb22feb5fd5c79ded87e7c7e36f2e0559c61",
      "parents": [
        "339e114d70de3ec2b36edf37d7ba7a7cfdf9d1a6"
      ],
      "author": {
        "name": "Luuk van Baal",
        "email": "luukvbaal@gmail.com",
        "time": "Wed Feb 15 16:45:27 2023 +0000"
      },
      "committer": {
        "name": "Bram Moolenaar",
        "email": "Bram@vim.org",
        "time": "Wed Feb 15 16:45:27 2023 +0000"
      },
      "message": "patch 9.0.1312: Cursor position wrong when splitting window in insert mode\n\nProblem:    Cursor position wrong when splitting window in insert mode.\nSolution:   Pass the actual mode to win_fix_cursor(). (Luuk van Baal,\n            closes #11999,\n"
    },
    {
      "commit": "142ed77898facf8f423fee2717efee1749c55f9a",
      "tree": "9b8f51cd7992358ae3a01c9cd152eed223d1827e",
      "parents": [
        "032713f8299abd92fcfb1e490d1ae5c1ecadde41"
      ],
      "author": {
        "name": "Yegappan Lakshmanan",
        "email": "yegappan@yahoo.com",
        "time": "Thu Jan 26 12:00:00 2023 +0000"
      },
      "committer": {
        "name": "Bram Moolenaar",
        "email": "Bram@vim.org",
        "time": "Thu Jan 26 12:00:00 2023 +0000"
      },
      "message": "patch 9.0.1246: code is indented more than necessary\n\nProblem:    Code is indented more than necessary.\nSolution:   Use an early return where it makes sense. (Yegappan Lakshmanan,\n            closes #11887)\n"
    },
    {
      "commit": "cb94c910706fdd575cc25797d7858e084f1e3524",
      "tree": "d677addda57ae7baf2427466bc203933c28823a9",
      "parents": [
        "6342e2c5a6570231aefabd8e34c2f2cb22f6927a"
      ],
      "author": {
        "name": "Rob Pilling",
        "email": "robpilling@gmail.com",
        "time": "Tue Dec 13 12:26:09 2022 +0000"
      },
      "committer": {
        "name": "Bram Moolenaar",
        "email": "Bram@vim.org",
        "time": "Tue Dec 13 12:26:09 2022 +0000"
      },
      "message": "patch 9.0.1051: after a failed CTRL-W ] next command splits window\n\nProblem:    After a failed CTRL-W ] next command splits window.\nSolution:   Reset postponed_split. (Rob Pilling, closes #11698)\n"
    },
    {
      "commit": "3fc84dc2c7efecd7c14ce341cd777475058936fd",
      "tree": "67be33ba666b1e645aa2f8943ddb579a3b085c21",
      "parents": [
        "86b4816766d976a7ecd4403eca1f8bf6b4105800"
      ],
      "author": {
        "name": "zeertzjq",
        "email": "zeertzjq@outlook.com",
        "time": "Wed Dec 07 09:17:59 2022 +0000"
      },
      "committer": {
        "name": "Bram Moolenaar",
        "email": "Bram@vim.org",
        "time": "Wed Dec 07 09:17:59 2022 +0000"
      },
      "message": "patch 9.0.1025: WinScrolled is not triggered when filler lines change\n\nProblem:    WinScrolled is not triggered when filler lines change.\nSolution:   Add \"topfill\" to the values that WinScrolled triggers on.\n            (closes #11668)\n"
    },
    {
      "commit": "84497cd06f06516f6ce727ea00c47792ce16dc70",
      "tree": "5cba204eafbd2506cc306d610f646f23d65a2d9b",
      "parents": [
        "f86490ed4fdab213a28f667abd055c023a73d645"
      ],
      "author": {
        "name": "Bram Moolenaar",
        "email": "Bram@vim.org",
        "time": "Mon Nov 28 20:34:52 2022 +0000"
      },
      "committer": {
        "name": "Bram Moolenaar",
        "email": "Bram@vim.org",
        "time": "Mon Nov 28 20:34:52 2022 +0000"
      },
      "message": "patch 9.0.0967: leaking memory from autocmd windows\n\nProblem:    Leaking memory from autocmd windows.\nSolution:   Free window when auc_win is not NULL.\n"
    },
    {
      "commit": "e76062c078debed0df818f70e4db14ad7a7cb53a",
      "tree": "e43b3b076fdea909c460219e896237a8924ccb6b",
      "parents": [
        "74a694dbe20bb7dea4e06f474cf62e20f9c92f1d"
      ],
      "author": {
        "name": "Bram Moolenaar",
        "email": "Bram@vim.org",
        "time": "Mon Nov 28 18:51:43 2022 +0000"
      },
      "committer": {
        "name": "Bram Moolenaar",
        "email": "Bram@vim.org",
        "time": "Mon Nov 28 18:51:43 2022 +0000"
      },
      "message": "patch 9.0.0965: using one window for executing autocommands is insufficient\n\nProblem:    Using one window for executing autocommands is insufficient.\nSolution:   Use up to five windows for executing autocommands.\n"
    },
    {
      "commit": "74a694dbe20bb7dea4e06f474cf62e20f9c92f1d",
      "tree": "380e37d2a79c0d6cc76977d9d156bd026299a0ff",
      "parents": [
        "269aa2b29ac3e4c0083d929e2477c95e7bd1177a"
      ],
      "author": {
        "name": "Luuk van Baal",
        "email": "luukvbaal@gmail.com",
        "time": "Mon Nov 28 16:49:36 2022 +0000"
      },
      "committer": {
        "name": "Bram Moolenaar",
        "email": "Bram@vim.org",
        "time": "Mon Nov 28 16:49:36 2022 +0000"
      },
      "message": "patch 9.0.0964: status line not redrawn when \u0027splitkeep\u0027 is \"screen\"\n\nProblem:    Status line of other window not redrawn when dragging it when\n            \u0027splitkeep\u0027 is set to \"screen\".\nSolution:   Set w_redr_status earlier. (Luuk van Baal, closes #11635,\n            closes #11632)\n"
    },
    {
      "commit": "cc762a48d42b579fb7bdec2c614636b830342dd5",
      "tree": "49df7955693638be976b8349ce34346402f29fa6",
      "parents": [
        "ad85af5b384d8d36d7bd3e9b4086190d3a40ab15"
      ],
      "author": {
        "name": "Bram Moolenaar",
        "email": "Bram@vim.org",
        "time": "Fri Nov 25 13:03:31 2022 +0000"
      },
      "committer": {
        "name": "Bram Moolenaar",
        "email": "Bram@vim.org",
        "time": "Fri Nov 25 13:03:31 2022 +0000"
      },
      "message": "patch 9.0.0947: invalid memory access in substitute with function\n\nProblem:    Invalid memory access in substitute with function that goes to\n            another file.\nSolution:   Check for text locked in CTRL-W gf.\n"
    },
    {
      "commit": "0b6d6a186e961faa5b9058406234ffd93a7e6688",
      "tree": "50916c74f222fd7a6a421bed05fea0f88a9864aa",
      "parents": [
        "1d822afaf66a84fab71c84521fd92db11d2c8925"
      ],
      "author": {
        "name": "Bram Moolenaar",
        "email": "Bram@vim.org",
        "time": "Wed Nov 23 14:33:01 2022 +0000"
      },
      "committer": {
        "name": "Bram Moolenaar",
        "email": "Bram@vim.org",
        "time": "Wed Nov 23 14:33:01 2022 +0000"
      },
      "message": "patch 9.0.0929: build failure with tiny version\n\nProblem:    Build failure with tiny version. (Tony Mechelynck)\nSolution:   Add #ifdef.\n"
    },
    {
      "commit": "96cbbe29debba25d7eec8d01955c5ac01f5c420d",
      "tree": "d299c68fdc517fa0b94d2b3deaa4d0eebd9e199b",
      "parents": [
        "bc222152d8dea252aa5f1fa24b5536ed269feb92"
      ],
      "author": {
        "name": "Bram Moolenaar",
        "email": "Bram@vim.org",
        "time": "Wed Nov 23 11:36:22 2022 +0000"
      },
      "committer": {
        "name": "Bram Moolenaar",
        "email": "Bram@vim.org",
        "time": "Wed Nov 23 11:36:22 2022 +0000"
      },
      "message": "patch 9.0.0927: Coverity warns for using a NULL pointer\n\nProblem:    Coverity warns for using a NULL pointer.\nSolution:   Check for memory allocaion failure.\n"
    },
    {
      "commit": "9c5b7cb4cf67c64648a324e9dfd1e17d793335a4",
      "tree": "fc42246864edb9caf442f466b64609bd60c43a71",
      "parents": [
        "0319306f20d2a5989d1f5639a47d77cebeac2f29"
      ],
      "author": {
        "name": "Bram Moolenaar",
        "email": "Bram@vim.org",
        "time": "Tue Nov 22 13:29:20 2022 +0000"
      },
      "committer": {
        "name": "Bram Moolenaar",
        "email": "Bram@vim.org",
        "time": "Tue Nov 22 13:29:20 2022 +0000"
      },
      "message": "patch 9.0.0919: build failure with tiny features\n\nProblem:    Build failure with tiny features.\nSolution:   Adjust #ifdef\u0027s.\n"
    },
    {
      "commit": "35fc61cb5b5eba8bbb9d8f0700332fbab38f40ca",
      "tree": "352599f641e6c8c88d8574871f8b8e86b6168dba",
      "parents": [
        "ce30ccc06af7f2c03762e5b18dde37b26ea6ec42"
      ],
      "author": {
        "name": "Bram Moolenaar",
        "email": "Bram@vim.org",
        "time": "Tue Nov 22 12:40:50 2022 +0000"
      },
      "committer": {
        "name": "Bram Moolenaar",
        "email": "Bram@vim.org",
        "time": "Tue Nov 22 12:40:50 2022 +0000"
      },
      "message": "patch 9.0.0917: the WinScrolled autocommand event is not enough\n\nProblem:    The WinScrolled autocommand event is not enough.\nSolution:   Add WinResized and provide information about what changed.\n            (closes #11576)\n"
    },
    {
      "commit": "29967732761d1ffb5592db5f5aa7036f5b52abf1",
      "tree": "8ce74785996d6a469d1ab29c7d0f995210f75885",
      "parents": [
        "228e422855d43965f2c3319ff0cdc26ea422c10f"
      ],
      "author": {
        "name": "Bram Moolenaar",
        "email": "Bram@vim.org",
        "time": "Sun Nov 20 12:11:45 2022 +0000"
      },
      "committer": {
        "name": "Bram Moolenaar",
        "email": "Bram@vim.org",
        "time": "Sun Nov 20 12:11:45 2022 +0000"
      },
      "message": "patch 9.0.0915: WinScrolled may trigger immediately when defined\n\nProblem:    WinScrolled may trigger immediately when defined.\nSolution:   Initialize the fields in all windows. (closes #11582)\n"
    },
    {
      "commit": "0a60f79fd0c328b47b36279a95282e9f8d9e7512",
      "tree": "770ca1ec430efa0379f9bec4e3b50153d5f23041",
      "parents": [
        "c896adbcdee8b2296433a61c1f009aae9f68a594"
      ],
      "author": {
        "name": "Bram Moolenaar",
        "email": "Bram@vim.org",
        "time": "Sat Nov 19 21:18:11 2022 +0000"
      },
      "committer": {
        "name": "Bram Moolenaar",
        "email": "Bram@vim.org",
        "time": "Sat Nov 19 21:18:11 2022 +0000"
      },
      "message": "patch 9.0.0913: only change in current window triggers the WinScrolled event\n\nProblem:    Only a change in the current window triggers the WinScrolled\n            event.\nSolution:   Trigger WinScrolled if any window scrolled or changed size.\n            (issue #11576)\n"
    },
    {
      "commit": "9fda81515b26ecd3c1e99f95334aaed3f7b6fea3",
      "tree": "12a4d3d606b0ee1d1dda7aa9799f5286462153cb",
      "parents": [
        "361895d2a15b4b0bbbb4c009261eab5b3d69ebf1"
      ],
      "author": {
        "name": "Bram Moolenaar",
        "email": "Bram@vim.org",
        "time": "Sat Nov 19 13:14:10 2022 +0000"
      },
      "committer": {
        "name": "Bram Moolenaar",
        "email": "Bram@vim.org",
        "time": "Sat Nov 19 13:14:10 2022 +0000"
      },
      "message": "patch 9.0.0909: error message for layout change does not match action\n\nProblem:    Error message for layout change does not match action.\nSolution:   Pass the command to where the error is given. (closes #11573)\n"
    },
    {
      "commit": "d63a85592cef0ee4f0fec5efe2f8d66b31f01f05",
      "tree": "0b1f1312b6d54ccd334f1931f62399640c42aaa9",
      "parents": [
        "ff95ce0930e6db0037fe8d1fc875a6522b054582"
      ],
      "author": {
        "name": "Bram Moolenaar",
        "email": "Bram@vim.org",
        "time": "Sat Nov 19 11:41:30 2022 +0000"
      },
      "committer": {
        "name": "Bram Moolenaar",
        "email": "Bram@vim.org",
        "time": "Sat Nov 19 11:41:30 2022 +0000"
      },
      "message": "patch 9.0.0907: restoring window after WinScrolled may fail\n\nProblem:    Restoring window after WinScrolled may fail.\nSolution:   Lock the window layout when triggering WinScrolled.\n"
    },
    {
      "commit": "8e0ccb6bc21a446e5c6375b7fdf200fb53a129da",
      "tree": "3e596216fd46a554ea8719c150ddcaa49a16f0bd",
      "parents": [
        "873f41a0187e81a22aa4622fbf938de72a54abba"
      ],
      "author": {
        "name": "zeertzjq",
        "email": "zeertzjq@outlook.com",
        "time": "Tue Nov 01 18:35:27 2022 +0000"
      },
      "committer": {
        "name": "Bram Moolenaar",
        "email": "Bram@vim.org",
        "time": "Tue Nov 01 18:35:27 2022 +0000"
      },
      "message": "patch 9.0.0825: cannot drag an entry in the tabpage line\n\nProblem:    Cannot drag an entry in the tabpage line.\nSolution:   Clear dragwin instead of got_click. (closes #11483,\n            closes #11482)\n"
    },
    {
      "commit": "7a7db047dcb2336de5103e793345eb5a9d125900",
      "tree": "2bb6ea64775c1d60dab04e91fbb4a584d8c256ca",
      "parents": [
        "8ab9ca93eea32b318235384720200771863ecaee"
      ],
      "author": {
        "name": "Bram Moolenaar",
        "email": "Bram@vim.org",
        "time": "Mon Oct 31 23:07:11 2022 +0000"
      },
      "committer": {
        "name": "Bram Moolenaar",
        "email": "Bram@vim.org",
        "time": "Mon Oct 31 23:07:11 2022 +0000"
      },
      "message": "patch 9.0.0823: mouse drag test fails\n\nProblem:    Mouse drag test fails.\nSolution:   Only reset the mouse click flag when actually switching to another\n            tab page.  Disable test that keeps failing.\n"
    },
    {
      "commit": "8ab9ca93eea32b318235384720200771863ecaee",
      "tree": "78a5fbdd321361af03a3e2c819e7bd9aeec73159",
      "parents": [
        "86e6717ace4f5e00eaeb84b59e3fc92bca548155"
      ],
      "author": {
        "name": "Bram Moolenaar",
        "email": "Bram@vim.org",
        "time": "Mon Oct 31 13:06:26 2022 +0000"
      },
      "committer": {
        "name": "Bram Moolenaar",
        "email": "Bram@vim.org",
        "time": "Mon Oct 31 13:06:26 2022 +0000"
      },
      "message": "patch 9.0.0822: crash when dragging the statusline with a mapping\n\nProblem:    Crash when dragging the statusline with a mapping.\nSolution:   Check for valid window pointer. (issue #11427)\n"
    },
    {
      "commit": "a1a46da87d91cfbf46866627b3e66a757145e8c3",
      "tree": "060fdc50d91bf1a973a522a1e50c106b6481ad17",
      "parents": [
        "4ac8e7948cb3e07bc4598ede8b274891d14dfa7c"
      ],
      "author": {
        "name": "Luuk van Baal",
        "email": "luukvbaal@gmail.com",
        "time": "Mon Oct 17 14:22:03 2022 +0100"
      },
      "committer": {
        "name": "Bram Moolenaar",
        "email": "Bram@vim.org",
        "time": "Mon Oct 17 14:22:03 2022 +0100"
      },
      "message": "patch 9.0.0780: \u0027scroll\u0027 value computed in unexpected location\n\nProblem:    \u0027scroll\u0027 value computed in unexpected location.\nSolution:   Compute \u0027scroll\u0027 when the window height is changed. (Luuk van\n            Baal, closes #11387)\n"
    },
    {
      "commit": "ba43e76fcd5b2da57dbaa4d9a555793fe8ac344e",
      "tree": "46d248575c130e6c338dc0aac5f66eabe2c2fef4",
      "parents": [
        "856c5d2bc7c3864f8b63a0ab3e376d5c5e51f1d5"
      ],
      "author": {
        "name": "Martin Tournoij",
        "email": "martin@arp242.net",
        "time": "Thu Oct 13 22:12:15 2022 +0100"
      },
      "committer": {
        "name": "Bram Moolenaar",
        "email": "Bram@vim.org",
        "time": "Thu Oct 13 22:12:15 2022 +0100"
      },
      "message": "patch 9.0.0747: too many #ifdefs\n\nProblem:    Too many #ifdefs.\nSolution:   Gradudate the +cmdline_info feature. (Martin Tournoij,\n            closes #11330)\n"
    },
    {
      "commit": "cf3d0eaf47a56a52b355d8faf4e59685396f9c05",
      "tree": "ecb982bc178f8eaab7f8a12436d83526778ff331",
      "parents": [
        "0937b9fb244949b7ce9bfcf8398d7495b9b6aa85"
      ],
      "author": {
        "name": "Bram Moolenaar",
        "email": "Bram@vim.org",
        "time": "Fri Oct 07 11:20:29 2022 +0100"
      },
      "committer": {
        "name": "Bram Moolenaar",
        "email": "Bram@vim.org",
        "time": "Fri Oct 07 11:20:29 2022 +0100"
      },
      "message": "patch 9.0.0682: crash when popup with deleted timer is closed\n\nProblem:    Crash when popup with deleted timer is closed. (Igbanam\n            Ogbuluijah)\nSolution:   Check the timer still exists. (closes #11301)\n"
    },
    {
      "commit": "c9f5f73206272ccad0aa536854debc5f9781978a",
      "tree": "2d1976965b9052140b4ad929e3f0227721c9c862",
      "parents": [
        "db77cb3c08784e6038dd029271b2080c1b2d9acb"
      ],
      "author": {
        "name": "Bram Moolenaar",
        "email": "Bram@vim.org",
        "time": "Thu Oct 06 11:39:06 2022 +0100"
      },
      "committer": {
        "name": "Bram Moolenaar",
        "email": "Bram@vim.org",
        "time": "Thu Oct 06 11:39:06 2022 +0100"
      },
      "message": "patch 9.0.0670: no space for command line when there is a tabline\n\nProblem:    No space for command line when there is a tabline.\nSolution:   Correct computation of where the command line should be.\n            (closes #11295)\n"
    },
    {
      "commit": "346823d3e5668b99d2c2fd920e7f215e21ad3ea7",
      "tree": "ab5d401f50309df98b3975d1d71365e838a2208a",
      "parents": [
        "7beaf6a720ddc7e2989c8831872bfb98ec78a65d"
      ],
      "author": {
        "name": "Luuk van Baal",
        "email": "luukvbaal@gmail.com",
        "time": "Wed Oct 05 18:26:42 2022 +0100"
      },
      "committer": {
        "name": "Bram Moolenaar",
        "email": "Bram@vim.org",
        "time": "Wed Oct 05 18:26:42 2022 +0100"
      },
      "message": "patch 9.0.0667: ml_get error when \u0027splitkeep\u0027 is \"screen\"\n\nProblem:    ml_get error when \u0027splitkeep\u0027 is \"screen\". (Marius Gedminas)\nSolution:   Check the botline is not too large. (Luuk van Baal,\n            closes #11293, closes #11292)\n"
    },
    {
      "commit": "0816f473ab2f6cf7d8311c0f97371cada7f20d18",
      "tree": "46c3a0fe1d1a91ac6ca535b297ccc72e2d378354",
      "parents": [
        "f3ef026c9897f1d2e3fba47166a4771d507dae91"
      ],
      "author": {
        "name": "Bram Moolenaar",
        "email": "Bram@vim.org",
        "time": "Wed Oct 05 15:42:32 2022 +0100"
      },
      "committer": {
        "name": "Bram Moolenaar",
        "email": "Bram@vim.org",
        "time": "Wed Oct 05 15:42:32 2022 +0100"
      },
      "message": "patch 9.0.0665: setting \u0027cmdheight\u0027 has no effect if last window was resized\n\nProblem:    Setting \u0027cmdheight\u0027 has no effect if last window was resized.\nSolution:   Do apply \u0027cmdheight\u0027 when told to.  Use the frame height instead\n            of the cmdline_row.  (closes #11286)\n"
    },
    {
      "commit": "7904fa420eb577274c4c3711295240100167d495",
      "tree": "a38ab30cb4c947c2ebba45cd7ed711ffd2e719a7",
      "parents": [
        "4ba5f1dab656103e8f4a4505452d1816b9e83c1e"
      ],
      "author": {
        "name": "Martin Tournoij",
        "email": "martin@arp242.net",
        "time": "Tue Oct 04 16:28:45 2022 +0100"
      },
      "committer": {
        "name": "Bram Moolenaar",
        "email": "Bram@vim.org",
        "time": "Tue Oct 04 16:28:45 2022 +0100"
      },
      "message": "patch 9.0.0657: too many #ifdefs\n\nProblem:    Too many #ifdefs.\nSolution:   Graduate the +cmdwin feature.  Now the tiny and small builds are\n            equal, drop the small build.  (Martin Tournoij, closes #11268)\n"
    },
    {
      "commit": "13ece2ae1d09009d3fb8acf858c288e7848ecdac",
      "tree": "8c157431840de281782b06d8572adf41085f617e",
      "parents": [
        "6b2d4ff7148e0b416ba745d20d061e6f7bb53ee7"
      ],
      "author": {
        "name": "Luuk van Baal",
        "email": "luukvbaal@gmail.com",
        "time": "Mon Oct 03 15:28:08 2022 +0100"
      },
      "committer": {
        "name": "Bram Moolenaar",
        "email": "Bram@vim.org",
        "time": "Mon Oct 03 15:28:08 2022 +0100"
      },
      "message": "patch 9.0.0647: the \u0027splitscroll\u0027 option is not a good name\n\nProblem:    The \u0027splitscroll\u0027 option is not a good name.\nSolution:   Rename \u0027splitscroll\u0027 to \u0027splitkeep\u0027 and make it a string option,\n            also supporting \"topline\". (Luuk van Baal, closes #11258)\n"
    },
    {
      "commit": "9f573a8df02d9f699a43d2afbd1d2841d700b9ad",
      "tree": "8b68307515d0dce34622ef379b11c166a6f2f7d3",
      "parents": [
        "fc06cda8379031890ee8852cdca61eb8af8e1ba2"
      ],
      "author": {
        "name": "Bram Moolenaar",
        "email": "Bram@vim.org",
        "time": "Thu Sep 29 13:50:08 2022 +0100"
      },
      "committer": {
        "name": "Bram Moolenaar",
        "email": "Bram@vim.org",
        "time": "Thu Sep 29 13:50:08 2022 +0100"
      },
      "message": "patch 9.0.0622: matchaddpos() can get slow when adding many matches\n\nProblem:    matchaddpos() can get slow when adding many matches.\nSolution:   Update the next available match ID when manually picking an ID and\n            remove check if the available ID can be used. (idea by Rick Howe)\n"
    },
    {
      "commit": "7c1cbb6cd437c6e0c3ccc05840cc931108b4a60a",
      "tree": "6beeee2a32dd5f38a4aa2429c2573ad3a96658dc",
      "parents": [
        "7fc6c0e4dab4e80b9806a973936af54276468513"
      ],
      "author": {
        "name": "Luuk van Baal",
        "email": "luukvbaal@gmail.com",
        "time": "Tue Sep 27 12:31:15 2022 +0100"
      },
      "committer": {
        "name": "Bram Moolenaar",
        "email": "Bram@vim.org",
        "time": "Tue Sep 27 12:31:15 2022 +0100"
      },
      "message": "patch 9.0.0603: with \u0027nosplitscroll\u0027 folds are not handled correctly\n\nProblem:    With \u0027nosplitscroll\u0027 folds are not handled correctly.\nSolution:   Take care of closed folds when moving the cursor. (Luuk van Baal,\n            closes #11234)\n"
    },
    {
      "commit": "8279af514ca7e5fd3c31cf13b0864163d1a0bfeb",
      "tree": "de69a0a7677c75f63bea91ec39204549c750b518",
      "parents": [
        "3bdef10dc1c836e5e5a6fdcc1c21155cbd80d798"
      ],
      "author": {
        "name": "Bram Moolenaar",
        "email": "Bram@vim.org",
        "time": "Mon Sep 26 23:08:22 2022 +0100"
      },
      "committer": {
        "name": "Bram Moolenaar",
        "email": "Bram@vim.org",
        "time": "Mon Sep 26 23:08:22 2022 +0100"
      },
      "message": "patch 9.0.0598: using negative array index with negative width window\n\nProblem:    Using negative array index with negative width window.\nSolution:   Make sure the window width does not become negative.\n"
    },
    {
      "commit": "20e58561abc4116f3bfbafaef242d886dd77b303",
      "tree": "9dbca95dc3d3d4a36a2e99cf3c0362b2d6966e2d",
      "parents": [
        "f8addf1ca1d8c7801f6dded2341b7084d2b93e5e"
      ],
      "author": {
        "name": "Luuk van Baal",
        "email": "luukvbaal@gmail.com",
        "time": "Fri Sep 23 12:57:09 2022 +0100"
      },
      "committer": {
        "name": "Bram Moolenaar",
        "email": "Bram@vim.org",
        "time": "Fri Sep 23 12:57:09 2022 +0100"
      },
      "message": "patch 9.0.0555: scrolling with \u0027nosplitscroll\u0027 in callback changing curwin\n\nProblem:    Scrolling with \u0027nosplitscroll\u0027 in callback changing curwin.\nSolution:   Invalidate w_cline_row in the right place. (Luuk van Baal,\n            closes #11185)\n"
    },
    {
      "commit": "62de54b48d6354d4622ec0b21ffa4cf3cf312505",
      "tree": "1aa6e8b6c74a1fa1514279b4389681c93fa8b413",
      "parents": [
        "5800c798385b4a7eded9ea63cfd4f57d1499a673"
      ],
      "author": {
        "name": "zeertzjq",
        "email": "zeertzjq@outlook.com",
        "time": "Thu Sep 22 18:08:37 2022 +0100"
      },
      "committer": {
        "name": "Bram Moolenaar",
        "email": "Bram@vim.org",
        "time": "Thu Sep 22 18:08:37 2022 +0100"
      },
      "message": "patch 9.0.0550: crash when closing a tabpage and buffer is NULL\n\nProblem:    Crash when closing a tabpage and buffer is NULL.\nSolution:   Adjust how autocommands are triggered when closing a window.\n            (closes #11198, closes #11197)\n"
    },
    {
      "commit": "faf1d412f5e3665021500b528c0e7301eb02bf0b",
      "tree": "353052c0b1c65f95ea4413856fb977d1d93d7f6c",
      "parents": [
        "c9e4a6f1910dea250af69a3774bcf1fee7e7b8f5"
      ],
      "author": {
        "name": "Luuk van Baal",
        "email": "luukvbaal@gmail.com",
        "time": "Mon Sep 19 16:45:29 2022 +0100"
      },
      "committer": {
        "name": "Bram Moolenaar",
        "email": "Bram@vim.org",
        "time": "Mon Sep 19 16:45:29 2022 +0100"
      },
      "message": "patch 9.0.0505: various problems with \u0027nosplitscroll\u0027\n\nProblem:    Various problems with \u0027nosplitscroll\u0027.\nSolution:   Fix \u0027nosplitscroll\u0027 problems. (Luuk van Baal, closes #11166)\n"
    },
    {
      "commit": "d5bc762dea1fd32fa04342f8149f95ccfc3b9709",
      "tree": "4818f726c9be293c96bb9f871a400b6a5c265273",
      "parents": [
        "0cdfb7ce462393595b0308dcabf343e82f05319d"
      ],
      "author": {
        "name": "Luuk van Baal",
        "email": "luukvbaal@gmail.com",
        "time": "Sat Sep 17 16:16:35 2022 +0100"
      },
      "committer": {
        "name": "Bram Moolenaar",
        "email": "Bram@vim.org",
        "time": "Sat Sep 17 16:16:35 2022 +0100"
      },
      "message": "patch 9.0.0486: text scrolled with \u0027nosplitscroll\u0027, autocmd win and help\n\nProblem:    Text scrolled with \u0027nosplitscroll\u0027, autocmd win opened and help\n            window closed.\nSolution:   Skip win_fix_scroll() in more situations. (Luuk van Baal,\n            closes #11150)\n"
    },
    {
      "commit": "594f9e09cd68e6277b8aa08094405bc642c5792a",
      "tree": "108b28b300454e9269ff35530f8047fc0fc30399",
      "parents": [
        "3e8b7a6056986caf561f1b6168af7837919df9b9"
      ],
      "author": {
        "name": "Luuk van Baal",
        "email": "luukvbaal@gmail.com",
        "time": "Fri Sep 16 12:52:58 2022 +0100"
      },
      "committer": {
        "name": "Bram Moolenaar",
        "email": "Bram@vim.org",
        "time": "Fri Sep 16 12:52:58 2022 +0100"
      },
      "message": "patch 9.0.0478: test for \u0027splitscroll\u0027 takes too much time\n\nProblem:    Test for \u0027splitscroll\u0027 takes too much time.\nSolution:   Only test some of the combinations. (Luuk van Baal, closes #11139)\n"
    },
    {
      "commit": "3735f11050616652525bf80b4fbcb2b3bfeab113",
      "tree": "0f03839e7c767f890f0cfa7b8fe8d966a6046595",
      "parents": [
        "aeef1f7f6d8f6d4e84ffc9a24874f10403e4ddcd"
      ],
      "author": {
        "name": "Luuk van Baal",
        "email": "luukvbaal@gmail.com",
        "time": "Thu Sep 15 12:43:26 2022 +0100"
      },
      "committer": {
        "name": "Bram Moolenaar",
        "email": "Bram@vim.org",
        "time": "Thu Sep 15 12:43:26 2022 +0100"
      },
      "message": "patch 9.0.0469: cursor moves if cmdwin is closed when \u0027splitscroll\u0027 is off\n\nProblem:    Cursor moves if cmdwin is closed when \u0027splitscroll\u0027 is off.\nSolution:   Skip win_fix_cursor if called when cmdwin is open or closing.\n            (Luuk van Baal, closes #11134)\n"
    }
  ],
  "next": "470a14140bc06f1653edf26ab0b3c9b801080353"
}
