def kill_buffers( nvim: Nvim, last_used: Mapping[int, None], paths: AbstractSet[PurePath], reopen: Mapping[PurePath, PurePath], ) -> None: active = ({ win_get_buf(nvim, win=win): win for win in find_non_fm_windows_in_tab( nvim, last_used=last_used, ) } if reopen else {}) for buf in list_bufs(nvim, listed=True): name = PurePath(buf_name(nvim, buf=buf)) buf_paths = ancestors(name) | {name} if not buf_paths.isdisjoint(paths): win = active.get(buf) new_path = reopen.get(name) if reopen and win and new_path: p = Path(name) p.touch() with hold_win_pos(nvim): set_cur_win(nvim, win=win) escaped = nvim.funcs.fnameescape(normcase(new_path)) nvim.command(f"edit! {escaped}") p.unlink(missing_ok=True) buf_close(nvim, buf=buf)
def find_window_with_file_in_tab(nvim: Nvim, last_used: Mapping[int, None], file: PurePath) -> Iterator[Window]: for win in find_windows_in_tab(nvim, last_used=last_used, no_secondary=True): buf = win_get_buf(nvim, win=win) name = PurePath(buf_name(nvim, buf=buf)) if name == file: yield win
def current_ctx(nvim: Nvim) -> Tuple[str, BufContext]: cwd = get_cwd(nvim) buf = cur_buf(nvim) filename = buf_name(nvim, buf=buf) filetype = buf_filetype(nvim, buf=buf) tabsize: int = buf_get_option(nvim, buf=buf, key="tabstop") lines: Sequence[str] = buf_get_lines(nvim, buf=buf, lo=0, hi=-1) return cwd, BufContext( buf=buf, filename=filename, filetype=filetype, tabsize=tabsize, lines=lines )
def eval_snips( nvim: Nvim, stack: Stack, visual: bool, maybe_grammar: str = REPL_GRAMMAR, ) -> None: try: grammar = SnippetGrammar[maybe_grammar] except KeyError: grammar = SnippetGrammar.lsp log.warn("%s", "bad snippet grammar -- reverting to LSP") win = cur_win(nvim) buf = win_get_buf(nvim, win=win) line_count = buf_line_count(nvim, buf=buf) path = PurePath(normcase(buf_name(nvim, buf=buf))) comment_str = buf_commentstr(nvim, buf=buf) clipboard = nvim.funcs.getreg() info = ParseInfo(visual="", clipboard=clipboard, comment_str=comment_str) if visual: (lo, _), (hi, _) = operator_marks(nvim, buf=buf, visual_type=None) hi = min(line_count, hi + 1) else: lo, hi = 0, line_count lines = buf_get_lines(nvim, buf=buf, lo=lo, hi=hi) try: compiled = compile_one( stack, grammar=grammar, path=path, info=info, lines=enumerate(lines, start=lo + 1), ) except (LoadError, ParseError) as e: preview = str(e).splitlines() with hold_win_pos(nvim, win=win): set_preview(nvim, syntax="", preview=preview) write(nvim, LANG("snip parse fail")) else: preview = _pprn(compiled).splitlines() with hold_win_pos(nvim, win=win): set_preview(nvim, syntax="yaml", preview=preview) if preview: write(nvim, LANG("snip parse succ")) else: write(nvim, LANG("no snippets found"))
def find_current_buffer_path(nvim: Nvim) -> Optional[PurePath]: buf = cur_buf(nvim) name = buf_name(nvim, buf=buf) return resolve_path(None, path=name)
def find_buffers_with_file(nvim: Nvim, file: PurePath) -> Iterator[Buffer]: for buf in list_bufs(nvim, listed=True): name = PurePath(buf_name(nvim, buf=buf)) if name == file: yield buf
def find_buffers_with_file(nvim: Nvim, file: str) -> Iterator[Buffer]: for buf in list_bufs(nvim): name = buf_name(nvim, buf=buf) if name == file: yield buf
def find_window_with_file_in_tab(nvim: Nvim, file: str) -> Iterator[Window]: for win in find_windows_in_tab(nvim, no_secondary=True): buf = win_get_buf(nvim, win=win) name = buf_name(nvim, buf=buf) if name == file: yield win
def kill_buffers(nvim: Nvim, paths: AbstractSet[str]) -> None: for buf in list_bufs(nvim): name = buf_name(nvim, buf=buf) buf_paths = ancestors(name) | {name} if not buf_paths.isdisjoint(paths): buf_close(nvim, buf=buf)
def find_current_buffer_name(nvim: Nvim) -> str: buf = cur_buf(nvim) name = buf_name(nvim, buf=buf) return name
def _scratch_buffer(nvim: Nvim) -> None: bufs = list_bufs(nvim, listed=False) for buf in bufs: name = buf_name(nvim, buf=buf) if not name: buf_set_option(nvim, buf=buf, key="buftype", val="nofile")
def cont() -> Iterator[str]: for buf in list_bufs(nvim, listed=True): with suppress(NvimError): filename = buf_name(nvim, buf=buf) yield filename