Cleanup pass over items collected in docs/rewrite/INTEGRATION_TODO.md: - OSC 133 printf-q / percent decoders live once in ghostty_vt::string_encoding; ghostty-os re-exports them. - CursorStyle and clipboard codepoint map entries have one definition (ghostty-terminal); ghostty-config now depends on ghostty-terminal. - ActionKey::docs() trailing blank lines fixed at the source; cli's workaround removed (+list-actions --docs still byte-identical). - x11_color exposes names in original case; cli no longer re-parses rgb.txt. - One cgroup scope wait loop (ghostty_os::cgroup::wait_for_scope). - Flatpak passwd lookup implemented in ghostty-os via a local pty. - +version shows the rustc version captured at build time. Resources: dev builds find <workspace>/resources automatically (keeping Ghostty's sentinel-file detection and GHOSTTY_RESOURCES_DIR); scripts/gen-terminfo.sh (just terminfo) regenerates the compiled terminfo; `just install [PREFIX]` installs binary, share/ghostty, terminfo, desktop/D-Bus/systemd/metainfo files and icons. Test Plan: - cargo test for vt, os, config, input, cli - diff `+list-keybinds`, `+list-actions --docs`, `+show-config --default` against /usr/bin/ghostty
4.9 KiB
4.9 KiB
Cleanup V2
Resources (self-contained)
resources/mirrors Ghostty'sshare/ghosttyplus its siblingshare/terminfo:shell-integration/,themes/(463 files copied from the installed Ghostty 1.3.1,themes/LICENSE-iTerm2-Color-Schemes= MIT attribution, written from the upstream license; no upstream copy existed on this machine, check the copyright line if it matters) andterminfo/(compiledxterm-ghostty,g/ghostty).scripts/gen-terminfo.sh(just terminfo):cargo run -p ghostty-termio --example terminfoprints the source fromghostty_termio::terminfo::ghostty,tic -x -o resources/terminfo, then compares with the installed entry viainfocmp -x(identical).ghostty_os::resourcesdir: Ghostty's logic unchanged (exe-relativeshare/terminfo/...sentinel,GHOSTTY_RESOURCES_DIRfirst in release / fallback in debug). New last-resort (debug only): if the exe lives inside the workspace this crate was compiled in (env!("CARGO_MANIFEST_DIR")/../..) and<workspace>/resourceshas the same sentinel (terminfo/x/xterm-ghostty), use it.cargo runnow works without the env var.- Child
TERMINFO: Zig sets<resources>/../terminfo. Rust prefers<resources>/terminfowhen it holds the sentinel (dev layout), else the Zig sibling path. config::theme::openalready tookghostty_os::resources_dir(); the dev fallback makes it work in dev.just install [PREFIX](default /usr/local, honours DESTDIR): bin, share/ghostty/{shell-integration,themes}, share/terminfo, desktop file, D-Bus + systemd units, metainfo, kio/nautilus extensions, icons (templates vendored indist/linux,dist/icons, copied from ZIG). Not covered: shell completions, vim/bat syntax (no+fish/+vim-syntaxgenerators in the Rust cli). Install tested with DESTDIR on a fake binary.
Integration items
- vt
string_encodingis canonical;ghostty-osnow depends onghostty-vtand re-exports it (semantic_prompt'sDecodeError=string_encoding::Error). binding::set::EntryFormatterwas already implemented by an adapter inghostty-config/src/keybinds.rs.+list-keybinds(plain/--default/--docs) and+list-actions [--docs]are byte-identical to /usr/bin/ghostty.+show-config --default [--docs]differs only ingtk-opengl-debug(debug build, same as Zig).- config now depends on
ghostty-terminal(terminal dev-depends on config; cargo allows it).CursorStyleisghostty_terminal::cursor::Style(ConfigField impl in config/types_a.rs); termio'scursor_style_from_configwas removed.clipboard_codepoint_map::{Entry, Replacement}re-export terminal formatter types; core no longer converts. ActionKey::docs(): four docs had an extra trailing blank line (data fixed); cligenerate_plaintextnow callshelpgen_actions::generate_string.x11_color::names()(original case, deduped, file order); cli depends on ghostty-vt for it. Note: /usr/bin/ghostty+list-colorsoutput is truncated at 12297 bytes when redirected (oracle bug); the prefix is identical.- Pty/slave: Zig closes the slave in exactly two places (parent after successful spawn, error path) and
Pty.deinitonly runs after; RustExeccallsclose_slave()after success and drops the Pty on error, so lifetimes match. Documented in pty.rs. - Cgroup wait loop: single
ghostty_os::cgroup::{scope_matches, wait_for_scope}used by termioCommandhooks and apprt-gtkpre_exec/post_fork. - apprt-gtk stubs: in Zig 1.3.1
application.ziglists secure_input, close_all_windows, float_window, toggle_visibility under "Unimplemented" (log warn, return false) and the command palette hides them; the Rust stubs are therefore faithful and left as is.toggle_visibilityon Window exists only for the quick terminal (as Zig). secure_input is macOS-only. - tmux:
HandlerState.tmux_viewer: Option<Box<Viewer>>; DCS Enter creates, Exit drops, other notifications go toviewer.next,Command->write_req,Exitignored,WindowsTODO (same TODO in Zig). Test added. Renderer already setssearch_viewport_dirty. - passwd Flatpak: implemented in
ghostty-os(termio depends on os, so no termio Pty) with rustix openpt +FlatpakHostCommandrunning/bin/sh -l -c "getent passwd <name>"; parse of shell/home is unit tested, the host call itself is untestable here. +version:crates/ghostty-cli/build.rscapturesrustc --version(number only) intoGHOSTTY_RUSTC_VERSION.
Gate
fmt, clippy -D warnings clean for the workspace except ghostty-bench (another agent's new crate, 3 lints) and
ghostty-core integration tests under construction by V1 (lib/bin clean; fixed one is_multiple_of lint in core clipboard.rs).
Tests: all crates except core integration tests and bench pass (ghostty-core --lib 20). One run saw
ghostty-termio/tests/exec_integration large_write_with_backpressure_is_delivered_in_order fail (10s timeout) and pass on rerun: flaky/V1 area.