Hi ChrisBra, Bram and list, 2016-7-24(Sun) 0:36:14 UTC+9 Christian Brabandt: > Hi Bram! > > On Sa, 23 Jul 2016, Bram Moolenaar wrote: > > > > > Christian Brabandt wrote: > > > > > Bram, > > > I am writing a test for the popupmenu and the different keys, that can > > > be used there (:h popupmenu-keys) > > > > Thanks, that is useful. > > > > > And I have some questions. > > > 1) > > > > > > ,---- > > > | In the first state these keys have a special meaning: > > > | <BS> and CTRL-H Delete one character, find the matches for the word > > > before > > > | the cursor. This reduces the list of matches, often > > > to one > > > | entry, and switches to the second state. > > > `---- > > > > > > I fail to understand what this does, especially in difference to the > > > second state: > > > > For example, if you type "compl<Ctrl-N>" then you get a list of matches, > > and the first one is used for the text. That could be "completion". > > Still the matches for "compl" are shown. > > Then typing BS changes it to "completio" and only matches for that are > > shown. > > Hm, that works when using <Ctrl-N>, but not when using, e.g. > calling the completion menu like this: > > inoremap <f5> <c-r>=ListMonths()<cr> > > Then <BS> will always end the completion menu and remove the last > letter. > > I did not think, that there is a difference depending on how the > completion menu is called. This might be a bug. > > > > ,---- > > > | In the second and third state these keys have a special meaning: > > > | <BS> and CTRL-H Delete one character, find the matches for the > > > shorter word > > > | before the cursor. This may find more matches. > > > `---- > > > > > > And whatever I do, using <bs> will always end the completion menu and > > > remove one character. Either from the last typed char or from the > > > inserted char. I can't seem to figure out, how to use <bs> to adjust the > > > number of entries in the completion menu. > > > > The main difference is that in the second state the highlighted item > > differs from what the current text is. > > Oh yes. Emphasis on "Cursor Key". Basically, that happens only then. Now > I understand. > > > > > > 2) The behaviour of the enter key > > > > > > ,---- > > > | The behavior of the <Enter> key depends on the state you are in: > > > | first state: Use the text as it is and insert a line break. > > > | second state: Insert the currently selected match. > > > | third state: Use the text as it is and insert a line break. > > > `---- > > > > > > For me the <Enter> Key will always insert a line break. > > > > Not for me. Probably depends on 'completeopt'. My value is > > menu,preview > > Yeah, once i figured, that I need to use the cursor keys to select the > match, it works as expected. > > > It's possible that the help is not correct for all possible ways > > completion works. The code is very complicated and there are many > > corner cases. > > Well, here is an updated patch for the popupmenu. > > I think I also found a bug, and this makes the test currently fail. > Take this example from the test: > > (The popupmenu is the one from the help for all months) > The initial state of the buffer is this: > ,---- > | D > | December2015 > `----
I have investigated this behavior. Related vim_dev threads: - Patch 7.4.2146 https://groups.google.com/d/msg/vim_dev/75ZXlRlBzl4/DDnqvSn9BgAJ - [vim/vim] VIM 7.4: Possible regression via patch 2146? (#972) https://groups.google.com/d/msg/vim_dev/mQ2YacpOKvo/vOsgkU-2AQAJ - Patch 7.4.2188 https://groups.google.com/d/msg/vim_dev/e2Rr8Px3qkQ/1XWiAQ0LAgAJ I think the series of <C-E> behavior is correct. > > (cursor at D, press <f5><c-e><c-e><c-e><c-e><enter>) > > Now if you want to complete the letter D this should only complete to > December, since all other values do not match it and therefore it should > be completed immediately to December and no menu shown. Therefore, > pressing <C-e> afterwards should select the letter from below the > cursors line, so it should complete to "December2015" if you press <c-e> > 4 times, then there should be a new line because of the enter and then > the "December2015" should be shown. So in the end, the buffer should > look like this: > > ,---- > | December2015 > | > | December2015 > `---- "the popup menu is not visible" is not equivalent to "the completion mode is not active". After the type <F5>, Vim still stay in the first state of the completion mode. It is not related to the visible of popup menu. Check on the gdb. (gdb) p compl_started $4 = 1 (gdb) p pum_visible() $5 = 0 So that, the first <C-E> behavior `complete_CTRL-E` is correct. Of course, the second and more <C-E> is `i_CTRL_E`. > > For whatever reason, doing it interactively, this results in: > > ,---- > | Dece > | > | December2015 > `---- > (because after inserting the match <c-e> is still in popupmenu mode and > "ends completion and goes back to what was there before selecting a > match") > > However, a total mystery is to me, when the test is run, it will > complete to > > ,---- > | December2015 > | December2015 > | December2015 > `---- Hmm?, I got the following result. (make test_popup in 7.4.2358) 1 FAILED: Found errors in Test_popup_complete2(): function RunTheTest[9]..Test_popup_complete2 line 10: Expected ['December2015', '', 'December2015'] but got ['Dece', '', 'December2015'] I think `['Dece', '', 'December2015']` is right. > > I have left this documented in the test. I am pretty sure, this is a > bug, and therefore, the test fails currently. > > On a related note, since the "noinsert/noselect" property only seem to > change, what is inserted when the completion menu is entered initially, > > It is hard to correctly test for that, therefore, I basically tested, > whether enter will insert a line break or not (difference in the states > as you explained above) and by that we know, if there was something > selected. -- Best regards, Hirohito Higashi (a.k.a. h_east) -- -- You received this message from the "vim_dev" maillist. Do not top-post! Type your reply below the text you are replying to. For more information, visit http://www.vim.org/maillist.php --- You received this message because you are subscribed to the Google Groups "vim_dev" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. For more options, visit https://groups.google.com/d/optout.
