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