Remove no longer needed langmap translation.

Vim now has the 'langnoremap' option that handles issues with mapping
much more canonical.
This commit is contained in:
Holger Rapp 2015-07-18 17:33:27 +02:00
parent 290600c027
commit cd0e60bc0f
2 changed files with 3 additions and 64 deletions

View File

@ -162,7 +162,7 @@ def select(start, end):
move_cmd += '%iG%i|' % virtual_position(end.line + 1, end.col + 1)
move_cmd += 'o%iG%i|o\\<c-g>' % virtual_position(
start.line + 1, start.col + 1)
feedkeys(_LangMapTranslator().translate(move_cmd))
feedkeys(move_cmd)
def _unmap_select_mode_mapping():
@ -232,65 +232,3 @@ def _unmap_select_mode_mapping():
# This case should be rare enough to not bother us
# though.
pass
class _RealLangMapTranslator(object):
"""This cares for the Vim langmap option and basically reverses the
mappings. This was the only solution to get UltiSnips to work nicely with
langmap; other stuff I tried was using inoremap movement commands and
caching and restoring the langmap option.
Note that this will not work if the langmap overwrites a character
completely, for example if 'j' is remapped, but nothing is mapped
back to 'j', then moving one line down is no longer possible and
UltiSnips will fail.
"""
_maps = {}
_SEMICOLONS = re.compile(r"(?<!\\);")
_COMMA = re.compile(r"(?<!\\),")
def _create_translation(self, langmap):
"""Create the reverse mapping from 'langmap'."""
from_chars, to_chars = '', ''
for char in self._COMMA.split(langmap):
char = char.replace('\\,', ',')
res = self._SEMICOLONS.split(char)
if len(res) > 1:
from_char, to_char = [a.replace('\\;', ';') for a in res]
from_chars += from_char
to_chars += to_char
else:
from_chars += char[::2]
to_chars += char[1::2]
self._maps[langmap] = (from_chars, to_chars)
def translate(self, text):
"""Inverse map 'text' through langmap."""
langmap = eval('&langmap').strip()
if langmap == '':
return text
text = as_unicode(text)
if langmap not in self._maps:
self._create_translation(langmap)
for before, after in zip(*self._maps[langmap]):
text = text.replace(before, after)
return text
class _DummyLangMapTranslator(object):
"""If vim hasn't got the langmap compiled in, or is using langnoremap, we
never have to do anything.
Then this class is used.
"""
translate = lambda self, s: s
_LangMapTranslator = _RealLangMapTranslator
if not int(eval('has("langmap")')):
_LangMapTranslator = _DummyLangMapTranslator
elif int(eval('exists("+langnoremap") && &langnoremap')):
_LangMapTranslator = _DummyLangMapTranslator

View File

@ -9,7 +9,7 @@ import textwrap
import time
import unittest
from test.constant import PYTHON3, SEQUENCES
from test.constant import PYTHON3, SEQUENCES, EX
from test.vim_interface import create_directory, TempFileManager
@ -129,6 +129,7 @@ class VimTestCase(unittest.TestCase, TempFileManager):
vim_config.append('set buftype=nofile')
vim_config.append('set shortmess=at')
vim_config.append('let @" = ""')
assert EX == "\t" # Otherwise you need to change the next line
vim_config.append('let g:UltiSnipsExpandTrigger="<tab>"')
vim_config.append('let g:UltiSnipsJumpForwardTrigger="?"')
vim_config.append('let g:UltiSnipsJumpBackwardTrigger="+"')