diff options
author | Björn Linse <bjorn.linse@gmail.com> | 2017-08-30 08:51:39 +0200 |
---|---|---|
committer | Björn Linse <bjorn.linse@gmail.com> | 2017-10-26 20:29:10 +0200 |
commit | 445f25998c66ee7e4dc5bbfeed4108818e439b92 (patch) | |
tree | 6142ddb201b447ad985cc46a3e6101ff3b6e2c99 | |
parent | 91d8e26bc7471378b8005b8843182dc1af90d81a (diff) | |
download | rneovim-445f25998c66ee7e4dc5bbfeed4108818e439b92.tar.gz rneovim-445f25998c66ee7e4dc5bbfeed4108818e439b92.tar.bz2 rneovim-445f25998c66ee7e4dc5bbfeed4108818e439b92.zip |
ext_cmdline: fix inputsecret()
-rw-r--r-- | src/nvim/ex_getln.c | 13 | ||||
-rw-r--r-- | test/functional/ui/cmdline_spec.lua | 20 |
2 files changed, 32 insertions, 1 deletions
diff --git a/src/nvim/ex_getln.c b/src/nvim/ex_getln.c index bcc8d598db..e79476ab53 100644 --- a/src/nvim/ex_getln.c +++ b/src/nvim/ex_getln.c @@ -2733,7 +2733,18 @@ draw_cmdline_no_arabicshape: static void ui_ext_cmdline_show(CmdlineInfo *line) { Array content = ARRAY_DICT_INIT; - if (kv_size(line->last_colors.colors)) { + if (cmdline_star) { + size_t len = 0; + for (char_u *p = ccline.cmdbuff; *p; mb_ptr_adv(p)) { + len++; + } + char *buf = xmallocz(len); + memset(buf, '*', len); + Array item = ARRAY_DICT_INIT; + ADD(item, DICTIONARY_OBJ((Dictionary)ARRAY_DICT_INIT)); + ADD(item, STRING_OBJ(((String) { .data = buf, .size = len }))); + ADD(content, ARRAY_OBJ(item)); + } else if (kv_size(line->last_colors.colors)) { for (size_t i = 0; i < kv_size(line->last_colors.colors); i++) { CmdlineColorChunk chunk = kv_A(line->last_colors.colors, i); Array item = ARRAY_DICT_INIT; diff --git a/test/functional/ui/cmdline_spec.lua b/test/functional/ui/cmdline_spec.lua index b886596e00..6a9f4a22b4 100644 --- a/test/functional/ui/cmdline_spec.lua +++ b/test/functional/ui/cmdline_spec.lua @@ -15,6 +15,7 @@ describe('external cmdline', function() before_each(function() clear() + cmdline, block = {}, nil screen = Screen.new(25, 5) screen:attach({rgb=true, ext_cmdline=true}) screen:set_on_event_handler(function(name, data) @@ -457,6 +458,25 @@ describe('external cmdline', function() end) end) + it('works with inputsecret()', function() + feed(":call inputsecret('secret:')<cr>abc123") + screen:expect([[ + ^ | + ~ | + ~ | + ~ | + | + ]], nil, nil, function() + eq({{ + content = { { {}, "******" } }, + firstc = "", + indent = 0, + pos = 6, + prompt = "secret:" + }}, cmdline) + end) + end) + it('works with highlighted cmdline', function() source([[ highlight RBP1 guibg=Red |