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.