Christian wrote:

> On Mi, 24 Sep 2014, Gevisz wrote:
> > Some abbreviations expand as desired and some do not.
> > 
> > > Are there any circumstances different between a working abbreviation
> > > and a not working abbreviation?
> > 
> > They may be very similar. For example, abbreviation чкпк expands as
> > desired, whereas abbreviation чкпр does not expand at all unless I
> > redefine it via imaps. (The only difference between чкпк and чкпр is
> > in the last cyrillic letter.) 
> > 
> > > Have you tried, testing with
> > > vim -u NONE -N (to eliminate the effect of any plugins)?
> > 
> > I have just tried that. No abbreviation works after starting vim with
> > such parameters. However, when I define these two abbreviation anew in
> > thus started vim, I get the same picture: чкпк abbreviation works and
> > чкпр one do not.
> 
> I can reproduce this. Does this always involve the character 'р'?
> 
> Bram, problem is, 'р' is U+0440 (0xD1 0x80). As you may now already 
> guess, the 0x80 will be parsed as K_SPECIAL and therefore encoded as 
> K_SPECIAL KS_SPECIAL KE_FILLER. Now when checking for an abbreviation, 
> Vim does not consider that the len of the mapped keys might differ from 
> the len of the input chars.
> 
> Attached patch fixes this.

Thanks.  This deserves a test.

> @@ -4517,6 +4519,14 @@ check_abbr(c, ptr, col, mincol)
>  #else
>       mp = first_abbr;
>  #endif
> +     q = vim_strsave(mp->m_keys);
> +     if (q != NULL)
> +     {
> +         /* might have CSI escaped mp->m_keys */
> +         vim_unescape_csi(q);
> +         qlen = STRLEN(q);
> +         vim_free(q);
> +     }
>       for ( ; mp;

The alloc/free is not cheap.  Perhaps only do this when 0x80 can be
found in m_keys?

>           /* find entries with right mode and keys */
>           if (       (mp->m_mode & State)
> -                 && mp->m_keylen == len
> +                 && (mp->m_keylen == len || qlen == len)
>                   && !STRNCMP(mp->m_keys, ptr, (size_t)len))
>               break;

Why not only compare with qlen (when initialiing qlen to m_keylen)?

-- 
hundred-and-one symptoms of being an internet addict:
202. You're amazed to find out Spam is a food.

 /// Bram Moolenaar -- [email protected] -- http://www.Moolenaar.net   \\\
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\  an exciting new programming language -- http://www.Zimbu.org        ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///

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

--- 
You received this message because you are subscribed to the Google Groups 
"vim_dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/d/optout.

Raspunde prin e-mail lui