def c2() -> None: def it() -> Iterator[Tuple[Window, Tuple[int, int]]]: wins = list_wins(nvim) for win in wins: buf = win_get_buf(nvim, win=win) if buf == ctx.buf: row, col = win_get_cursor(nvim, win) yield win, (row, col) saved = {win: pos for win, pos in it()} lines = temp.read_text().split(ctx.linefeed) if lines: l = lines.pop() if l: lines.append(l) buf_set_lines(nvim, buf=ctx.buf, lo=0, hi=-1, lines=lines) for win, (row, col) in saved.items(): new_row = min(row, len(lines) - 1) with suppress(NvimError): win_set_cursor(nvim, win=win, row=new_row, col=col) detect_tabs(nvim, buf=ctx.buf) prettiers = LANG("step join sep").join(attr.bin for attr in attrs) nice = LANG("prettier succeeded", prettiers=prettiers) write(nvim, nice)
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 _comment_single(nvim: Nvim) -> None: win = cur_win(nvim) buf = win_get_buf(nvim, win=win) if not writable(nvim, buf=buf): return else: row, _ = win_get_cursor(nvim, win=win) lines = buf_get_lines(nvim, buf=buf, lo=row, hi=row + 1) lhs, rhs = buf_commentstr(nvim, buf=buf) new_lines = _toggle_comment(lhs, rhs, lines=lines) buf_set_lines(nvim, buf=buf, lo=row, hi=row + 1, lines=new_lines)
def _sort_lines(nvim: Nvim, visual: VisualTypes) -> None: buf = cur_buf(nvim) if not writable(nvim, buf=buf): return else: (row1, _), (row2, _) = operator_marks(nvim, buf=buf, visual_type=visual) lines = buf_get_lines(nvim, buf=buf, lo=row1, hi=row2 + 1) new_lines = sorted(lines, key=strxfrm) buf_set_lines(nvim, buf=buf, lo=row1, hi=row2 + 1, lines=new_lines)
def _comment(nvim: Nvim, visual: VisualTypes) -> None: buf = cur_buf(nvim) if not writable(nvim, buf=buf): return else: (row1, _), (row2, _) = operator_marks(nvim, buf=buf, visual_type=visual) lines = buf_get_lines(nvim, buf=buf, lo=row1, hi=row2 + 1) lhs, rhs = buf_commentstr(nvim, buf=buf) new_lines = _toggle_comment(lhs, rhs, lines=lines) buf_set_lines(nvim, buf=buf, lo=row1, hi=row2 + 1, lines=new_lines)
def _go_replace_line(nvim: Nvim) -> None: win = cur_win(nvim) buf = win_get_buf(nvim, win=win) if not writable(nvim, buf=buf): return else: linefeed = buf_linefeed(nvim, buf=buf) row, _ = win_get_cursor(nvim, win=win) body: str = nvim.funcs.getreg() new_lines = body.split(linefeed) if new_lines: n = new_lines.pop() if n: new_lines.append(n) buf_set_lines(nvim, buf=buf, lo=row, hi=row + 1, lines=new_lines)
def _toggle_case(nvim: Nvim) -> None: win = cur_win(nvim) row, col = win_get_cursor(nvim, win=win) buf = win_get_buf(nvim, win=win) if writable(nvim, buf=buf): line, *_ = buf_get_lines(nvim, buf=buf, lo=row, hi=row + 1) bline = encode(line) before, after = bline[:col], bline[col:] if after: cur, *post = after pt = decode(bytes((cur, ))) swapped = _swap_case(pt) new = decode(before) + swapped + decode(bytes(post)) pos = len(before) + len(encode(swapped)) buf_set_lines(nvim, buf=buf, lo=row, hi=row + 1, lines=(new, )) win_set_cursor(nvim, win=win, row=row, col=pos)
def _toggle_case(nvim: Nvim) -> None: win = cur_win(nvim) row, col = win_get_cursor(nvim, win=win) buf = win_get_buf(nvim, win=win) if not writable(nvim, buf=buf): return else: line, *_ = buf_get_lines(nvim, buf=buf, lo=row, hi=row + 1) bline = line.encode() before, after = bline[:col], bline[col:] cur, *post = after pt = bytes((cur,)).decode() swapped = _swap_case(pt) new = before.decode() + swapped + bytes(post).decode() pos = len(before) + len(swapped.encode()) buf_set_lines(nvim, buf=buf, lo=row, hi=row + 1, lines=(new,)) win_set_cursor(nvim, win=win, row=row, col=pos)
def cont() -> None: def it() -> Iterator[Tuple[Window, Tuple[int, int]]]: wins = list_wins(nvim) for win in wins: buf = win_get_buf(nvim, win=win) if buf == ctx.buf: row, col = win_get_cursor(nvim, win) yield win, (row, col) saved = {win: pos for win, pos in it()} lines = temp.read_text().splitlines() buf_set_lines(nvim, buf=ctx.buf, lo=0, hi=-1, lines=lines) for win, (row, col) in saved.items(): new_row = min(row, len(lines) - 1) win_set_cursor(nvim, win=win, row=new_row, col=col)
def _set_trimmed(nvim: Nvim, win: Window, buf: Buffer) -> None: row, col = win_get_cursor(nvim, win=win) lines = buf_get_lines(nvim, buf=buf, lo=0, hi=-1) new_lines = [ decode(encode(line)[:col]) + decode(encode(line)[col:]).rstrip() if r == row else line.rstrip() for r, line in enumerate(lines) ] while new_lines: line = new_lines.pop() if line or len(new_lines) <= row: new_lines.append(line) break if len(new_lines) < len(lines): new_lines.append("") if new_lines != lines: buf_set_lines(nvim, buf=buf, lo=0, hi=-1, lines=new_lines) win_set_cursor(nvim, win=win, row=row, col=col)
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")