-
Notifications
You must be signed in to change notification settings - Fork 62
Description
Describe the bug
The whole screen is refreshed on each key press and that is super-ugly on some terminals like the Windows Terminal, plus it will cause a serious lag on slow network connections.
To Reproduce
Steps to reproduce the behavior:
- Run the demo code in README on WSL using the Windows Terminal:
# -- demo.py --
import pytermgui as ptg
with ptg.WindowManager() as manager:
demo = ptg.Window(
ptg.Label("[210 bold]Hello world!"),
ptg.Label(),
ptg.InputField(prompt="Who are you?"),
ptg.Label(),
ptg.Button("Submit!")
)
manager.add(demo)
manager.run()
- Type something.
Note: this problem does not occur on smarter terminals like Gnome Terminal simply because they redraw the screen in a async way. But, the problem will we visible across network connections, because the whole screen data must be re-sent on each key press.
Expected behavior
When writing text, only the single chars must be written to the screen, without redrawing everything. That is harder to achieve, I know, but it will make a big difference.
System information
I installed the latest version from pip, ptg.__version__
is 6.4.0.
Possible solution
I haven't studied this project enough to propose a reasonable solution, but more or less it's Flutter's problem: UI = Func(data)
does not work well in the real world without a lot of hacks under the hood. For example, Flutter compares the new UI tree with the old one of the fly and redraws only the diff.