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)?
>
> Ok, I think I have addressed all your issues. Here is an update.
Thanks!
--
"You mean there really is an answer?"
"Yes! But you're not going to like it!"
"Oh do please tell us!"
"You're really not going to like it!"
"but we MUST know - tell us"
"Alright, the answer is...."
"yes..."
"... is ..."
"yes... come on!"
"is 42!"
(Douglas Adams - The Hitchhiker's Guide to the Galaxy)
/// 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.