Ports ZIG/src/lib_vt.zig and terminal/c/* as crates/ghostty-vt-capi (cdylib + staticlib + rlib, soname libghostty-vt.so) implementing the unchanged include/ghostty/vt.h + vt/*.h ABI: OSC parser, SGR parser, key events and key encoding, paste safety, colors, result codes - all 38 native symbols, plus the ghostty_wasm_* helpers on wasm32. Verification: - tests/abi.rs generates a C probe from the headers, compiled with cc, that checks sizeof/alignof/offsetof of every struct/union, every enumerator and #define against Rust, and links every declared symbol; nm -D exports equal the declared functions. - Ghostty's example/c-vt* programs compile unchanged against the Rust library (shared and static) and produce the expected output. - The wasm32 build runs Ghostty's wasm-key-encode/wasm-sgr example scripts unmodified under node (upstream's wasm-sgr tag table is stale vs sgr.h; a regenerated copy checks full output). Test Plan: - cargo test -p ghostty-vt-capi (22 unit + 2 ABI + 5 C + 3 wasm tests)
37 lines
969 B
C
37 lines
969 B
C
#include <stddef.h>
|
|
#include <stdio.h>
|
|
#include <string.h>
|
|
#include <ghostty/vt.h>
|
|
|
|
int main() {
|
|
GhosttyOscParser parser;
|
|
if (ghostty_osc_new(NULL, &parser) != GHOSTTY_SUCCESS) {
|
|
return 1;
|
|
}
|
|
|
|
// Setup change window title command to change the title to "hello"
|
|
ghostty_osc_next(parser, '0');
|
|
ghostty_osc_next(parser, ';');
|
|
const char *title = "hello";
|
|
for (size_t i = 0; i < strlen(title); i++) {
|
|
ghostty_osc_next(parser, title[i]);
|
|
}
|
|
|
|
// End parsing and get command
|
|
GhosttyOscCommand command = ghostty_osc_end(parser, 0);
|
|
|
|
// Get and print command type
|
|
GhosttyOscCommandType type = ghostty_osc_command_type(command);
|
|
printf("Command type: %d\n", type);
|
|
|
|
// Extract and print the title
|
|
if (ghostty_osc_command_data(command, GHOSTTY_OSC_DATA_CHANGE_WINDOW_TITLE_STR, &title)) {
|
|
printf("Extracted title: %s\n", title);
|
|
} else {
|
|
printf("Failed to extract title\n");
|
|
}
|
|
|
|
ghostty_osc_free(parser);
|
|
return 0;
|
|
}
|