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

Patch 7.2.090

Expand Messages
  • Bram Moolenaar
    Patch 7.2.090 Problem: User command containing 0x80 in multi-byte character does not work properly. (Yasuhiro Matsumoto) Solution: Undo replacement of
    Message 1 of 1 , Jan 28, 2009
    • 0 Attachment
      Patch 7.2.090
      Problem: User command containing 0x80 in multi-byte character does not work
      properly. (Yasuhiro Matsumoto)
      Solution: Undo replacement of K_SPECIAL and CSI characters when executing
      the command.
      Files: src/ex_docmd.c


      *** ../vim-7.2.089/src/ex_docmd.c Tue Dec 9 11:17:23 2008
      --- src/ex_docmd.c Wed Jan 28 15:34:19 2009
      ***************
      *** 5482,5487 ****
      --- 5482,5490 ----
      return OK;
      }

      + /*
      + * ":command ..."
      + */
      static void
      ex_command(eap)
      exarg_T *eap;
      ***************
      *** 5914,5919 ****
      --- 5917,5923 ----

      char_u *start;
      char_u *end;
      + char_u *ksp;
      size_t len, totlen;

      size_t split_len = 0;
      ***************
      *** 5930,5945 ****

      /*
      * Replace <> in the command by the arguments.
      */
      buf = NULL;
      for (;;)
      {
      ! p = cmd->uc_rep;
      ! q = buf;
      totlen = 0;
      ! while ((start = vim_strchr(p, '<')) != NULL
      ! && (end = vim_strchr(start + 1, '>')) != NULL)
      {
      /* Include the '>' */
      ++end;

      --- 5934,5984 ----

      /*
      * Replace <> in the command by the arguments.
      + * First round: "buf" is NULL, compute length, allocate "buf".
      + * Second round: copy result into "buf".
      */
      buf = NULL;
      for (;;)
      {
      ! p = cmd->uc_rep; /* source */
      ! q = buf; /* destinateion */
      totlen = 0;
      !
      ! for (;;)
      {
      + start = vim_strchr(p, '<');
      + if (start != NULL)
      + end = vim_strchr(start + 1, '>');
      + if (buf != NULL)
      + {
      + ksp = vim_strchr(p, K_SPECIAL);
      + if (ksp != NULL && (start == NULL || ksp < start || end == NULL)
      + && ((ksp[1] == KS_SPECIAL && ksp[2] == KE_FILLER)
      + # ifdef FEAT_GUI
      + || (ksp[1] == KS_EXTRA && ksp[2] == (int)KE_CSI)
      + # endif
      + ))
      + {
      + /* K_SPECIAL han been put in the buffer as K_SPECIAL
      + * KS_SPECIAL KE_FILLER, like for mappings, but
      + * do_cmdline() doesn't handle that, so convert it back.
      + * Also change K_SPECIAL KS_EXTRA KE_CSI into CSI. */
      + len = ksp - p;
      + if (len > 0)
      + {
      + mch_memmove(q, p, len);
      + q += len;
      + }
      + *q++ = ksp[1] == KS_SPECIAL ? K_SPECIAL : CSI;
      + p = ksp + 3;
      + continue;
      + }
      + }
      +
      + /* break if there no <item> is found */
      + if (start == NULL || end == NULL)
      + break;
      +
      /* Include the '>' */
      ++end;

      *** ../vim-7.2.089/src/version.c Wed Jan 28 14:17:21 2009
      --- src/version.c Wed Jan 28 15:37:40 2009
      ***************
      *** 678,679 ****
      --- 678,681 ----
      { /* Add new patch number below this line */
      + /**/
      + 90,
      /**/

      --
      How To Keep A Healthy Level Of Insanity:
      17. When the money comes out the ATM, scream "I won!, I won! 3rd
      time this week!!!!!"

      /// Bram Moolenaar -- Bram@... -- http://www.Moolenaar.net \\\
      /// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
      \\\ download, build and distribute -- http://www.A-A-P.org ///
      \\\ help me help AIDS victims -- http://ICCF-Holland.org ///

      --~--~---------~--~----~------------~-------~--~----~
      You received this message from the "vim_dev" maillist.
      For more information, visit http://www.vim.org/maillist.php
      -~----------~----~----~----~------~----~------~--~---
    Your message has been successfully submitted and would be delivered to recipients shortly.