xterm: the terminal holds node-terminal-emulator; its resources through xorg's slot (hq ADR 0208)

It requires x11-display, names itself in TERMINAL, and contributes its X resources
to the xresources slot normal: today's palette and clipboard keys, JetBrainsMono
Nerd Font, 10000 lines of scrollback, all scoped to XTerm* instead of every Xt
program. It owns no file.

The tools are the seat's open, which starts a terminal through the account's
service manager so it outlives the runtime's restarts, and font (in force, what
fontconfig resolves it to, set for new terminals) and colours.
This commit is contained in:
jochen
2026-10-04 13:21:47 +02:00
parent 34829e39fe
commit e4abc6eb88
12 changed files with 1750 additions and 0 deletions
+68
View File
@@ -0,0 +1,68 @@
// xterm's tools (novox/hq ADR 0208, research 026/05): node-terminal-emulator's verb `open`, and the
// module's own `font` and `colours`.
//
// A terminal opened by `open` is handed to the account's own service manager (internal/desktop's
// Launch), never left a child of the runtime, which the service manager empties at every restart.
package main
import (
"context"
"fmt"
"os"
"time"
stdio "git.novox.be/novox/mesh-sdk/go"
"xterm/internal/desktop"
)
func main() {
if err := stdio.Serve("", tools(xterm{d: desktop.Machine("i3", "sway")})); err != nil {
fmt.Fprintln(os.Stderr, err)
os.Exit(1)
}
}
func call(run func(ctx context.Context, a desktop.Args) (any, error)) func(map[string]any) (any, error) {
return func(args map[string]any) (any, error) {
ctx, cancel := context.WithTimeout(context.Background(), 25*time.Second)
defer cancel()
return run(ctx, desktop.Args(args))
}
}
func tools(x xterm) []stdio.Tool {
return []stdio.Tool{
{
Name: "node-terminal-emulator.open",
Description: "Open a terminal window in the operator's session: the account's login shell, or a command " +
"run through it, in a directory (the home when none is named). hold keeps the window open after " +
"the command ends. Answers the unit it runs as.",
Input: desktop.Schema(map[string]any{
"command": desktop.Str("what to run in it (optional; the login shell when absent)"),
"directory": desktop.Str("where it starts (optional; the account's home)"),
"title": desktop.Str("the window's title (optional)"),
"hold": desktop.Flag("keep the window open after the command ends (default false)"),
}),
Run: call(x.open),
},
{
Name: "xterm_font",
Description: "The face and size xterm uses, and the installed font that face resolves to. With face " +
"and/or size, set them for terminals opened from now on (an installed face only); the module's " +
"resources set the default again at the next login.",
Input: desktop.Schema(map[string]any{
"face": desktop.Str("a font family, as fc-list names it"),
"size": desktop.Num("points, 6 to 48"),
}),
Run: call(x.font),
},
{
Name: "xterm_colours",
Description: "xterm's colours in force: background, foreground, cursor and the sixteen palette entries, " +
"as #rrggbb, each beside the module's default and whether it differs.",
Input: desktop.Schema(map[string]any{}),
Run: call(x.colours),
},
}
}