daemon: let an embedder give its sessions the xterm-felis terminfo entry #179
Labels
No labels
Area/ci
Area/cli
Area/client
Area/client-core
Area/daemon
Area/deps
Area/docs
Area/grid
Area/manual
Area/nix
Area/protocol
Area/pty
Area/render
Area/shaping
Area/skills
Area/transport
Area/vt
Compat/Breaking
Kind/Bug
Kind/Documentation
Kind/Enhancement
Kind/Feature
Kind/Performance
Kind/Security
Kind/Testing
perf-regression-accepted
Reviewed
Confirmed
Reviewed
Duplicate
Reviewed
Invalid
Reviewed
Won't Fix
Status
Blocked
Status
Need More Info
Status
Upstream
No milestone
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
felis-terminal/felis#179
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
A program that runs
felis_daemon::serve_unixinside its own executable spawns sessions withTERM=xterm-felis, but cannot give them thexterm-felisterminfo entry. The daemon prepends the directory shipped beside its executable (terminfo::shipped_dir:Contents/Resources/terminfoorshare/terminfo), and an embedder's executable ships none. On a machine without felis installed, programs in those sessions fail their terminfo lookups:lesswarns that the terminal is not fully functional, and line editors fall back.The source,
share/terminfo/felis.terminfo, lives outside every crate, so a dependent cannot reach it at build time. adroit, which now serves its sessions fromfelis_daemonin-process (adroit daemon), keeps a copy of the source, compiles it withtic -xinto its state directory at startup, and puts that directory first in each session'sTERMINFO_DIRS. The copy drifts whenever the entry changes upstream.GitHub mirror: https://github.com/felis-terminal/felis/issues/8
Direction
felis-daemonpackage and export it, e.g.pub const TERMINFO_SOURCE: &str = include_str!(…).include_str!of../../../share/…would not survivecargo publish(#160): the file has to be inside the package. Repointnix/compile-terminfo.sh, the package definitions, the macOS app bundling, and thedefault_term_matches_the_shipped_terminfo_entrytest at the new path.DaemonCapsfield naming the terminfo directory to prepend, defaulting toshipped_dir(). An embedder that compiles the entry somewhere of its own sets it, and the daemon handlesTERMINFO_DIRSexactly as it does for the shipped directory (terminfo::list_in), instead of the embedder rewriting each spawn's environment.ticat runtime is the embedder's choice of where to install, not felis's.docs/reference/terminal-identity.md(where the entry comes from for an embedder),docs/reference/workspace.mdif the move changes the tree it describes.Principle check