As I am toying around with textual, I am wanting some popup user input to take over. Textual is still pretty new and likely to change quite significantly, so I don't want to overdo the work I put into it, So for now on my personal tuis I am going to shell out to tmux.
The main issue is that when you are in a textual app, it kinda owns the
input. So if you try to run another python function that calls for
input it just cant get there. There is a
that covers this, and it might work really well for some use cases, but
many of my use cases have been for things that are pre-built like
copier, and I am trying to throw something together quick.
textual is still very beta
Part of this comes down to the fact that textual is still very beta and likely to change a lot, so all of the work I have done with it is for quick and dirty, or fun side projects.
So the solution that was easiest for me... shell out to a tmux popup.
The application I am working on wants to create new documents using
copier templates. copier has a fantastic cli that walks throught he
template variables and asks the user to fill them in, so I just shell
out to that with
Popen. Make sure that you wait for this process to
finish otherwise there will be bit of jank in your textual app.
async def action_new_post(self) -> None: proc = subprocess.Popen( 'tmux popup "copier copy plugins/todo-template tasks"', shell=True ) proc.wait()
Here is what the running todo application looks like with the copier popup over it.
a bit more on tmux-popus [here] https://waylonwalker.com/tmux-popups/)