def on_query_completions(self, view, prefix, locations): # settings = sublime.load_settings("LaTeXTools.sublime-settings") # cwl_completion = settings.get('cwl_completion') if not CWL_COMPLETION: return [] point = locations[0] if not view.score_selector(point, "text.tex.latex"): return [] point_before = point - len(prefix) char_before = view.substr(get_Region(point_before - 1, point_before)) if not _ST3: # convert from unicode (might not be necessary) char_before = char_before.encode("utf-8") is_prefixed = char_before == "\\" completion_level = "prefixed" # default completion level is "prefixed" try: settings = sublime.load_settings("LaTeXTools.sublime-settings") completion_level = settings.get("command_completion", completion_level) except: # LaTeXTools settings are missing pass do_complete = {"never": False, "prefixed": is_prefixed, "always": True}.get(completion_level, is_prefixed) if not do_complete: return [] line = view.substr(get_Region(view.line(point).a, point)) line = line[::-1] # Do not do completions in actions for rex in ENV_DONOT_AUTO_COM: if match(rex, line) != None: return [] completions = parse_cwl_file() # autocompleting with slash already on line # this is necessary to work around a short-coming in ST where having a keyed entry # appears to interfere with it recognising that there is a \ already on the line # # NB this may not work if there are other punctuation marks in the completion if is_prefixed: completions = [(c[0], c[1][1:]) if _is_snippet(c) else c for c in completions] return (completions, sublime.INHIBIT_WORD_COMPLETIONS | sublime.INHIBIT_EXPLICIT_COMPLETIONS)
def on_query_completions(self, view, prefix, locations): # settings = sublime.load_settings("LaTeXTools.sublime-settings") # cwl_completion = settings.get('cwl_completion') if not CWL_COMPLETION: return [] point = locations[0] if not view.score_selector(point, "text.tex.latex"): return [] point = locations[0] line = view.substr(get_Region(view.line(point).a, point)) line = line[::-1] # Do not do completions in actions for rex in ENV_DONOT_AUTO_COM: if match(rex, line) != None: return [] completions = parse_cwl_file() # autocompleting with slash already on line # this is necessary to work around a short-coming in ST where having a keyed entry # appears to interfere with it recognising that there is a \ already on the line # # NB this may not work if there are other punctuation marks in the completion # since these are rare in TeX, this is probably ok if len(line) > 0 and line[0] == '\\': _completions = [] for completion in completions: _completion = completion[1] if _completion[0] == '\\' and '${1:' in _completion: completion = (completion[0], _completion[1:]) _completions.append(completion) else: _completions = completions return (_completions, sublime.INHIBIT_WORD_COMPLETIONS | sublime.INHIBIT_EXPLICIT_COMPLETIONS)
def on_query_completions(self, view, prefix, locations): if not CWL_COMPLETION: return [] point = locations[0] if not view.score_selector(point, "text.tex.latex"): return [] point_before = point - len(prefix) char_before = view.substr(get_Region(point_before - 1, point_before)) if not _ST3: # convert from unicode (might not be necessary) char_before = char_before.encode("utf-8") is_prefixed = char_before == "\\" line = view.substr(get_Region(view.line(point).begin(), point)) line = line[::-1] is_env = bool(BEGIN_END_BEFORE_REGEX.match(line)) completion_level = "prefixed" # default completion level is "prefixed" completion_level = get_setting("command_completion", completion_level) do_complete = { "never": False, "prefixed": is_prefixed or is_env, "always": True }.get(completion_level, is_prefixed or is_env) if not do_complete: return [] # if it is inside the begin oder end of an env, # create and return the available environments if is_env: completions = parse_cwl_file(parse_line_as_environment) return completions # do not autocomplete if the leading backslash is escaped if ESCAPE_REGEX.match(line): # if there the autocompletion has been opened with the \ trigger # (no prefix) and the user has not enabled auto completion for the # scope, then hide the auto complete popup selector = view.settings().get("auto_complete_selector") if not prefix and not view.score_selector(point, selector): view.run_command("hide_auto_complete") return [] # Do not do completions in actions for rex in ENV_DONOT_AUTO_COM: if match(rex, line) != None: return [] completions = parse_cwl_file(parse_line_as_command) # autocompleting with slash already on line # this is necessary to work around a short-coming in ST where having a keyed entry # appears to interfere with it recognising that there is a \ already on the line # # NB this may not work if there are other punctuation marks in the completion if is_prefixed: completions = [(c[0], c[1][1:]) if _is_snippet(c) else c for c in completions] return (completions, sublime.INHIBIT_WORD_COMPLETIONS | sublime.INHIBIT_EXPLICIT_COMPLETIONS)