diff options
author | Shougo <Shougo.Matsu@gmail.com> | 2022-08-29 14:11:52 +0900 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-08-29 13:11:52 +0800 |
commit | 253f0ffd8d4784b7fca03f8f6c2455b9ee83ff9b (patch) | |
tree | c013d5603d348f69ea5d47c2bf0477df1504e623 /src/nvim/ex_getln.c | |
parent | 1dcaa75a6564b8a90e74a96e242803c6aa3f59cf (diff) | |
download | rneovim-253f0ffd8d4784b7fca03f8f6c2455b9ee83ff9b.tar.gz rneovim-253f0ffd8d4784b7fca03f8f6c2455b9ee83ff9b.tar.bz2 rneovim-253f0ffd8d4784b7fca03f8f6c2455b9ee83ff9b.zip |
vim-patch:9.0.0285: it is not easy to change the command line from a plugin (#19979)
vim-patch:9.0.0285: it is not easy to change the command line from a plugin
Problem: It is not easy to change the command line from a plugin.
Solution: Add setcmdline(). (Shougo Matsushita, closes vim/vim#10869)
https://github.com/vim/vim/commit/07ea5f1509fe8dafe3262ed2702b4d0fc99e288b
Diffstat (limited to 'src/nvim/ex_getln.c')
-rw-r--r-- | src/nvim/ex_getln.c | 38 |
1 files changed, 35 insertions, 3 deletions
diff --git a/src/nvim/ex_getln.c b/src/nvim/ex_getln.c index 081aa80778..84eacf3997 100644 --- a/src/nvim/ex_getln.c +++ b/src/nvim/ex_getln.c @@ -2373,9 +2373,9 @@ end: return cmdpreview_type != 0; } -static int command_line_changed(CommandLineState *s) +/// Trigger CmdlineChanged autocommands. +static void do_autocmd_cmdlinechanged(int firstc) { - // Trigger CmdlineChanged autocommands. if (has_event(EVENT_CMDLINECHANGED)) { TryState tstate; Error err = ERROR_INIT; @@ -2383,7 +2383,7 @@ static int command_line_changed(CommandLineState *s) dict_T *dict = get_v_event(&save_v_event); char firstcbuf[2]; - firstcbuf[0] = (char)(s->firstc > 0 ? s->firstc : '-'); + firstcbuf[0] = (char)firstc; firstcbuf[1] = 0; // set v:event to a dictionary with information about the commandline @@ -2403,6 +2403,12 @@ static int command_line_changed(CommandLineState *s) redrawcmd(); } } +} + +static int command_line_changed(CommandLineState *s) +{ + // Trigger CmdlineChanged autocommands. + do_autocmd_cmdlinechanged(s->firstc > 0 ? s->firstc : '-'); if (s->firstc == ':' && current_sctx.sc_sid == 0 // only if interactive @@ -3991,6 +3997,32 @@ int get_cmdline_screen_pos(void) return p->cmdspos; } +/// Set the command line str to "str". +/// @return 1 when failed, 0 when OK. +int set_cmdline_str(const char *str, int pos) +{ + CmdlineInfo *p = get_ccline_ptr(); + + if (p == NULL) { + return 1; + } + + int len = (int)STRLEN(str); + realloc_cmdbuff(len + 1); + p->cmdlen = len; + STRCPY(p->cmdbuff, str); + + p->cmdpos = pos < 0 || pos > p->cmdlen ? p->cmdlen : pos; + new_cmdpos = p->cmdpos; + + redrawcmd(); + + // Trigger CmdlineChanged autocommands. + do_autocmd_cmdlinechanged(ccline.cmdfirstc == NUL ? '-' : ccline.cmdfirstc); + + return 0; +} + /* * Set the command line byte position to "pos". Zero is the first position. * Only works when the command line is being edited. |