Commit Graph

53 Commits

Author SHA1 Message Date
Mitchell Hashimoto
b867a0f59e terminal/snapshot: use lib.Enum enums where possible 2026-07-30 12:58:02 -07:00
Chris Marchesi
e8525c0fd9 Update to Zig 0.16.0
This commit represents the majority of the work necessary to upgrade
Ghostty to use Zig 0.16.0.

Key parts:

* In addition to its previous responsibilities, the global state now
  houses state for global I/O implementations and the process
  environment. It is now also utilized in the main application along
  with the C library. Where necessary, global state is isolated from key
  parts of the implementation (e.g., in libghostty subsystems), and it's
  expected that this list will grow.

* We currently manage our own C translation layer where necessary. In
  these cases, cImport has been removed in favor of the new external
  translate-c package. Due to fixes that have needed be made to properly
  translate the dependencies that were swapped out, as mentioned, we
  have had to backport fixes from the current translate-c package (and
  the upstream Arocc dependency). We will host this ourselves until Zig
  0.17.0 is released with these fixes.

* Where necessary (only a small number of cases), some stdlib code from
  0.15.2 (and even from 0.17.0) has been taken, adopted, and vendored in
  lib/compat.

Co-authored-by: Leah Amelia Chen <hi@pluie.me>
2026-07-21 12:35:05 -07:00
AJ Khullar
c488ccda66 terminal: correct OSC 72 doc comments for m, i, o, y, X, Y keys 2026-06-17 18:23:24 +08:00
AJ Khullar
a6132c18bf terminal: add doc comments to OSC 72 EventType and Option enums 2026-06-17 18:16:30 +08:00
AJ Khullar
dd6c09bcf8 terminal: clean up OSC 72 parser comments and add tests
Trims over-commented fields and enum variants to match the repo
baseline (kitty_clipboard_protocol style). Adds 11 tests covering
metadata/payload parsing, all EventType values, integer keys,
negative sentinels, case-sensitive key matching, and BEL terminator
recording. Removes the development walkthrough document.
2026-06-16 19:28:50 +08:00
AJ Khullar
91c87e2cf3 terminal: parse kitty drag and drop protocol (OSC 72)
Adds an OSC 72 parser following the kitty drag and drop protocol
specification. Parses metadata and payload into a Command.kitty_dnd_protocol
variant. Reassembly of chunked transfers and any action handling are
intentionally out of scope here; stream.zig logs the command as
unimplemented for now.

Includes a walkthrough document covering the design and each touched file.
2026-06-15 17:41:05 +08:00
Alex Bennett
97777cf5a3 fix: fix tests, change enum fields to lowercase 2026-06-07 23:55:47 +08:00
Alex Bennett
3263ce5122 terminal: support click_events=2 2026-06-07 23:01:53 +08:00
Mitchell Hashimoto
7801e97127 terminal: redo trailing state capture in OSC parser
Trailing state capture now is encapsulated in a struct `Capture` and all
parsers access the data via `p.capture.trailing()` rather than directly
from the writer.

This is primarily to prep for the OSC parser to be able to capture the
entire sequence (not just the trailing part) so we can setup libghostty
for fallback handlers so libghostty implementers can have custom OSC
behaviors.

But, it has the benefit of making our OSC parser much cleaner too.
2026-03-26 13:57:42 -07:00
Mitchell Hashimoto
f50aa90ced terminal: add lib.zig to centralize lib target and re-exports
Previously every file in the terminal package independently imported
build_options and ../lib/main.zig, then computed the same
lib_target constant. This was repetitive and meant each file needed
both imports just to get the target.

Introduce src/terminal/lib.zig which computes the target once and
re-exports the commonly used lib types (Enum, TaggedUnion, Struct,
String, checkGhosttyHEnum, structSizedFieldFits). All terminal
package files now import lib.zig and use lib.target instead of the
local lib_target constant, removing the per-file boilerplate.
2026-03-25 07:25:16 -07:00
Mitchell Hashimoto
8e6bf829a7 terminal/osc: don't export context/semantic prompts to libvt yet 2026-03-13 20:06:33 -07:00
Mitchell Hashimoto
0bdd3bb6b5 feat(vt): Parse UAPI OSC 3008 hierarchical context signalling (#11057)
Implements parsing for OSC 3008, which allows terminal emulators to keep
track of the stack of processes that have current control over the tty.
The implementation mirrors existing `semantic_prompt.zig` architecture
and natively maps UAPI definitions to Zig structures with lazy
evaluation for optional metadata.

Fixes #10900
2026-02-27 10:46:35 -08:00
Prakhar54-byte
eafdbaaada refactor: simplify Enum parse call and loop parsing logic 2026-02-27 22:58:08 +05:30
Prakhar54-byte
3e1004717b refactor: apply PR feedback
- Use `std.meta.stringToEnum` in ContextType and ExitStatus
- Ensure `parseInt` only accepts digits for pids
- Use `@tagName` for string representation in Field
- Rename `fields_raw` to `metadata`
- Rename `readField` to `readOption`
2026-02-27 22:20:42 +05:30
Prakhar54-byte
9da6588c16 feat(vt): Parse UAPI OSC 3008 hierarchical context signalling
Implements parsing for OSC 3008, which allows terminal emulators to keep track of the stack of processes that have current control over the tty. The implementation mirrors existing `semantic_prompt.zig` architecture and natively maps UAPI definitions to Zig structures with lazy evaluation for optional metadata.

Fixes #10900
2026-02-27 21:10:42 +05:30
Jeffrey C. Ollie
3b4e2bbcbe core: parse cmdline and cmdline_url semantic prompt options 2026-02-26 17:52:09 -06:00
Jeffrey C. Ollie
4eee1ac6a9 osc: parse OSC 5522 - Kitty clipboard protocol
This PR only adds support for parsing the OSCs. No support has been
added to DECRQM/DECRPM/DECSET/DECRST for mode 5522.
2026-02-03 13:30:05 -06:00
Mitchell Hashimoto
9ff9298707 terminal: parse OSC 133 cl values correctly 2026-02-02 09:01:01 -08:00
Mitchell Hashimoto
918c2934a3 terminal: add redraw=last for bash for OSC133 2026-01-31 15:26:14 -08:00
Mitchell Hashimoto
3fa6320478 terminal: handle fresh_line_new_prompt 2026-01-31 11:01:01 -08:00
Mitchell Hashimoto
c9e60b322b terminal: OSC133 options parse from raw string
This changes our OSC133 parser to parse options lazily. We do this for
multiple reasons:

1. Parsing all our options ahead of time balloons our required
   osc.Command tagged union type which has C ABI implications. Adding
   all supported options (including Kitty extensions) today already
   breaks our C ABI.

2. Invalid options are allowed by the specification and should be 
   explicitly ignored, so we don't need to validate options at all
   during parse time.

3. Semantic prompt markers don't need to be high throughput, so we
   can afford to do some extra work at processing time to gather
   the options. They're also rather short usually.
2026-01-24 13:48:31 -08:00
Mitchell Hashimoto
c98e3e6fc7 terminal/osc: rename the prompt2 file 2026-01-23 14:38:28 -08:00
Mitchell Hashimoto
afea12116d terminal/osc: Kitty extensions to semantic prompt options 2026-01-23 14:38:06 -08:00
Mitchell Hashimoto
d23722dbd7 terminal: remove old semantic prompt handling 2026-01-23 14:35:10 -08:00
Mitchell Hashimoto
6ce45fb65a terminal/osc: semantic prompt redraw option from Kitty 2026-01-23 14:19:43 -08:00
Mitchell Hashimoto
edafe86203 terminal/osc: semantic prompt is a struct not tagged union 2026-01-23 14:04:27 -08:00
Mitchell Hashimoto
a9e23c135f terminal/osc: semantic prompt 'D' 2026-01-23 13:56:29 -08:00
Mitchell Hashimoto
9d1282eb95 terminal/osc: semantic prompt 'C' 2026-01-23 13:44:34 -08:00
Mitchell Hashimoto
7421e78f1e terminal/osc: semantic prompt 'I' 2026-01-23 13:43:08 -08:00
Mitchell Hashimoto
fdc6a6b10a terminal/osc: semantic prompt 'B' 2026-01-23 13:39:33 -08:00
Mitchell Hashimoto
0d9216bb5a terminal/osc: semantic prompt 'N' 2026-01-23 13:37:34 -08:00
Mitchell Hashimoto
39c0f79b8d terminal/osc: semantic prompt 'P' 2026-01-23 13:35:16 -08:00
Mitchell Hashimoto
7968358234 terminal/osc: semantic prompt options 2026-01-23 13:26:45 -08:00
Mitchell Hashimoto
65c56c7c77 terminal/osc: add 'A' 2026-01-23 13:19:11 -08:00
Mitchell Hashimoto
d040c935e2 terminal/osc: boilerplate new OSC 133 parsing 2026-01-23 13:02:23 -08:00
Jeffrey C. Ollie
e1b82ff398 osc: parse iTerm2 OSC 1337 extensions
Add a framework for parsing iTerm2's OSC 1337 extensions. Implement
a couple (`Copy` and `CurrentDir`) that map easily onto existing OSC
commands.
2026-01-22 22:06:39 -06:00
Mitchell Hashimoto
fbc1e326d6 Introduce Tripwire to test errdefer and fix some found issues (#10401)
This adds a new single-file library called "Tripwire" in
`src/tripwire.zig`. This library helps inject failures around `try`
cases for the purpose of testing `errdefer`. It is fully optimized away
in non-test builds (even debug), turning into zero space and zero
assembly.

From this, I've verified (via unit tests w/ tripwire) and fixed a number
of errdefer issues:

* PageList init with non-standard pages that requires more than 1 page
can leak on allocation error on the 2nd+ loop
* Tabstop allocation failure on resize corrupts the internal state
(invalid cols)
* `Screen.selectionString` would leak memory on late allocation failures
* Screen search could leak memory on late allocation failures
* `SharedGrid.renderGlyph` in our font subsystem would corrupt the glyph
cache if failure occurred
* `SharedGrid.init` could leak memory if loading font metrics failed

In addition to the bugs found, there is now tripwire coverage around
more of our core and we should continue to add more. I've also added
significantly more explicit error sets as I found them.

**AI disclosure:** AI wrote some of the tests, but tripwire itself is
all handwritten and everything was reviewed.
2026-01-21 12:50:55 -08:00
Mitchell Hashimoto
82b10ae7af terminal: explicit error sets in Screen and ScreenSet 2026-01-21 11:34:59 -08:00
Jeffrey C. Ollie
9ee27d2697 OSC 9: Finish parsing all ConEmu OSCs
Adds support for parsing OSC 9;7, 9;8, 9;9, 9;10, 9;11, 9;12
2026-01-21 13:34:30 -06:00
Jeffrey C. Ollie
1daba40247 osc 133: handle bare keys with no '='
Fixes #10379
2026-01-19 10:59:00 -06:00
Qwerasd
4e5c1dcdc1 osc: fix bad indexing for empty kv in semantic prompt 2026-01-16 16:36:37 -05:00
Qwerasd
f89b6433c2 osc: add failing test for osc 133 parsing trailing ;
This actually causes a crash lol, bad indexing of a slice with `1..0`
because it's `key.len + 1 ..` and the length is `0`.
2026-01-16 16:29:59 -05:00
Leah Amelia Chen
916b99df7c terminal: parse kitty text sizing protocol (OSC 66), redux
#9845 redone to use the new OSC parser

Implements the VT side of #5563
2026-01-15 00:13:55 +08:00
Jeffrey C. Ollie
93b4b08b52 osc: refactor parsing helper functions into separate files
Following up on #9950, refactor the parsing helper functions into
separate files.
2026-01-08 23:07:57 -06:00
Jeffrey C. Ollie
f03344b1c6 osc: reorder osc tests and name them consistently 2025-10-05 19:49:21 -05:00
Mitchell Hashimoto
3afc8019d5 terminal: update parser to use new color parser and stream handler 2025-09-11 12:32:31 -07:00
Mitchell Hashimoto
67b7a5f267 terminal: osc 104/105 are more flexible on invalid index 2025-09-11 11:38:45 -07:00
Mitchell Hashimoto
03e2a8049e terminal: remove old color tests 2025-09-11 11:34:17 -07:00
Mitchell Hashimoto
4350804f0a terminal: osc 10-19 should use next function 2025-09-11 11:27:26 -07:00
Mitchell Hashimoto
83dd578cc5 terminal: osc 104/105 2025-09-11 11:20:54 -07:00