diff --git a/feed_rss_created.xml b/feed_rss_created.xml
index d74dc670e1..acbf00920c 100644
--- a/feed_rss_created.xml
+++ b/feed_rss_created.xml
@@ -1 +1 @@
-Textualhttps://textual.textualize.io/https://github.com/textualize/textual/enSun, 21 Apr 2024 12:21:59 -0000Sun, 21 Apr 2024 12:21:59 -00001440MkDocs RSS plugin - v1.12.1Behind the Curtain of Inline Terminal ApplicationswillmcguganDevLog<h1>Behind the Curtain of Inline Terminal Applications</h1><p>Textual recently added the ability to run <em>inline</em> terminal apps.You can see this in action if you run the <a href="https://github.com/Textualize/textual/blob/main/examples/calculator.py">calculator example</a>:</p><p><img alt="Inline Calculator" src="../images/calcinline.png"></p><p>The application appears directly under the prompt, rather than occupying the full height of the screen—which is more typical of TUI applications.You can interact with this calculator using keys <em>or</em> the mouse.When you press ++ctrl+c++ the calculator disappears and returns you to the prompt.</p><p>Here's another app that creates an inline code editor:</p><p>=== "Video"</p><pre><code><div class="video-wrapper"> <iframe width="852" height="525" src="https://www.youtube.com/embed/Dt70oSID1DY" title="Inline app" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe></div></code></pre><p>=== "inline.py" ```python from textual.app import App, ComposeResult from textual.widgets import TextArea</p><pre><code>class InlineApp(App): CSS = """ TextArea { height: auto; max-height: 50vh; } """ def compose(self) -> ComposeResult: yield TextArea(language="python")if __name__ == "__main__": InlineApp().run(inline=True)```</code></pre><p>This post will cover some of what goes on under the hood to make such inline apps work.</p><p>It's not going to go in to too much detail.I'm assuming most readers will be more interested in a birds-eye view rather than all the gory details.</p>https://textual.textualize.io/blog/2024/04/20/behind-the-curtain-of-inline-terminal-applications/ Sat, 20 Apr 2024 00:00:00 +0000https://textual.textualize.io/blog/2024/04/20/behind-the-curtain-of-inline-terminal-applications/Remote memory profiling with MemraywillmcguganDevLog<h1>Remote memory profiling with Memray</h1><p><a href="https://github.com/bloomberg/memray">Memray</a> is a memory profiler for Python, built by some very smart devs at Bloomberg.It is a fantastic tool to identify memory leaks in your code or other libraries (down to the C level)!</p><p>They recently added a <a href="https://github.com/textualize/textual/">Textual</a> interface which looks amazing, and lets you monitor your process right from the terminal:</p><p><img alt="Memray" src="https://raw.githubusercontent.com/bloomberg/memray/main/docs/_static/images/live_animated.webp"></p>https://textual.textualize.io/blog/2024/02/20/remote-memory-profiling-with-memray/ Tue, 20 Feb 2024 00:00:00 +0000https://textual.textualize.io/blog/2024/02/20/remote-memory-profiling-with-memray/File magic with the Python standard librarywillmcguganDevLog<h1>File magic with the Python standard library</h1><p>I recently published <a href="https://github.com/textualize/toolong">Toolong</a>, an app for viewing log files.There were some interesting technical challenges in building Toolong that I'd like to cover in this post.</p>https://textual.textualize.io/blog/2024/02/11/file-magic-with-the-python-standard-library/ Sun, 11 Feb 2024 00:00:00 +0000https://textual.textualize.io/blog/2024/02/11/file-magic-with-the-python-standard-library/Announcing textual-plotextdavepDevLog<h1>Announcing textual-plotext</h1><p>It's no surprise that a common question on the <a href="https://discord.gg/Enf6Z3qhVr">Textual Discordserver</a> is how to go about producing plots inthe terminal. A popular solution that has been suggested is<a href="https://github.com/piccolomo/plotext">Plotext</a>. While Plotext doesn'tdirectly support Textual, it is <a href="https://github.com/piccolomo/plotext/blob/master/readme/environments.md#rich">easy to use withRich</a>and, because of this, we wanted to make it just as easy to use in yourTextual applications.</p>https://textual.textualize.io/blog/2023/10/04/announcing-textual-plotext/ Wed, 04 Oct 2023 00:00:00 +0000https://textual.textualize.io/blog/2023/10/04/announcing-textual-plotext/Textual 0.38.0 adds a syntax aware TextAreawillmcguganRelease<h1>Textual 0.38.0 adds a syntax aware TextArea</h1><p>This is the second big feature release this month after last week's <a href="./release0.37.0.md">command palette</a>.</p>https://textual.textualize.io/blog/2023/09/21/textual-0380-adds-a-syntax-aware-textarea/ Thu, 21 Sep 2023 00:00:00 +0000https://textual.textualize.io/blog/2023/09/21/textual-0380-adds-a-syntax-aware-textarea/Things I learned while building Textual's TextAreadarrenburnsDevLog<h1>Things I learned building a text editor for the terminal</h1><p><code>TextArea</code> is the latest widget to be added to Textual's <a href="https://textual.textualize.io/widget_gallery/">growing collection</a>.It provides a multi-line space to edit text, and features optional syntax highlighting for a selection of languages.</p><p><img alt="text-area-welcome.gif" src="../images/text-area-learnings/text-area-welcome.gif"></p><p>Adding a <code>TextArea</code> to your Textual app is as simple as adding this to your <code>compose</code> method:</p><p><code>pythonyield TextArea()</code></p><p>Enabling syntax highlighting for a language is as simple as:</p><p><code>pythonyield TextArea(language="python")</code></p><p>Working on the <code>TextArea</code> widget for Textual taught me a lot about Python and my generalapproach to software engineering. It gave me an appreciation for the subtle functionality behindthe editors we use on a daily basis — features we may not even notice, despitesome engineer spending hours perfecting it to provide a small boost to our development experience.</p><p>This post is a tour of some of these learnings.</p>https://textual.textualize.io/blog/2023/09/18/things-i-learned-while-building-textuals-textarea/ Mon, 18 Sep 2023 00:00:00 +0000https://textual.textualize.io/blog/2023/09/18/things-i-learned-while-building-textuals-textarea/Textual 0.37.0 adds a command palettewillmcguganRelease<h1>Textual 0.37.0 adds a command palette</h1><p>Textual version 0.37.0 has landed!The highlight of this release is the new command palette.</p>https://textual.textualize.io/blog/2023/09/15/textual-0370-adds-a-command-palette/ Fri, 15 Sep 2023 00:00:00 +0000https://textual.textualize.io/blog/2023/09/15/textual-0370-adds-a-command-palette/What is Textual Web?willmcguganNews<h1>What is Textual Web?</h1><p>If you know us, you will know that we are the team behind <a href="https://github.com/Textualize/rich">Rich</a> and <a href="https://github.com/Textualize/textual">Textual</a> — two popular Python libraries that work magic in the terminal.</p><p>!!! note</p><pre><code>Not to mention [Rich-CLI](https://github.com/Textualize/rich-cli), [Trogon](https://github.com/Textualize/trogon), and [Frogmouth](https://github.com/Textualize/frogmouth)</code></pre><p>Today we are adding one project more to that lineup: <a href="https://github.com/Textualize/textual-web">textual-web</a>.</p>https://textual.textualize.io/blog/2023/09/06/what-is-textual-web/ Wed, 06 Sep 2023 00:00:00 +0000https://textual.textualize.io/blog/2023/09/06/what-is-textual-web/Pull Requests are cake or puppieswillmcguganDevLog<h1>Pull Requests are cake or puppies</h1><p>Broadly speaking, there are two types of contributions you can make to an Open Source project.</p>https://textual.textualize.io/blog/2023/07/29/pull-requests-are-cake-or-puppies/ Sat, 29 Jul 2023 00:00:00 +0000https://textual.textualize.io/blog/2023/07/29/pull-requests-are-cake-or-puppies/Using Rich Inspect to interrogate Python objectswillmcguganDevLog<h1>Using Rich Inspect to interrogate Python objects</h1><p>The <a href="https://github.com/Textualize/rich">Rich</a> library has a few functions that are admittedly a little out of scope for a terminal color library. One such function is <code>inspect</code> which is so useful you may want to <code>pip install rich</code> just for this feature.</p>https://textual.textualize.io/blog/2023/07/27/using-rich-inspect-to-interrogate-python-objects/ Thu, 27 Jul 2023 00:00:00 +0000https://textual.textualize.io/blog/2023/07/27/using-rich-inspect-to-interrogate-python-objects/Textual 0.30.0 adds desktop-style notificationswillmcguganRelease<h1>Textual 0.30.0 adds desktop-style notifications</h1><p>We have a new release of Textual to talk about, but before that I'd like to cover a little Textual news.</p>https://textual.textualize.io/blog/2023/07/17/textual-0300-adds-desktop-style-notifications/ Mon, 17 Jul 2023 00:00:00 +0000https://textual.textualize.io/blog/2023/07/17/textual-0300-adds-desktop-style-notifications/Textual 0.29.0 refactors dev toolswillmcguganRelease<h1>Textual 0.29.0 refactors dev tools</h1><p>It's been a slow week or two at Textualize, with Textual devs taking well-earned annual leave, but we still managed to get a new version out.</p>https://textual.textualize.io/blog/2023/07/03/textual-0290-refactors-dev-tools/ Mon, 03 Jul 2023 00:00:00 +0000https://textual.textualize.io/blog/2023/07/03/textual-0290-refactors-dev-tools/To TUI or not to TUIwillmcguganDevLog<h1>To TUI or not to TUI</h1><p>Tech moves pretty fast.If you don’t stop and look around once in a while, you could miss it.And yet some technology feels like it has been around forever.</p><p>Terminals are one of those forever-technologies.</p>https://textual.textualize.io/blog/2023/06/06/to-tui-or-not-to-tui/ Tue, 06 Jun 2023 00:00:00 +0000https://textual.textualize.io/blog/2023/06/06/to-tui-or-not-to-tui/Textual adds Sparklines, Selection list, Input validation, and tool tipswillmcguganRelease<h1>Textual adds Sparklines, Selection list, Input validation, and tool tips</h1><p>It's been 12 days since the last Textual release, which is longer than our usual release cycle of a week.</p><p>We've been a little distracted with our "dogfood" projects: <a href="https://github.com/Textualize/frogmouth">Frogmouth</a> and <a href="https://github.com/Textualize/trogon">Trogon</a>. Both of which hit 1000 Github stars in 24 hours. We will be maintaining / updating those, but it is business as usual for this Textual release (and it's a big one). We have such sights to show you.</p>https://textual.textualize.io/blog/2023/06/01/textual-adds-sparklines-selection-list-input-validation-and-tool-tips/ Thu, 01 Jun 2023 00:00:00 +0000https://textual.textualize.io/blog/2023/06/01/textual-adds-sparklines-selection-list-input-validation-and-tool-tips/Textual 0.24.0 adds a Select controlwillmcguganRelease<h1>Textual 0.24.0 adds a Select control</h1><p>Coming just 5 days after the last release, we have version 0.24.0 which we are crowning the King of Textual releases.At least until it is deposed by version 0.25.0.</p>https://textual.textualize.io/blog/2023/05/08/textual-0240-adds-a-select-control/ Mon, 08 May 2023 00:00:00 +0000https://textual.textualize.io/blog/2023/05/08/textual-0240-adds-a-select-control/Textual 0.23.0 improves message handlingwillmcguganRelease<h1>Textual 0.23.0 improves message handling</h1><p>It's been a busy couple of weeks at Textualize.We've been building apps with <a href="https://github.com/Textualize/textual">Textual</a>, as part of our <em>dog-fooding</em> week.The first app, <a href="https://github.com/Textualize/frogmouth">Frogmouth</a>, was released at the weekend and already has 1K GitHub stars!Expect two more such apps this month.</p>https://textual.textualize.io/blog/2023/05/03/textual-0230-improves-message-handling/ Wed, 03 May 2023 00:00:00 +0000https://textual.textualize.io/blog/2023/05/03/textual-0230-improves-message-handling/Textual 0.18.0 adds API for managing concurrent workerswillmcguganRelease<h1>Textual 0.18.0 adds API for managing concurrent workers</h1><p>Less than a week since the last release, and we have a new API to show you.</p>https://textual.textualize.io/blog/2023/04/04/textual-0180-adds-api-for-managing-concurrent-workers/ Tue, 04 Apr 2023 00:00:00 +0000https://textual.textualize.io/blog/2023/04/04/textual-0180-adds-api-for-managing-concurrent-workers/Textual 0.17.0 adds translucent screens and Option ListwillmcguganRelease<h1>Textual 0.17.0 adds translucent screens and Option List</h1><p>This is a surprisingly large release, given it has been just 7 days since the last version (and we were down a developer for most of that time).</p><p>What's new in this release?</p>https://textual.textualize.io/blog/2023/03/29/textual-0170-adds-translucent-screens-and-option-list/ Wed, 29 Mar 2023 00:00:00 +0000https://textual.textualize.io/blog/2023/03/29/textual-0170-adds-translucent-screens-and-option-list/Textual 0.16.0 adds TabbedContent and border titleswillmcguganRelease<h1>Textual 0.16.0 adds TabbedContent and border titles</h1><p>Textual 0.16.0 lands 9 days after the previous release. We have some new features to show you.</p>https://textual.textualize.io/blog/2023/03/22/textual-0160-adds-tabbedcontent-and-border-titles/ Wed, 22 Mar 2023 00:00:00 +0000https://textual.textualize.io/blog/2023/03/22/textual-0160-adds-tabbedcontent-and-border-titles/No-async async with PythonwillmcguganDevLog<h1>No-async async with Python</h1><p>A (reasonable) criticism of async is that it tends to proliferate in your code. In order to <code>await</code> something, your functions must be <code>async</code> all the way up the call-stack. This tends to result in you making things <code>async</code> just to support that one call that needs it or, worse, adding <code>async</code> just-in-case. Given that going from <code>def</code> to <code>async def</code> is a breaking change there is a strong incentive to go straight there.</p><p>Before you know it, you have adopted a policy of "async all the things".</p>https://textual.textualize.io/blog/2023/03/15/no-async-async-with-python/ Wed, 15 Mar 2023 00:00:00 +0000https://textual.textualize.io/blog/2023/03/15/no-async-async-with-python/
\ No newline at end of file
+Textualhttps://textual.textualize.io/https://github.com/textualize/textual/enSat, 11 May 2024 11:09:05 -0000Sat, 11 May 2024 11:09:05 -00001440MkDocs RSS plugin - v1.12.1Behind the Curtain of Inline Terminal ApplicationswillmcguganDevLog<h1>Behind the Curtain of Inline Terminal Applications</h1><p>Textual recently added the ability to run <em>inline</em> terminal apps.You can see this in action if you run the <a href="https://github.com/Textualize/textual/blob/main/examples/calculator.py">calculator example</a>:</p><p><img alt="Inline Calculator" src="../images/calcinline.png"></p><p>The application appears directly under the prompt, rather than occupying the full height of the screen—which is more typical of TUI applications.You can interact with this calculator using keys <em>or</em> the mouse.When you press ++ctrl+c++ the calculator disappears and returns you to the prompt.</p><p>Here's another app that creates an inline code editor:</p><p>=== "Video"</p><pre><code><div class="video-wrapper"> <iframe width="852" height="525" src="https://www.youtube.com/embed/Dt70oSID1DY" title="Inline app" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe></div></code></pre><p>=== "inline.py" ```python from textual.app import App, ComposeResult from textual.widgets import TextArea</p><pre><code>class InlineApp(App): CSS = """ TextArea { height: auto; max-height: 50vh; } """ def compose(self) -> ComposeResult: yield TextArea(language="python")if __name__ == "__main__": InlineApp().run(inline=True)```</code></pre><p>This post will cover some of what goes on under the hood to make such inline apps work.</p><p>It's not going to go in to too much detail.I'm assuming most readers will be more interested in a birds-eye view rather than all the gory details.</p>https://textual.textualize.io/blog/2024/04/20/behind-the-curtain-of-inline-terminal-applications/ Sat, 20 Apr 2024 00:00:00 +0000https://textual.textualize.io/blog/2024/04/20/behind-the-curtain-of-inline-terminal-applications/Remote memory profiling with MemraywillmcguganDevLog<h1>Remote memory profiling with Memray</h1><p><a href="https://github.com/bloomberg/memray">Memray</a> is a memory profiler for Python, built by some very smart devs at Bloomberg.It is a fantastic tool to identify memory leaks in your code or other libraries (down to the C level)!</p><p>They recently added a <a href="https://github.com/textualize/textual/">Textual</a> interface which looks amazing, and lets you monitor your process right from the terminal:</p><p><img alt="Memray" src="https://raw.githubusercontent.com/bloomberg/memray/main/docs/_static/images/live_animated.webp"></p>https://textual.textualize.io/blog/2024/02/20/remote-memory-profiling-with-memray/ Tue, 20 Feb 2024 00:00:00 +0000https://textual.textualize.io/blog/2024/02/20/remote-memory-profiling-with-memray/File magic with the Python standard librarywillmcguganDevLog<h1>File magic with the Python standard library</h1><p>I recently published <a href="https://github.com/textualize/toolong">Toolong</a>, an app for viewing log files.There were some interesting technical challenges in building Toolong that I'd like to cover in this post.</p>https://textual.textualize.io/blog/2024/02/11/file-magic-with-the-python-standard-library/ Sun, 11 Feb 2024 00:00:00 +0000https://textual.textualize.io/blog/2024/02/11/file-magic-with-the-python-standard-library/Announcing textual-plotextdavepDevLog<h1>Announcing textual-plotext</h1><p>It's no surprise that a common question on the <a href="https://discord.gg/Enf6Z3qhVr">Textual Discordserver</a> is how to go about producing plots inthe terminal. A popular solution that has been suggested is<a href="https://github.com/piccolomo/plotext">Plotext</a>. While Plotext doesn'tdirectly support Textual, it is <a href="https://github.com/piccolomo/plotext/blob/master/readme/environments.md#rich">easy to use withRich</a>and, because of this, we wanted to make it just as easy to use in yourTextual applications.</p>https://textual.textualize.io/blog/2023/10/04/announcing-textual-plotext/ Wed, 04 Oct 2023 00:00:00 +0000https://textual.textualize.io/blog/2023/10/04/announcing-textual-plotext/Textual 0.38.0 adds a syntax aware TextAreawillmcguganRelease<h1>Textual 0.38.0 adds a syntax aware TextArea</h1><p>This is the second big feature release this month after last week's <a href="./release0.37.0.md">command palette</a>.</p>https://textual.textualize.io/blog/2023/09/21/textual-0380-adds-a-syntax-aware-textarea/ Thu, 21 Sep 2023 00:00:00 +0000https://textual.textualize.io/blog/2023/09/21/textual-0380-adds-a-syntax-aware-textarea/Things I learned while building Textual's TextAreadarrenburnsDevLog<h1>Things I learned building a text editor for the terminal</h1><p><code>TextArea</code> is the latest widget to be added to Textual's <a href="https://textual.textualize.io/widget_gallery/">growing collection</a>.It provides a multi-line space to edit text, and features optional syntax highlighting for a selection of languages.</p><p><img alt="text-area-welcome.gif" src="../images/text-area-learnings/text-area-welcome.gif"></p><p>Adding a <code>TextArea</code> to your Textual app is as simple as adding this to your <code>compose</code> method:</p><p><code>pythonyield TextArea()</code></p><p>Enabling syntax highlighting for a language is as simple as:</p><p><code>pythonyield TextArea(language="python")</code></p><p>Working on the <code>TextArea</code> widget for Textual taught me a lot about Python and my generalapproach to software engineering. It gave me an appreciation for the subtle functionality behindthe editors we use on a daily basis — features we may not even notice, despitesome engineer spending hours perfecting it to provide a small boost to our development experience.</p><p>This post is a tour of some of these learnings.</p>https://textual.textualize.io/blog/2023/09/18/things-i-learned-while-building-textuals-textarea/ Mon, 18 Sep 2023 00:00:00 +0000https://textual.textualize.io/blog/2023/09/18/things-i-learned-while-building-textuals-textarea/Textual 0.37.0 adds a command palettewillmcguganRelease<h1>Textual 0.37.0 adds a command palette</h1><p>Textual version 0.37.0 has landed!The highlight of this release is the new command palette.</p>https://textual.textualize.io/blog/2023/09/15/textual-0370-adds-a-command-palette/ Fri, 15 Sep 2023 00:00:00 +0000https://textual.textualize.io/blog/2023/09/15/textual-0370-adds-a-command-palette/What is Textual Web?willmcguganNews<h1>What is Textual Web?</h1><p>If you know us, you will know that we are the team behind <a href="https://github.com/Textualize/rich">Rich</a> and <a href="https://github.com/Textualize/textual">Textual</a> — two popular Python libraries that work magic in the terminal.</p><p>!!! note</p><pre><code>Not to mention [Rich-CLI](https://github.com/Textualize/rich-cli), [Trogon](https://github.com/Textualize/trogon), and [Frogmouth](https://github.com/Textualize/frogmouth)</code></pre><p>Today we are adding one project more to that lineup: <a href="https://github.com/Textualize/textual-web">textual-web</a>.</p>https://textual.textualize.io/blog/2023/09/06/what-is-textual-web/ Wed, 06 Sep 2023 00:00:00 +0000https://textual.textualize.io/blog/2023/09/06/what-is-textual-web/Pull Requests are cake or puppieswillmcguganDevLog<h1>Pull Requests are cake or puppies</h1><p>Broadly speaking, there are two types of contributions you can make to an Open Source project.</p>https://textual.textualize.io/blog/2023/07/29/pull-requests-are-cake-or-puppies/ Sat, 29 Jul 2023 00:00:00 +0000https://textual.textualize.io/blog/2023/07/29/pull-requests-are-cake-or-puppies/Using Rich Inspect to interrogate Python objectswillmcguganDevLog<h1>Using Rich Inspect to interrogate Python objects</h1><p>The <a href="https://github.com/Textualize/rich">Rich</a> library has a few functions that are admittedly a little out of scope for a terminal color library. One such function is <code>inspect</code> which is so useful you may want to <code>pip install rich</code> just for this feature.</p>https://textual.textualize.io/blog/2023/07/27/using-rich-inspect-to-interrogate-python-objects/ Thu, 27 Jul 2023 00:00:00 +0000https://textual.textualize.io/blog/2023/07/27/using-rich-inspect-to-interrogate-python-objects/Textual 0.30.0 adds desktop-style notificationswillmcguganRelease<h1>Textual 0.30.0 adds desktop-style notifications</h1><p>We have a new release of Textual to talk about, but before that I'd like to cover a little Textual news.</p>https://textual.textualize.io/blog/2023/07/17/textual-0300-adds-desktop-style-notifications/ Mon, 17 Jul 2023 00:00:00 +0000https://textual.textualize.io/blog/2023/07/17/textual-0300-adds-desktop-style-notifications/Textual 0.29.0 refactors dev toolswillmcguganRelease<h1>Textual 0.29.0 refactors dev tools</h1><p>It's been a slow week or two at Textualize, with Textual devs taking well-earned annual leave, but we still managed to get a new version out.</p>https://textual.textualize.io/blog/2023/07/03/textual-0290-refactors-dev-tools/ Mon, 03 Jul 2023 00:00:00 +0000https://textual.textualize.io/blog/2023/07/03/textual-0290-refactors-dev-tools/To TUI or not to TUIwillmcguganDevLog<h1>To TUI or not to TUI</h1><p>Tech moves pretty fast.If you don’t stop and look around once in a while, you could miss it.And yet some technology feels like it has been around forever.</p><p>Terminals are one of those forever-technologies.</p>https://textual.textualize.io/blog/2023/06/06/to-tui-or-not-to-tui/ Tue, 06 Jun 2023 00:00:00 +0000https://textual.textualize.io/blog/2023/06/06/to-tui-or-not-to-tui/Textual adds Sparklines, Selection list, Input validation, and tool tipswillmcguganRelease<h1>Textual adds Sparklines, Selection list, Input validation, and tool tips</h1><p>It's been 12 days since the last Textual release, which is longer than our usual release cycle of a week.</p><p>We've been a little distracted with our "dogfood" projects: <a href="https://github.com/Textualize/frogmouth">Frogmouth</a> and <a href="https://github.com/Textualize/trogon">Trogon</a>. Both of which hit 1000 Github stars in 24 hours. We will be maintaining / updating those, but it is business as usual for this Textual release (and it's a big one). We have such sights to show you.</p>https://textual.textualize.io/blog/2023/06/01/textual-adds-sparklines-selection-list-input-validation-and-tool-tips/ Thu, 01 Jun 2023 00:00:00 +0000https://textual.textualize.io/blog/2023/06/01/textual-adds-sparklines-selection-list-input-validation-and-tool-tips/Textual 0.24.0 adds a Select controlwillmcguganRelease<h1>Textual 0.24.0 adds a Select control</h1><p>Coming just 5 days after the last release, we have version 0.24.0 which we are crowning the King of Textual releases.At least until it is deposed by version 0.25.0.</p>https://textual.textualize.io/blog/2023/05/08/textual-0240-adds-a-select-control/ Mon, 08 May 2023 00:00:00 +0000https://textual.textualize.io/blog/2023/05/08/textual-0240-adds-a-select-control/Textual 0.23.0 improves message handlingwillmcguganRelease<h1>Textual 0.23.0 improves message handling</h1><p>It's been a busy couple of weeks at Textualize.We've been building apps with <a href="https://github.com/Textualize/textual">Textual</a>, as part of our <em>dog-fooding</em> week.The first app, <a href="https://github.com/Textualize/frogmouth">Frogmouth</a>, was released at the weekend and already has 1K GitHub stars!Expect two more such apps this month.</p>https://textual.textualize.io/blog/2023/05/03/textual-0230-improves-message-handling/ Wed, 03 May 2023 00:00:00 +0000https://textual.textualize.io/blog/2023/05/03/textual-0230-improves-message-handling/Textual 0.18.0 adds API for managing concurrent workerswillmcguganRelease<h1>Textual 0.18.0 adds API for managing concurrent workers</h1><p>Less than a week since the last release, and we have a new API to show you.</p>https://textual.textualize.io/blog/2023/04/04/textual-0180-adds-api-for-managing-concurrent-workers/ Tue, 04 Apr 2023 00:00:00 +0000https://textual.textualize.io/blog/2023/04/04/textual-0180-adds-api-for-managing-concurrent-workers/Textual 0.17.0 adds translucent screens and Option ListwillmcguganRelease<h1>Textual 0.17.0 adds translucent screens and Option List</h1><p>This is a surprisingly large release, given it has been just 7 days since the last version (and we were down a developer for most of that time).</p><p>What's new in this release?</p>https://textual.textualize.io/blog/2023/03/29/textual-0170-adds-translucent-screens-and-option-list/ Wed, 29 Mar 2023 00:00:00 +0000https://textual.textualize.io/blog/2023/03/29/textual-0170-adds-translucent-screens-and-option-list/Textual 0.16.0 adds TabbedContent and border titleswillmcguganRelease<h1>Textual 0.16.0 adds TabbedContent and border titles</h1><p>Textual 0.16.0 lands 9 days after the previous release. We have some new features to show you.</p>https://textual.textualize.io/blog/2023/03/22/textual-0160-adds-tabbedcontent-and-border-titles/ Wed, 22 Mar 2023 00:00:00 +0000https://textual.textualize.io/blog/2023/03/22/textual-0160-adds-tabbedcontent-and-border-titles/No-async async with PythonwillmcguganDevLog<h1>No-async async with Python</h1><p>A (reasonable) criticism of async is that it tends to proliferate in your code. In order to <code>await</code> something, your functions must be <code>async</code> all the way up the call-stack. This tends to result in you making things <code>async</code> just to support that one call that needs it or, worse, adding <code>async</code> just-in-case. Given that going from <code>def</code> to <code>async def</code> is a breaking change there is a strong incentive to go straight there.</p><p>Before you know it, you have adopted a policy of "async all the things".</p>https://textual.textualize.io/blog/2023/03/15/no-async-async-with-python/ Wed, 15 Mar 2023 00:00:00 +0000https://textual.textualize.io/blog/2023/03/15/no-async-async-with-python/
\ No newline at end of file
diff --git a/feed_rss_updated.xml b/feed_rss_updated.xml
index c4ececdb3d..6245c2dbd9 100644
--- a/feed_rss_updated.xml
+++ b/feed_rss_updated.xml
@@ -1 +1 @@
-Textualhttps://textual.textualize.io/https://github.com/textualize/textual/enSun, 21 Apr 2024 12:21:59 -0000Sun, 21 Apr 2024 12:21:59 -00001440MkDocs RSS plugin - v1.12.1Behind the Curtain of Inline Terminal ApplicationswillmcguganDevLog<h1>Behind the Curtain of Inline Terminal Applications</h1><p>Textual recently added the ability to run <em>inline</em> terminal apps.You can see this in action if you run the <a href="https://github.com/Textualize/textual/blob/main/examples/calculator.py">calculator example</a>:</p><p><img alt="Inline Calculator" src="../images/calcinline.png"></p><p>The application appears directly under the prompt, rather than occupying the full height of the screen—which is more typical of TUI applications.You can interact with this calculator using keys <em>or</em> the mouse.When you press ++ctrl+c++ the calculator disappears and returns you to the prompt.</p><p>Here's another app that creates an inline code editor:</p><p>=== "Video"</p><pre><code><div class="video-wrapper"> <iframe width="852" height="525" src="https://www.youtube.com/embed/Dt70oSID1DY" title="Inline app" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe></div></code></pre><p>=== "inline.py" ```python from textual.app import App, ComposeResult from textual.widgets import TextArea</p><pre><code>class InlineApp(App): CSS = """ TextArea { height: auto; max-height: 50vh; } """ def compose(self) -> ComposeResult: yield TextArea(language="python")if __name__ == "__main__": InlineApp().run(inline=True)```</code></pre><p>This post will cover some of what goes on under the hood to make such inline apps work.</p><p>It's not going to go in to too much detail.I'm assuming most readers will be more interested in a birds-eye view rather than all the gory details.</p>https://textual.textualize.io/blog/2024/04/20/behind-the-curtain-of-inline-terminal-applications/ Sun, 21 Apr 2024 13:21:53 +0000https://textual.textualize.io/blog/2024/04/20/behind-the-curtain-of-inline-terminal-applications/File magic with the Python standard librarywillmcguganDevLog<h1>File magic with the Python standard library</h1><p>I recently published <a href="https://github.com/textualize/toolong">Toolong</a>, an app for viewing log files.There were some interesting technical challenges in building Toolong that I'd like to cover in this post.</p>https://textual.textualize.io/blog/2024/02/11/file-magic-with-the-python-standard-library/ Sun, 03 Mar 2024 13:32:04 +0000https://textual.textualize.io/blog/2024/02/11/file-magic-with-the-python-standard-library/Remote memory profiling with MemraywillmcguganDevLog<h1>Remote memory profiling with Memray</h1><p><a href="https://github.com/bloomberg/memray">Memray</a> is a memory profiler for Python, built by some very smart devs at Bloomberg.It is a fantastic tool to identify memory leaks in your code or other libraries (down to the C level)!</p><p>They recently added a <a href="https://github.com/textualize/textual/">Textual</a> interface which looks amazing, and lets you monitor your process right from the terminal:</p><p><img alt="Memray" src="https://raw.githubusercontent.com/bloomberg/memray/main/docs/_static/images/live_animated.webp"></p>https://textual.textualize.io/blog/2024/02/20/remote-memory-profiling-with-memray/ Tue, 20 Feb 2024 15:54:07 +0000https://textual.textualize.io/blog/2024/02/20/remote-memory-profiling-with-memray/Announcing textual-plotextdavepDevLog<h1>Announcing textual-plotext</h1><p>It's no surprise that a common question on the <a href="https://discord.gg/Enf6Z3qhVr">Textual Discordserver</a> is how to go about producing plots inthe terminal. A popular solution that has been suggested is<a href="https://github.com/piccolomo/plotext">Plotext</a>. While Plotext doesn'tdirectly support Textual, it is <a href="https://github.com/piccolomo/plotext/blob/master/readme/environments.md#rich">easy to use withRich</a>and, because of this, we wanted to make it just as easy to use in yourTextual applications.</p>https://textual.textualize.io/blog/2023/10/04/announcing-textual-plotext/ Sat, 07 Oct 2023 13:42:11 +0000https://textual.textualize.io/blog/2023/10/04/announcing-textual-plotext/Things I learned while building Textual's TextAreadarrenburnsDevLog<h1>Things I learned building a text editor for the terminal</h1><p><code>TextArea</code> is the latest widget to be added to Textual's <a href="https://textual.textualize.io/widget_gallery/">growing collection</a>.It provides a multi-line space to edit text, and features optional syntax highlighting for a selection of languages.</p><p><img alt="text-area-welcome.gif" src="../images/text-area-learnings/text-area-welcome.gif"></p><p>Adding a <code>TextArea</code> to your Textual app is as simple as adding this to your <code>compose</code> method:</p><p><code>pythonyield TextArea()</code></p><p>Enabling syntax highlighting for a language is as simple as:</p><p><code>pythonyield TextArea(language="python")</code></p><p>Working on the <code>TextArea</code> widget for Textual taught me a lot about Python and my generalapproach to software engineering. It gave me an appreciation for the subtle functionality behindthe editors we use on a daily basis — features we may not even notice, despitesome engineer spending hours perfecting it to provide a small boost to our development experience.</p><p>This post is a tour of some of these learnings.</p>https://textual.textualize.io/blog/2023/09/18/things-i-learned-while-building-textuals-textarea/ Sat, 23 Sep 2023 14:06:20 +0000https://textual.textualize.io/blog/2023/09/18/things-i-learned-while-building-textuals-textarea/Textual 0.38.0 adds a syntax aware TextAreawillmcguganRelease<h1>Textual 0.38.0 adds a syntax aware TextArea</h1><p>This is the second big feature release this month after last week's <a href="./release0.37.0.md">command palette</a>.</p>https://textual.textualize.io/blog/2023/09/21/textual-0380-adds-a-syntax-aware-textarea/ Thu, 21 Sep 2023 13:27:43 +0000https://textual.textualize.io/blog/2023/09/21/textual-0380-adds-a-syntax-aware-textarea/Textual 0.37.0 adds a command palettewillmcguganRelease<h1>Textual 0.37.0 adds a command palette</h1><p>Textual version 0.37.0 has landed!The highlight of this release is the new command palette.</p>https://textual.textualize.io/blog/2023/09/15/textual-0370-adds-a-command-palette/ Fri, 15 Sep 2023 17:01:09 +0000https://textual.textualize.io/blog/2023/09/15/textual-0370-adds-a-command-palette/What is Textual Web?willmcguganNews<h1>What is Textual Web?</h1><p>If you know us, you will know that we are the team behind <a href="https://github.com/Textualize/rich">Rich</a> and <a href="https://github.com/Textualize/textual">Textual</a> — two popular Python libraries that work magic in the terminal.</p><p>!!! note</p><pre><code>Not to mention [Rich-CLI](https://github.com/Textualize/rich-cli), [Trogon](https://github.com/Textualize/trogon), and [Frogmouth](https://github.com/Textualize/frogmouth)</code></pre><p>Today we are adding one project more to that lineup: <a href="https://github.com/Textualize/textual-web">textual-web</a>.</p>https://textual.textualize.io/blog/2023/09/06/what-is-textual-web/ Wed, 06 Sep 2023 17:53:31 +0000https://textual.textualize.io/blog/2023/09/06/what-is-textual-web/Pull Requests are cake or puppieswillmcguganDevLog<h1>Pull Requests are cake or puppies</h1><p>Broadly speaking, there are two types of contributions you can make to an Open Source project.</p>https://textual.textualize.io/blog/2023/07/29/pull-requests-are-cake-or-puppies/ Sat, 29 Jul 2023 17:05:04 +0000https://textual.textualize.io/blog/2023/07/29/pull-requests-are-cake-or-puppies/Using Rich Inspect to interrogate Python objectswillmcguganDevLog<h1>Using Rich Inspect to interrogate Python objects</h1><p>The <a href="https://github.com/Textualize/rich">Rich</a> library has a few functions that are admittedly a little out of scope for a terminal color library. One such function is <code>inspect</code> which is so useful you may want to <code>pip install rich</code> just for this feature.</p>https://textual.textualize.io/blog/2023/07/27/using-rich-inspect-to-interrogate-python-objects/ Thu, 27 Jul 2023 12:34:46 +0000https://textual.textualize.io/blog/2023/07/27/using-rich-inspect-to-interrogate-python-objects/Textual 0.30.0 adds desktop-style notificationswillmcguganRelease<h1>Textual 0.30.0 adds desktop-style notifications</h1><p>We have a new release of Textual to talk about, but before that I'd like to cover a little Textual news.</p>https://textual.textualize.io/blog/2023/07/17/textual-0300-adds-desktop-style-notifications/ Mon, 17 Jul 2023 14:08:32 +0000https://textual.textualize.io/blog/2023/07/17/textual-0300-adds-desktop-style-notifications/Textual 0.29.0 refactors dev toolswillmcguganRelease<h1>Textual 0.29.0 refactors dev tools</h1><p>It's been a slow week or two at Textualize, with Textual devs taking well-earned annual leave, but we still managed to get a new version out.</p>https://textual.textualize.io/blog/2023/07/03/textual-0290-refactors-dev-tools/ Mon, 03 Jul 2023 16:09:24 +0000https://textual.textualize.io/blog/2023/07/03/textual-0290-refactors-dev-tools/To TUI or not to TUIwillmcguganDevLog<h1>To TUI or not to TUI</h1><p>Tech moves pretty fast.If you don’t stop and look around once in a while, you could miss it.And yet some technology feels like it has been around forever.</p><p>Terminals are one of those forever-technologies.</p>https://textual.textualize.io/blog/2023/06/06/to-tui-or-not-to-tui/ Mon, 05 Jun 2023 17:51:19 +0000https://textual.textualize.io/blog/2023/06/06/to-tui-or-not-to-tui/Textual adds Sparklines, Selection list, Input validation, and tool tipswillmcguganRelease<h1>Textual adds Sparklines, Selection list, Input validation, and tool tips</h1><p>It's been 12 days since the last Textual release, which is longer than our usual release cycle of a week.</p><p>We've been a little distracted with our "dogfood" projects: <a href="https://github.com/Textualize/frogmouth">Frogmouth</a> and <a href="https://github.com/Textualize/trogon">Trogon</a>. Both of which hit 1000 Github stars in 24 hours. We will be maintaining / updating those, but it is business as usual for this Textual release (and it's a big one). We have such sights to show you.</p>https://textual.textualize.io/blog/2023/06/01/textual-adds-sparklines-selection-list-input-validation-and-tool-tips/ Thu, 01 Jun 2023 17:41:08 +0000https://textual.textualize.io/blog/2023/06/01/textual-adds-sparklines-selection-list-input-validation-and-tool-tips/Textual 0.24.0 adds a Select controlwillmcguganRelease<h1>Textual 0.24.0 adds a Select control</h1><p>Coming just 5 days after the last release, we have version 0.24.0 which we are crowning the King of Textual releases.At least until it is deposed by version 0.25.0.</p>https://textual.textualize.io/blog/2023/05/08/textual-0240-adds-a-select-control/ Thu, 01 Jun 2023 11:33:54 +0000https://textual.textualize.io/blog/2023/05/08/textual-0240-adds-a-select-control/Textual 0.23.0 improves message handlingwillmcguganRelease<h1>Textual 0.23.0 improves message handling</h1><p>It's been a busy couple of weeks at Textualize.We've been building apps with <a href="https://github.com/Textualize/textual">Textual</a>, as part of our <em>dog-fooding</em> week.The first app, <a href="https://github.com/Textualize/frogmouth">Frogmouth</a>, was released at the weekend and already has 1K GitHub stars!Expect two more such apps this month.</p>https://textual.textualize.io/blog/2023/05/03/textual-0230-improves-message-handling/ Wed, 03 May 2023 13:22:22 +0000https://textual.textualize.io/blog/2023/05/03/textual-0230-improves-message-handling/Textual 0.11.0 adds a beautiful Markdown widgetwillmcguganRelease<h1>Textual 0.11.0 adds a beautiful Markdown widget</h1><p>We released Textual 0.10.0 25 days ago, which is a little longer than our usual release cycle. What have we been up to?</p>https://textual.textualize.io/blog/2023/02/15/textual-0110-adds-a-beautiful-markdown-widget/ Sat, 08 Apr 2023 15:35:49 +0000https://textual.textualize.io/blog/2023/02/15/textual-0110-adds-a-beautiful-markdown-widget/Textual 0.18.0 adds API for managing concurrent workerswillmcguganRelease<h1>Textual 0.18.0 adds API for managing concurrent workers</h1><p>Less than a week since the last release, and we have a new API to show you.</p>https://textual.textualize.io/blog/2023/04/04/textual-0180-adds-api-for-managing-concurrent-workers/ Tue, 04 Apr 2023 13:12:51 +0000https://textual.textualize.io/blog/2023/04/04/textual-0180-adds-api-for-managing-concurrent-workers/Textual 0.17.0 adds translucent screens and Option ListwillmcguganRelease<h1>Textual 0.17.0 adds translucent screens and Option List</h1><p>This is a surprisingly large release, given it has been just 7 days since the last version (and we were down a developer for most of that time).</p><p>What's new in this release?</p>https://textual.textualize.io/blog/2023/03/29/textual-0170-adds-translucent-screens-and-option-list/ Wed, 29 Mar 2023 16:29:28 +0000https://textual.textualize.io/blog/2023/03/29/textual-0170-adds-translucent-screens-and-option-list/Textual 0.16.0 adds TabbedContent and border titleswillmcguganRelease<h1>Textual 0.16.0 adds TabbedContent and border titles</h1><p>Textual 0.16.0 lands 9 days after the previous release. We have some new features to show you.</p>https://textual.textualize.io/blog/2023/03/22/textual-0160-adds-tabbedcontent-and-border-titles/ Wed, 22 Mar 2023 13:52:31 +0000https://textual.textualize.io/blog/2023/03/22/textual-0160-adds-tabbedcontent-and-border-titles/
\ No newline at end of file
+Textualhttps://textual.textualize.io/https://github.com/textualize/textual/enSat, 11 May 2024 11:09:05 -0000Sat, 11 May 2024 11:09:05 -00001440MkDocs RSS plugin - v1.12.1Behind the Curtain of Inline Terminal ApplicationswillmcguganDevLog<h1>Behind the Curtain of Inline Terminal Applications</h1><p>Textual recently added the ability to run <em>inline</em> terminal apps.You can see this in action if you run the <a href="https://github.com/Textualize/textual/blob/main/examples/calculator.py">calculator example</a>:</p><p><img alt="Inline Calculator" src="../images/calcinline.png"></p><p>The application appears directly under the prompt, rather than occupying the full height of the screen—which is more typical of TUI applications.You can interact with this calculator using keys <em>or</em> the mouse.When you press ++ctrl+c++ the calculator disappears and returns you to the prompt.</p><p>Here's another app that creates an inline code editor:</p><p>=== "Video"</p><pre><code><div class="video-wrapper"> <iframe width="852" height="525" src="https://www.youtube.com/embed/Dt70oSID1DY" title="Inline app" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe></div></code></pre><p>=== "inline.py" ```python from textual.app import App, ComposeResult from textual.widgets import TextArea</p><pre><code>class InlineApp(App): CSS = """ TextArea { height: auto; max-height: 50vh; } """ def compose(self) -> ComposeResult: yield TextArea(language="python")if __name__ == "__main__": InlineApp().run(inline=True)```</code></pre><p>This post will cover some of what goes on under the hood to make such inline apps work.</p><p>It's not going to go in to too much detail.I'm assuming most readers will be more interested in a birds-eye view rather than all the gory details.</p>https://textual.textualize.io/blog/2024/04/20/behind-the-curtain-of-inline-terminal-applications/ Sun, 21 Apr 2024 13:21:53 +0000https://textual.textualize.io/blog/2024/04/20/behind-the-curtain-of-inline-terminal-applications/File magic with the Python standard librarywillmcguganDevLog<h1>File magic with the Python standard library</h1><p>I recently published <a href="https://github.com/textualize/toolong">Toolong</a>, an app for viewing log files.There were some interesting technical challenges in building Toolong that I'd like to cover in this post.</p>https://textual.textualize.io/blog/2024/02/11/file-magic-with-the-python-standard-library/ Sun, 03 Mar 2024 13:32:04 +0000https://textual.textualize.io/blog/2024/02/11/file-magic-with-the-python-standard-library/Remote memory profiling with MemraywillmcguganDevLog<h1>Remote memory profiling with Memray</h1><p><a href="https://github.com/bloomberg/memray">Memray</a> is a memory profiler for Python, built by some very smart devs at Bloomberg.It is a fantastic tool to identify memory leaks in your code or other libraries (down to the C level)!</p><p>They recently added a <a href="https://github.com/textualize/textual/">Textual</a> interface which looks amazing, and lets you monitor your process right from the terminal:</p><p><img alt="Memray" src="https://raw.githubusercontent.com/bloomberg/memray/main/docs/_static/images/live_animated.webp"></p>https://textual.textualize.io/blog/2024/02/20/remote-memory-profiling-with-memray/ Tue, 20 Feb 2024 15:54:07 +0000https://textual.textualize.io/blog/2024/02/20/remote-memory-profiling-with-memray/Announcing textual-plotextdavepDevLog<h1>Announcing textual-plotext</h1><p>It's no surprise that a common question on the <a href="https://discord.gg/Enf6Z3qhVr">Textual Discordserver</a> is how to go about producing plots inthe terminal. A popular solution that has been suggested is<a href="https://github.com/piccolomo/plotext">Plotext</a>. While Plotext doesn'tdirectly support Textual, it is <a href="https://github.com/piccolomo/plotext/blob/master/readme/environments.md#rich">easy to use withRich</a>and, because of this, we wanted to make it just as easy to use in yourTextual applications.</p>https://textual.textualize.io/blog/2023/10/04/announcing-textual-plotext/ Sat, 07 Oct 2023 13:42:11 +0000https://textual.textualize.io/blog/2023/10/04/announcing-textual-plotext/Things I learned while building Textual's TextAreadarrenburnsDevLog<h1>Things I learned building a text editor for the terminal</h1><p><code>TextArea</code> is the latest widget to be added to Textual's <a href="https://textual.textualize.io/widget_gallery/">growing collection</a>.It provides a multi-line space to edit text, and features optional syntax highlighting for a selection of languages.</p><p><img alt="text-area-welcome.gif" src="../images/text-area-learnings/text-area-welcome.gif"></p><p>Adding a <code>TextArea</code> to your Textual app is as simple as adding this to your <code>compose</code> method:</p><p><code>pythonyield TextArea()</code></p><p>Enabling syntax highlighting for a language is as simple as:</p><p><code>pythonyield TextArea(language="python")</code></p><p>Working on the <code>TextArea</code> widget for Textual taught me a lot about Python and my generalapproach to software engineering. It gave me an appreciation for the subtle functionality behindthe editors we use on a daily basis — features we may not even notice, despitesome engineer spending hours perfecting it to provide a small boost to our development experience.</p><p>This post is a tour of some of these learnings.</p>https://textual.textualize.io/blog/2023/09/18/things-i-learned-while-building-textuals-textarea/ Sat, 23 Sep 2023 14:06:20 +0000https://textual.textualize.io/blog/2023/09/18/things-i-learned-while-building-textuals-textarea/Textual 0.38.0 adds a syntax aware TextAreawillmcguganRelease<h1>Textual 0.38.0 adds a syntax aware TextArea</h1><p>This is the second big feature release this month after last week's <a href="./release0.37.0.md">command palette</a>.</p>https://textual.textualize.io/blog/2023/09/21/textual-0380-adds-a-syntax-aware-textarea/ Thu, 21 Sep 2023 13:27:43 +0000https://textual.textualize.io/blog/2023/09/21/textual-0380-adds-a-syntax-aware-textarea/Textual 0.37.0 adds a command palettewillmcguganRelease<h1>Textual 0.37.0 adds a command palette</h1><p>Textual version 0.37.0 has landed!The highlight of this release is the new command palette.</p>https://textual.textualize.io/blog/2023/09/15/textual-0370-adds-a-command-palette/ Fri, 15 Sep 2023 17:01:09 +0000https://textual.textualize.io/blog/2023/09/15/textual-0370-adds-a-command-palette/What is Textual Web?willmcguganNews<h1>What is Textual Web?</h1><p>If you know us, you will know that we are the team behind <a href="https://github.com/Textualize/rich">Rich</a> and <a href="https://github.com/Textualize/textual">Textual</a> — two popular Python libraries that work magic in the terminal.</p><p>!!! note</p><pre><code>Not to mention [Rich-CLI](https://github.com/Textualize/rich-cli), [Trogon](https://github.com/Textualize/trogon), and [Frogmouth](https://github.com/Textualize/frogmouth)</code></pre><p>Today we are adding one project more to that lineup: <a href="https://github.com/Textualize/textual-web">textual-web</a>.</p>https://textual.textualize.io/blog/2023/09/06/what-is-textual-web/ Wed, 06 Sep 2023 17:53:31 +0000https://textual.textualize.io/blog/2023/09/06/what-is-textual-web/Pull Requests are cake or puppieswillmcguganDevLog<h1>Pull Requests are cake or puppies</h1><p>Broadly speaking, there are two types of contributions you can make to an Open Source project.</p>https://textual.textualize.io/blog/2023/07/29/pull-requests-are-cake-or-puppies/ Sat, 29 Jul 2023 17:05:04 +0000https://textual.textualize.io/blog/2023/07/29/pull-requests-are-cake-or-puppies/Using Rich Inspect to interrogate Python objectswillmcguganDevLog<h1>Using Rich Inspect to interrogate Python objects</h1><p>The <a href="https://github.com/Textualize/rich">Rich</a> library has a few functions that are admittedly a little out of scope for a terminal color library. One such function is <code>inspect</code> which is so useful you may want to <code>pip install rich</code> just for this feature.</p>https://textual.textualize.io/blog/2023/07/27/using-rich-inspect-to-interrogate-python-objects/ Thu, 27 Jul 2023 12:34:46 +0000https://textual.textualize.io/blog/2023/07/27/using-rich-inspect-to-interrogate-python-objects/Textual 0.30.0 adds desktop-style notificationswillmcguganRelease<h1>Textual 0.30.0 adds desktop-style notifications</h1><p>We have a new release of Textual to talk about, but before that I'd like to cover a little Textual news.</p>https://textual.textualize.io/blog/2023/07/17/textual-0300-adds-desktop-style-notifications/ Mon, 17 Jul 2023 14:08:32 +0000https://textual.textualize.io/blog/2023/07/17/textual-0300-adds-desktop-style-notifications/Textual 0.29.0 refactors dev toolswillmcguganRelease<h1>Textual 0.29.0 refactors dev tools</h1><p>It's been a slow week or two at Textualize, with Textual devs taking well-earned annual leave, but we still managed to get a new version out.</p>https://textual.textualize.io/blog/2023/07/03/textual-0290-refactors-dev-tools/ Mon, 03 Jul 2023 16:09:24 +0000https://textual.textualize.io/blog/2023/07/03/textual-0290-refactors-dev-tools/To TUI or not to TUIwillmcguganDevLog<h1>To TUI or not to TUI</h1><p>Tech moves pretty fast.If you don’t stop and look around once in a while, you could miss it.And yet some technology feels like it has been around forever.</p><p>Terminals are one of those forever-technologies.</p>https://textual.textualize.io/blog/2023/06/06/to-tui-or-not-to-tui/ Mon, 05 Jun 2023 17:51:19 +0000https://textual.textualize.io/blog/2023/06/06/to-tui-or-not-to-tui/Textual adds Sparklines, Selection list, Input validation, and tool tipswillmcguganRelease<h1>Textual adds Sparklines, Selection list, Input validation, and tool tips</h1><p>It's been 12 days since the last Textual release, which is longer than our usual release cycle of a week.</p><p>We've been a little distracted with our "dogfood" projects: <a href="https://github.com/Textualize/frogmouth">Frogmouth</a> and <a href="https://github.com/Textualize/trogon">Trogon</a>. Both of which hit 1000 Github stars in 24 hours. We will be maintaining / updating those, but it is business as usual for this Textual release (and it's a big one). We have such sights to show you.</p>https://textual.textualize.io/blog/2023/06/01/textual-adds-sparklines-selection-list-input-validation-and-tool-tips/ Thu, 01 Jun 2023 17:41:08 +0000https://textual.textualize.io/blog/2023/06/01/textual-adds-sparklines-selection-list-input-validation-and-tool-tips/Textual 0.24.0 adds a Select controlwillmcguganRelease<h1>Textual 0.24.0 adds a Select control</h1><p>Coming just 5 days after the last release, we have version 0.24.0 which we are crowning the King of Textual releases.At least until it is deposed by version 0.25.0.</p>https://textual.textualize.io/blog/2023/05/08/textual-0240-adds-a-select-control/ Thu, 01 Jun 2023 11:33:54 +0000https://textual.textualize.io/blog/2023/05/08/textual-0240-adds-a-select-control/Textual 0.23.0 improves message handlingwillmcguganRelease<h1>Textual 0.23.0 improves message handling</h1><p>It's been a busy couple of weeks at Textualize.We've been building apps with <a href="https://github.com/Textualize/textual">Textual</a>, as part of our <em>dog-fooding</em> week.The first app, <a href="https://github.com/Textualize/frogmouth">Frogmouth</a>, was released at the weekend and already has 1K GitHub stars!Expect two more such apps this month.</p>https://textual.textualize.io/blog/2023/05/03/textual-0230-improves-message-handling/ Wed, 03 May 2023 13:22:22 +0000https://textual.textualize.io/blog/2023/05/03/textual-0230-improves-message-handling/Textual 0.11.0 adds a beautiful Markdown widgetwillmcguganRelease<h1>Textual 0.11.0 adds a beautiful Markdown widget</h1><p>We released Textual 0.10.0 25 days ago, which is a little longer than our usual release cycle. What have we been up to?</p>https://textual.textualize.io/blog/2023/02/15/textual-0110-adds-a-beautiful-markdown-widget/ Sat, 08 Apr 2023 15:35:49 +0000https://textual.textualize.io/blog/2023/02/15/textual-0110-adds-a-beautiful-markdown-widget/Textual 0.18.0 adds API for managing concurrent workerswillmcguganRelease<h1>Textual 0.18.0 adds API for managing concurrent workers</h1><p>Less than a week since the last release, and we have a new API to show you.</p>https://textual.textualize.io/blog/2023/04/04/textual-0180-adds-api-for-managing-concurrent-workers/ Tue, 04 Apr 2023 13:12:51 +0000https://textual.textualize.io/blog/2023/04/04/textual-0180-adds-api-for-managing-concurrent-workers/Textual 0.17.0 adds translucent screens and Option ListwillmcguganRelease<h1>Textual 0.17.0 adds translucent screens and Option List</h1><p>This is a surprisingly large release, given it has been just 7 days since the last version (and we were down a developer for most of that time).</p><p>What's new in this release?</p>https://textual.textualize.io/blog/2023/03/29/textual-0170-adds-translucent-screens-and-option-list/ Wed, 29 Mar 2023 16:29:28 +0000https://textual.textualize.io/blog/2023/03/29/textual-0170-adds-translucent-screens-and-option-list/Textual 0.16.0 adds TabbedContent and border titleswillmcguganRelease<h1>Textual 0.16.0 adds TabbedContent and border titles</h1><p>Textual 0.16.0 lands 9 days after the previous release. We have some new features to show you.</p>https://textual.textualize.io/blog/2023/03/22/textual-0160-adds-tabbedcontent-and-border-titles/ Wed, 22 Mar 2023 13:52:31 +0000https://textual.textualize.io/blog/2023/03/22/textual-0160-adds-tabbedcontent-and-border-titles/
\ No newline at end of file
diff --git a/guide/app/index.html b/guide/app/index.html
index 2606acb19d..df408c0d31 100644
--- a/guide/app/index.html
+++ b/guide/app/index.html
@@ -6965,6 +6965,10 @@
Textual has an event system you can use to respond to key presses, mouse actions, and internal state changes. Event handlers are methods prefixed with on_ followed by the name of the event.
One such event is the mount event which is sent to an application after it enters application mode. You can respond to this event by defining a method called on_mount.
The query_one method gets a single widget in an app or other widget. If you call it with a selector it will return the first matching widget.
-
Let's say we have a widget with an ID of send and we want to get a reference to it in our app. We could do this with the following:
+
The query_one method is used to retrieve a single widget that matches a selector or a type.
+
Let's say we have a widget with an ID of send and we want to get a reference to it in our app.
+We could do this with the following line of code:
send_button=self.query_one("#send")
-
If there is no widget with an ID of send, Textual will raise a NoMatches exception. Otherwise it will return the matched widget.
-
You can also add a second parameter for the expected type.
+
This will retrieve a widget with an ID of send, if there is exactly one.
+If there are no matching widgets, Textual will raise a NoMatches exception.
+If there is more than one match, Textual will raise a TooManyMatches exception.
+
You can also add a second parameter for the expected type, which will ensure that you get the type you are expecting.
send_button=self.query_one("#send",Button)
If the matched widget is not a button (i.e. if isinstance(widget, Button) equals False), Textual will raise a WrongType exception.
Apps and widgets have a query method which finds (or queries) widgets. This method returns a DOMQuery object which is a list-like container of widgets.
+
Apps and widgets also have a query method which finds (or queries) widgets. This method returns a DOMQuery object which is a list-like container of widgets.
If you call query with no arguments, you will get back a DOMQuery containing all widgets. This method is recursive, meaning it will also return child widgets (as many levels as required).
Here's how you might iterate over all the widgets in your app:
-
forwidgetinself.query():
-print(widget)
+
forwidgetinself.query():
+print(widget)
Called on the app, this will retrieve all widgets in the app. If you call the same method on a widget, it will return the children of that widget.
You can call query with a CSS selector. Let's look a few examples:
If we want to find all the button widgets, we could do something like the following:
-
forbuttoninself.query("Button"):
-print(button)
+
forbuttoninself.query("Button"):
+print(button)
Any selector that works in CSS will work with the query method. For instance, if we want to find all the disabled buttons in a Dialog widget, we could do this:
Query objects have a results method which is an alternative way of iterating over widgets. If you supply a type (i.e. a Widget class) then this method will generate only objects of that type.
The following example queries for widgets with the disabled CSS class and iterates over just the Button objects.
The first and last methods return the first or last matching widget from the selector, respectively.
Here's how we might find the last button in an app:
-
last_button=self.query("Button").last()
+
last_button=self.query("Button").last()
If there are no buttons, Textual will raise a NoMatches exception. Otherwise it will return a button widget.
Both first() and last() accept an expect_type argument that should be the class of the widget you are expecting. Let's say we want to get the last widget with class .disabled, and we want to check it really is a button. We could do this:
The query selects all widgets with a disabled CSS class. The last method gets the last disabled widget and checks it is a Button and not any other kind of widget.
If the last widget is not a button, Textual will raise a WrongType exception.
Query objects have a filter method which further refines a query. This method will return a new query object with widgets that match both the original query and the new selector.
Let's say we have a query which gets all the buttons in an app, and we want a new query object with just the disabled buttons. We could write something like this:
-
# Get all the Buttons
-buttons_query=self.query("Button")
-# Buttons with 'disabled' CSS class
-disabled_buttons=buttons_query.filter(".disabled")
+
# Get all the Buttons
+buttons_query=self.query("Button")
+# Buttons with 'disabled' CSS class
+disabled_buttons=buttons_query.filter(".disabled")
Iterating over disabled_buttons will give us all the disabled buttons.
Query objects have an exclude method which is the logical opposite of filter. The exclude method removes any widgets from the query object which match a selector.
Here's how we could get all the buttons which don't have the disabled class set.
-
# Get all the Buttons
-buttons_query=self.query("Button")
-# Remove all the Buttons with the 'disabled' CSS class
-enabled_buttons=buttons_query.exclude(".disabled")
+
# Get all the Buttons
+buttons_query=self.query("Button")
+# Remove all the Buttons with the 'disabled' CSS class
+enabled_buttons=buttons_query.exclude(".disabled")
Once you have a query object, you can loop over it to call methods on the matched widgets. Query objects also support a number of methods which make an update to every matched widget without an explicit loop.
For instance, let's say we want to disable all buttons in an app. We could do this by calling add_class() on a query object.
Managing this concurrency is a tricky topic, in any language or framework.
Even for experienced developers, there are gotchas which could make your app lock up or behave oddly.
Textual's Worker API makes concurrency far less error prone and easier to reason about.