Пример #1
0
    def _handle_failure(self, trigger):
        """Mainly make sure that we play well with SuperTab."""
        if trigger.lower() == '<tab>':
            feedkey = '\\' + trigger
        elif trigger.lower() == '<s-tab>':
            feedkey = '\\' + trigger
        else:
            feedkey = None
        mode = 'n'
        if not self._supertab_keys:
            if _vim.eval("exists('g:SuperTabMappingForward')") != '0':
                self._supertab_keys = (
                    _vim.eval('g:SuperTabMappingForward'),
                    _vim.eval('g:SuperTabMappingBackward'),
                )
            else:
                self._supertab_keys = ['', '']

        for idx, sttrig in enumerate(self._supertab_keys):
            if trigger.lower() == sttrig.lower():
                if idx == 0:
                    feedkey = r"\<Plug>SuperTabForward"
                    mode = 'n'
                elif idx == 1:
                    feedkey = r"\<Plug>SuperTabBackward"
                    mode = 'p'
                # Use remap mode so SuperTab mappings will be invoked.
                break

        if (feedkey == r"\<Plug>SuperTabForward" or
                feedkey == r"\<Plug>SuperTabBackward"):
            _vim.command('return SuperTab(%s)' % _vim.escape(mode))
        elif feedkey:
            _vim.command('return %s' % _vim.escape(feedkey))
Пример #2
0
    def _handle_failure(self, trigger):
        """
        Mainly make sure that we play well with SuperTab
        """
        if trigger.lower() == "<tab>":
            feedkey = "\\" + trigger
        else:
            feedkey = None
        mode = "n"
        if not self._supertab_keys:
            if _vim.eval("exists('g:SuperTabMappingForward')") != "0":
                self._supertab_keys = (
                    _vim.eval("g:SuperTabMappingForward"),
                    _vim.eval("g:SuperTabMappingBackward"),
                )
            else:
                self._supertab_keys = ['', '']

        for idx, sttrig in enumerate(self._supertab_keys):
            if trigger.lower() == sttrig.lower():
                if idx == 0:
                    feedkey = r"\<Plug>SuperTabForward"
                    mode = "n"
                elif idx == 1:
                    feedkey = r"\<Plug>SuperTabBackward"
                    mode = "p"
                # Use remap mode so SuperTab mappings will be invoked.
                break

        if feedkey == r"\<Plug>SuperTabForward" or feedkey == r"\<Plug>SuperTabBackward":
            _vim.command("return SuperTab(%s)" % _vim.escape(mode))
        elif feedkey:
            _vim.command("return %s" % _vim.escape(feedkey))
Пример #3
0
    def _handle_failure(self, trigger):
        """Mainly make sure that we play well with SuperTab."""
        if trigger.lower() == "<tab>":
            feedkey = "\\" + trigger
        elif trigger.lower() == "<s-tab>":
            feedkey = "\\" + trigger
        else:
            feedkey = None
        mode = "n"
        if not self._supertab_keys:
            if _vim.eval("exists('g:SuperTabMappingForward')") != "0":
                self._supertab_keys = (
                    _vim.eval("g:SuperTabMappingForward"),
                    _vim.eval("g:SuperTabMappingBackward"),
                )
            else:
                self._supertab_keys = ['', '']

        for idx, sttrig in enumerate(self._supertab_keys):
            if trigger.lower() == sttrig.lower():
                if idx == 0:
                    feedkey = r"\<Plug>SuperTabForward"
                    mode = "n"
                elif idx == 1:
                    feedkey = r"\<Plug>SuperTabBackward"
                    mode = "p"
                # Use remap mode so SuperTab mappings will be invoked.
                break

        if (feedkey == r"\<Plug>SuperTabForward" or
                feedkey == r"\<Plug>SuperTabBackward"):
            _vim.command("return SuperTab(%s)" % _vim.escape(mode))
        elif feedkey:
            _vim.command("return %s" % _vim.escape(feedkey))
Пример #4
0
    def _ask_snippets(self, snippets):
        """ Given a list of snippets, ask the user which one they
        want to use, and return it.
        """
        if vim.eval('g:UltiSnips.always_use_first_snippet') == '1':
            vim.command(
                "echom 'UltiSnips: using first snippet due to always_use_first_snippet'"
            )
            return snippets[0]

        # make a python list
        display = [
            as_unicode("%i: %s from:%s") %
            (i + 1, s.description, s.location_hint())
            for i, s in enumerate(snippets)
        ]
        display.append(
            "You can make UltiSnips always pick the first item by setting g:UltiSnips.always_use_first_snippet =1"
        )

        try:
            rv = _vim.eval("inputlist(%s)" % _vim.escape(display))
            if rv is None or rv == '0':
                return None
            rv = int(rv)
            if rv > len(snippets):
                rv = len(snippets)
            return snippets[rv - 1]
        except _vim.error as e:
            # Likely "invalid expression", but might be translated. We have no way
            # of knowing the exact error, therefore, we ignore all errors silently.
            return None
Пример #5
0
 def _parse_snippets(self, ft, filename):
     """Parse the 'filename' for the given 'ft' and watch it for changes in
     the future."""
     self._file_hashes[filename] = _hash_file(filename)
     file_data = compatibility.open_ascii_file(filename, "r").read()
     for event, data in self._parse_snippet_file(file_data, filename):
         if event == "error":
             msg, line_index = data
             filename = _vim.eval("""fnamemodify(%s, ":~:.")""" %
                     _vim.escape(filename))
             raise SnippetSyntaxError(filename, line_index, msg)
         elif event == "clearsnippets":
             # TODO(sirver): clear snippets should clear for
             # more sources, not only ultisnips files.
             triggers, = data
             self._snippets[ft].clear_snippets(triggers)
         elif event == "extends":
             # TODO(sirver): extends information is more global
             # than one snippet source.
             filetypes, = data
             self._add_extending_info(ft, filetypes)
         elif event == "snippet":
             snippet, = data
             self._snippets[ft].add_snippet(snippet)
         else:
             assert False, "Unhandled %s: %r" % (event, data)
Пример #6
0
 def _parse_snippets(self, ft, filename):
     """Parse the file 'filename' for the given 'ft' and watch it for
     changes in the future. 'file_data' can be injected in tests."""
     current_snippet_priority = 0
     self._snippets[ft].addfile(filename)
     file_data = open(filename, "r").read()
     for event, data in parse_snippets_file(file_data):
         if event == "error":
             msg, line_index = data
             filename = _vim.eval("""fnamemodify(%s, ":~:.")""" %
                     _vim.escape(filename))
             raise SnippetSyntaxError(filename, line_index, msg)
         elif event == "clearsnippets":
             # TODO(sirver): clear snippets should clear for
             # more providers, not only ultisnips files.
             triggers, = data
             self._snippets[ft].clear_snippets(triggers)
         elif event == "extends":
             # TODO(sirver): extends information is more global
             # than one snippet provider.
             filetypes, = data
             self._add_extending_info(ft, filetypes)
         elif event == "snippet":
             trigger, value, description, options, global_pythons = data
             self._snippets[ft].add_snippet(
                 SnippetDefinition(current_snippet_priority, trigger, value,
                     description, options, global_pythons), filename
             )
         elif event == "priority":
             priority, = data
             current_snippet_priority = priority
         else:
             assert False, "Unhandled %s: %r" % (event, data)
Пример #7
0
 def _parse_snippets(self, ft, filename):
     """Parse the 'filename' for the given 'ft' and watch it for changes in
     the future."""
     self._file_hashes[filename] = _hash_file(filename)
     file_data = compatibility.open_ascii_file(filename, "r").read()
     for event, data in self._parse_snippet_file(file_data, filename):
         if event == "error":
             msg, line_index = data
             filename = _vim.eval("""fnamemodify(%s, ":~:.")""" %
                                  _vim.escape(filename))
             raise SnippetSyntaxError(filename, line_index, msg)
         elif event == "clearsnippets":
             # TODO(sirver): clear snippets should clear for
             # more sources, not only ultisnips files.
             triggers, = data
             self._snippets[ft].clear_snippets(triggers)
         elif event == "extends":
             # TODO(sirver): extends information is more global
             # than one snippet source.
             filetypes, = data
             self._add_extending_info(ft, filetypes)
         elif event == "snippet":
             snippet, = data
             self._snippets[ft].add_snippet(snippet)
         else:
             assert False, "Unhandled %s: %r" % (event, data)
Пример #8
0
    def _handle_failure(self, trigger):
        """
        Mainly make sure that we play well with SuperTab or pre-existing keymaps
        """
        if trigger.lower() == _vim.eval("g:UltiSnipsExpandTrigger").lower() and _vim.eval("g:UltiSnipsExpandTriggerOverrides") != "":
            feedkey = "" + _vim.eval("g:UltiSnipsExpandTriggerOverrides")
            mode = "i"
        elif trigger.lower() == _vim.eval("g:UltiSnipsJumpForwardTrigger").lower() and _vim.eval("g:UltiSnipsJumpForwardTriggerOverrides") != "":
            feedkey = "" + _vim.eval("g:UltiSnipsJumpForwardTriggerOverrides")
            mode = "i"
        elif trigger.lower() == _vim.eval("g:UltiSnipsJumpBackwardTrigger").lower() and _vim.eval("g:UltiSnipsJumpBackwardTriggerOverrides") != "":
            feedkey = "" + _vim.eval("g:UltiSnipsJumpBackwardTriggerOverrides")
            mode = "i"
        elif trigger.lower() == "<tab>":
            feedkey = "\\" + trigger
            mode = "n"
        elif trigger.lower() == "<s-tab>":
            feedkey = "\\" + trigger
            mode = "n"
        else:
            feedkey = None
            mode = "n"
        if not self._supertab_keys:
            if _vim.eval("exists('g:SuperTabMappingForward')") != '0':
                self._supertab_keys = (
                    _vim.eval('g:SuperTabMappingForward'),
                    _vim.eval('g:SuperTabMappingBackward'),
                )
            else:
                self._supertab_keys = ['', '']

        for idx, sttrig in enumerate(self._supertab_keys):
            if trigger.lower() == sttrig.lower():
                if idx == 0:
                    feedkey = r"\<Plug>SuperTabForward"
                    mode = 'n'
                elif idx == 1:
                    feedkey = r"\<Plug>SuperTabBackward"
                    mode = 'p'
                # Use remap mode so SuperTab mappings will be invoked.
                break

        if (feedkey == r"\<Plug>SuperTabForward" or
                feedkey == r"\<Plug>SuperTabBackward"):
            _vim.command('return SuperTab(%s)' % _vim.escape(mode))
        elif feedkey:
            _vim.command('return %s' % _vim.escape(feedkey))
Пример #9
0
 def _error(self, msg):
     msg = _vim.escape("UltiSnips: " + msg)
     if self._test_error:
         msg = msg.replace('"', r'\"')
         msg = msg.replace('|', r'\|')
         _vim.command("let saved_pos=getpos('.')")
         _vim.command("$:put =%s" % msg)
         _vim.command("call setpos('.', saved_pos)")
     elif False:
         _vim.command("echohl WarningMsg")
         _vim.command("echomsg %s" % msg)
         _vim.command("echohl None")
     else:
         _vim.command("echoerr %s" % msg)
Пример #10
0
 def _error(self, msg):
     msg = _vim.escape("UltiSnips: " + msg)
     if self._test_error:
         msg = msg.replace('"', r'\"')
         msg = msg.replace('|', r'\|')
         _vim.command("let saved_pos=getpos('.')")
         _vim.command("$:put =%s" % msg)
         _vim.command("call setpos('.', saved_pos)")
     elif False:
         _vim.command("echohl WarningMsg")
         _vim.command("echomsg %s" % msg)
         _vim.command("echohl None")
     else:
         _vim.command("echoerr %s" % msg)
Пример #11
0
def _ask_user(a, formatted):
    """Asks the user using inputlist() and returns the selected element or
    None."""
    try:
        rv = _vim.eval('inputlist(%s)' % _vim.escape(formatted))
        if rv is None or rv == '0':
            return None
        rv = int(rv)
        if rv > len(a):
            rv = len(a)
        return a[rv - 1]
    except _vim.error:
        # Likely "invalid expression", but might be translated. We have no way
        # of knowing the exact error, therefore, we ignore all errors silently.
        return None
    except KeyboardInterrupt:
        return None
Пример #12
0
    def _ask_snippets(self, snippets):
        """ Given a list of snippets, ask the user which one they
        want to use, and return it.
        """
        # make a python list
        display = [ as_unicode("%i: %s") % (i+1,s.description) for i,s in enumerate(snippets)]

        try:
            rv = _vim.eval("inputlist(%s)" % _vim.escape(display))
            if rv is None or rv == '0':
                return None
            rv = int(rv)
            if rv > len(snippets):
                rv = len(snippets)
            return snippets[rv-1]
        except _vim.error as e:
            # Likely "invalid expression", but might be translated. We have no way
            # of knowing the exact error, therefore, we ignore all errors silently.
            return None
Пример #13
0
    def _ask_snippets(self, snippets):
        """ Given a list of snippets, ask the user which one they
        want to use, and return it.
        """
        # make a python list
        display = [ as_unicode("%i: %s") % (i+1,s.description) for i,s in enumerate(snippets)]

        try:
            rv = _vim.eval("inputlist(%s)" % _vim.escape(display))
            if rv is None or rv == '0':
                return None
            rv = int(rv)
            if rv > len(snippets):
                rv = len(snippets)
            return snippets[rv-1]
        except _vim.error as e:
            # Likely "invalid expression", but might be translated. We have no way
            # of knowing the exact error, therefore, we ignore all errors silently.
            return None
Пример #14
0
    def _ask_snippets(self, snippets):
        """ Given a list of snippets, ask the user which one they
        want to use, and return it.
        """
        # make a python list
        display = [ as_unicode("%i: %s") % (i+1,s.description) for i,s in enumerate(snippets)]

        try:
            rv = _vim.eval("inputlist(%s)" % _vim.escape(display))
            if rv is None or rv == '0':
                return None
            rv = int(rv)
            if rv > len(snippets):
                rv = len(snippets)
            return snippets[rv-1]
        except _vim.error as e:
            if str(e) == 'invalid expression':
                return None
            raise
Пример #15
0
 def _parse_snippets(self, ft, filename):
     """Parse the 'filename' for the given 'ft'."""
     file_data = compatibility.open_ascii_file(filename, 'r').read()
     self._snippets[ft]  # Make sure the dictionary exists
     for event, data in self._parse_snippet_file(file_data, filename):
         if event == 'error':
             msg, line_index = data
             filename = _vim.eval("""fnamemodify(%s, ":~:.")""" %
                                  _vim.escape(filename))
             raise SnippetSyntaxError(filename, line_index, msg)
         elif event == 'clearsnippets':
             priority, triggers = data
             self._snippets[ft].clear_snippets(priority, triggers)
         elif event == 'extends':
             # TODO(sirver): extends information is more global
             # than one snippet source.
             filetypes, = data
             self.update_extends(ft, filetypes)
         elif event == 'snippet':
             snippet, = data
             self._snippets[ft].add_snippet(snippet)
         else:
             assert False, 'Unhandled %s: %r' % (event, data)
Пример #16
0
 def _parse_snippets(self, ft, filename):
     """Parse the 'filename' for the given 'ft'."""
     file_data = compatibility.open_ascii_file(filename, 'r').read()
     self._snippets[ft]  # Make sure the dictionary exists
     for event, data in self._parse_snippet_file(file_data, filename):
         if event == 'error':
             msg, line_index = data
             filename = _vim.eval("""fnamemodify(%s, ":~:.")""" %
                                  _vim.escape(filename))
             raise SnippetSyntaxError(filename, line_index, msg)
         elif event == 'clearsnippets':
             priority, triggers = data
             self._snippets[ft].clear_snippets(priority, triggers)
         elif event == 'extends':
             # TODO(sirver): extends information is more global
             # than one snippet source.
             filetypes, = data
             self.update_extends(ft, filetypes)
         elif event == 'snippet':
             snippet, = data
             self._snippets[ft].add_snippet(snippet)
         else:
             assert False, 'Unhandled %s: %r' % (event, data)
Пример #17
0
    def _ask_snippets(self, snippets):
        """ Given a list of snippets, ask the user which one they
        want to use, and return it.
        """
        if vim.eval('g:UltiSnips.always_use_first_snippet') == '1':
            vim.command("echom 'UltiSnips: using first snippet due to always_use_first_snippet'")
            return snippets[0]

        # make a python list
        display = [ as_unicode("%i: %s from:%s") % (i+1, s.description, s.location_hint()) for i,s in enumerate(snippets)]
        display.append("You can make UltiSnips always pick the first item by setting g:UltiSnips.always_use_first_snippet =1")

        try:
            rv = _vim.eval("inputlist(%s)" % _vim.escape(display))
            if rv is None or rv == '0':
                return None
            rv = int(rv)
            if rv > len(snippets):
                rv = len(snippets)
            return snippets[rv-1]
        except _vim.error as e:
            # Likely "invalid expression", but might be translated. We have no way
            # of knowing the exact error, therefore, we ignore all errors silently.
            return None
Пример #18
0
 def _error(self, msg):
     fn = _vim.eval("""fnamemodify(%s, ":~:.")""" % _vim.escape(self._fn))
     self._sm._error("%s in %s(%d)" % (msg, fn, self._idx + 1))
Пример #19
0
 def _error(self, msg):
     fn = _vim.eval("""fnamemodify(%s, ":~:.")""" % _vim.escape(self._fn))
     self._sm._error("%s in %s(%d)" % (msg, fn, self._idx + 1))