Cover every option in the help, the manual and the readme, and say what to install
An audit rather than a feature, prompted by wanting this fit to hand to somebody else. Five options had no command-line flag written down in the table the manual is generated from -- location, hold, schedules, tile_url and speed_unit -- so five flags that exist were missing from the manual. Four of them did exist under other names and are now recorded; hold had no flag at all and has one. Four switches could be turned off from the command line and not back on: --no-lookup, --no-basemap, --no-airports and --no-labels had no positive halves, so an option turned off in the saved settings could not be turned on again for one run. All four now have both. And adsb, which opens the window and draws a map when it stops, could not be given any of the settings that decide what those look like: no --at, no --radius, no --tiles, no --map-brightness, no --width, --fps, --trail, --fade, --stale, --airports or --labels. It takes all of them now. The manual had no list of the aircraft options at all -- the ADS-B sections were hand-written prose -- so five of them appeared nowhere in it. It now generates an AIRCRAFT OPTIONS section from the same table the menu and the flags come from, and the readme carries a table of all thirty-four with their flags and defaults. Three tests hold the three of them together: one that every option records its flag, one that every flag the table claims actually exists on a command, and one that the readme names them all. The installing instructions now list every dependency rather than only the optional ones: the four Python packages with their names in Debian, Fedora and Arch, and librtlsdr, which is a C library and therefore the one thing pip cannot bring and a virtual environment cannot supply. What reaches a network is written down too -- which host, when, and which file it is cached in -- since somebody installing this on a metered or air-gapped machine has to be able to see that nothing is fetched behind their back. build-repo.sh needs dpkg-dev and apt-utils, which a minimal system does not have, and now says so. Verified rather than asserted: a clean virtual environment, pip install from this tree, and a real log read back through the installed command. It pulls seven wheels rather than the four the page claimed, the other three being what Rich brings with it. Also: matplotlib is gone from the readme's dependency table, nothing having imported it; ffmpeg and Qt are in it, both having been missing; ffmpeg is a Suggests on the package; and resume.sh is ignored. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_016PsWPTweCT6pwxKngvVxcg
This commit is contained in:
parent
6d2436cde1
commit
8ed01f991f
16 changed files with 1012 additions and 46 deletions
|
|
@ -56,6 +56,43 @@ def settings_section() -> list[str]:
|
|||
return out
|
||||
|
||||
|
||||
def aircraft_section() -> list[str]:
|
||||
"""Every ADS-B option, from the same table the menu and flags come from.
|
||||
|
||||
Written out rather than described in prose, so that an option added to
|
||||
the program cannot quietly fail to appear in its manual.
|
||||
"""
|
||||
from bandsaunter import aircraft as air
|
||||
|
||||
out = []
|
||||
defaults = air.AircraftOptions()
|
||||
for group in air.OPTION_GROUPS:
|
||||
out.append(f'.SS {esc(group)}')
|
||||
for o in air.in_group(group):
|
||||
flags = " ".join(o.flags)
|
||||
if o.off_flags:
|
||||
flags += " / " + " ".join(o.off_flags)
|
||||
shown = air.format_option(o, getattr(defaults, o.key))
|
||||
unit = f" ({o.unit})" if o.unit and o.kind != "bool" else ""
|
||||
out.append('.TP')
|
||||
out.append(f'.B {esc(flags) if flags else esc(o.key)}')
|
||||
out.append(f'{esc(o.label)} \\[em] {esc(o.help)}{esc(unit)}.')
|
||||
out.append('.br')
|
||||
out.append(f'Setting name \\fB{esc(o.key)}\\fR, '
|
||||
f'default \\fB{esc(shown) if shown else "blank"}\\fR.')
|
||||
accepts = o.describe_range()
|
||||
if accepts:
|
||||
out.append('.br')
|
||||
out.append(f'Accepts: {esc(accepts)}.')
|
||||
if o.guidance:
|
||||
out.append('.RS')
|
||||
out.append('.PP')
|
||||
out.append(esc(o.guidance))
|
||||
out.append('.RE')
|
||||
out.append('.PP')
|
||||
return out
|
||||
|
||||
|
||||
HEAD = r'''.\" Generated by packaging/make-man.py -- do not edit by hand.
|
||||
.TH BANDSAUNTER 1 "{date}" "bandsaunter {version}" "User Commands"
|
||||
.SH NAME
|
||||
|
|
@ -1044,6 +1081,27 @@ instead goes straight to that option, and part of a name lists everything it
|
|||
could mean; a name that matches exactly wins outright, so "speed" reaches the
|
||||
setting called speed rather than that one and every other whose description
|
||||
mentions the word.
|
||||
.SS The card behind a box
|
||||
.BI \-\-box\-opacity " PERCENT"
|
||||
is how solid the card behind each information box is. The words beside an
|
||||
aircraft are readable over water and not over a city, so a card goes behind
|
||||
them: at nothing they sit straight on the map and at the whole way the map
|
||||
does not show through at all. An indexed picture cannot blend, so in the
|
||||
animation this darkens the ground under the box instead, which leaves the
|
||||
coastline faintly visible through it. The animated pictures had no card at all
|
||||
before, so nothing is what they used to look like.
|
||||
.PP
|
||||
The flag marking the receiver is drawn after everything else on both pictures
|
||||
\[em] after the aircraft, their trails and their boxes \[em] since it says
|
||||
where the receiver is standing and that is the one mark that must not end up
|
||||
behind an aeroplane that happened to fly over it. A vector theme's halo cannot
|
||||
cover it either, a halo only ever going on the ground, the grid and the
|
||||
background.
|
||||
.SH AIRCRAFT OPTIONS
|
||||
Every option the ADS-B side takes, in the six groups the menu shows them in.
|
||||
Each is a flag here and a line in the menu, and both come from one table in
|
||||
the program, so they cannot disagree.
|
||||
.AIRCRAFT_OPTIONS_HERE
|
||||
.SS Range rings
|
||||
.B \-\-rings
|
||||
puts faint discs at a quarter, a half and three quarters of the radius,
|
||||
|
|
@ -1282,6 +1340,8 @@ def main() -> int:
|
|||
out += settings_section()
|
||||
out.append(TAIL)
|
||||
text = "\n".join(out)
|
||||
text = text.replace(".AIRCRAFT_OPTIONS_HERE",
|
||||
"\n".join(aircraft_section()))
|
||||
text = text.replace("\n\n", "\n") # troff dislikes blank lines
|
||||
target = Path(sys.argv[1] if len(sys.argv) > 1
|
||||
else Path(__file__).parent / "bandsaunter.1")
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue