Loading ...
Sorry, an error occurred while loading the content.

67106Re: :echo is not working under certain conditions

Expand Messages
  • Christian Brabandt
    Nov 16, 2012
    • 0 Attachment
      Hi Bram!

      On Do, 25 Okt 2012, Bram Moolenaar wrote:

      >
      > Christian Brabandt wrote:
      >
      > > On Fri, September 28, 2012 16:04, Marco Hinz wrote:
      > > > Hello!
      > > >
      > > > A member of #vim has experienced a weird behaviour while Vim
      > > > scripting. Under certain conditions :echo would only print one line at
      > > > max. Thus neither 2x echo nor 1x echo containing a \n would work.
      > > >
      > > >
      > > > Conditions:
      > > >
      > > > 1) the :echo's are wrapped in an if/endif block
      > > >
      > > > 2) the if/endif block is the last statement in a function
      > > >
      > > >
      > > > Here is the corresponding stackoverflow.com thread:
      > > >
      > > > http://stackoverflow.com/questions/12621333/vim-visual-key-input-strange-behaviour
      > >
      > > Let me summarize the problem:
      > > In the following case, :echo does not seem to work.
      > >
      > > noremap <silent> f :call Test()<cr>
      > > fun! Test()
      > > call input("OK? ")
      > > if 1
      > > echo "foobar\nfoo"
      > > endif
      > > endfun
      > >
      > > But it works, if you change the function to:
      > >
      > > fun! Test()
      > > call input("OK? ")
      > > if 1
      > > echo "foobar\nfoo"
      > > endif
      > > let a = 1
      > > endfun
      > >
      > > The problem is, that did_endif is not correctly reset and a recursive
      > > call of do_cmdline() changes the global variable did_endif without
      > > being reset.
      > >
      > > Here is a patch:
      > > diff --git a/src/ex_docmd.c b/src/ex_docmd.c
      > > --- a/src/ex_docmd.c
      > > +++ b/src/ex_docmd.c
      > > @@ -1537,6 +1537,8 @@
      > > #endif
      > >
      > > --call_depth;
      > > + if (did_endif)
      > > + did_endif = FALSE;
      > > return retval;
      > > }
      >
      > Good catch. Would it be possible to write a test that fails without the
      > fix?

      I haven't been able to create a test case. If I redirect the output, it
      will still be visible.

      regards,
      Christian
      --
      Hebt ein Tier am Baum ein Bein, weiƟ man gleich, das ist kein Schwein.

      --
      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
    • Show all 4 messages in this topic