Cursor stays in command line after echo invoked with pumvisible() == 1

classic Classic list List threaded Threaded
3 messages Options
Reply | Threaded
Open this post in threaded view
|

Cursor stays in command line after echo invoked with pumvisible() == 1

Lifepillar
If you run `vim --clean` (I have tried with Vim 8.1.300) and
source this:

fun! Act()
   echo "The cursor gets stuck here ->"
   return ''
endf

" 1. Trigger keyword completion (<c-x><c-n)
" 2. Force waiting for the pop-up menu to appear (<c-r>==''<cr>)
" 3. Invoke Act() with pumvisible() == 1 (<plug>(Act)
fun! Complete()
   return "\<c-x>\<c-n>\<c-r>=''\<cr>\<plug>(Act)"
endf

imap <silent> <expr> <plug>(Act) Act()
imap <expr> <tab> Complete()

set completeopt=menu
set noshowmode

then (in the same buffer) type something like `s<tab>`: you should see
that the pop-up menu appears, but the cursor stays in the command line
until you press another character.

Is there a way to avoid that, i.e., to have the cursor stays in the
buffer? Tried redraw after echo, but it does not change anything;
redraw! leaves the cursor at the bottom-right angle of the menu instead.

Thanks,
Life.


--
--
You received this message from the "vim_use" 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_use" group.
To unsubscribe from this group and stop receiving emails from it, send an email to [hidden email].
For more options, visit https://groups.google.com/d/optout.
Reply | Threaded
Open this post in threaded view
|

Re: Cursor stays in command line after echo invoked with pumvisible() == 1

Lifepillar
On 07/09/2018 20:58, Lifepillar wrote:

> If you run `vim --clean` (I have tried with Vim 8.1.300) and
> source this:
>
> fun! Act()
>    echo "The cursor gets stuck here ->"
>    return ''
> endf
>
> " 1. Trigger keyword completion (<c-x><c-n)
> " 2. Force waiting for the pop-up menu to appear (<c-r>==''<cr>)
> " 3. Invoke Act() with pumvisible() == 1 (<plug>(Act)
> fun! Complete()
>    return "\<c-x>\<c-n>\<c-r>=''\<cr>\<plug>(Act)"
> endf
>
> imap <silent> <expr> <plug>(Act) Act()
> imap <expr> <tab> Complete()
>
> set completeopt=menu
> set noshowmode
>
> then (in the same buffer) type something like `s<tab>`: you should see
> that the pop-up menu appears, but the cursor stays in the command line
> until you press another character.
>
> Is there a way to avoid that, i.e., to have the cursor stays in the
> buffer? Tried redraw after echo, but it does not change anything;
> redraw! leaves the cursor at the bottom-right angle of the menu instead.

Forcing a status line redraw (e.g., let &ro=&ro) fixes the issue (thanks
to Github user @cwfoo). The status line must be visible, though.
The fixed example follows.

Life.

fun! Act()
   echo "The cursor won't get stuck here ->"
   let &ro=&ro
   return ''
endf

fun! Complete()
   return "\<c-x>\<c-n>\<c-r>=''\<cr>\<plug>(Act)"
endf

imap <silent> <expr> <plug>(Act) Act()
imap <expr> <tab> Complete()

se cot=menu
set noshowmode
set laststatus=2

--
--
You received this message from the "vim_use" 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_use" group.
To unsubscribe from this group and stop receiving emails from it, send an email to [hidden email].
For more options, visit https://groups.google.com/d/optout.
Reply | Threaded
Open this post in threaded view
|

Re: Cursor stays in command line after echo invoked with pumvisible() == 1

Lifepillar
On 21/10/2018 12:59, Lifepillar wrote:

> On 07/09/2018 20:58, Lifepillar wrote:
>> If you run `vim --clean` (I have tried with Vim 8.1.300) and
>> source this:
>>
>> fun! Act()
>>    echo "The cursor gets stuck here ->"
>>    return ''
>> endf
>>
>> " 1. Trigger keyword completion (<c-x><c-n)
>> " 2. Force waiting for the pop-up menu to appear (<c-r>==''<cr>)
>> " 3. Invoke Act() with pumvisible() == 1 (<plug>(Act)
>> fun! Complete()
>>    return "\<c-x>\<c-n>\<c-r>=''\<cr>\<plug>(Act)"
>> endf
>>
>> imap <silent> <expr> <plug>(Act) Act()
>> imap <expr> <tab> Complete()
>>
>> set completeopt=menu
>> set noshowmode
>>
>> then (in the same buffer) type something like `s<tab>`: you should see
>> that the pop-up menu appears, but the cursor stays in the command line
>> until you press another character.
>>
>> Is there a way to avoid that, i.e., to have the cursor stays in the
>> buffer? Tried redraw after echo, but it does not change anything;
>> redraw! leaves the cursor at the bottom-right angle of the menu instead.
>
> Forcing a status line redraw (e.g., let &ro=&ro) fixes the issue (thanks
> to Github user @cwfoo)

That's user @mg979. Sorry.

Life.

--
--
You received this message from the "vim_use" 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_use" group.
To unsubscribe from this group and stop receiving emails from it, send an email to [hidden email].
For more options, visit https://groups.google.com/d/optout.