Status: New
Owner: ----
Labels: Type-Defect Priority-Medium

New issue 297 by [email protected]: Multibyte in langmap (lhs) gets not handled properly in mapping
https://code.google.com/p/vim/issues/detail?id=297

What steps will reproduce the problem?
1. :set langmap=öc
2. :map col :set list!
3. Press: öol

What is the expected output? What do you see instead?

The list setting should have been toggled, but the mapping gets aborted after "öo".

Using "öap" to change a paragraph works.

This is related to the langmap lhs character being multibyte, it works with "langmap=dc".

What version of the product are you using? On what operating system?

7.4.552


Please provide any additional information below.

It's probably some issue where multibyte characters in mappings are not handled properly in `do_map` or somewhere similar.

It might be related to this code:

                            if (mp->m_keys[0] == c1
                                    && (mp->m_mode & local_State)
                                    && ((mp->m_mode & LANGMAP) == 0
                                        || typebuf.tb_maplen == 0)
                                    )
                            {
    #ifdef FEAT_LANGMAP
                                int     nomap = nolmaplen;
                                int     c2;
    #endif
                                /* find the match length of this mapping */
                                for (mlen = 1; mlen < typebuf.tb_len; ++mlen)
                                {
    #ifdef FEAT_LANGMAP
                                    c2 = typebuf.tb_buf[typebuf.tb_off + mlen];
                                    if (nomap > 0)
                                        --nomap;
                                    else if (c2 == K_SPECIAL)
                                        nomap = 2;
                                    else
                                        LANGMAP_ADJUST(c2, TRUE);
                                    if (mp->m_keys[mlen] != c2)
    #else
                                    if (mp->m_keys[mlen] !=
                                        typebuf.tb_buf[typebuf.tb_off + mlen])
    #endif
                                        break;
                                }

--
You received this message because this project is configured to send all issue notifications to this address.
You may adjust your notification preferences at:
https://code.google.com/hosting/settings

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