libghostty: add cpp-vt-stream example and fix C++ header compatibility

Add a cpp-vt-stream example that verifies libghostty headers compile
cleanly in C++ mode. The example is a simplified C++ port of
c-vt-stream.

The headers used the C idiom `typedef struct Foo* Foo` for opaque
handles, which is invalid in C++ because struct tags and typedefs
share the same namespace. Fix all 12 opaque handle typedefs across the
headers to use a distinct struct tag with an Impl suffix, e.g.
`typedef struct GhosttyTerminalImpl* GhosttyTerminal`. This is a
source-compatible change for existing C consumers since the struct
tags were never referenced directly.
This commit is contained in:
Mitchell Hashimoto
2026-03-28 18:36:23 -07:00
parent 741f1d129a
commit 1fcd80daab
13 changed files with 146 additions and 12 deletions

View File

@@ -0,0 +1,19 @@
# Example: VT Stream Processing in C++
This contains a simple example of how to use `ghostty_terminal_vt_write`
to parse and process VT sequences in C++. This is a simplified C++ port
of the `c-vt-stream` example that verifies libghostty compiles in C++
mode.
> [!IMPORTANT]
>
> **`libghostty` is a C library.** This example is only here so our CI
> verifies that the library can be built in used from C++ files.
## Usage
Run the program:
```shell-session
zig build run
```