summaryrefslogtreecommitdiff
Commit message (Collapse)AuthorAgeFilesLines
* meta.txt: Declare the imagemagick the favicon rules runEuAndreh7 hours1-1/+1
| | | | | | | | | | | | | | | | mkwbg(1) emits two rules that turn src/content/img/favicon.svg into favicon.ico and favicon.png, and both call convert(1): sh: line 1: convert: command not found make: *** [deps.mk:2037: src/content/favicon.ico] Error 127 The rules are not new --- they were in the tree before the renames, and a build sandbox has never had imagemagick. What changed is that the build now reaches them: it used to stop earlier, on the mkwb that the rename had turned into mkwbg. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_015bWfjj7PP24iF5MqFHmdeC
* mEuAndreh16 hours5-105/+105
|
* Drop gettext from meta.txtEuAndreh26 hours1-1/+1
| | | | | | | | | | Nothing here runs msgfmt, or any other gettext tool: this site has no message catalogue of its own, and the wording tables it does translate are committed. The entry was asking for a package the build never opens. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01BMowJCogxLWcMdVYYhbLpH
* Say in meta.txt what the package actually asks forEuAndreh26 hours1-2/+2
| | | | | | | | | | | | | | | | | | | | Nothing reads this file here --- the site is not in pkgs' repos.txt, so its package is hand-written rather than generated from this --- and it had drifted from that package in both directions. Out: lilypond, for which there is no source (mkdeps.sh says as much: "There is no music yet"); ruby-asciidoctor, which nothing invokes; and tar, which was listed twice, once as a sibling repository and once as a system package. In: eslaides, misct, mktorrent and mkwb, which the site is built with, and ghostscript, gnupg and moreutils, which it runs. It now mirrors the entry in pkgs exactly, so the two can be compared by eye. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01BMowJCogxLWcMdVYYhbLpH
* Translate the content with maritacag rather than po4aEuAndreh26 hours2-5/+7
| | | | | | | | | | | | | | | | | | | | | | ab781e1 moved the manual pages over and left this behind: the i18n target was changed to maritacag(1), but the rule that actually writes the site's translations -- src/i18n.sentinel, emitted by mkdeps.sh -- still shelled out to po4a. So the build kept needing po4a even though nothing else in the fleet did, and the package in pkgs still carried it as an input. --no-update rather than the bare invocation po4a had. Everywhere else in the fleet a build writes translations and never catalogues; "make i18n" is what brings those up to the masters. The old rule did both, which is why the i18n target beside it was a duplicate of it. Byte for byte the same: over a clean checkout, po4a, maritacag and maritacag --no-update each write the identical src/ tree, and none of the three rewrites a catalogue. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01BMowJCogxLWcMdVYYhbLpH
* Spell the attribute names the references useEuAndreh29 hours2-3/+3
| | | | | | | | | | | adoc(5) 8 makes a reference to an unset attribute an error (E4), so three long-standing typos that asciidoctor passed through as literal text now stop the build: "{empy}" for "{empty}", "{ssmpt}" for the declared "{ssmtp}", and a declaration of "app-store-rolllout" that nothing could reference. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_015bWfjj7PP24iF5MqFHmdeC
* Translate the manual pages with maritacag rather than po4aEuAndreh43 hours2-3/+3
| | | | | | | | | | | | | The pages and the catalogues are the same either way --- maritacag reads po4a's own configuration file and writes what po4a writes --- so this is the toolchain swap alone: the po4a invocations become maritacag, meta.txt drops the po4a external and declares maritacag as an internal dependency. See maritacag(7TODOs) for the fleetwide plan and what it was held to. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01BMowJCogxLWcMdVYYhbLpH
* Write definition lists the way adoc(5) doesEuAndreh46 hours2-18/+18
| | | | | | | | | | | | | | | | | The page makes a definition list a term line --- ":: term" at the head of the line, like every other block construct --- and a mid-line "::" ordinary text. These pages were written in the trailing "term::" form, which is AsciiDoc's and which the page replaced to remove a footgun: prose reading "the a :: b thing" parsed as a definition. The rendering does not change, except where it was wrong. The trailing form folded an indented continuation into the term, so a term's bold ran on over its own definition and, in a few pages, the definition's first line came out after its second. Those read correctly now. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_015bWfjj7PP24iF5MqFHmdeC
* Carry the pages every repository carriesEuAndreh2 days11-1/+485
| | | | | | | | | | | | | | | | | | | | | | The eight English section pages were missing, and with them the root CHANGELOG.adoc and TODOs.adoc: what changed between two releases and what is known to be left are not things a reader can work out from the tree. 7README, 7CHANGELOG and 7TODOs are symlinks to the root documents, as they are everywhere else. 0 links the rest, 7tutorial writes one page start to finish, 7recipes has the tasks that come after that, and 7why says why the site is built this way. 3 is a reference page for a library, and a website has none; it says so, and exists because a reader who knows where to look in one repository should know where to look in all of them. README.adoc gains the manpage title and NAME section the 7README symlink needs to render, its prose unchanged. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01KxLpaNQThKfMG3ecCJptP9
* Name the i18n stamp a sentinelEuAndreh2 days3-12/+12
| | | | | | | | | Every other file of its kind here is a sentinel, and .sentinel is what the suffix rules and the .gitignore already spell. One outlier called .stamp meant two names for the one idea. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01KxLpaNQThKfMG3ecCJptP9
* style.css: Keep the numbers still by taking them out of the scrollEuAndreh4 days1-16/+39
| | | | | | | | | | | | | | | | | | The numbers left with the code because they were inside the box that scrolls. Pinning them there was tried first and taken out: nothing uncovers them, but a scroll draws the two out of step for a frame and the code is seen crossing them. The answer is that only the code should scroll. That needs the cell holding it to be allowed to be narrower than what it holds, and a table is free to ignore being told so --- Firefox does, and the block goes back to not containing its own lines. A row laid out as a flex line is not free to ignore it: min-width there is honoured, the code gets a box smaller than its content, and the numbers beside it are not in that box at all. Nothing to pin, so nothing to fall behind. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01KxLpaNQThKfMG3ecCJptP9
* style.css: Let the numbers scroll with the codeEuAndreh4 days1-16/+13
| | | | | | | | | | | | | | | | | | | | | Pinning them was wrong twice over. Nothing covers them: at rest the cell's background reaches exactly to where the code begins --- painting the cell shows it does --- but a scroll draws the two out of step for a frame, and what is seen crossing the numbers is the code arriving before they have moved. A background cannot fix a repaint. Constraining the cell instead, so that only the code scrolls and the numbers sit outside the box entirely, needs a max-width on a table cell. That is a hint a browser may ignore, and Firefox ignores it: the table grows back to its longest line and the block stops containing them again, which was the bug this all started from. So the box scrolls, numbers and all. They leave the view when the code is scrolled far enough, which is the price of not lying about where they are. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01KxLpaNQThKfMG3ecCJptP9
* style.css: Collapse the listing table so the numbers hold stillEuAndreh4 days1-0/+9
| | | | | | | | | | | | | | | | | Pinning the first cell to the left edge moved it, and the code could be seen sliding through a strip beside it. Both are the same thing: the table that holds the numbers and the code was left to the browser's default of separate borders, so its cells stand two pixels apart. The first one's natural place is that two pixels in, which is what it jumped from; the gap between them is what the code showed through. Collapsed, the numbers sit flush against the code, and the pinned cell is raised so it is the code that passes under it rather than the other way about. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01KxLpaNQThKfMG3ecCJptP9
* style.css: Keep a long line inside the box that frames itEuAndreh4 days1-0/+16
| | | | | | | | | | | | | | | | | | | | | A code block wider than the column ran straight past its own border: the line it was too long for kept going to the edge of the page and past it, over the margin and out of the block it was supposed to be in. "pre { overflow: auto }" was already there and could not help. The line numbers sit in a table cell beside the code, and a table grows to fit what it holds, so the pre was never narrower than its longest line and so never had anything to scroll. The box scrolls instead, and the numbers are pinned so they stay where they are while the code moves under them. Seen on en/pastebin/2021/06/22/curl-wget.html, whose cloc tables rule off with eighty-odd dashes; it was there for any line past the column's width. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01KxLpaNQThKfMG3ecCJptP9
* style.css: Take the indent from the nestingEuAndreh4 days1-30/+25
| | | | | | | | | | | | | | | mkwb writes a reply inside what it answers now, so the indent is one margin a level rather than nine rules counting depth, and each reply's rail stacks with its parents' --- which is the thread view the flat list could only approximate with a single rule. On a narrow screen the margin goes and the rails carry it alone: at depth 7 that is 273px of text on a 390px phone against 133px if the desktop indent were kept, and against 350px and no nesting at all, which is what was there before. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01KxLpaNQThKfMG3ecCJptP9
* style.css: Keep a reply's nesting on a narrow screenEuAndreh4 days1-1/+21
| | | | | | | | | | | | | | Below 40rem every message was pushed flush left, so a thread arrived as a flat list and nothing said what answered what. It was pushed there for a reason: this site's threads reach depth 8, and a rem a level leaves about 220px for the words on a 390px phone. A third of a rem a level costs 45px at the deepest and keeps every depth apart, with a rail down the left of each reply carrying the nesting that an offset that small cannot hold on its own. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01KxLpaNQThKfMG3ecCJptP9
* mEuAndreh4 days1-4/+5
|
* mEuAndreh4 days1-2/+2
|
* Regenerate deps.mk: read the comments onceEuAndreh5 days2-3/+14
| | | | | | | | | | | | | mkwb grew a commentsdata action that reads every comment there is into one corpus, and a comments -d that reads the corpus rather than the sources. The pages wait on the corpus now; the corpus waits on the sources and on src/global.json, which it is read from. src/comments.data is built, so .gitignore takes it and clean removes it. The rendered site is unchanged. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01KxLpaNQThKfMG3ecCJptP9
* mEuAndreh5 days2-0/+0
|
* Regenerate deps.mk: a front page waits for its sortdataEuAndreh5 days1-2/+2
| | | | | | | | | | mkwb now names each article's .sortdata among the prerequisites of the language front page that sorts by it. Without them the page could be built before the data existed, which is what broke the guix build of this site. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01KxLpaNQThKfMG3ecCJptP9
* mEuAndreh5 days98-2407/+8669
|
* src/static.conf ($discussions_url_prefix): Fix typo in addressEuAndreh2026-06-111-1/+1
|
* src/content/: Add placeholder symlinks representing server mappingsEuAndreh2026-06-113-0/+3
| | | | | | * src/content/b/: CGI server folder; * src/content/git/: CGit, and later gistatic repository serving; * src/content/live/: self-hosted live scaffolding.
* Makefile: delete extraneous files when installingEuAndreh2026-06-111-2/+2
| | | | * Makefile (install): Add the --delete flag to the rsync(1) call.
* Makefile: Rename "check-unit-symlinks" -> "check-unit-links-symlinks"EuAndreh2025-05-051-2/+2
|
* Makefile: Fix missing test dependenciesEuAndreh2025-05-051-1/+2
|
* Makefile: Only write the public key when we have it locallyEuAndreh2025-05-051-1/+1
|
* Makefile: Fix dependency tracking of $(captured-assets)EuAndreh2025-05-0411-72/+96
| | | | | Since I can't get deterministic outputs out of mktorrent(1), change torrents from $(captured-assets) to $(dynamic-contents).
* Makefile: Turn "i18n.sentinel" into a standalone "i18n" virtual targetEuAndreh2025-05-044-20/+5
|
* mkdeps.sh: Include all translated files in po4a.inEuAndreh2025-05-022-1/+4
|
* Makefile: move empty symlink dirs to src/linkonly-dirs.txtEuAndreh2025-05-012-5/+6
|
* Support multiple src/headers.txt linksEuAndreh2025-05-0118-16/+347
|
* deps.mk: Update to include PDF rulesEuAndreh2025-05-011-0/+5
|
* Support multiple names for "categories" fileEuAndreh2025-05-0138-47/+136
|
* mkdeps.sh: Fixup indentationEuAndreh2025-05-011-6/+7
|
* .gitignore: Remove extra unneeded excludesEuAndreh2025-05-011-4/+0
|
* TODOs.md: ShrinkEuAndreh2025-04-301-163/+1
|
* Makefile: Add test for valid key expiration dateEuAndreh2025-04-301-1/+13
|
* Makefile: Add "de" to security.txtEuAndreh2025-04-301-1/+1
|
* src/content/en/slide/: Update to WIP content format of eslaides(1)EuAndreh2025-04-302-410/+263
|
* Makefile: Build slide PDFs with shiny new eslaides(1)EuAndreh2025-04-307-3/+32
|
* src/content/en/slide/: Move existing slide files to appropriate locationEuAndreh2025-04-302-30/+2
|
* rm src/content/pt/2020-08-12-nome-de-arquivo-com-timestamp-simplificado.mdEuAndreh2025-04-301-45/+0
|
* src/content/pt/hea/categorias.adoc: Adiciona com tradução e funcionamento ↵EuAndreh2025-04-3018-34/+81
| | | | parcial
* po/po4a.cfg: Set addendum charsetEuAndreh2025-04-301-1/+1
|
* Makefile: Include call to po4a(1) in buildEuAndreh2025-04-3012-58/+224
|
* src/content/en/: Unpluralize collection namesEuAndreh2025-04-3076-789/+789
|
* Makefile: No need to remove non-generated *.mo filesEuAndreh2025-04-301-1/+0
|
* mkdeps.sh: Support multiple languagesEuAndreh2025-04-3014-89/+137
|