mirror of
https://github.com/neovim/neovim.git
synced 2025-02-25 18:55:25 -06:00
Merge #8930 'vim-patch:8.1.0022'
This commit is contained in:
commit
17ce06d1c9
@ -11235,7 +11235,7 @@ void get_user_input(const typval_T *const argvars,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
int cmd_silent_save = cmd_silent;
|
const bool cmd_silent_save = cmd_silent;
|
||||||
|
|
||||||
cmd_silent = false; // Want to see the prompt.
|
cmd_silent = false; // Want to see the prompt.
|
||||||
// Only the part of the message after the last NL is considered as
|
// Only the part of the message after the last NL is considered as
|
||||||
|
@ -123,7 +123,7 @@ void do_debug(char_u *cmd)
|
|||||||
int save_msg_scroll = msg_scroll;
|
int save_msg_scroll = msg_scroll;
|
||||||
int save_State = State;
|
int save_State = State;
|
||||||
int save_did_emsg = did_emsg;
|
int save_did_emsg = did_emsg;
|
||||||
int save_cmd_silent = cmd_silent;
|
const bool save_cmd_silent = cmd_silent;
|
||||||
int save_msg_silent = msg_silent;
|
int save_msg_silent = msg_silent;
|
||||||
int save_emsg_silent = emsg_silent;
|
int save_emsg_silent = emsg_silent;
|
||||||
int save_redir_off = redir_off;
|
int save_redir_off = redir_off;
|
||||||
|
@ -448,7 +448,7 @@ void flush_buffers(int flush_typeahead)
|
|||||||
}
|
}
|
||||||
typebuf.tb_maplen = 0;
|
typebuf.tb_maplen = 0;
|
||||||
typebuf.tb_silent = 0;
|
typebuf.tb_silent = 0;
|
||||||
cmd_silent = FALSE;
|
cmd_silent = false;
|
||||||
typebuf.tb_no_abbr_cnt = 0;
|
typebuf.tb_no_abbr_cnt = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -652,15 +652,13 @@ void stuffnumReadbuff(long n)
|
|||||||
add_num_buff(&readbuf1, n);
|
add_num_buff(&readbuf1, n);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
// Read a character from the redo buffer. Translates K_SPECIAL, CSI and
|
||||||
* Read a character from the redo buffer. Translates K_SPECIAL, CSI and
|
// multibyte characters.
|
||||||
* multibyte characters.
|
// The redo buffer is left as it is.
|
||||||
* The redo buffer is left as it is.
|
// If init is true, prepare for redo, return FAIL if nothing to redo, OK
|
||||||
* If init is TRUE, prepare for redo, return FAIL if nothing to redo, OK
|
// otherwise.
|
||||||
* otherwise.
|
// If old_redo is true, use old_redobuff instead of redobuff.
|
||||||
* If old is TRUE, use old_redobuff instead of redobuff.
|
static int read_redo(bool init, bool old_redo)
|
||||||
*/
|
|
||||||
static int read_redo(int init, int old_redo)
|
|
||||||
{
|
{
|
||||||
static buffblock_T *bp;
|
static buffblock_T *bp;
|
||||||
static char_u *p;
|
static char_u *p;
|
||||||
@ -713,38 +711,35 @@ static int read_redo(int init, int old_redo)
|
|||||||
return c;
|
return c;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
// Copy the rest of the redo buffer into the stuff buffer (in a slow way).
|
||||||
* Copy the rest of the redo buffer into the stuff buffer (in a slow way).
|
// If old_redo is true, use old_redobuff instead of redobuff.
|
||||||
* If old_redo is TRUE, use old_redobuff instead of redobuff.
|
// The escaped K_SPECIAL and CSI are copied without translation.
|
||||||
* The escaped K_SPECIAL and CSI are copied without translation.
|
static void copy_redo(bool old_redo)
|
||||||
*/
|
|
||||||
static void copy_redo(int old_redo)
|
|
||||||
{
|
{
|
||||||
int c;
|
int c;
|
||||||
|
|
||||||
while ((c = read_redo(FALSE, old_redo)) != NUL) {
|
while ((c = read_redo(false, old_redo)) != NUL) {
|
||||||
add_char_buff(&readbuf2, c);
|
add_char_buff(&readbuf2, c);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
// Stuff the redo buffer into readbuf2.
|
||||||
* Stuff the redo buffer into readbuf2.
|
// Insert the redo count into the command.
|
||||||
* Insert the redo count into the command.
|
// If "old_redo" is true, the last but one command is repeated
|
||||||
* If "old_redo" is TRUE, the last but one command is repeated
|
// instead of the last command (inserting text). This is used for
|
||||||
* instead of the last command (inserting text). This is used for
|
// CTRL-O <.> in insert mode
|
||||||
* CTRL-O <.> in insert mode
|
//
|
||||||
*
|
// return FAIL for failure, OK otherwise
|
||||||
* return FAIL for failure, OK otherwise
|
int start_redo(long count, bool old_redo)
|
||||||
*/
|
|
||||||
int start_redo(long count, int old_redo)
|
|
||||||
{
|
{
|
||||||
int c;
|
int c;
|
||||||
|
|
||||||
/* init the pointers; return if nothing to redo */
|
// init the pointers; return if nothing to redo
|
||||||
if (read_redo(TRUE, old_redo) == FAIL)
|
if (read_redo(true, old_redo) == FAIL) {
|
||||||
return FAIL;
|
return FAIL;
|
||||||
|
}
|
||||||
|
|
||||||
c = read_redo(FALSE, old_redo);
|
c = read_redo(false, old_redo);
|
||||||
|
|
||||||
/* copy the buffer name, if present */
|
/* copy the buffer name, if present */
|
||||||
if (c == '"') {
|
if (c == '"') {
|
||||||
@ -755,22 +750,30 @@ int start_redo(long count, int old_redo)
|
|||||||
if (c >= '1' && c < '9')
|
if (c >= '1' && c < '9')
|
||||||
++c;
|
++c;
|
||||||
add_char_buff(&readbuf2, c);
|
add_char_buff(&readbuf2, c);
|
||||||
c = read_redo(FALSE, old_redo);
|
|
||||||
|
// the expression register should be re-evaluated
|
||||||
|
if (c == '=') {
|
||||||
|
add_char_buff(&readbuf2, CAR);
|
||||||
|
cmd_silent = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
c = read_redo(false, old_redo);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (c == 'v') { /* redo Visual */
|
if (c == 'v') { /* redo Visual */
|
||||||
VIsual = curwin->w_cursor;
|
VIsual = curwin->w_cursor;
|
||||||
VIsual_active = TRUE;
|
VIsual_active = true;
|
||||||
VIsual_select = FALSE;
|
VIsual_select = false;
|
||||||
VIsual_reselect = TRUE;
|
VIsual_reselect = true;
|
||||||
redo_VIsual_busy = TRUE;
|
redo_VIsual_busy = true;
|
||||||
c = read_redo(FALSE, old_redo);
|
c = read_redo(false, old_redo);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* try to enter the count (in place of a previous count) */
|
// try to enter the count (in place of a previous count)
|
||||||
if (count) {
|
if (count) {
|
||||||
while (ascii_isdigit(c)) /* skip "old" count */
|
while (ascii_isdigit(c)) { // skip "old" count
|
||||||
c = read_redo(FALSE, old_redo);
|
c = read_redo(false, old_redo);
|
||||||
|
}
|
||||||
add_num_buff(&readbuf2, count);
|
add_num_buff(&readbuf2, count);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -789,12 +792,13 @@ int start_redo_ins(void)
|
|||||||
{
|
{
|
||||||
int c;
|
int c;
|
||||||
|
|
||||||
if (read_redo(TRUE, FALSE) == FAIL)
|
if (read_redo(true, false) == FAIL) {
|
||||||
return FAIL;
|
return FAIL;
|
||||||
|
}
|
||||||
start_stuff();
|
start_stuff();
|
||||||
|
|
||||||
/* skip the count and the command character */
|
// skip the count and the command character
|
||||||
while ((c = read_redo(FALSE, FALSE)) != NUL) {
|
while ((c = read_redo(false, false)) != NUL) {
|
||||||
if (vim_strchr((char_u *)"AaIiRrOo", c) != NULL) {
|
if (vim_strchr((char_u *)"AaIiRrOo", c) != NULL) {
|
||||||
if (c == 'O' || c == 'o') {
|
if (c == 'O' || c == 'o') {
|
||||||
add_buff(&readbuf2, NL_STR, -1L);
|
add_buff(&readbuf2, NL_STR, -1L);
|
||||||
@ -803,9 +807,9 @@ int start_redo_ins(void)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* copy the typed text from the redo buffer into the stuff buffer */
|
// copy the typed text from the redo buffer into the stuff buffer
|
||||||
copy_redo(FALSE);
|
copy_redo(false);
|
||||||
block_redo = TRUE;
|
block_redo = true;
|
||||||
return OK;
|
return OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -952,7 +956,7 @@ int ins_typebuf(char_u *str, int noremap, int offset, int nottyped, bool silent)
|
|||||||
typebuf.tb_maplen += addlen;
|
typebuf.tb_maplen += addlen;
|
||||||
if (silent || typebuf.tb_silent > offset) {
|
if (silent || typebuf.tb_silent > offset) {
|
||||||
typebuf.tb_silent += addlen;
|
typebuf.tb_silent += addlen;
|
||||||
cmd_silent = TRUE;
|
cmd_silent = true;
|
||||||
}
|
}
|
||||||
if (typebuf.tb_no_abbr_cnt && offset == 0) /* and not used for abbrev.s */
|
if (typebuf.tb_no_abbr_cnt && offset == 0) /* and not used for abbrev.s */
|
||||||
typebuf.tb_no_abbr_cnt += addlen;
|
typebuf.tb_no_abbr_cnt += addlen;
|
||||||
@ -1716,7 +1720,7 @@ static int vgetorpeek(int advance)
|
|||||||
*typebuf.tb_buf = (char_u)c;
|
*typebuf.tb_buf = (char_u)c;
|
||||||
gotchars(typebuf.tb_buf, 1);
|
gotchars(typebuf.tb_buf, 1);
|
||||||
}
|
}
|
||||||
cmd_silent = FALSE;
|
cmd_silent = false;
|
||||||
|
|
||||||
break;
|
break;
|
||||||
} else if (typebuf.tb_len > 0) {
|
} else if (typebuf.tb_len > 0) {
|
||||||
|
@ -751,7 +751,7 @@ EXTERN cmdmod_T cmdmod; /* Ex command modifiers */
|
|||||||
EXTERN int msg_silent INIT(= 0); // don't print messages
|
EXTERN int msg_silent INIT(= 0); // don't print messages
|
||||||
EXTERN int emsg_silent INIT(= 0); // don't print error messages
|
EXTERN int emsg_silent INIT(= 0); // don't print error messages
|
||||||
EXTERN bool emsg_noredir INIT(= false); // don't redirect error messages
|
EXTERN bool emsg_noredir INIT(= false); // don't redirect error messages
|
||||||
EXTERN int cmd_silent INIT(= false); // don't echo the command line
|
EXTERN bool cmd_silent INIT(= false); // don't echo the command line
|
||||||
|
|
||||||
/* Values for swap_exists_action: what to do when swap file already exists */
|
/* Values for swap_exists_action: what to do when swap file already exists */
|
||||||
#define SEA_NONE 0 /* don't use dialog */
|
#define SEA_NONE 0 /* don't use dialog */
|
||||||
|
@ -541,7 +541,7 @@ int emsg(const char_u *s_)
|
|||||||
|
|
||||||
// Reset msg_silent, an error causes messages to be switched back on.
|
// Reset msg_silent, an error causes messages to be switched back on.
|
||||||
msg_silent = 0;
|
msg_silent = 0;
|
||||||
cmd_silent = FALSE;
|
cmd_silent = false;
|
||||||
|
|
||||||
if (global_busy) { // break :global command
|
if (global_busy) { // break :global command
|
||||||
global_busy++;
|
global_busy++;
|
||||||
|
@ -34,3 +34,16 @@ func Test_put_char_block2()
|
|||||||
bw!
|
bw!
|
||||||
call setreg('a', a[0], a[1])
|
call setreg('a', a[0], a[1])
|
||||||
endfunc
|
endfunc
|
||||||
|
|
||||||
|
func Test_put_expr()
|
||||||
|
new
|
||||||
|
call setline(1, repeat(['A'], 6))
|
||||||
|
exec "1norm! \"=line('.')\<cr>p"
|
||||||
|
norm! j0.
|
||||||
|
norm! j0.
|
||||||
|
exec "4norm! \"=\<cr>P"
|
||||||
|
norm! j0.
|
||||||
|
norm! j0.
|
||||||
|
call assert_equal(['A1','A2','A3','4A','5A','6A'], getline(1,'$'))
|
||||||
|
bw!
|
||||||
|
endfunc
|
||||||
|
Loading…
Reference in New Issue
Block a user