aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorzeertzjq <zeertzjq@outlook.com>2024-04-18 08:33:08 +0800
committerGitHub <noreply@github.com>2024-04-18 08:33:08 +0800
commite1ca7a7bfc954fae6991fc86d5da1a4eda864903 (patch)
tree26998b867ed1fc2fb12a1e436ecd1fe3ea9dcb67
parent562719033ec8bec9f6d56c166b9aef13f8a50a96 (diff)
downloadrneovim-e1ca7a7bfc954fae6991fc86d5da1a4eda864903.tar.gz
rneovim-e1ca7a7bfc954fae6991fc86d5da1a4eda864903.tar.bz2
rneovim-e1ca7a7bfc954fae6991fc86d5da1a4eda864903.zip
test: 'showcmd' with ext_messages and Visual selection (#28393)
Also slightly reorder some code to make comments look less out-of-place.
-rw-r--r--src/nvim/getchar.c18
-rw-r--r--src/nvim/normal.c10
-rw-r--r--test/functional/ui/messages_spec.lua13
3 files changed, 26 insertions, 15 deletions
diff --git a/src/nvim/getchar.c b/src/nvim/getchar.c
index bb50ba31a9..8d570b4b2d 100644
--- a/src/nvim/getchar.c
+++ b/src/nvim/getchar.c
@@ -64,6 +64,15 @@
#include "nvim/undo.h"
#include "nvim/vim_defs.h"
+typedef struct {
+ int prev_c;
+ uint8_t buf[MB_MAXBYTES * 3 + 4];
+ size_t buflen;
+ unsigned pending;
+ bool in_special;
+ bool in_mbyte;
+} gotchars_state_T;
+
/// Index in scriptin
static int curscript = -1;
/// Streams to read script from
@@ -84,15 +93,6 @@ static FileDescriptor scriptin[NSCRIPT] = { 0 };
#define MINIMAL_SIZE 20 // minimal size for b_str
-typedef struct {
- int prev_c;
- uint8_t buf[MB_MAXBYTES * 3 + 4];
- size_t buflen;
- unsigned pending;
- bool in_special;
- bool in_mbyte;
-} gotchars_state_T;
-
static buffheader_T redobuff = { { NULL, { NUL } }, NULL, 0, 0 };
static buffheader_T old_redobuff = { { NULL, { NUL } }, NULL, 0, 0 };
static buffheader_T recordbuff = { { NULL, { NUL } }, NULL, 0, 0 };
diff --git a/src/nvim/normal.c b/src/nvim/normal.c
index 22b1c8dffa..d90e23240c 100644
--- a/src/nvim/normal.c
+++ b/src/nvim/normal.c
@@ -893,8 +893,8 @@ static bool normal_get_command_count(NormalState *s)
// Handle a count before a command and compute ca.count0.
// Note that '0' is a command and not the start of a count, but it's
// part of a count after other digits.
- while ((s->c >= '1' && s->c <= '9') || (s->ca.count0 != 0
- && (s->c == K_DEL || s->c == K_KDEL || s->c == '0'))) {
+ while ((s->c >= '1' && s->c <= '9')
+ || (s->ca.count0 != 0 && (s->c == K_DEL || s->c == K_KDEL || s->c == '0'))) {
if (s->c == K_DEL || s->c == K_KDEL) {
s->ca.count0 /= 10;
del_from_showcmd(4); // delete the digit and ~@%
@@ -2065,9 +2065,6 @@ static void display_showcmd(void)
return;
}
// 'showcmdloc' is "last" or empty
- if (p_ch == 0 && !ui_has(kUIMessages)) {
- return;
- }
if (ui_has(kUIMessages)) {
MAXSIZE_TEMP_ARRAY(content, 1);
@@ -2081,6 +2078,9 @@ static void display_showcmd(void)
ui_call_msg_showcmd(content);
return;
}
+ if (p_ch == 0) {
+ return;
+ }
msg_grid_validate();
int showcmd_row = Rows - 1;
diff --git a/test/functional/ui/messages_spec.lua b/test/functional/ui/messages_spec.lua
index e4daf3b546..9fa700c104 100644
--- a/test/functional/ui/messages_spec.lua
+++ b/test/functional/ui/messages_spec.lua
@@ -685,7 +685,18 @@ describe('ui/ext_messages', function()
]],
ruler = { { '2,1 All' } },
}
- feed('d')
+ feed('<c-v>k2l')
+ screen:expect({
+ grid = [[
+ {17:ab}^cde |
+ {17:123}45 |
+ {1:~ }|*3
+ ]],
+ showmode = { { '-- VISUAL BLOCK --', 5 } },
+ showcmd = { { '2x3' } },
+ ruler = { { '1,3 All' } },
+ })
+ feed('o<esc>d')
screen:expect {
grid = [[
abcde |