Пример #1
0
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)
Пример #2
0
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
Пример #3
0
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
    )
Пример #4
0
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"))
Пример #5
0
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)
Пример #6
0
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
Пример #7
0
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
Пример #8
0
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
Пример #9
0
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)
Пример #10
0
def find_current_buffer_name(nvim: Nvim) -> str:
    buf = cur_buf(nvim)
    name = buf_name(nvim, buf=buf)
    return name
Пример #11
0
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")
Пример #12
0
 def cont() -> Iterator[str]:
     for buf in list_bufs(nvim, listed=True):
         with suppress(NvimError):
             filename = buf_name(nvim, buf=buf)
             yield filename