[geany/geany-plugins] 00c2a0: Merge pull request #1102 from techee/vim_repeat_insert
Frank Lanitz
git-noreply at xxxxx
Wed Sep 29 17:11:12 UTC 2021
Branch: refs/heads/master
Author: Frank Lanitz <frank at frank.uvena.de>
Committer: GitHub <noreply at github.com>
Date: Wed, 29 Sep 2021 17:11:12 UTC
Commit: 00c2a030e722cda45d7ce77e1b8431a773f49b77
https://github.com/geany/geany-plugins/commit/00c2a030e722cda45d7ce77e1b8431a773f49b77
Log Message:
-----------
Merge pull request #1102 from techee/vim_repeat_insert
vimode: Enable '.' to also repeat last inserted text
Modified Paths:
--------------
vimode/src/cmd-runner.c
vimode/src/context.h
vimode/src/vi.c
Modified: vimode/src/cmd-runner.c
23 lines changed, 17 insertions(+), 6 deletions(-)
===================================================================
@@ -633,14 +633,25 @@ static gboolean perform_repeat_cmd(CmdContext *ctx)
gint i;
def = get_cmd_to_run(ctx->repeat_kpl, edit_cmds, FALSE);
- if (!def)
- return FALSE;
-
num = num == -1 ? 1 : num;
- for (i = 0; i < num; i++)
- perform_cmd(def, ctx);
+ if (def) {
+ for (i = 0; i < num; i++)
+ perform_cmd(def, ctx);
+ return TRUE;
+ }
+ else if (ctx->insert_buf_len > 0) {
+ gint pos;
+
+ SSM(ctx->sci, SCI_BEGINUNDOACTION, 0, 0);
+ for (i = 0; i < num; i++)
+ SSM(ctx->sci, SCI_ADDTEXT, ctx->insert_buf_len, (sptr_t) ctx->insert_buf);
+ pos = SSM(ctx->sci, SCI_GETCURRENTPOS, 0, 0);
+ SET_POS(ctx->sci, PREV(ctx->sci, pos), FALSE);
+ SSM(ctx->sci, SCI_ENDUNDOACTION, 0, 0);
+ return TRUE;
+ }
- return TRUE;
+ return FALSE;
}
Modified: vimode/src/context.h
4 lines changed, 2 insertions(+), 2 deletions(-)
===================================================================
@@ -22,7 +22,7 @@
#include "vi.h"
#include "sci.h"
-#define INSERT_BUF_LEN 4096
+#define INSERT_BUF_LEN 131072
typedef struct
{
@@ -54,7 +54,7 @@ typedef struct
gint num;
/* buffer used in insert/replace mode to record entered text so it can be
- * copied N times when e.g. 'i' is preceded by a number */
+ * copied N times when e.g. 'i' is preceded by a number or when using '.' */
gchar insert_buf[INSERT_BUF_LEN];
gint insert_buf_len;
} CmdContext;
Modified: vimode/src/vi.c
6 lines changed, 4 insertions(+), 2 deletions(-)
===================================================================
@@ -109,8 +109,6 @@ static void repeat_insert(gboolean replace)
SSM(sci, SCI_ENDUNDOACTION, 0, 0);
}
ctx.num = 1;
- ctx.insert_buf_len = 0;
- ctx.insert_buf[0] = '\0';
ctx.newline_insert = FALSE;
}
@@ -156,6 +154,10 @@ void vi_set_mode(ViMode mode)
gint start_pos = SSM(sci, SCI_POSITIONFROMLINE, GET_CUR_LINE(sci), 0);
if (pos > start_pos)
SET_POS(sci, PREV(sci, pos), FALSE);
+
+ /* erase kpl so '.' command repeats last inserted text and not command */
+ g_slist_free_full(ctx.kpl, g_free);
+ ctx.kpl = NULL;
}
else if (VI_IS_VISUAL(prev_mode))
SSM(sci, SCI_SETEMPTYSELECTION, pos, 0);
--------------
This E-Mail was brought to you by github_commit_mail.py (Source: https://github.com/geany/infrastructure).
More information about the Plugins-Commits
mailing list