Mercurial > vim
comparison src/usercmd.c @ 27805:afbe86e8b24a v8.2.4428
patch 8.2.4428: crash when switching tabpage while in the cmdline window
Commit: https://github.com/vim/vim/commit/0f6e28f686dbb59ab3b562408ab9b2234797b9b1
Author: Bram Moolenaar <Bram@vim.org>
Date: Sun Feb 20 20:49:35 2022 +0000
patch 8.2.4428: crash when switching tabpage while in the cmdline window
Problem: Crash when switching tabpage while in the cmdline window.
Solution: Disallow switching tabpage when in the cmdline window.
author | Bram Moolenaar <Bram@vim.org> |
---|---|
date | Sun, 20 Feb 2022 22:00:03 +0100 |
parents | 858002fef4b7 |
children | b737bfa876c5 |
comparison
equal
deleted
inserted
replaced
27804:8fc68ce4a097 | 27805:afbe86e8b24a |
---|---|
139 // only full match global is accepted. | 139 // only full match global is accepted. |
140 | 140 |
141 /* | 141 /* |
142 * Look for buffer-local user commands first, then global ones. | 142 * Look for buffer-local user commands first, then global ones. |
143 */ | 143 */ |
144 gap = | 144 gap = &prevwin_curwin()->w_buffer->b_ucmds; |
145 #ifdef FEAT_CMDWIN | |
146 is_in_cmdwin() ? &prevwin->w_buffer->b_ucmds : | |
147 #endif | |
148 &curbuf->b_ucmds; | |
149 for (;;) | 145 for (;;) |
150 { | 146 { |
151 for (j = 0; j < gap->ga_len; ++j) | 147 for (j = 0; j < gap->ga_len; ++j) |
152 { | 148 { |
153 uc = USER_CMD_GA(gap, j); | 149 uc = USER_CMD_GA(gap, j); |
356 */ | 352 */ |
357 char_u * | 353 char_u * |
358 get_user_commands(expand_T *xp UNUSED, int idx) | 354 get_user_commands(expand_T *xp UNUSED, int idx) |
359 { | 355 { |
360 // In cmdwin, the alternative buffer should be used. | 356 // In cmdwin, the alternative buffer should be used. |
361 buf_T *buf = | 357 buf_T *buf = prevwin_curwin()->w_buffer; |
362 #ifdef FEAT_CMDWIN | |
363 is_in_cmdwin() ? prevwin->w_buffer : | |
364 #endif | |
365 curbuf; | |
366 | 358 |
367 if (idx < buf->b_ucmds.ga_len) | 359 if (idx < buf->b_ucmds.ga_len) |
368 return USER_CMD_GA(&buf->b_ucmds, idx)->uc_name; | 360 return USER_CMD_GA(&buf->b_ucmds, idx)->uc_name; |
369 idx -= buf->b_ucmds.ga_len; | 361 idx -= buf->b_ucmds.ga_len; |
370 if (idx < ucmds.ga_len) | 362 if (idx < ucmds.ga_len) |
384 if (cmdidx == CMD_USER && idx < ucmds.ga_len) | 376 if (cmdidx == CMD_USER && idx < ucmds.ga_len) |
385 return USER_CMD(idx)->uc_name; | 377 return USER_CMD(idx)->uc_name; |
386 if (cmdidx == CMD_USER_BUF) | 378 if (cmdidx == CMD_USER_BUF) |
387 { | 379 { |
388 // In cmdwin, the alternative buffer should be used. | 380 // In cmdwin, the alternative buffer should be used. |
389 buf_T *buf = | 381 buf_T *buf = prevwin_curwin()->w_buffer; |
390 #ifdef FEAT_CMDWIN | |
391 is_in_cmdwin() ? prevwin->w_buffer : | |
392 #endif | |
393 curbuf; | |
394 | 382 |
395 if (idx < buf->b_ucmds.ga_len) | 383 if (idx < buf->b_ucmds.ga_len) |
396 return USER_CMD_GA(&buf->b_ucmds, idx)->uc_name; | 384 return USER_CMD_GA(&buf->b_ucmds, idx)->uc_name; |
397 } | 385 } |
398 return NULL; | 386 return NULL; |
476 int over; | 464 int over; |
477 long a; | 465 long a; |
478 garray_T *gap; | 466 garray_T *gap; |
479 | 467 |
480 // In cmdwin, the alternative buffer should be used. | 468 // In cmdwin, the alternative buffer should be used. |
481 gap = | 469 gap = &prevwin_curwin()->w_buffer->b_ucmds; |
482 #ifdef FEAT_CMDWIN | |
483 is_in_cmdwin() ? &prevwin->w_buffer->b_ucmds : | |
484 #endif | |
485 &curbuf->b_ucmds; | |
486 for (;;) | 470 for (;;) |
487 { | 471 { |
488 for (i = 0; i < gap->ga_len; ++i) | 472 for (i = 0; i < gap->ga_len; ++i) |
489 { | 473 { |
490 cmd = USER_CMD_GA(gap, i); | 474 cmd = USER_CMD_GA(gap, i); |