Skip to content
New issue

Have a question about this project? # for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “#”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? # to your account

[sidebar] Sidebar crashes if screen is resized #2138

Closed
frosencrantz opened this issue Nov 27, 2023 · 4 comments
Closed

[sidebar] Sidebar crashes if screen is resized #2138

frosencrantz opened this issue Nov 27, 2023 · 4 comments

Comments

@frosencrantz
Copy link
Contributor

Small description
Sidebar crashes if screen is resized

Expected result
No crashes.

Actual result with screenshot

Traceback (most recent call last):
  File "/usr/bin/vd", line 6, in <module>
    visidata.main.vd_cli()
  File "/usr/lib/python3.9/site-packages/visidata/main.py", line 378, in vd_cli
    rc = main_vd()
  File "/usr/lib/python3.9/site-packages/visidata/main.py", line 338, in main_vd
    run(vd.sheets[0])
  File "/usr/lib/python3.9/site-packages/visidata/vdobj.py", line 33, in _vdfunc
    return getattr(visidata.vd, func.__name__)(*args, **kwargs)
  File "/usr/lib/python3.9/site-packages/visidata/extensible.py", line 65, in wrappedfunc
    return oldfunc(*args, **kwargs)
  File "/usr/lib/python3.9/site-packages/visidata/extensible.py", line 65, in wrappedfunc
    return oldfunc(*args, **kwargs)
  File "/usr/lib/python3.9/site-packages/visidata/mainloop.py", line 303, in run
    ret = vd.mainloop(scr)
  File "/usr/lib/python3.9/site-packages/visidata/extensible.py", line 65, in wrappedfunc
    return oldfunc(*args, **kwargs)
  File "/usr/lib/python3.9/site-packages/visidata/mainloop.py", line 178, in mainloop
    self.draw_all()
  File "/usr/lib/python3.9/site-packages/visidata/mainloop.py", line 129, in draw_all
    vd.drawSidebar(vd.scrFull, vd.activeSheet)
  File "/usr/lib/python3.9/site-packages/visidata/sidebar.py", line 45, in drawSidebar
    return sheet.drawSidebarText(scr, text=sheet.current_sidebar, overflowmsg=overflowmsg, bottommsg=bottommsg)
  File "/usr/lib/python3.9/site-packages/visidata/sidebar.py", line 110, in drawSidebarText
    clipdraw(sidebarscr, h-1, winw-dispwidth(bottommsg)-4, '|'+bottommsg+'|[:]', cattr)
  File "/usr/lib/python3.9/site-packages/visidata/cliptext.py", line 206, in clipdraw
    assert x >= 0, x
AssertionError: -1

https://asciinema.org/a/U6nrWmSZxAVnMxPBeAaWG4I25

Steps to reproduce with sample data and a .vd

Open VisiData with the sidebar on. Then resize the screen. in this case horizontally, it can have this stack trace.

Additional context
Please include the version of VisiData and Python. Latest develop. Python 3.9.2

@anjakefala
Copy link
Collaborator

anjakefala commented Nov 27, 2023

It doesn't happen always: it seems to be dependent on how big the terminal was to start!

saulpw added a commit that referenced this issue Nov 27, 2023
@saulpw
Copy link
Owner

saulpw commented Nov 27, 2023

I believe this is fixed now! Thanks for reporting, @frosencrantz.

@frosencrantz
Copy link
Contributor Author

Thanks! I think that fixed part of the issue. If I make my terminal very narrow (line 9 characters wide) it see a new trace.

Agreed a terminal that wide is not very useful with VisiData. If I have multiple window pane in tmux, it might get automatically resize to something verynarrow, and VisiData should not crash.

  File "/usr/bin/vd", line 6, in <module>
    visidata.main.vd_cli()
  File "/usr/lib/python3.9/site-packages/visidata/main.py", line 377, in vd_cli
    rc = main_vd()
  File "/usr/lib/python3.9/site-packages/visidata/main.py", line 337, in main_vd
    run(vd.sheets[0])
  File "/usr/lib/python3.9/site-packages/visidata/vdobj.py", line 33, in _vdfunc
    return getattr(visidata.vd, func.__name__)(*args, **kwargs)
  File "/usr/lib/python3.9/site-packages/visidata/extensible.py", line 65, in wrappedfunc
    return oldfunc(*args, **kwargs)
  File "/usr/lib/python3.9/site-packages/visidata/extensible.py", line 65, in wrappedfunc
    return oldfunc(*args, **kwargs)
  File "/usr/lib/python3.9/site-packages/visidata/mainloop.py", line 303, in run
    ret = vd.mainloop(scr)
  File "/usr/lib/python3.9/site-packages/visidata/extensible.py", line 65, in wrappedfunc
    return oldfunc(*args, **kwargs)
  File "/usr/lib/python3.9/site-packages/visidata/mainloop.py", line 178, in mainloop
    self.draw_all()
  File "/usr/lib/python3.9/site-packages/visidata/mainloop.py", line 129, in draw_all
    vd.drawSidebar(vd.scrFull, vd.activeSheet)
  File "/usr/lib/python3.9/site-packages/visidata/sidebar.py", line 45, in drawSidebar
    return sheet.drawSidebarText(scr, text=sheet.current_sidebar, overflowmsg=overflowmsg, bottommsg=bottommsg)
  File "/usr/lib/python3.9/site-packages/visidata/sidebar.py", line 74, in drawSidebarText
    lines = list(wraptext(text, width=maxw-4))
  File "/usr/lib/python3.9/site-packages/visidata/cliptext.py", line 309, in wraptext
    for linenum, textline in enumerate(textwrap.wrap(''.join(textchunks), width=width, drop_whitespace=False)):
  File "/usr/lib/python3.9/textwrap.py", line 379, in wrap
    return w.wrap(text)
  File "/usr/lib/python3.9/textwrap.py", line 354, in wrap
    return self._wrap_chunks(chunks)
  File "/usr/lib/python3.9/textwrap.py", line 248, in _wrap_chunks
    raise ValueError("invalid width %r (must be > 0)" % self.width)
ValueError: invalid width 0 (must be > 0)
Error in atexit._run_exitfuncs:
Traceback (most recent call last):
  File "/usr/lib/python3.9/site-packages/visidata/stored_prop.py", line 13, in _save_on_exit
    if vd.stored_properties[f]:
KeyError: <function inputHistory at 0xf7078808>

@saulpw
Copy link
Owner

saulpw commented Nov 28, 2023

Agreed, VisiData should never crash! This should be fixed now (as well as the extra error in exitfuncs).

# for free to join this conversation on GitHub. Already have an account? # to comment
Projects
None yet
Development

No branches or pull requests

3 participants