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

Re: Porting Vim to new platform: problem with terminal

Expand Messages
  • Oscar Fuentes
    Problem solved with if( time != -1 ) return 0; at the beginning of mch_inchar. Could this cause problems? I don t know how to test for the presence of
    Message 1 of 3 , Feb 3, 2004
    • 0 Attachment
      Problem solved with

      if( time != -1 )
      return 0;

      at the beginning of mch_inchar. Could this cause problems? I don't
      know how to test for the presence of keypresses on this system.

      Oscar Fuentes <ofv@...> writes:

      [snip]

      --
      Oscar
    • Bram Moolenaar
      ... You should use the time argument here. If it s a small number, like 100 or 1000, then mch_inchar() should not block. Only when time is -1
      Message 2 of 3 , Feb 4, 2004
      • 0 Attachment
        Oscar Fuentes wrote:

        > I'm porting Vim 5.5 to EPOC R5 using the EpocEmx development kit, wich
        > provides a terminal emulating the vt100.
        >
        > This is a sample sesion that shows the problem:
        >
        > start vim without vim_rc file
        > press 'a'.
        > press 'h' 3 times. Nothing is shown.
        > press ESC. Now the screen shows 'hhh', with the cursor under the third 'h'.
        > press ESC again. Nothing happens.
        > press ESC again. Beep.
        > press ':'. Beep. An ':' appears on the right place.
        > press 'q', then '!'. A 'q!' appears as nornal.
        > press Enter. Vim exits.
        >
        > This is with a vim_rc file that sets nocompatible:
        >
        > press 'a'.
        > press 'h'. The modeline changes to "-- INSERT --". No 'h' is shown.
        > press two more times 'h'. Nothing changes on the terminal.
        > press ESC. Nothing changes.
        > press ESC again. The "-- INSERT --" dissappears and the 'h's we wrote
        > appears on the screen.
        > press ':'. Beep. No ':' is shown on the command line.
        > press 'q'. On the command line ':q' is shown.
        > press '!'. Now the command line shows ':q!'
        > pres Enter. Vim exits.
        >
        > Seems that Vim is holding characters somewhere before they take
        > effect.
        >
        > The os_epoc.c file is simplistic to the maximum. These are the
        > terminal I/O functions:
        >
        > int
        > mch_inchar(
        > char_u *buf,
        > int maxlen,
        > long time)
        > {
        > buf[0] = ttgetc();
        > buf[1] = '\0';
        > return 1;
        > }
        >
        > 'ttgetc' simply waits until a key is pressed and returns its code. It
        > doesn't work for cursor keys, PgDn/PgUp, etc but that is not a
        > problem yet.

        You should use the "time" argument here. If it's a small number, like
        100 or 1000, then mch_inchar() should not block. Only when "time" is -1
        mch_inchar() may block. In your situation you might want to return 0
        whenever "time" is >= 0.

        There will still be a problem: when 'timeoutlen' is 1000 Vim will not
        wait a second for a mapping to complete. If this system has some
        polling function and a delay function you should use that. Perhaps
        os_amiga.c is a good example for you.

        I suggest you have a good look at the other os_*.c files to find out how
        they implemented the machine specific functions.

        --
        hundred-and-one symptoms of being an internet addict:
        37. You start looking for hot HTML addresses in public restrooms.

        /// Bram Moolenaar -- Bram@... -- http://www.Moolenaar.net \\\
        /// Sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
        \\\ Project leader for A-A-P -- http://www.A-A-P.org ///
        \\\ Help AIDS victims, buy here: http://ICCF-Holland.org/click1.html ///
      Your message has been successfully submitted and would be delivered to recipients shortly.