Files
mesh-catalog/modules/xterm/cmd/xterm-tools/main.go
T
jochen e4abc6eb88 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.
2026-10-04 13:21:47 +02:00

69 lines
2.4 KiB
Go

// 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),
},
}
}