[HN Gopher] Textual TUI framework for Python adds CSS renderer
___________________________________________________________________
Textual TUI framework for Python adds CSS renderer
Author : willm
Score : 173 points
Date : 2022-10-23 13:35 UTC (9 hours ago)
(HTM) web link (www.textualize.io)
(TXT) w3m dump (www.textualize.io)
| willm wrote:
| Textual is a project I started in 2021 to build a TUI framework
| on top of Rich.
|
| I did a Show HN back in August 21:
| https://news.ycombinator.com/item?id=28106389
|
| At the time, it was purely a hobby project, but a _lot_ has
| happened since then. I was VC funded (nobody was more surprised
| than me) and since January, Textual has been my full-time gig.
|
| This version adds a CSS renderer and more powerful layout engine,
| which enables some really interesting features such as live
| editing.
|
| We've also added a websockets based console app for logging,
| which restores print style debugging when testing your TUI.
|
| This release has documentation. Which you can find here:
|
| https://textual.textualize.io/
|
| Github repository:
|
| https://github.com/Textualize/textual
|
| Textual is still very much a work in progress, but it is way more
| stable now.
|
| Textualize (the company) is currently 3 developers based in
| Edinburgh, Scotland. We recently hired dev no.3 and we have a
| fourth starting this year.
| srcreigh wrote:
| How will you get money to pay the developers?
| willm wrote:
| The company was funded with Venture Capital.
| lozenge wrote:
| I just listened to Will on a podcast, and apparently, they're
| going to package Python apps with a terminal such as xterm.js
| to solve the Python distribution problem (either as Electron
| apps or in the web browser), then have customers host their
| "TUI" apps on proprietary Textual infra- basically a PaaS. He
| mentioned charging for features like SSO. The library itself
| would stay free for offline use and you could "pip install"
| any Python apps that use it.
| fbdab103 wrote:
| Really enjoyed the file browser demo.
|
| Ever since I discovered the project, I have been wondering if I
| could wire it up with something like Pyodide to have a Python
| based interface that could work on the terminal or the browser.
| pbronez wrote:
| I think that's their commercialization plan - a hosting
| service for Textual-based webapps.
| agumonkey wrote:
| This is a mean upgrade. Bravo.
|
| ps: I didn't follow the latest changes, how is the keybinding
| aspect ? do you have single keypresses ? or key-sequences ? or
| even chords ? As an emacs-er I like to have semi-complicated
| custom keybindings. Anyway just asking, not a ticket :)
| willm wrote:
| We have a binding system that maps keys to "actions". The
| idea is that they will eventually be read from a conf file,
| so you can remap keys.
| quasarj wrote:
| Man it looks great these days! Only issue is... it turns out I
| like using the terminal because I _don 't_ have to worry about
| building a UI, haha.
| [deleted]
| codethief wrote:
| I would argue all command line tools have a UI, even if it's
| just a textual one (consisting of command line parameters,
| maybe a text prompt, or in rare cases even an ncurses
| interface). When I develop command line tools I _always_
| think about the UX the user will have.
| z3c0 wrote:
| Hello Will,
|
| I just wanted to say that rich is a great tool that I'm very
| appreciative of, and __rich_repr__ is a godsend for debugging
| datasets without vomiting an overload of text into my terminal.
| Or consolidating spark's awful, multi-language stack traces.
| Excellent work. Textual is a lot of fun too, and I've been
| looking forward to this update. Thank you!
| willm wrote:
| Cheers. Rich repr has become essential in my workflow as
| well. It's one of those small quality of life things that
| makes for one less thing to think about.
| newrotik wrote:
| Could you elaborate on how you use the tool for the two
| purposes you mentioned?
| a_t48 wrote:
| Ah dang, that websockets thing would have been useful a month
| ago for me. I was trying to forward stdout to a scrollable pane
| - I initially tried textual but the performance was kinda poor
| when scrolling. Ended up going with prompt toolkit instead
| because I could get it to work.
| mixmastamyk wrote:
| Print log to file, then tail -f in another tab/pane.
| 0xabe wrote:
| Looks neat. Is there a way for this to be used with C++? Seems
| like a nice improvement on ncurses.
| viraptor wrote:
| There's something I can't figure out from the docs/examples. Does
| textual rely on taking over the terminal, or can I also render
| static output? I'm thinking of an app that has both batch and
| interactive mode with only minor differences in the display.
| jacobtomlinson wrote:
| I've been so excited about this since I tried an early version
| last year!
|
| I've been playing with the beta and I can't wait to build more
| things with it.
|
| Thanks for all the hard work folks!
| brianzelip wrote:
| Recent and informing Changelog podcast with OP and Textual
| author, https://changelog.com/podcast/511.
| krzysztow wrote:
| Was looking for this exact comment, or to add it otherwise.
| Props to the Ship It show from The Changelog!
| [deleted]
| infamousclyde wrote:
| Looks great. My first reaction to the title was.... "Textual
| TUI..... As opposed to...?"
| simonw wrote:
| The new tutorial is fantastic:
| https://textual.textualize.io/tutorial/
|
| It's worth working through it even if you're not planning to
| build a TUI app, just to appreciate how well designed the
| tutorial itself is.
| emj wrote:
| Have any one seen accessible TUIs for blind users?
| deanc wrote:
| Textualize (Python) and BubbleTea (GoLang) are really great
| options for building TUIs. But it seems that the defacto option
| in the nodejs space has not been updated since 2016 [1].
|
| Are there any TS based TUI libraries that are mature and actively
| developed?
|
| [1] https://github.com/chjj/blessed
| constantcrying wrote:
| nisegami wrote:
| I've previously tried using Textual and felt that it wasn't quite
| ready. From everything I've seen, I think that changes with this
| release, but I'll have to use it to confirm. Really happy to see
| it launch! Looking forward to seeing what this inspires.
| tambourine_man wrote:
| There's something about eking out features that were never
| intended from a protocol that's fascinating to me. I've seen the
| smooth scrolling a couple of times by now and it's still hard to
| believe.
|
| Do you guys have a link showing how you managed to pull those
| tricks? Smooth redraw and bevels around buttons for instance.
|
| As someone who has drawn my share of simple boxes with scape
| sequences in the past decades, I'd love to know what you guys
| figured out that we missed.
|
| Thanks and congratulations.
| willm wrote:
| Cheers. The boxes use this technique, which I think I may have
| invented, because I've never see it used elsewhere.
|
| https://www.willmcgugan.com/blog/tech/post/ceo-just-wants-to...
|
| For smooth scrolling, see the first item in this post:
|
| https://www.textualize.io/blog/posts/7-things-about-terminal...
|
| I'm also fascinated that you can _discover_ new things from a
| protocol, decades old.
| tambourine_man wrote:
| That's very clever. Thanks for the links!
| pauleveritt wrote:
| I did a little "unboxing" video: https://youtu.be/WLwVnYb5Adw
| danpalmer wrote:
| Lots of praise here, well deserved from what I can see.
|
| For those loving Textual, can I ask why you'd use this over, say,
| a web UI?
|
| There's a joy to using well made libraries and frameworks like
| this, but apart from that I'm having a hard time justifying this
| to myself for projects and keen to hear what others are using it
| for where it's a better fit than other types of UI.
| willm wrote:
| Works over SSH, low requirements, and cross platform are some
| good reasons.
|
| Ultimately though, I would like Textual to simply be the
| easiest way of creating a useful UI. Something that you could
| quickly become productive in with just Python skills. There are
| a lot of new Python developers that didn't come from a web
| background, but still need a custom UI.
|
| I don't see it as replacing web apps. If you have the skills
| and you think you need a web app, then you probably should make
| a web app. I see it more as allowing UIs to be built that
| simply weren't being built before due to a lack of skills or
| resources.
|
| This may become moot, because we have plans for the same API to
| also serve web applications.
| samwillis wrote:
| I think Textual would be amazing tool for building advanced dev
| tools. As a Python web developer I would love an interactive
| development server / debugger. Imagine a ui showing all requests
| to your dev server (normal, Websockets, or long poling / SSE) and
| being able to expand the details and drill down the stack frames.
| See the context to your templates. Or being able to pause a
| request at a break point and step through. Add in the ability to
| see background tasks in the task queue and have the same level of
| insight. All interactive from the terminal with a beautiful
| textual UI.
|
| If only there was more time.
| solresol wrote:
| I can sort-of see a business model where they host SSH-based
| applications -- ideally with a Mosh option. As a user, I log in
| and get a menu of the different applications I am subscribed to
| that they host, or I can ssh-exec a particular application,
| perhaps with the option to reconnect to an application that I had
| open a moment ago. Perhaps being able to text-screen-share so
| that I can train someone else up would be good (for customer
| support).
|
| I would expect that this kind of infrastructure would be cheap to
| support and cheap to run. All the infrastructure is already there
| in the Linux kernel (or any other Unix-like): just charge me
| based on my customer's pacct (process accounting) records.
|
| There are a lot of CRUD apps that would be just as good in a TUI
| as a GUI, and there are a lot of businesses built on CRUD apps.
| xuhu wrote:
| Can you select multi-line text from a box in a console
| application, without selecting entire lines ?
| jlokier wrote:
| iTerm2 (a popular open source terminal emulator for Mac)
| supports this automatically for all TUI programs, by
| recognising the box characters. You select multi-line text
| inside the box and it behaves as if the box is a mini terminal.
|
| I don't know which other terminal emulators have the same
| feature.
| willm wrote:
| It's possible. In application mode you don't rely on the
| terminal's select capability.
| tybirk wrote:
| Congratulations on the major (minor) release! The docs look
| absolutely awesome, looking forward to digging into them.
| jmt_ wrote:
| Every time I look at an update to this library my jaw drops to
| the floor. Once I find some spare time, I've been meaning to dive
| into the source code to get a feel for how you're pulling of the
| marvels that are rich and textualize. I've been "terminal-
| oriented" for at least a decade now and these frameworks feel
| like something out of a future I could have never imagined.
| Seriously impressive work Will, closely following your projects.
| willm wrote:
| Gracias. Hope you continue to enjoy my stuff. Hope you check
| out the Textual code. I've tried to make it as readable as
| possible.
| mr337 wrote:
| I just wrapped up an internal TUI utility for interfacing with
| physical hardware. I was really happy with the output until I saw
| this... Now I got to rework it with the new UI. Very nice work!
___________________________________________________________________
(page generated 2022-10-23 23:00 UTC)