Exemple #1
0
def _help(nvim: Nvim, state: State, settings: Settings,
          args: Sequence[str]) -> None:
    """
    Open help doc
    """

    try:
        topic, use_web = _parse_args(args)
    except ArgparseError as e:
        write(nvim, e, error=True)
    else:
        md, uri = _directory(topic)
        web_d = open_w(uri) if use_web else False
        if not web_d:
            for win in list_floatwins(nvim):
                win_close(nvim, win=win)
            lines = md.read_text("UTF-8").splitlines()
            buf = create_buf(nvim,
                             listed=False,
                             scratch=True,
                             wipe=True,
                             nofile=True,
                             noswap=True)
            buf_set_lines(nvim, buf=buf, lo=0, hi=-1, lines=lines)
            buf_set_option(nvim, buf=buf, key="modifiable", val=False)
            buf_set_option(nvim, buf=buf, key="syntax", val="markdown")
            open_float_win(nvim,
                           margin=0,
                           relsize=0.95,
                           buf=buf,
                           border="rounded")
Exemple #2
0
def _open_fm_window(nvim: Nvim, settings: Settings, opts: _Args,
                    width: int) -> None:
    cwin = cur_win(nvim)
    win = next(find_fm_windows_in_tab(nvim), None)
    if win:
        if opts.toggle:
            wins = list_wins(nvim)
            if len(wins) > 1:
                win_close(nvim, win=win)
        else:
            set_cur_win(nvim, win=win)
    else:
        buf = next(find_fm_buffers(nvim), None)
        if buf is None:
            buf = new_fm_buffer(nvim, settings=settings)

        win = new_window(
            nvim,
            win_local=settings.win_actual_opts,
            open_left=settings.open_left,
            width=width,
        )
        for key, val in settings.win_local_opts.items():
            win_set_option(nvim, win=win, key=key, val=val)
        win_set_buf(nvim, win=win, buf=buf)

        _ensure_side_window(nvim, window=win, settings=settings, width=width)
        if not opts.focus:
            set_cur_win(nvim, win=cwin)
Exemple #3
0
def _kill_float_wins(nvim: Nvim, state: State, settings: Settings) -> None:
    try:
        wins = tuple(list_floatwins(nvim))
        if len(wins) != 2:
            for win in wins:
                win_close(nvim, win=win)
    except NvimError:
        pass
Exemple #4
0
def toggle_floating(nvim: Nvim, *args: str) -> None:
    curr_win = cur_win(nvim)
    float_wins = frozenset(list_floatwins(nvim))
    if curr_win in float_wins:
        for win in float_wins:
            win_close(nvim, win=win)
    else:
        _term_open(nvim, *args)
Exemple #5
0
def _kill_win(nvim: Nvim, stack: Stack, reset: bool) -> None:
    if reset:
        state(pum_location=None, preview_id=uuid4())

    buf = cur_buf(nvim)
    ns = create_ns(nvim, ns=_NS)
    clear_ns(nvim, buf=buf, id=ns)

    for win in _ls(nvim):
        win_close(nvim, win=win)
Exemple #6
0
def open_term(nvim: Nvim, *args: AnyPath, opts: TermOpts = {}) -> None:
    argv = args or (environ["SHELL"],)
    prog, *_ = argv

    if not which(prog):
        write(nvim, LANG("invaild command: ", cmd=normcase(prog)), error=True)
    else:
        for win in list_floatwins(nvim):
            win_close(nvim, win=win)
        _term_open(nvim, *argv, opts=opts)
Exemple #7
0
def _quit(nvim: Nvim, state: State, settings: Settings, is_visual: bool) -> None:
    """
    Close sidebar
    """

    wins = list_wins(nvim)
    if len(wins) <= 1:
        nvim.api.command("quit")
    else:
        for win in find_fm_windows_in_tab(nvim, last_used=state.window_order):
            win_close(nvim, win=win)
Exemple #8
0
def _toggle_qf(nvim: Nvim) -> None:
    tab = cur_tab(nvim)
    wins = tab_list_wins(nvim, tab=tab)
    closed = False
    for win in wins:
        buf = win_get_buf(nvim, win=win)
        ft = buf_filetype(nvim, buf=buf)
        if ft == "qf":
            win_close(nvim, win=win)
            closed = True
    if not closed:
        nvim.command("copen")
        win = cur_win(nvim)
        height = nvim.options["previewheight"]
        nvim.api.win_set_height(win, height)
Exemple #9
0
def _toggle_preview(nvim: Nvim) -> None:
    tab = cur_tab(nvim)
    wins = tab_list_wins(nvim, tab=tab)
    closed = False
    for win in wins:
        is_preview: bool = win_get_option(nvim, win=win, key="previewwindow")
        if is_preview:
            win_close(nvim, win=win)
            closed = True
    if not closed:
        nvim.command("new")
        win = cur_win(nvim)
        win_set_option(nvim, win=win, key="previewwindow", val=True)
        height = nvim.options["previewheight"]
        nvim.api.win_set_height(win, height)
Exemple #10
0
def stats(nvim: Nvim, stack: Stack, *_: str) -> None:
    stats = stack.idb.stats()
    chart1, chart2, chart3 = _pprn(stats)
    desc = MD_STATS.read_text()
    lines = (Template(_TPL).substitute(chart1=chart1,
                                       chart2=chart2,
                                       chart3=chart3,
                                       desc=desc).splitlines())
    for win in list_floatwins(nvim):
        win_close(nvim, win=win)
    buf = create_buf(nvim,
                     listed=False,
                     scratch=True,
                     wipe=True,
                     nofile=True,
                     noswap=True)
    buf_set_lines(nvim, buf=buf, lo=0, hi=-1, lines=lines)
    buf_set_option(nvim, buf=buf, key="modifiable", val=False)
    buf_set_option(nvim, buf=buf, key="syntax", val="markdown")
    open_float_win(nvim, margin=0, relsize=0.95, buf=buf, border="rounded")
Exemple #11
0
def _click(nvim: Nvim, state: State, settings: Settings, is_visual: bool,
           click_type: ClickType) -> Optional[Stage]:
    node = next(indices(nvim, state=state, is_visual=is_visual), None)

    if not node:
        return None
    else:
        if Mode.orphan_link in node.mode:
            name = node.name
            write(nvim, LANG("dead_link", name=name), error=True)
            return None
        else:
            if is_dir(node):
                if node.path == state.root.path:
                    return None
                elif state.filter_pattern:
                    write(nvim, LANG("filter_click"))
                    return None
                else:
                    paths = {node.path}
                    index = state.index ^ paths
                    new_state = forward(state,
                                        settings=settings,
                                        index=index,
                                        paths=paths)
                    return Stage(new_state)
            else:
                nxt = open_file(
                    nvim,
                    state=state,
                    settings=settings,
                    path=node.path,
                    click_type=click_type,
                )

                if settings.close_on_open:
                    for win, _ in find_fm_windows(nvim):
                        win_close(nvim, win=win)

                return nxt
Exemple #12
0
def _toggle_fm_window(
    nvim: Nvim, state: State, settings: Settings, opts: _Args
) -> None:
    cwin = cur_win(nvim)
    win = next(find_fm_windows_in_tab(nvim), None)
    if win:
        wins = list_wins(nvim)
        if len(wins) <= 1:
            pass
        else:
            win_close(nvim, win=win)
    else:
        buf = next(find_fm_buffers(nvim), None)
        if buf is None:
            buf = new_fm_buffer(nvim, settings=settings)

        win = new_window(nvim, open_left=settings.open_left, width=state.width)
        for key, val in settings.win_local_opts.items():
            win_set_option(nvim, win=win, key=key, val=val)
        win_set_buf(nvim, win=win, buf=buf)

        _ensure_side_window(nvim, window=win, state=state, settings=settings)
        if not opts.focus:
            set_cur_win(nvim, win=cwin)
Exemple #13
0
def _kill_term_wins(nvim: Nvim) -> None:
    wins = tuple(list_floatwins(nvim))
    if len(wins) != 2:
        for win in wins:
            win_close(nvim, win=win)
Exemple #14
0
def close_term(nvim: Nvim) -> None:
    for win in list_floatwins(nvim):
        win_close(nvim, win=win)
Exemple #15
0
def _on_resized(nvim: Nvim) -> None:
    wins = tuple(list_floatwins(nvim))
    if wins:
        for win in wins:
            win_close(nvim, win=win)
        toggle_floating(nvim)