mirror of
https://github.com/vim/vim.git
synced 2025-07-26 11:04:33 -04:00
patch 8.2.2961: keys typed during a :normal command are discarded
Problem: Keys typed during a :normal command are discarded. Solution: Concatenate saved typeahead and typed kesy. (closes #8340)
This commit is contained in:
parent
8cf02e5cf8
commit
c41badb748
@ -140,7 +140,7 @@ do_debug(char_u *cmd)
|
|||||||
|
|
||||||
if (typeahead_saved)
|
if (typeahead_saved)
|
||||||
{
|
{
|
||||||
restore_typeahead(&typeaheadbuf);
|
restore_typeahead(&typeaheadbuf, TRUE);
|
||||||
ignore_script = save_ignore_script;
|
ignore_script = save_ignore_script;
|
||||||
}
|
}
|
||||||
ex_normal_busy = save_ex_normal_busy;
|
ex_normal_busy = save_ex_normal_busy;
|
||||||
|
@ -5873,7 +5873,7 @@ f_inputrestore(typval_T *argvars UNUSED, typval_T *rettv)
|
|||||||
{
|
{
|
||||||
--ga_userinput.ga_len;
|
--ga_userinput.ga_len;
|
||||||
restore_typeahead((tasave_T *)(ga_userinput.ga_data)
|
restore_typeahead((tasave_T *)(ga_userinput.ga_data)
|
||||||
+ ga_userinput.ga_len);
|
+ ga_userinput.ga_len, TRUE);
|
||||||
// default return is zero == OK
|
// default return is zero == OK
|
||||||
}
|
}
|
||||||
else if (p_verbose > 1)
|
else if (p_verbose > 1)
|
||||||
|
@ -8249,7 +8249,7 @@ save_current_state(save_state_T *sst)
|
|||||||
restore_current_state(save_state_T *sst)
|
restore_current_state(save_state_T *sst)
|
||||||
{
|
{
|
||||||
// Restore the previous typeahead.
|
// Restore the previous typeahead.
|
||||||
restore_typeahead(&sst->tabuf);
|
restore_typeahead(&sst->tabuf, FALSE);
|
||||||
|
|
||||||
msg_scroll = sst->save_msg_scroll;
|
msg_scroll = sst->save_msg_scroll;
|
||||||
restart_edit = sst->save_restart_edit;
|
restart_edit = sst->save_restart_edit;
|
||||||
|
@ -1414,9 +1414,10 @@ save_typeahead(tasave_T *tp)
|
|||||||
/*
|
/*
|
||||||
* Restore the typeahead to what it was before calling save_typeahead().
|
* Restore the typeahead to what it was before calling save_typeahead().
|
||||||
* The allocated memory is freed, can only be called once!
|
* The allocated memory is freed, can only be called once!
|
||||||
|
* When "overwrite" is FALSE input typed later is kept.
|
||||||
*/
|
*/
|
||||||
void
|
void
|
||||||
restore_typeahead(tasave_T *tp)
|
restore_typeahead(tasave_T *tp, int overwrite UNUSED)
|
||||||
{
|
{
|
||||||
if (tp->typebuf_valid)
|
if (tp->typebuf_valid)
|
||||||
{
|
{
|
||||||
@ -1432,7 +1433,7 @@ restore_typeahead(tasave_T *tp)
|
|||||||
free_buff(&readbuf2);
|
free_buff(&readbuf2);
|
||||||
readbuf2 = tp->save_readbuf2;
|
readbuf2 = tp->save_readbuf2;
|
||||||
# ifdef USE_INPUT_BUF
|
# ifdef USE_INPUT_BUF
|
||||||
set_input_buf(tp->save_inputbuf);
|
set_input_buf(tp->save_inputbuf, overwrite);
|
||||||
# endif
|
# endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -32,7 +32,7 @@ int typebuf_maplen(void);
|
|||||||
void del_typebuf(int len, int offset);
|
void del_typebuf(int len, int offset);
|
||||||
int save_typebuf(void);
|
int save_typebuf(void);
|
||||||
void save_typeahead(tasave_T *tp);
|
void save_typeahead(tasave_T *tp);
|
||||||
void restore_typeahead(tasave_T *tp);
|
void restore_typeahead(tasave_T *tp, int overwrite);
|
||||||
void openscript(char_u *name, int directly);
|
void openscript(char_u *name, int directly);
|
||||||
void close_all_scripts(void);
|
void close_all_scripts(void);
|
||||||
int using_script(void);
|
int using_script(void);
|
||||||
|
@ -19,7 +19,7 @@ int vim_is_input_buf_empty(void);
|
|||||||
int vim_free_in_input_buf(void);
|
int vim_free_in_input_buf(void);
|
||||||
int vim_used_in_input_buf(void);
|
int vim_used_in_input_buf(void);
|
||||||
char_u *get_input_buf(void);
|
char_u *get_input_buf(void);
|
||||||
void set_input_buf(char_u *p);
|
void set_input_buf(char_u *p, int overwrite);
|
||||||
void add_to_input_buf(char_u *s, int len);
|
void add_to_input_buf(char_u *s, int len);
|
||||||
void add_to_input_buf_csi(char_u *str, int len);
|
void add_to_input_buf_csi(char_u *str, int len);
|
||||||
void trash_input_buf(void);
|
void trash_input_buf(void);
|
||||||
|
16
src/ui.c
16
src/ui.c
@ -810,9 +810,10 @@ get_input_buf(void)
|
|||||||
/*
|
/*
|
||||||
* Restore the input buffer with a pointer returned from get_input_buf().
|
* Restore the input buffer with a pointer returned from get_input_buf().
|
||||||
* The allocated memory is freed, this only works once!
|
* The allocated memory is freed, this only works once!
|
||||||
|
* When "overwrite" is FALSE input typed later is kept.
|
||||||
*/
|
*/
|
||||||
void
|
void
|
||||||
set_input_buf(char_u *p)
|
set_input_buf(char_u *p, int overwrite)
|
||||||
{
|
{
|
||||||
garray_T *gap = (garray_T *)p;
|
garray_T *gap = (garray_T *)p;
|
||||||
|
|
||||||
@ -820,8 +821,17 @@ set_input_buf(char_u *p)
|
|||||||
{
|
{
|
||||||
if (gap->ga_data != NULL)
|
if (gap->ga_data != NULL)
|
||||||
{
|
{
|
||||||
mch_memmove(inbuf, gap->ga_data, gap->ga_len);
|
if (overwrite || inbufcount + gap->ga_len >= INBUFLEN)
|
||||||
inbufcount = gap->ga_len;
|
{
|
||||||
|
mch_memmove(inbuf, gap->ga_data, gap->ga_len);
|
||||||
|
inbufcount = gap->ga_len;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
mch_memmove(inbuf + gap->ga_len, inbuf, inbufcount);
|
||||||
|
mch_memmove(inbuf, gap->ga_data, gap->ga_len);
|
||||||
|
inbufcount += gap->ga_len;
|
||||||
|
}
|
||||||
vim_free(gap->ga_data);
|
vim_free(gap->ga_data);
|
||||||
}
|
}
|
||||||
vim_free(gap);
|
vim_free(gap);
|
||||||
|
@ -750,6 +750,8 @@ static char *(features[]) =
|
|||||||
|
|
||||||
static int included_patches[] =
|
static int included_patches[] =
|
||||||
{ /* Add new patch number below this line */
|
{ /* Add new patch number below this line */
|
||||||
|
/**/
|
||||||
|
2961,
|
||||||
/**/
|
/**/
|
||||||
2960,
|
2960,
|
||||||
/**/
|
/**/
|
||||||
|
Loading…
x
Reference in New Issue
Block a user