aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/nvim/edit.c40
-rw-r--r--src/nvim/eval/userfunc.c31
-rw-r--r--src/nvim/getchar.c15
-rw-r--r--src/nvim/getchar.h1
4 files changed, 29 insertions, 58 deletions
diff --git a/src/nvim/edit.c b/src/nvim/edit.c
index f5ba9c1c05..c3f204045a 100644
--- a/src/nvim/edit.c
+++ b/src/nvim/edit.c
@@ -9,6 +9,7 @@
#include <uv.h>
#include "klib/kvec.h"
+#include "nvim/api/private/defs.h"
#include "nvim/ascii_defs.h"
#include "nvim/autocmd.h"
#include "nvim/autocmd_defs.h"
@@ -99,7 +100,6 @@ typedef struct {
int did_restart_edit; // remember if insert mode was restarted
// after a ctrl+o
bool nomove;
- char *ptr;
} InsertState;
#ifdef INCLUDE_GENERATED_DECLARATIONS
@@ -163,15 +163,8 @@ static void insert_enter(InsertState *s)
if (s->cmdchar != 'r' && s->cmdchar != 'v') {
pos_T save_cursor = curwin->w_cursor;
- if (s->cmdchar == 'R') {
- s->ptr = "r";
- } else if (s->cmdchar == 'V') {
- s->ptr = "v";
- } else {
- s->ptr = "i";
- }
-
- set_vim_var_string(VV_INSERTMODE, s->ptr, 1);
+ const char *const ptr = s->cmdchar == 'R' ? "r" : s->cmdchar == 'V' ? "v" : "i";
+ set_vim_var_string(VV_INSERTMODE, ptr, 1);
set_vim_var_string(VV_CHAR, NULL, -1);
ins_apply_autocmds(EVENT_INSERTENTER);
@@ -288,14 +281,15 @@ static void insert_enter(InsertState *s)
// column. Eg after "^O$" or "^O80|".
validate_virtcol(curwin);
update_curswant();
+ const char *ptr;
if (((ins_at_eol && curwin->w_cursor.lnum == o_lnum)
|| curwin->w_curswant > curwin->w_virtcol)
- && *(s->ptr = get_cursor_line_ptr() + curwin->w_cursor.col) != NUL) {
- if (s->ptr[1] == NUL) {
+ && *(ptr = get_cursor_line_ptr() + curwin->w_cursor.col) != NUL) {
+ if (ptr[1] == NUL) {
curwin->w_cursor.col++;
} else {
- s->i = utfc_ptr2len(s->ptr);
- if (s->ptr[s->i] == NUL) {
+ s->i = utfc_ptr2len(ptr);
+ if (ptr[s->i] == NUL) {
curwin->w_cursor.col += s->i;
}
}
@@ -335,12 +329,10 @@ static void insert_enter(InsertState *s)
// Get the current length of the redo buffer, those characters have to be
// skipped if we want to get to the inserted characters.
- s->ptr = get_inserted();
- if (s->ptr == NULL) {
- new_insert_skip = 0;
- } else {
- new_insert_skip = (int)get_inserted_len();
- xfree(s->ptr);
+ String inserted = get_inserted();
+ new_insert_skip = (int)inserted.size;
+ if (inserted.data != NULL) {
+ xfree(inserted.data);
}
old_indent = 0;
@@ -2337,14 +2329,14 @@ static void stop_insert(pos_T *end_insert_pos, int esc, int nomove)
// Save the inserted text for later redo with ^@ and CTRL-A.
// Don't do it when "restart_edit" was set and nothing was inserted,
// otherwise CTRL-O w and then <Left> will clear "last_insert".
- char *ptr = get_inserted();
- int added = ptr == NULL ? 0 : (int)get_inserted_len() - new_insert_skip;
+ String inserted = get_inserted();
+ int added = inserted.data == NULL ? 0 : (int)inserted.size - new_insert_skip;
if (did_restart_edit == 0 || added > 0) {
xfree(last_insert);
- last_insert = ptr;
+ last_insert = inserted.data;
last_insert_skip = added < 0 ? 0 : new_insert_skip;
} else {
- xfree(ptr);
+ xfree(inserted.data);
}
if (!arrow_used && end_insert_pos != NULL) {
diff --git a/src/nvim/eval/userfunc.c b/src/nvim/eval/userfunc.c
index f386dd28b9..c5357d507c 100644
--- a/src/nvim/eval/userfunc.c
+++ b/src/nvim/eval/userfunc.c
@@ -8,6 +8,7 @@
#include <stdlib.h>
#include <string.h>
+#include "nvim/api/private/defs.h"
#include "nvim/ascii_defs.h"
#include "nvim/autocmd.h"
#include "nvim/autocmd_defs.h"
@@ -265,29 +266,16 @@ static void register_closure(ufunc_T *fp)
}
static char lambda_name[8 + NUMBUFLEN];
-static size_t lambda_namelen = 0;
/// @return a name for a lambda. Returned in static memory.
-char *get_lambda_name(void)
+static String get_lambda_name(void)
{
static int lambda_no = 0;
int n = snprintf(lambda_name, sizeof(lambda_name), "<lambda>%d", ++lambda_no);
- if (n < 1) {
- lambda_namelen = 0;
- } else if (n >= (int)sizeof(lambda_name)) {
- lambda_namelen = sizeof(lambda_name) - 1;
- } else {
- lambda_namelen = (size_t)n;
- }
- return lambda_name;
-}
-
-/// Get the length of the last lambda name.
-size_t get_lambda_name_len(void)
-{
- return lambda_namelen;
+ return cbuf_as_string(lambda_name,
+ n < 1 ? 0 : (size_t)MIN(n, (int)sizeof(lambda_name) - 1));
}
/// Allocate a "ufunc_T" for a function called "name".
@@ -371,10 +359,8 @@ int get_lambda_tv(char **arg, typval_T *rettv, evalarg_T *evalarg)
int flags = 0;
garray_T newlines;
- char *name = get_lambda_name();
- size_t namelen = get_lambda_name_len();
-
- fp = alloc_ufunc(name, namelen);
+ String name = get_lambda_name();
+ fp = alloc_ufunc(name.data, name.size);
pt = xcalloc(1, sizeof(partial_T));
ga_init(&newlines, (int)sizeof(char *), 1);
@@ -4142,9 +4128,8 @@ bool set_ref_in_func(char *name, ufunc_T *fp_in, int copyID)
/// Registers a luaref as a lambda.
char *register_luafunc(LuaRef ref)
{
- char *name = get_lambda_name();
- size_t namelen = get_lambda_name_len();
- ufunc_T *fp = alloc_ufunc(name, namelen);
+ String name = get_lambda_name();
+ ufunc_T *fp = alloc_ufunc(name.data, name.size);
fp->uf_refcount = 1;
fp->uf_varargs = true;
diff --git a/src/nvim/getchar.c b/src/nvim/getchar.c
index ac817ab9e6..899293e9f6 100644
--- a/src/nvim/getchar.c
+++ b/src/nvim/getchar.c
@@ -155,9 +155,6 @@ 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_get_inserted_len = 0; ///< length of the string returned from the
- ///< last call to get_inserted()
-
enum {
KEYLEN_PART_KEY = -1, ///< keylen value for incomplete key-code
KEYLEN_PART_MAP = -2, ///< keylen value for incomplete mapping
@@ -254,15 +251,11 @@ char *get_recorded(void)
/// Return the contents of the redo buffer as a single string.
/// K_SPECIAL in the returned string is escaped.
-char *get_inserted(void)
-{
- 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)
+String get_inserted(void)
{
- return last_get_inserted_len;
+ size_t len = 0;
+ char *str = get_buffcont(&redobuff, false, &len);
+ return cbuf_as_string(str, len);
}
/// Add string after the current block of the given buffer
diff --git a/src/nvim/getchar.h b/src/nvim/getchar.h
index 766c5eb2a4..aa5110655c 100644
--- a/src/nvim/getchar.h
+++ b/src/nvim/getchar.h
@@ -3,6 +3,7 @@
#include <stddef.h> // IWYU pragma: keep
#include <stdint.h> // IWYU pragma: keep
+#include "nvim/api/private/defs.h" // IWYU pragma: keep
#include "nvim/eval/typval_defs.h" // IWYU pragma: keep
#include "nvim/getchar_defs.h" // IWYU pragma: keep
#include "nvim/types_defs.h" // IWYU pragma: keep