Files
ghostty-rs/docs/rewrite/notes/ghostty-config/files-a.md
T

1.9 KiB

ghostty-config: small files (fork A)

Ported (Zig -> Rust, in crates/ghostty-config/src): command.zig->command.rs, path.zig->path.rs, url.zig->url.rs, string.zig->string.rs, io.zig->io.rs, RepeatableStringMap.zig->repeatable_string_map.rs, ClipboardCodepointMap.zig->clipboard_codepoint_map.rs, theme.zig->theme.rs, edit.zig->edit.rs, file_load.zig->file_load.rs; config-template copied.

Tests: all Zig tests ported (command 9, path 9, string 10, io 3, repeatable_string_map 4, url regex 1 (80 cases + 10 no-match)); a handful of extra tests. 118 pass in a scratch crate (with a ghostty-os shim; real ghostty-os didn't compile at the time). clipboard_codepoint_map.zig and theme/edit/file_load have no Zig tests.

Deviations

  • No arenas: owned Strings. clone/equal = derive Clone/PartialEq (RepeatableStringMap has a manual order-insensitive PartialEq).
  • url.rs: REGEX is built with const_format::concatcp!. The pattern needs Oniguruma (variable-length lookbehind); onig is a dev-dependency used only by the test. The renderer/link code must use the onig crate (add it as a normal dependency there).
  • macOS app-support paths (file_load/edit) omitted.
  • theme.rs: Zig reads global_state.resources_dir.app(); here it's an explicit resources_dir: Option<&str> parameter (theme::open, LocationIterator::new). LocationIterator::next_location() (not next) to satisfy clippy.
  • Error text in diagnostics uses Rust io::Error Display instead of Zig error.Name.
  • Command::arg_iterator shell splitting is a hand-written equivalent of ArgIteratorGeneral(.{}).
  • Zig u21 codepoints are u32 (string.rs, clipboard_codepoint_map.rs).

TODO(integration)

  • clipboard_codepoint_map::Entry/Replacement mirror terminal/formatter.zig CodepointMap; swap for ghostty-terminal's.
  • Config::expand_paths should call Path::expand / RepeatablePath::expand(base, &mut diags).