mirror of
https://github.com/neovim/neovim.git
synced 2025-09-07 03:48:18 +00:00
Merge pull request #32649 from zeertzjq/vim-9.1.1151
vim-patch:9.1.{1151,1152}
This commit is contained in:
@@ -339,7 +339,7 @@ static void insert_enter(InsertState *s)
|
|||||||
if (s->ptr == NULL) {
|
if (s->ptr == NULL) {
|
||||||
new_insert_skip = 0;
|
new_insert_skip = 0;
|
||||||
} else {
|
} else {
|
||||||
new_insert_skip = (int)strlen(s->ptr);
|
new_insert_skip = (int)get_inserted_len();
|
||||||
xfree(s->ptr);
|
xfree(s->ptr);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2342,7 +2342,7 @@ static void stop_insert(pos_T *end_insert_pos, int esc, int nomove)
|
|||||||
// Don't do it when "restart_edit" was set and nothing was inserted,
|
// Don't do it when "restart_edit" was set and nothing was inserted,
|
||||||
// otherwise CTRL-O w and then <Left> will clear "last_insert".
|
// otherwise CTRL-O w and then <Left> will clear "last_insert".
|
||||||
char *ptr = get_inserted();
|
char *ptr = get_inserted();
|
||||||
int added = ptr == NULL ? 0 : (int)strlen(ptr) - new_insert_skip;
|
int added = ptr == NULL ? 0 : (int)get_inserted_len() - new_insert_skip;
|
||||||
if (did_restart_edit == 0 || added > 0) {
|
if (did_restart_edit == 0 || added > 0) {
|
||||||
xfree(last_insert);
|
xfree(last_insert);
|
||||||
last_insert = ptr;
|
last_insert = ptr;
|
||||||
@@ -2772,8 +2772,8 @@ char *get_last_insert_save(void)
|
|||||||
if (last_insert == NULL) {
|
if (last_insert == NULL) {
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
char *s = xstrdup(last_insert + last_insert_skip);
|
size_t len = strlen(last_insert + last_insert_skip);
|
||||||
int len = (int)strlen(s);
|
char *s = xmemdupz(last_insert + last_insert_skip, len);
|
||||||
if (len > 0 && s[len - 1] == ESC) { // remove trailing ESC
|
if (len > 0 && s[len - 1] == ESC) { // remove trailing ESC
|
||||||
s[len - 1] = NUL;
|
s[len - 1] = NUL;
|
||||||
}
|
}
|
||||||
|
@@ -155,6 +155,9 @@ static uint8_t noremapbuf_init[TYPELEN_INIT]; ///< initial typebuf.tb_noremap
|
|||||||
|
|
||||||
static size_t last_recorded_len = 0; ///< number of last recorded chars
|
static size_t last_recorded_len = 0; ///< number of last recorded chars
|
||||||
|
|
||||||
|
static size_t last_get_inserted_len = 0; ///< length of the string returned from the
|
||||||
|
///< last call to get_inserted()
|
||||||
|
|
||||||
enum {
|
enum {
|
||||||
KEYLEN_PART_KEY = -1, ///< keylen value for incomplete key-code
|
KEYLEN_PART_KEY = -1, ///< keylen value for incomplete key-code
|
||||||
KEYLEN_PART_MAP = -2, ///< keylen value for incomplete mapping
|
KEYLEN_PART_MAP = -2, ///< keylen value for incomplete mapping
|
||||||
@@ -227,6 +230,10 @@ char *get_recorded(void)
|
|||||||
{
|
{
|
||||||
size_t len;
|
size_t len;
|
||||||
char *p = get_buffcont(&recordbuff, true, &len);
|
char *p = get_buffcont(&recordbuff, true, &len);
|
||||||
|
if (p == NULL) {
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
free_buff(&recordbuff);
|
free_buff(&recordbuff);
|
||||||
|
|
||||||
// Remove the characters that were added the last time, these must be the
|
// Remove the characters that were added the last time, these must be the
|
||||||
@@ -249,7 +256,13 @@ char *get_recorded(void)
|
|||||||
/// K_SPECIAL in the returned string is escaped.
|
/// K_SPECIAL in the returned string is escaped.
|
||||||
char *get_inserted(void)
|
char *get_inserted(void)
|
||||||
{
|
{
|
||||||
return get_buffcont(&redobuff, false, NULL);
|
return get_buffcont(&redobuff, false, &last_get_inserted_len);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Return the length of string returned from the last call of get_inserted().
|
||||||
|
size_t get_inserted_len(void)
|
||||||
|
{
|
||||||
|
return last_get_inserted_len;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Add string after the current block of the given buffer
|
/// Add string after the current block of the given buffer
|
||||||
|
Reference in New Issue
Block a user