diff --git a/CHANGELOG.md b/CHANGELOG.md index c6ac29f..75833c1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -17,6 +17,19 @@ allowed to change behaviour, not just add to it. ## [Unreleased] +## [0.2.7] — 2026-09-07 + +### Changed + +- **MeshTerm moves to Windows Terminal rather than asking to.** It still says so, and + still tells you how to stop it, but it doesn't put the question. The classic console + can't draw a single icon whatever font it's given, so there was only one sensible + answer — and it was being asked of someone who hadn't seen the app yet and had nothing + to judge it by. + + Installing a **font** still asks, because that writes a file to your machine. Moving + window doesn't. Preferences → Display → Console setup stops both. + ## [0.2.6] — 2026-09-07 ### Fixed diff --git a/README.md b/README.md index c4a9a74..afa48fc 100644 --- a/README.md +++ b/README.md @@ -68,14 +68,14 @@ if anything goes wrong at startup the window closes before you can read why. **Windows** — open Windows Terminal or PowerShell, `cd` to your downloads, then: ```powershell -.\meshterm-0.2.6-windows-x64.exe +.\meshterm-0.2.7-windows-x64.exe ``` **macOS and Linux** — open Terminal, `cd` to your downloads, then: ```bash -chmod +x meshterm-0.2.6-* -./meshterm-0.2.6-* +chmod +x meshterm-0.2.7-* +./meshterm-0.2.7-* ``` ### A word about terminals, on Windows @@ -91,20 +91,19 @@ doesn't borrow. It draws what its one font holds and empty boxes for everything no font fixes the icons there: the only two fonts on a Windows machine with emoji in them are proportional, and a console won't take a proportional font. -So when MeshTerm lands in that console it offers to move: **reopen in Windows Terminal**, -one keypress, nothing installed and nothing changed. That's the whole app, exactly as the -screenshots show it. Windows Terminal is already on every Windows 11 machine and is a free -install on Windows 10. +So when MeshTerm lands in that console it just **moves to Windows Terminal** — it says +so, and opens there. Nothing is installed and nothing is changed; it's one window instead +of another, and it's the whole app exactly as the screenshots show it. Windows Terminal is +already on every Windows 11 machine and is a free install on Windows 10. -Stay in the classic console and MeshTerm offers the next best thing instead — the charts -and marks, without the icons. It ships +Where there's no Windows Terminal to move to, MeshTerm offers the next best thing instead +— the charts and marks, without the icons. It ships [Cascadia Mono PL](https://github.com/microsoft/cascadia-code), Microsoft's own console font and one of the very few monospace faces that carries braille at all, and will install it just for you: no administrator rights, nothing downloaded. If you already have Cascadia it simply switches to it. -You can decline both and MeshTerm still runs. Preferences → Display → Console setup is -where you change your mind. +Preferences → Display → Console setup turns all of this off if you'd rather stay put. Rename it to something you don't mind typing and put it somewhere on your `PATH`, and it becomes just `meshterm` from anywhere. @@ -114,7 +113,7 @@ becomes just `meshterm` from anywhere. > project. > > - **macOS**: *"cannot be opened because the developer cannot be verified"*. Clear it with -> `xattr -d com.apple.quarantine meshterm-0.2.6-*` and run it again. +> `xattr -d com.apple.quarantine meshterm-0.2.7-*` and run it again. > - **Windows**: *"Windows protected your PC"*. Click **More info → Run anyway**. > > Every release ships a `SHA256SUMS` file if you'd rather check the download first. @@ -124,10 +123,10 @@ becomes just `meshterm` from anywhere. > MeshTerm uses that same folder. Set `MESHTERM_HOME` to try one in isolation: > > ```bash -> MESHTERM_HOME=~/meshterm-test ./meshterm-0.2.6-* # macOS, Linux +> MESHTERM_HOME=~/meshterm-test ./meshterm-0.2.7-* # macOS, Linux > ``` > ```powershell -> $env:MESHTERM_HOME = "$HOME\meshterm-test"; .\meshterm-0.2.6-windows-x64.exe +> $env:MESHTERM_HOME = "$HOME\meshterm-test"; .\meshterm-0.2.7-windows-x64.exe > ``` > > Same variable if you run two radios and want them kept apart. diff --git a/meshterm/__init__.py b/meshterm/__init__.py index 0be20b7..14d0179 100644 --- a/meshterm/__init__.py +++ b/meshterm/__init__.py @@ -5,7 +5,7 @@ Supports USB, Bluetooth and TCP companion connection. For Windows, macOS and Lin from datetime import datetime -__version__ = "0.2.6" +__version__ = "0.2.7" __author__ = "Jean-Pierre Martineau" #: The year MeshTerm was first published; the copyright span starts here. diff --git a/meshterm/cli.py b/meshterm/cli.py index 75e67d1..28e0606 100644 --- a/meshterm/cli.py +++ b/meshterm/cli.py @@ -222,16 +222,21 @@ def main_callback( def _offer_a_console_that_can_draw_meshterm(console: Console, prefs: Preferences) -> bool: - """On the classic Windows console, offer the reader something better than it. + """On the classic Windows console, get the reader somewhere better than it. - Two offers, in the order of how much they buy. **Windows Terminal** first, because it - is the only one that gets the whole app: emoji icons included, which no font can put - on the classic console — the only Windows fonts carrying emoji are proportional, and - a console will not take one. Then, for a reader who stays, **a font** that can at - least draw the charts and the marks. + Two remedies, and they are not asked the same way. + + **Windows Terminal** first, and simply done. It is the only thing that gets the whole + app — emoji icons included, which no font can put on that console, the only Windows + fonts carrying any being proportional and a console taking none of them. Moving there + installs nothing and changes nothing, so there is one sensible answer to a question + that would be put to someone who has not seen the app yet and cannot judge it. + + **A font** second, only where the move was not possible, and that one *is* asked — + it writes a file onto someone's machine, which is theirs to agree to. Args: - console: The console to ask on. + console: The console to report and ask on. prefs: The preference set, read for a previous refusal and written on a new one. Returns: @@ -241,24 +246,30 @@ def _offer_a_console_that_can_draw_meshterm(console: Console, prefs: Preferences if not classic_console() or prefs.get("console_setup") == "off": return False - if _offer_windows_terminal(console): + if _move_to_windows_terminal(console): return True _offer_a_font_this_console_can_draw(console, prefs) return False -def _offer_windows_terminal(console: Console) -> bool: - """Offer to reopen the session in Windows Terminal, where the app looks like itself. +def _move_to_windows_terminal(console: Console) -> bool: + """Reopen the session in Windows Terminal, where the app can draw all of itself. - Asked with yes as the default, which is not how the font offer is asked: this one - changes nothing on the machine — no install, no setting, one new window — and it is - the only answer that gets the reader the app as it was drawn. + Done rather than offered. The classic console cannot show a single icon whatever it is + given, so "reopen there?" is a question with one sensible answer, asked of someone who + has not seen the app yet and so cannot judge it — and asked at the worst moment, before + anything has been drawn. Moving costs nothing and changes nothing: no install, no + setting, one window instead of another. + + It is announced rather than silent, and the announcement names the way to stop it, + because a program that opens a window you did not ask for should at least say so. + ``console_setup`` set to ``off`` keeps the session here for good. Args: - console: The console to ask on. + console: The console to report on. Returns: - Whether Windows Terminal was started and this session should stand down. + Whether Windows Terminal took over and this session should stand down. """ from .core import winterminal @@ -266,17 +277,12 @@ def _offer_windows_terminal(console: Console) -> bool: return False console.print() - console.print("[accent]•[/accent] This is the classic Windows console, and it can only") - console.print(" draw part of MeshTerm — no icons, and no charts.") + console.print("[accent]•[/accent] Opening in [accent]Windows Terminal[/accent] — this console") + console.print(" can't draw MeshTerm's icons or charts.") + console.print("[muted] Preferences → Display → Console setup keeps it here instead.[/muted]") console.print() - console.print(" [accent]Windows Terminal[/accent] draws all of it, and you have it.") - console.print(" MeshTerm can reopen itself there now. Nothing is installed") - console.print(" and nothing is changed; it is just a better window.") - console.print() - if not _asks_yes(console, " Reopen in Windows Terminal? [Y/n] ", default=True): - return False + if winterminal.reopen(): - console.print("[ok]✓[/ok] Reopening in Windows Terminal.") get_logger().info("reopened the session in Windows Terminal") return True console.print("[warn]⚠[/warn] Windows Terminal would not start. Staying here.") diff --git a/meshterm/core/preferences.py b/meshterm/core/preferences.py index 7e28b1b..cc71d79 100644 --- a/meshterm/core/preferences.py +++ b/meshterm/core/preferences.py @@ -131,7 +131,7 @@ _WIDTH_CHOICES: dict[str, str] = {"auto": "auto", "yes": "yes", "no": "no"} #: What MeshTerm may offer when it lands in a console that cannot draw it. Only ever #: consulted on the classic Windows console, the one host with no font fallback of its own. _CONSOLE_SETUP_CHOICES: dict[str, str] = { - "ask": "Ask", + "auto": "Automatic", "off": "Leave it alone", } @@ -305,13 +305,15 @@ PREFERENCES: tuple[PrefSpec, ...] = ( PrefSpec( key="console_setup", label="Console setup", - help="Offer a better terminal or font when this console can't draw MeshTerm", + help="Move to a better terminal when this console can't draw MeshTerm", group="Display", value_type="enum", - # "ask", not "always": changing the font of a window someone else opened is not - # ours to do unasked. Declining twice writes "off" here, which is how the offer - # stops being made rather than being made every launch. - default="ask", + # Reopening in Windows Terminal is done, not asked: the classic console cannot + # draw a single icon whatever font it is given, so there is only one sensible + # answer and the reader has not seen the app yet to judge it. Installing a *font* + # still asks, because that writes to their machine. Declining that twice writes + # "off" here, which turns both off for good. + default="auto", choices=_CONSOLE_SETUP_CHOICES, ), # --- Diagnostics ---------------------------------------------------------------