Thursday, September 29, 2011

Re: Insert a tab or call a function

On 09/29/2011 08:15 AM, Christian Brabandt wrote:
> On Thu, September 29, 2011 1:52 pm, AK wrote:
>> On 09/29/2011 01:58 AM, Benjamin R. Haskell wrote:
>>> On Wed, 28 Sep 2011, AK wrote:
>>>> Hi, I'm trying to write a small function that is called when I press
>>>> tab key and checks if current line is empty; if it is, it should
>>>> insert a tab, and if not, it should call two other functions. Here's
>>>> the example of what I came up with, which does not work right:
>>>
>>> Wanting to either insert something or run another function is a good
>>> case for<expr> mappings. It depends a bit on how TriggerSnippet works,
>>> the following might be all you need:
>>>
>>> fun! DoTab()
>>> if getline('.') =~ '^\s*$'
>>> return "\<tab>"
>>> else
>>> call CloseMenu()
>>> return TriggerSnippet()
>>> endif
>>> endfun
>>> ino<expr> <tab> DoTab()
>>
>> I get 'E523: not allowed here' in TriggerSnippet. I tried :set secure ,
>> but that did not help.
>
> I think what happens is, that one of your functions triggers an
> action, that is not allowed inside an expr-mapping. If you need to do
> something like this, you need to have the functions return the
> commands, that will do that.
>
> See :h :map-<expr>
> and look at the third paragraph.


I would like to avoid changing trigger snippet function because it's
complicated and to be able to upgrade it later. The issue is,
I want to call the function using a mapping to <c-o>:call myfunc()<cr>
and then I want it to do the check, and to insert a literal tab without
any side effects if current line is empty; if line is not empty, I need
it to run CloseMenu and then trigger snippet.

When this line runs:

call feedkeys("\<tab>", 'n') | return ''

TriggerSnippet is triggered.. and I don't understand why that happens, I
thought this should input a literal tab?

-ak

--
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

No comments: