Release Notes
Added
- A note's body takes the line keys every one-line field has.
Ctrl+E
goes to the end of the line, andCtrl+U,Ctrl+KandCtrl+Wdelete to
its start, to its end and the word before the cursor. They did nothing in
the body, though the title above it has always had them. Each acts on the
cursor's line and never takes a line break. A selection is let go first
rather than deleted, and the key acts from the cursor, the selection's
moving end.Ctrl+Astill selects the whole body, and still goes to the
start of a one-line field. The README is where the four are listed: the
?overlay cannot open while a note is being edited, since?is typed
into it.
Fixed
- The key map's explanations arrive whole. At its widest the dialog gave
them 34 cells and nineteen were longer, so they ended in…on every
screen. It now grows to 100 columns, and the six longest — four of arrange
mode's and the task list's two priority keys — are reworded to fit. - An empty panel offers the key you gave it. The task, notes, markets and
agenda panels' empty states, and the watch log's line about where calendar
entries come from, named the default key whatever[<widget>.keys]said.
They name the key the panel reads now, and leave the offer out when the
action is unbound. - An empty markets, notes or task panel says its whole hint. The markets
and notes hints went to the terminal at full length, so at the width the
shipped layout gives the markets panel the hint stopped just after the key
it names, and a notes search that matched nothing said "Nothing matches
this search. Esc to clea" in a pane 40 columns wide, with nothing to say
the rest was gone; the task list's was cut to one row with an…, so a
narrow panel lost the key it names over rows left blank. All three wrap
into the rows the panel has now, and end in…only where those run out.
With no search and no failed save, an empty notes panel gives its sentence
every row above the status line, rather than the half under a blank list
and a row sayingno notes, and an empty task list gives it the row that
said the sort order of nothing; an empty markets board writes in the row
its header would take and may grow as tall as the hint needs. - Wrapped text no longer leaves a gap where a row breaks. A note, a
headline or a task's notes carried spaces at a break over to the next row:
the one after a word exactly as wide as its row, and the second of two
after a full stop wherever the row broke between them. The row they were
carried to was indented by a cell or, when the
next word did not fit beside the space, left blank. A no-break space, an
ideographic space or a tab at a break is taken the same way. - An empty watch log says when its explanation has been cut. Its rows ran
off the foot of the panel in silence: at 100x34 the default dashboard's
log stopped mid-sentence at "the day turning, a task", and a log 30 cells
by 10 rows stopped at "Calendar entries come from", before the key that
sentence names. The last row that fits now ends in…. - An external panel's line cut short by the render budget says so. The
host reads only as much of a line as its rows can show, and a line too
dense for that budget, such as one heavy in combining marks, stopped where
the budget did, over rows left blank and with nothing to say the rest was
missing. It now ends in…. Escin the notes search box clears the search. It closed the box and
left the half-typed term filtering the list, where the task filter'sEsc
drops it and the README says both do.- The notes title and search line draw their caret where typing lands.
The caret was drawn after the text wherever the cursor was, so after
Homeor an arrow it sat at the end while typing went in elsewhere. A
title longer than its field lost the caret off the edge, and a search
longer than its line lost it to the…that cut the term. The watchlist's
symbolline had the same fault and has the same fix. - The weather's forecast opens on the hour in progress for the whole of
that hour. Open-Meteo stamps its current conditions every fifteen
minutes, and the table compared that stamp with each hour's to the minute,
so from:15to:59the hour already under way counted as past and the
table began at the next one, beside an observation stampedat 14:15.
It compares to the hour now. - A quote whose day's change cannot be stated is refused rather than
drawn asinf. Numbers too large for the parser were already refused,
but two it accepts can still overflow once subtracted or divided — a price
of1e308against a close of-1e308printed+infin the change column,
and against a close of1e-10printed+inf%. A price that had moved from
a close of zero printed the whole price as the day's change beside
+0.00%, because no percentage can be taken of zero. The row now falls
back as for any failed fetch, to the last good price with its age or to
–, and saysnumbers out of range in the response. - A calendar path naming a pipe, a device or a directory is refused, by
f
and by the reader alike. The 10 MB limit was checked against the size the
file reported before reading, and a pipe reports 0, sofpointed at a FIFO
read it whole. A pipe nobody was writing to was worse: opening one waits for
a writer, so the agenda stopped reading until a restart andreloading…
never went away. Anything but a regular file is now refused before it is
opened, saying what it is —a pipe, not a calendar file— so/dev/zero
is no longer read until memory runs out, ending the
dashboard. The read itself now stops a byte past the limit and says so. - The day's percentage runs the way the day's change does when the
previous close was below zero. A close can be negative — oil futures
settled at −37.63 in April 2020 — and the percentage took the close's sign,
so a rise from −10 to −5 read+5.00beside-50.00%. It is measured
against the close's size now, and reads+50.00%. --migrate-configsees a table header with a comment after it.
[theme] # my coloursis a header to TOML, but the migration reads the
file as text and did not count it as one, so a retired key under it was
neither rewritten nor mentioned in the load error, which pointed at
--print-configrather than at the migration. Comments are now read past
the same way the layout editor reads past them, while a#inside a quoted
name, as in[plugins.config.'chan#1'], is still not taken for one.- Two disks of one size are two rows unless their name says they are one,
or their free space all but matches. The disk panel folded volumes of
one capacity whose free space was within a percent, which is twenty
gigabytes on a 2 TB disk, so two backup disks of one model fifteen
gigabytes apart were one row, named after the first and showing the
second's free space. The percent now holds only for volumes the platform
gives one name, as it does the two halves of a Mac's disk, which drift
apart by hundreds of megabytes while it is written to at full speed.
Volumes named apart, or not named at all, are one row only when their free
space is within a ten-thousandth of the size, never under 128 MiB and never
over a percent. Two disks of one size and one name — both leftUntitled
— whose free space is within a percent are still one row, and so are two
of any names within that tighter line, until enough is written to one of
them to carry it past; nothing a free-space reading reports can tell them
apart. - Hiding the seconds with
shides them from atime_formatthat spells
them with a flag. The zone table found the seconds by searching for
%S, so%H:%M:%-Skept them, under a big clock that had dropped its
own, and%H:%M %%S, which draws16:47 %S, lost itsSand drew
16:47 %. The format is read the waystrftimereads it now, flags,
widths and%%included, and%Xand%rlose their seconds as%T
always did. A fraction of a second goes with them —%f,%N,%.3f—
where it used to stay and draw09:05.123, a minute with a decimal
fraction of one; and a%rtable keeps the wider time column itsPM
needs with the seconds on as well as off. - The zone list draws an identifier whole or not at all. Beside each
city the list drew the zone it writes tozones.toml, at full width, and
on a terminal narrower than about fifty columns the dialog's edge cut it:
Australia/Melbou, which is no zone. The identifiers are now shown on
every row when the longest in the list fits beside the cities, and on
none when it does not — typing narrows the list and can bring them back —
and a city with no room ends in…. - A plugin is told to stop even when it has fallen behind.
shutdown
went into the same 256-message queue as everything else and was dropped
when that was full, so a plugin that had stopped reading was killed at the
end of its grace without the message the protocol promises. It now goes
ahead of everything still in that queue, which is discarded rather than
sent first. Ahellonot yet written still goes before it, and what the
pipe already holds still arrives ahead of it.
Install mirador 1.22.0
Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/jchultarsky/mirador/releases/download/v1.22.0/mirador-installer.sh | shInstall prebuilt binaries via powershell script
powershell -ExecutionPolicy Bypass -c "irm https://github.com/jchultarsky/mirador/releases/download/v1.22.0/mirador-installer.ps1 | iex"Download mirador 1.22.0
| File | Platform | Checksum |
|---|---|---|
| mirador-aarch64-apple-darwin.tar.gz | Apple Silicon macOS | checksum |
| mirador-x86_64-apple-darwin.tar.gz | Intel macOS | checksum |
| mirador-x86_64-pc-windows-msvc.zip | x64 Windows | checksum |
| mirador-aarch64-unknown-linux-gnu.tar.gz | ARM64 Linux | checksum |
| mirador-x86_64-unknown-linux-gnu.tar.gz | x64 Linux | checksum |
Verifying GitHub Artifact Attestations
The artifacts in this release have attestations generated with GitHub Artifact Attestations. These can be verified by using the GitHub CLI:
gh attestation verify <file-path of downloaded artifact> --repo jchultarsky/miradorYou can also download the attestation from GitHub and verify against that directly:
gh attestation verify <file-path of downloaded artifact> --bundle <file-path of downloaded attestation>