diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/nvim/api/vimscript.c | 30 | ||||
-rw-r--r-- | src/nvim/window.c | 7 |
2 files changed, 21 insertions, 16 deletions
diff --git a/src/nvim/api/vimscript.c b/src/nvim/api/vimscript.c index acd89119f9..698b2d06fb 100644 --- a/src/nvim/api/vimscript.c +++ b/src/nvim/api/vimscript.c @@ -747,13 +747,12 @@ Dictionary nvim_parse_expression(String expr, String flags, Boolean highlight, E /// @param[out] err Error details, if any. /// @return Dictionary containing command information, with these keys: /// - cmd: (string) Command name. -/// - range: (number) Number of items in the command |<range>|. Can be 0, 1 or 2. -/// - line1: (number) Starting line of command |<range>|. -1 if command cannot take a range. -/// |<line1>| -/// - line2: (number) Final line of command |<range>|. -1 if command cannot take a range. -/// |<line2>| +/// - range: (array) Command <range>. Can have 0-2 elements depending on how many items the +/// range contains. Has no elements if command doesn't accept a range or if +/// no range was specified, one element if only a single range item was +/// specified and two elements if both range items were specified. /// - count: (number) Any |<count>| that was supplied to the command. -1 if command cannot -/// take a count. +/// take a count. Mutually exclusive with "range". /// - reg: (number) The optional command |<register>|, if specified. Empty string if not /// specified or if command cannot take a register. /// - bang: (boolean) Whether command contains a |<bang>| (!) modifier. @@ -849,15 +848,24 @@ Dictionary nvim_parse_cmd(String str, Dictionary opts, Error *err) PUT(result, "cmd", CSTR_TO_OBJ((char *)get_command_name(NULL, ea.cmdidx))); } - PUT(result, "range", INTEGER_OBJ(ea.addr_count)); - PUT(result, "line1", INTEGER_OBJ((ea.argt & EX_RANGE) ? ea.line1 : -1)); - PUT(result, "line2", INTEGER_OBJ((ea.argt & EX_RANGE) ? ea.line2 : -1)); + if ((ea.argt & EX_RANGE) && !(ea.argt & EX_COUNT) && ea.addr_count > 0) { + Array range = ARRAY_DICT_INIT; + if (ea.addr_count > 1) { + ADD(range, INTEGER_OBJ(ea.line1)); + } + ADD(range, INTEGER_OBJ(ea.line2)); + PUT(result, "range", ARRAY_OBJ(range));; + } else { + PUT(result, "range", ARRAY_OBJ(ARRAY_DICT_INIT)); + } if (ea.argt & EX_COUNT) { - if (ea.addr_count > 0 || cmd == NULL) { + if (ea.addr_count > 0) { PUT(result, "count", INTEGER_OBJ(ea.line2)); - } else { + } else if (cmd != NULL) { PUT(result, "count", INTEGER_OBJ(cmd->uc_def)); + } else { + PUT(result, "count", INTEGER_OBJ(0)); } } else { PUT(result, "count", INTEGER_OBJ(-1)); diff --git a/src/nvim/window.c b/src/nvim/window.c index 6bae92c909..887df31650 100644 --- a/src/nvim/window.c +++ b/src/nvim/window.c @@ -5490,7 +5490,7 @@ void win_setheight_win(int height, win_T *win) } } cmdline_row = row; - p_ch = MAX(Rows - cmdline_row, 1); + p_ch = MAX(Rows - cmdline_row, ui_has(kUIMessages) ? 0 : 1); curtab->tp_ch_used = p_ch; msg_row = row; msg_col = 0; @@ -5998,10 +5998,7 @@ void win_drag_status_line(win_T *dragwin, int offset) clear_cmdline = true; } cmdline_row = row; - p_ch = Rows - cmdline_row; - if (p_ch < 1) { - p_ch = 1; - } + p_ch = MAX(Rows - cmdline_row, ui_has(kUIMessages) ? 0 : 1); curtab->tp_ch_used = p_ch; redraw_all_later(SOME_VALID); showmode(); |