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.

Raspunde prin e-mail lui