diff --git a/src/nvim/mark.c b/src/nvim/mark.c index 1d5a6a6539..e24c259c8f 100644 --- a/src/nvim/mark.c +++ b/src/nvim/mark.c @@ -146,6 +146,11 @@ int setmark_pos(int c, pos_T *pos, int fnum, fmarkv_T *view_pt) return OK; } + if (c == ':' && bt_prompt(buf)) { + RESET_FMARK(&buf->b_prompt_start, *pos, buf->b_fnum, view); + return OK; + } + if (ASCII_ISLOWER(c)) { i = c - 'a'; RESET_FMARK(buf->b_namedm + i, *pos, fnum, view); @@ -1720,8 +1725,7 @@ bool mark_set_local(const char name, buf_T *const buf, const fmark_T fm, const b } else if (name == '^') { fm_tgt = &(buf->b_last_insert); } else if (name == ':') { - // Readonly mark for prompt buffer. Can't be edited on user side. - return false; + fm_tgt = &(buf->b_prompt_start); } else if (name == '.') { fm_tgt = &(buf->b_last_change); } else { diff --git a/test/functional/legacy/prompt_buffer_spec.lua b/test/functional/legacy/prompt_buffer_spec.lua index 25e4c1329f..90393a8fa1 100644 --- a/test/functional/legacy/prompt_buffer_spec.lua +++ b/test/functional/legacy/prompt_buffer_spec.lua @@ -622,6 +622,12 @@ describe('prompt buffer', function() -- ': mark is only available in prompt buffer. source('set buftype=') eq("Invalid mark name: ':'", t.pcall_err(api.nvim_buf_get_mark, 0, ':')) + + -- mark can be moved + source('set buftype=prompt') + eq({ 11, 1 }, api.nvim_buf_get_mark(0, ':')) + eq(true, api.nvim_buf_set_mark(0, ':', 1, 1, {})) + eq({ 1, 1 }, api.nvim_buf_get_mark(0, ':')) end) describe('prompt_getinput', function()