Display the file number when multiple files are open

This commit is contained in:
Anthony Sottile
2019-09-28 16:53:51 -07:00
parent 74f18b0ec2
commit 8aaf3f9a25
2 changed files with 23 additions and 7 deletions

26
babi.py
View File

@@ -219,15 +219,23 @@ def _init_colors(stdscr: 'curses._CursesWindow') -> None:
class Header:
def __init__(self, file: 'File') -> None:
def __init__(self, file: 'File', idx: int, n_files: int) -> None:
self.file = file
self.idx = idx
self.n_files = n_files
def draw(self, stdscr: 'curses._CursesWindow') -> None:
filename = self.file.filename or '<<new file>>'
if self.file.modified:
filename += ' *'
centered = filename.center(curses.COLS)[len(VERSION_STR) + 2:]
s = f' {VERSION_STR} {centered}'
if self.n_files > 1:
files = f'[{self.idx + 1}/{self.n_files}] '
version_width = len(VERSION_STR) + 2 + len(files)
else:
files = ''
version_width = len(VERSION_STR) + 2
centered = filename.center(curses.COLS)[version_width:]
s = f' {VERSION_STR} {files}{centered}{files}'
stdscr.insstr(0, 0, s, curses.A_REVERSE)
@@ -357,7 +365,7 @@ class File:
def _color_test(stdscr: 'curses._CursesWindow') -> None:
Header(File('<<color test>>')).draw(stdscr)
Header(File('<<color test>>'), 1, 1).draw(stdscr)
maxy, maxx = stdscr.getmaxyx()
if maxy < 19 or maxx < 68: # pragma: no cover (will be deleted)
@@ -484,11 +492,14 @@ def _get_char(stdscr: 'curses._CursesWindow') -> Key:
EditResult = enum.Enum('EditResult', 'EXIT NEXT PREV')
def _edit(stdscr: 'curses._CursesWindow', file: File) -> EditResult:
def _edit(
stdscr: 'curses._CursesWindow',
file: File,
header: Header,
) -> EditResult:
margin = Margin.from_screen(stdscr)
status = Status()
file.ensure_loaded(status, margin)
header = Header(file)
while True:
status.tick()
@@ -552,7 +563,8 @@ def c_main(stdscr: 'curses._CursesWindow', args: argparse.Namespace) -> None:
while files:
i = i % len(files)
file = files[i]
res = _edit(stdscr, file)
header = Header(file, i, len(files))
res = _edit(stdscr, file, header)
if res == EditResult.EXIT:
del files[i]
elif res == EditResult.NEXT:

View File

@@ -750,22 +750,26 @@ def test_multiple_files(tmpdir):
with run(str(a), str(b), str(c)) as h:
h.await_text('file_a')
h.await_text('[1/3]')
h.await_text('a text')
h.press('Right')
h.await_cursor_position(x=1, y=1)
h.press('M-Right')
h.await_text('file_b')
h.await_text('[2/3]')
h.await_text('b text')
h.await_cursor_position(x=0, y=1)
h.press('M-Left')
h.await_text('file_a')
h.await_text('[1/3]')
h.await_cursor_position(x=1, y=1)
# wrap around
h.press('M-Left')
h.await_text('file_c')
h.await_text('[3/3]')
h.await_text('c text')
h.press('C-x')