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

Re: input()/inputdialog() doesn't work at startup time

Expand Messages
  • Ingo Karkat
    ... I think this is by design; interaction with the user should only happen after the VimEnter event fires. :help input() reads: NOTE: This function must not
    Message 1 of 2 , Nov 7, 2011
    • 0 Attachment
      On 07-Nov-2011 04:05, P.L. Francisco Javier wrote:

      > Input()/Inputdialog() show repetive information at startup, the following
      > reproduce the behavior if it's added to $HOME/.vimrc:
      >
      > ------------
      > if !isdirectory(expand(expand("~/.vim/bundle/vundle/.git/")))
      > call inputsave()
      > if input("Setting up vundle, this may take a while, wanna continue? (y/n):
      > ") == "y"
      > !git clone https://github.com/gmarik/vundle ~/.vim/bundle/vundle
      > endif
      > call inputrestore()
      > endif
      > -----------
      >
      > It repeats the string 'Setting up vundle, this may take a while, wanna continue?
      > (y/n): y' till someone press <CR>
      >
      > If executed inside a autocmd VimEnter block it works but may be too late for
      > specific cases
      >
      > ------------
      > autocmd VimEnter * call InitVundle()
      >
      > function! InitVundle()
      > if !isdirectory(expand(expand("~/.vim/bundle/vundle/.git/")))
      > " call inputsave()
      > if inputdialog("Setting up vundle, this may take a while, wanna continue?
      > (y/n): ") == "y"
      > !git clone https://github.com/gmarik/vundle ~/.vim/bundle/vundle
      > endif
      > "call inputsave()
      > endif
      > endfunction
      > ------------
      >
      > The following seems to be the only workaround (thx to frogonwheels in #vim for
      > the tip)
      >
      > -----------
      > if !isdirectory(expand(expand("~/.vim/bundle/vundle/.git/")))
      > call inputsave()
      > echon "Setting up vundle, this may take a while, wanna continue? (y/n): "
      > if nr2char(getchar()) ==? 'y'
      > !git clone https://github.com/gmarik/vundle ~/.vim/bundle/vundle
      > endif
      > call inputrestore()
      > endif
      > -----------

      I think this is by design; interaction with the user should only happen after
      the VimEnter event fires. :help input() reads:
      NOTE: This function must not be used in a startup file, for
      the versions that only run in GUI mode (e.g., the Win32 GUI).
      Seems logical: How can you interact with the user when the user interface is
      still in the process of initializing itself?

      Instead of your workaround, I would recommend to be open for alternative flows.
      I'm lacking a bit of context, but how about just detecting that Vundle hasn't
      been set up, and :echoing "Vundle hasn't been setup yet; execute :VundleSetup to
      do so, and close and restart Vim to apply the settings."

      -- regards, ingo

      --
      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
    Your message has been successfully submitted and would be delivered to recipients shortly.