Files
mesh-catalog/modules/xterm
jschoubben f178aab641
mesh/delivery-group group fix/1656-xterm-config rejected: a member's own check failed
mesh/merge-gate waits for its group's composed check
mesh/repo-check head f178aab641dc merged into trunk 3259765d46bc beside mesh-controller#420@69a67876 — fail: its merge-check.sh failed: files asking for a …
mesh/delivery superseded: a newer head of the same pull request
Make every xterm resource a config value with today's value as default; tools read the rendered resources (issue 1656)
2026-10-21 12:51:40 +02:00
..

xterm

The terminal as a module (novox/hq ADR 0208, research 026, to-be 42 phase 2, step 5).

  • Claims node-terminal-emulator and serves its verb open.
  • Requires x11-display. In a Wayland session, xwayland would provide it.
  • Package xterm.
  • Environment (ADR 0203): TERMINAL=xterm. i3's $mod+Return runs i3-sensible-terminal, which starts whatever $TERMINAL names, so the window manager no longer names the terminal.
  • X resources, contributed to the xresources slot normal and placed by xorg in its resources file. It owns no file of its own.

The resources

They are those both workstations ran, with three changes:

  • face: JetBrainsMono Nerd Font 12, replacing Hack (research 026/04);
  • scope: every resource is under XTerm*. Today they were *faceName, *background and so on, which reached every Xt program. XTerm* also outranks a *name resource of yours, so the old ~/.Xresources.d/xterm cannot win over them while it is still merged;
  • scrollback: saveLines 10000 instead of 2000.

The palette (background, foreground and the sixteen colours) is today's, unchanged. So are the clipboard keys: Ctrl+Shift+C copies to the clipboard and Ctrl+Shift+V pastes from it.

Every one of these values is a config value (ADR 0348; issue 1656) with today's value as its default: face, size (the predefined font-size, 6 to 72), save-lines, term-name, render-font, bold-mode, always-bold-mode, allow-bold-fonts, background, foreground, color0 to color15 (each #rrggbb), and the two clipboard bindings copy-binding and paste-binding. files/xresources-normal holds only ${config:<key>} placeholders, so a machine changes its font size through mesh-config. The manifest test holds the file to the keys, and the file filled with the defaults to the text every machine had before. The tools keep no copy of the values: xterm_font and xterm_colours read the XTerm* lines of the rendered resources file xorg writes (~/.config/xorg/xresources) as the module's value, and say so when it is not there.

Tools

tool what
node-terminal-emulator.open d a terminal in the session: the login shell, or a command run through it ($SHELL -lc), in a directory (the home by default), with an optional title, and hold to keep it open. It starts as a transient unit of the account's service manager (systemd-run --user), so it outlives the call and every runtime restart
xterm_font r/a the face and size in force beside the module's value (from the rendered resources), and the installed font they resolve to (fc-match); set face or size for terminals opened from now on. Only installed faces are accepted
xterm_colours r background, foreground, cursor and the sixteen colours as #rrggbb, each beside the module's value from the rendered resources

What it leaves found

~/.Xresources.d/xterm, and the #include of it in ~/.Xresources.

The one-off migration

Delete ~/.Xresources.d/xterm and its #include line in ~/.Xresources once xterm is assigned (see xorg's README for the rest of that file). Until then they are merged after the mesh's. Being *-scoped, they lose to this module's XTerm* values, and still reach every other Xt program.

What changes when it is assigned

g14 shanks
package none (xterm present) the same
xorg's resources file gains this module's resources the same
environment gains TERMINAL=xterm the same
running terminals nothing. The resources are merged at the next login the same
next login new terminals in JetBrains Mono, with 10000 lines of scrollback the same. The desktop has a hand-copied build of the face until fonts installs the package

Blockers

None. It needs xorg assigned for x11-display, and fonts for the face. Without fonts, fontconfig picks the nearest installed face, and xterm_font says which one in resolves_to.