Wednesday, September 24, 2014

Re: Some abbreviations work only as imaps

diff --git a/src/getchar.c b/src/getchar.c
--- a/src/getchar.c
+++ b/src/getchar.c
@@ -4440,6 +4440,8 @@ check_abbr(c, ptr, col, mincol)
#endif
int is_id = TRUE;
int vim_abbr;
+ char_u *q = NULL;
+ int qlen = 0; /* length of q, CSI/K_SPECIAL unescaped */

if (typebuf.tb_no_abbr_cnt) /* abbrev. are not recursive */
return FALSE;
@@ -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;
#ifdef FEAT_LOCALMAP
mp->m_next == NULL ? (mp = mp2, mp2 = NULL) :
@@ -4525,7 +4535,7 @@ check_abbr(c, ptr, col, mincol)
{
/* 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;
}
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.

Best,
Christian
--
Nichts schrecklicher kann den Menschen geschehn
Als das absurde verkörpert zu sehn.
-- Johann Wolfgang von Goethe (Zahme Xenien)

--
--
You received this message from the "vim_use" 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_use" group.
To unsubscribe from this group and stop receiving emails from it, send an email to vim_use+unsubscribe@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

No comments: