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_helper.eval("exists('g:SuperTabMappingForward')") != "0": self._supertab_keys = ( vim_helper.eval("g:SuperTabMappingForward"), vim_helper.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 in (r"\<Plug>SuperTabForward", r"\<Plug>SuperTabBackward"): vim_helper.command("return SuperTab(%s)" % vim_helper.escape(mode)) elif feedkey: vim_helper.command("return %s" % vim_helper.escape(feedkey))
def _parse_snippets(self, ft, filename): """Parse the 'filename' for the given 'ft'.""" with open(filename, "r", encoding="utf-8-sig") as to_read: file_data = to_read.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_helper.eval( """fnamemodify(%s, ":~:.")""" % vim_helper.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_user(a, formatted): """Asks the user using inputlist() and returns the selected element or None.""" try: rv = vim_helper.eval("inputlist(%s)" % vim_helper.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_helper.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