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")
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)
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
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)
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)
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)
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)
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)
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)
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")
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
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)
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)
def close_term(nvim: Nvim) -> None: for win in list_floatwins(nvim): win_close(nvim, win=win)
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)