Commit Graph

17751 Commits

Author SHA1 Message Date
Mitchell Hashimoto
ffe015ee55 terminal: bitmap allocator marks free chunks with zero bits 2026-09-03 09:10:17 -07:00
Mitchell Hashimoto
09ff85b2ac macOS: fix find previous action when search is focused (#14131)
Typo found by @lrytz.
2026-09-03 08:38:09 -07:00
Mitchell Hashimoto
3cca3e0b95 macOS: follow up cascading fix for #14118 (#14132)
Didn't respect the comment above. Sorry for the back&forth changes 🫪
2026-09-03 08:38:00 -07:00
Lukas
e8936b8969 macOS: follow up cascading fix for #14118
Didn't respect the comment above before when reverting and testing hidden title 🫪
2026-09-03 09:22:36 +02:00
Lukas
e347482fba macOS: fix find previous action when search is focused 2026-09-03 08:13:21 +02:00
Mitchell Hashimoto
31bdcd5a79 terminal: don't touch me! keep the page pool free list unobtrusive (#14130)
This replaces the `std.heap.MemoryPool` used for page buffers with a
custom pool called `UntouchedPool`. This keeps its free list in a side
array and never reads/writes items until `create()`. This means that
demand-driven allocations (like mmaped pages) don't incur physical costs
until they're actually used.

The standard `std.heap.MemoryPool` uses an intrusive linked list for its
items which causes every item to be touched, which forces a full page-in
of memory.

It turns out we also had a lot of assertions and logic to work around
this in various ways (size of rows, asserting we overwrite the free list
entry, etc.) that we can now remove because of this.

For an 80x24 terminal on macOS (16 KB pages):

| Per terminal                 | Before   | After    |
|------------------------------|----------|----------|
| Page-list memory dirty       | 128 KiB  | 48 KiB   |
| Process phys_footprint delta | 143 KiB  | 62 KiB   |
| Page-list virtual size       | 2208 KiB | 1600 KiB |

The remaining 48 KB is the active page, because we sprinkle metadata
around the page which forces every page to be paged in. I'm going to
follow this up with some work trying to move all our metadata to the
front of the page so we only page one in until the rest is needed, but
not sure if its achievable.

Micro-benchmarks on the pool show that its twice the speed (slower) to
create/free due to the side list, but in an actual `+terminal-stream`
benchmark churning through pages, there is no measurable difference. I
think its a good trade.
2026-09-02 21:12:14 -07:00
Mitchell Hashimoto
e01e75bbb2 terminal: don't touch me! keep the page pool free list unobtrusive
This replaces the `std.heap.MemoryPool` used for page buffers with
a custom pool called `UntouchedPool`. This keeps its free list in a side
array and never reads/writes items until `create()`. This means that
demand-driven allocations (like mmaped pages) don't incur physical costs
until they're actually used.

The standard `std.heap.MemoryPool` uses an intrusive linked list for
its items which causes every item to be touched, which forces a full
page-in of memory.

It turns out we also had a lot of assertions and logic to work around
this in various ways (size of rows, asserting we overwrite the free
list entry, etc.) that we can now remove because of this.

For an 80x24 terminal on macOS (16 KB pages):

| Per terminal                 | Before   | After    |
|------------------------------|----------|----------|
| Page-list memory dirty       | 128 KiB  | 48 KiB   |
| Process phys_footprint delta | 143 KiB  | 62 KiB   |
| Page-list virtual size       | 2208 KiB | 1600 KiB |

The remaining 48 KB is the active page, because we sprinkle metadata
around the page which forces every page to be paged in. I'm going to
follow this up with some work trying to move all our metadata to the
front of the page so we only page one in until the rest is needed,
but not sure if its achievable.

Micro-benchmarks on the pool show that its twice the speed (slower) to
create/free due to the side list, but in an actual `+terminal-stream`
benchmark churning through pages, there is no measurable difference. I
think its a good trade.
2026-09-02 20:52:40 -07:00
Mitchell Hashimoto
600003455a surface: restore application mouse shape after modifier overrides (#14128)
This fixes a regression of 9a6469743 introduced in 6e8ed4e8b.

With this fix the mouse pointer will be restored to the previous (which
could have be set to something else via OSC22), not a hardcoded .text or
.default.

It also will change the cursor to a text selection if shift is held even
without mouse tracking, I think this is the expected behavior when a
cursor is set via OSC22. (Kitty additionaly, once you start selecting
changes to text (I-beam), this would be a follow-up if we desire to
behave like kitty with OSC22 pointers).
2026-09-02 20:14:44 -07:00
Chris Marchesi
0fb6d29404 SurfaceMouse: simplify keyToMouseShape
keyToMouseShape was initially designed with more of a transition table
model in mind to handle key presses/overrides based on very specific
cursor states. This never materialized, so I think it's safe to just
simply the process of handling overrides and/or passing along the
current cursor state from the terminal in the event of key presses.

Also removed a test that is essentially a duplicate of one before it now
(returning current surface shape in the event of no overrides).
2026-09-02 19:03:24 -07:00
Jesse Miller
3a766ccf50 surface: show .text (i-beam) while shift is held without mouse tracking
I think this is the expected behavoir when a custom OSC22 pointer is set. Once
shift is released it will return to mouse_shape (whatever the pointer
was before shit held).
2026-09-02 14:43:20 -06:00
Jesse Miller
6674aa3ba8 surface: update keyToMouseShape tests to expect mouse_shape
Update the tests to expect the mouse_shape back, not the hardcoded
.default or .text
2026-09-02 14:41:32 -06:00
Jesse Miller
5dfb672986 surface: restore mouse_shape when modifier overrides end
hard-coded .default & .text overrode a previously set OSC22 pointer
shape, this was a regression introduced in 6e8ed4e8b.
2026-09-02 14:39:46 -06:00
Mitchell Hashimoto
349f026087 os/open: consume the newline when draining opener stderr (#14125)
Fixes the runaway-thread bug reported in #14100 (vouched there).

`openThread` drains the spawned opener's stderr with
`takeDelimiterExclusive('\n')`. That function tosses only the exclusive
length, so the `'\n'` is never consumed. Once the child writes one line
to stderr, every subsequent call returns an empty slice without
advancing the stream: the `while (true)` loop spins forever — one pinned
core per affected `open()`, logging empty `os-open: open stderr=`
warnings at tens of thousands of messages per second for the lifetime of
the process — and `exe.wait()` is never reached, so the child is never
reaped.

This change reads inclusively (`takeDelimiterInclusive`, which does
consume the delimiter) and trims the `'\n'` for logging.

Observed in the wild embedding libghostty on macOS: several days of
uptime accumulated six leaked opener threads at ~70% of a core each
(~4.4 cores), from six link clicks whose `/usr/bin/open` wrote to
stderr. After the fix, the same workload shows zero `os-open` log
traffic and no leaked threads.

Repro without the fix: open a link whose handler writes to stderr (e.g.
an OSC 8 link with an unknown scheme), then watch a core pin and `log
stream --predicate 'subsystem == "com.mitchellh.ghostty"'` flood.

**AI disclosure** (per `AI_POLICY.md`): the bug was diagnosed and this
patch drafted with Claude Code (thread sampling, log analysis, and
reading the Zig 0.16 `std.Io.Reader` source to confirm
`takeDelimiterExclusive`/`takeDelimiterInclusive` toss semantics). I
reviewed the analysis and the change, understand both, and verified the
fix in a production build of the embedding app.
2026-09-02 10:27:42 -07:00
trag1c
e212b73cda Update mk localization for v1.4 (#14088)
Addressing #13766 for mk.
2026-09-02 18:57:57 +02:00
trag1c
372d6914b8 i18n: complete eu translation (#14095) 2026-09-02 18:51:00 +02:00
Johannes Zillmann
3b8141fbd8 os/open: consume the newline when draining opener stderr
takeDelimiterExclusive never consumes the delimiter: it tosses only the
exclusive length, so the '\n' stays buffered. Once the spawned opener
writes a single line to stderr, every subsequent call returns an empty
slice without advancing the stream, and openThread's loop spins forever
- one pinned core per affected open(), logging empty
"open stderr=" warnings at tens of thousands of messages per second for
the lifetime of the process. The thread also never reaches exe.wait(),
so the child is never reaped.

Read inclusively instead (which does consume the delimiter) and trim
the '\n' for logging.

Repro: open a link whose handler writes to stderr, e.g. an OSC 8 link
with an unknown scheme; watch a core disappear and the unified log
flood with "os-open: open stderr=".

See discussion #14100.
2026-09-02 10:45:08 -06:00
Mitchell Hashimoto
b0481f5aa7 terminal/search: resume a complete search when history is prepended (#14123)
A search that had already exhausted a screen's PageList never picked up
history pages prepended afterwards by incremental snapshot restore.

The lower level PageListSearch and so on could already handle this, we
just needed to let it know that more history existed to search. This
fixes that.
2026-09-02 08:22:53 -07:00
Mitchell Hashimoto
06178eeaad terminal/search: resume a complete search when history is prepended
A search that had already exhausted a screen's PageList never picked up
history pages prepended afterwards by incremental snapshot restore.

The lower level PageListSearch and so on could already handle this, we
just needed to let it know that more history existed to search. This
fixes that.
2026-09-02 08:11:48 -07:00
Mitchell Hashimoto
dd167cc464 build(deps): bump flatpak/flatpak-github-actions/flatpak-builder from 6.7 to 6.8 (#14115)
Bumps
[flatpak/flatpak-github-actions/flatpak-builder](https://github.com/flatpak/flatpak-github-actions)
from 6.7 to 6.8.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/flatpak/flatpak-github-actions/releases">flatpak/flatpak-github-actions/flatpak-builder's
releases</a>.</em></p>
<blockquote>
<h2>v6.8</h2>
<ul>
<li>Add saveCache flag</li>
<li>Add ability to override artifact name</li>
<li>Add buildDebugBundle flag</li>
<li>Update tests, documentation and dependencies</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="7932741660"><code>7932741</code></a>
Update all dependencies and regenerate dist</li>
<li><a
href="09e3d61868"><code>09e3d61</code></a>
readme: Don't specify setting cache key to github.sha (<a
href="https://redirect.github.com/flatpak/flatpak-github-actions/issues/261">#261</a>)</li>
<li><a
href="23e622281a"><code>23e6222</code></a>
Update runtime versions and docker images to latest</li>
<li><a
href="a3ab43f581"><code>a3ab43f</code></a>
flatpak-builder: Add saveCache flag</li>
<li><a
href="8e357b1556"><code>8e357b1</code></a>
ci: Remove unnecessary 'needs' from debug bundle job</li>
<li><a
href="26e19caa3a"><code>26e19ca</code></a>
ci: Add test for artifact-name</li>
<li><a
href="06d246b4d5"><code>06d246b</code></a>
flatpak-builder: Add ability to override artifact name</li>
<li><a
href="a262264771"><code>a262264</code></a>
ci: Add job that uses build-debug-bundle</li>
<li><a
href="f7362292df"><code>f736229</code></a>
flatpak-builder: Add buildDebugBundle flag</li>
<li><a
href="3b10954431"><code>3b10954</code></a>
ci: Update actions to versions using Node 24</li>
<li>See full diff in <a
href="401fe28a83...7932741660">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=flatpak/flatpak-github-actions/flatpak-builder&package-manager=github_actions&previous-version=6.7&new-version=6.8)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>
2026-09-02 08:10:25 -07:00
Mitchell Hashimoto
41004c6e22 build(deps): bump cachix/cachix-action from 5f2d7c5294214f71b873db4b969586b980625e71 to 38b082610b782e7e93e209c35fd730d399dee866 (#14116)
Bumps [cachix/cachix-action](https://github.com/cachix/cachix-action)
from 5f2d7c5294214f71b873db4b969586b980625e71 to
38b082610b782e7e93e209c35fd730d399dee866.
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/cachix/cachix-action/blob/master/RELEASE.md">cachix/cachix-action's
changelog</a>.</em></p>
<blockquote>
<h1>Release</h1>
<ol>
<li>
<p>Create and push a new tag:</p>
<pre lang="console"><code>git tag v17
git push origin v17
</code></pre>
</li>
<li>
<p>Wait for CI to pass.</p>
</li>
<li>
<p><a href="https://github.com/cachix/cachix-action/releases/new">Create
a release</a> for the new tag.</p>
</li>
<li>
<p>Move the major version tag to the latest release:</p>
<pre lang="console"><code>git tag -fa v17
git push origin v17 --force
</code></pre>
</li>
</ol>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="38b082610b"><code>38b0826</code></a>
dev: cleanup tests and dev files</li>
<li><a
href="0fe030c286"><code>0fe030c</code></a>
dist</li>
<li><a
href="792dafcfd0"><code>792dafc</code></a>
deps: bump dependencies</li>
<li><a
href="b690244fb5"><code>b690244</code></a>
ci: improve Nix compatibility test coverage</li>
<li><a
href="f495f3ffa2"><code>f495f3f</code></a>
Merge pull request <a
href="https://redirect.github.com/cachix/cachix-action/issues/217">#217</a>
from cachix/dependabot/github_actions/actions/checkout-7</li>
<li><a
href="9ee3c77d45"><code>9ee3c77</code></a>
chore(deps): bump actions/checkout from 6 to 7</li>
<li>See full diff in <a
href="5f2d7c5294...38b082610b">compare
view</a></li>
</ul>
</details>
<br />


Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>
2026-09-02 08:10:17 -07:00
Mitchell Hashimoto
084316aa82 macOS: fix cascading without affecting other new-window behaviours (#14118)
Found another regression when investigating #14107 after the last fix.
This regression appears on macOS 15 and 26 as well: **New window by
Shortcuts.app or service menu while a window is visible would create a
tab**.

It appears that for `new-window` triggered by Shortcuts/Service, a small
delay is needed to avoid automatic tabbing. It's either removing
`NSWindow.userTabbingPreference == .always` completely or adding another
"delay" for cascading. The latter should be better.

Also fixes another cascading for `macos-titlebar-style = hidden`
previously missed.
2026-09-02 08:10:02 -07:00
Mitchell Hashimoto
0c1909d09a bash: upgrade to bash-preexec 0.7.0 (#14120)
https://github.com/rcaloras/bash-preexec/releases/tag/0.7.0

We only source bash-preexec for bash < 4.4, so most of this release is
inert for us: the PS0 function-substitution hook (bash >= 5.3) and the
array PROMPT_COMMAND handling (bash >= 5.1) are never reached. What we
do pick up is the simpler install string, per-prompt re-adjustment of
PROMPT_COMMAND when something else modifies it, preservation of $? and
$_ on early returns, and the first-command preexec fix.

We continue to carry one local modification: __bp_adjust_histcontrol
stays disabled in the DEBUG trap hook so the user's HISTCONTROL is
respected (#2269). The original justification was that we didn't use the
preexec command argument, which is no longer true because we use it for
the window title. The comment now explains the current reasoning: our
bash >= 4.4 integration also uses `history 1` without adjusting
HISTCONTROL and accepts the same inaccuracy for space-prefixed commands,
so the legacy path is kept consistent with it.

*AI Usage:* I asked Fable 5.1 to run a verification pass after my manual
upgrade, and it confirmed the expected behavior.
2026-09-02 08:09:51 -07:00
Mitchell Hashimoto
fec89f2541 macOS: fix flickering when creating new tab with glass style (#14121)
A regression from #13985.


https://github.com/user-attachments/assets/cc7d76d7-7d86-4566-921c-a6531ce4087d




### AI Disclosure

Used Claude to investigate, I reviewed and tested.
2026-09-02 08:09:41 -07:00
Lukas
aafacb1cb9 macOS: fix flickering when creating new tab with glass style
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-02 16:18:30 +02:00
Mikel Larreategi
7520175021 more fixes 2026-09-02 15:46:06 +02:00
Jon Parise
5d6615fc43 bash: upgrade to bash-preexec 0.7.0
https://github.com/rcaloras/bash-preexec/releases/tag/0.7.0

We only source bash-preexec for bash < 4.4, so most of this release is
inert for us: the PS0 function-substitution hook (bash >= 5.3) and the
array PROMPT_COMMAND handling (bash >= 5.1) are never reached. What we
do pick up is the simpler install string, per-prompt re-adjustment of
PROMPT_COMMAND when something else modifies it, preservation of $? and
$_ on early returns, and the first-command preexec fix.

We continue to carry one local modification: __bp_adjust_histcontrol
stays disabled in the DEBUG trap hook so the user's HISTCONTROL is
respected (#2269). The original justification was that we didn't use
the preexec command argument, which is no longer true because we use it
for the window title. The comment now explains the current reasoning:
our bash >= 4.4 integration also uses `history 1` without adjusting
HISTCONTROL and accepts the same inaccuracy for space-prefixed commands,
so the legacy path is kept consistent with it.
2026-09-02 08:40:38 -04:00
Mikel Larreategi
9801423d01 update 2026-09-02 12:48:48 +02:00
Mikel Larreategi
4da902b3c9 update 2026-09-02 12:48:15 +02:00
Mikel Larreategi
f184d3ceb5 update 2026-09-02 12:43:54 +02:00
Mikel Larreategi
63039a688e update 2026-09-02 12:43:54 +02:00
Mikel Larreategi
f407316c84 Update po/eu.po
applying but both eskuma and eskuina are OK.

Co-authored-by: Julen Ruiz Aizpuru <julenx@gmail.com>
2026-09-02 12:43:21 +02:00
Mikel Larreategi
4ffec4bda7 Update po/eu.po
Co-authored-by: Julen Ruiz Aizpuru <julenx@gmail.com>
2026-09-02 12:42:23 +02:00
Mikel Larreategi
4c731b5d89 Update po/eu.po
Co-authored-by: Julen Ruiz Aizpuru <julenx@gmail.com>
2026-09-02 12:41:56 +02:00
Mikel Larreategi
6a5152651c Update po/eu.po
Co-authored-by: Julen Ruiz Aizpuru <julenx@gmail.com>
2026-09-02 12:37:43 +02:00
Mikel Larreategi
58aa59d0e1 Update po/eu.po
Co-authored-by: Julen Ruiz Aizpuru <julenx@gmail.com>
2026-09-02 12:37:30 +02:00
Lukas
a8b0855b63 macOS: fix cascading for HiddenTitlebarTerminalWindow 2026-09-02 11:16:41 +02:00
Lukas
310797df1d macOS: fix cascading without affecting other new-window behaviours 2026-09-02 11:05:48 +02:00
dependabot[bot]
7358067d1a build(deps): bump cachix/cachix-action
Bumps [cachix/cachix-action](https://github.com/cachix/cachix-action) from 5f2d7c5294214f71b873db4b969586b980625e71 to 38b082610b782e7e93e209c35fd730d399dee866.
- [Release notes](https://github.com/cachix/cachix-action/releases)
- [Changelog](https://github.com/cachix/cachix-action/blob/master/RELEASE.md)
- [Commits](5f2d7c5294...38b082610b)

---
updated-dependencies:
- dependency-name: cachix/cachix-action
  dependency-version: 38b082610b782e7e93e209c35fd730d399dee866
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-09-02 00:13:10 +00:00
dependabot[bot]
2ba75764f6 build(deps): bump flatpak/flatpak-github-actions/flatpak-builder
Bumps [flatpak/flatpak-github-actions/flatpak-builder](https://github.com/flatpak/flatpak-github-actions) from 6.7 to 6.8.
- [Release notes](https://github.com/flatpak/flatpak-github-actions/releases)
- [Commits](401fe28a83...7932741660)

---
updated-dependencies:
- dependency-name: flatpak/flatpak-github-actions/flatpak-builder
  dependency-version: '6.8'
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-09-02 00:12:59 +00:00
Chris Marchesi
501e7b5c1c pkg/fontconfig: update to 2.18.3
This updates our own bundled fontconfig (for static builds) to 2.18.3.

Note that fontconfig has changed their build process a bit since this
has been updated last; they are leaning on the Autoconf (and Meson as
they are now deprecating use of Autoconf) toolchain(s) to now generate a
number of headers that are a part of the build process.

Since servicing this dependency in an effort to keep the build pure Zig
is starting to get more complex, I've added some documentation on how to
actually get a snapshot of the fontconfig repository in a state where
files can be looked for and copied over as needed. Otherwise, we might
want to in the future consider removing this altogether and just rely on
system integrations.

Co-Authored-By: Jeffrey C. Ollie <jeff@ocjtech.us>
2026-09-01 15:57:51 -07:00
Mitchell Hashimoto
3c1ef5b32f macOS: clean up for #14106 (#14111)
I don't know what happened to me, but I didn't notice that I should
delete this🫪
2026-09-01 10:25:35 -07:00
Lukas
451e224c64 macOS: clean up for #14106 2026-09-01 19:18:44 +02:00
Mitchell Hashimoto
b7a680bc40 macOS: fix window cascading (#14106)
Regression from https://github.com/ghostty-org/ghostty/pull/13722
2026-09-01 10:12:07 -07:00
Mitchell Hashimoto
d2e2488ef7 build(deps): bump softprops/action-gh-release from 3.0.2 to 3.0.3 (#14098)
Bumps
[softprops/action-gh-release](https://github.com/softprops/action-gh-release)
from 3.0.2 to 3.0.3.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/softprops/action-gh-release/releases">softprops/action-gh-release's
releases</a>.</em></p>
<blockquote>
<h2>v3.0.3</h2>
<p><code>3.0.3</code> is a maintenance release with updated
dependencies. It also safely
classifies malformed GitHub API errors to avoid secondary failures (<a
href="https://redirect.github.com/softprops/action-gh-release/issues/822">#822</a>).</p>
<h2>What's Changed</h2>
<h3>Bug fixes 🐛</h3>
<ul>
<li>fix: safely classify GitHub API errors by <a
href="https://github.com/chenrui333"><code>@​chenrui333</code></a> in <a
href="https://redirect.github.com/softprops/action-gh-release/pull/822">softprops/action-gh-release#822</a></li>
</ul>
<h3>Other Changes 🔄</h3>
<ul>
<li>dependency updates</li>
</ul>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/softprops/action-gh-release/blob/master/CHANGELOG.md">softprops/action-gh-release's
changelog</a>.</em></p>
<blockquote>
<h2>3.0.3</h2>
<p><code>3.0.3</code> is a maintenance release with updated
dependencies. It also safely
classifies malformed GitHub API errors to avoid secondary failures (<a
href="https://redirect.github.com/softprops/action-gh-release/issues/822">#822</a>).</p>
<h2>What's Changed</h2>
<h3>Bug fixes 🐛</h3>
<ul>
<li>fix: safely classify GitHub API errors by <a
href="https://github.com/chenrui333"><code>@​chenrui333</code></a> in <a
href="https://redirect.github.com/softprops/action-gh-release/pull/822">softprops/action-gh-release#822</a></li>
</ul>
<h3>Other Changes 🔄</h3>
<ul>
<li>dependency updates</li>
</ul>
<h2>3.0.2</h2>
<p><code>3.0.2</code> is a patch release focused on release reliability
and compatibility. It
reuses existing draft releases when publishing prereleases, supports
replacing
release assets on Gitea, hardens streamed asset uploads, and provides
clearer
release-creation diagnostics. It also includes TypeScript, coverage, and
tooling
maintenance merged since <code>3.0.1</code>.</p>
<p>This release fixes <a
href="https://redirect.github.com/softprops/action-gh-release/issues/795">#795</a>,
<a
href="https://redirect.github.com/softprops/action-gh-release/issues/438">#438</a>,
and <a
href="https://redirect.github.com/softprops/action-gh-release/issues/803">#803</a>.
The upload transport hardening covers the
historical failure reported in <a
href="https://redirect.github.com/softprops/action-gh-release/issues/790">#790</a>,
although current hosted Node 24 runners did
not reproduce it naturally. The diagnostics work is related to <a
href="https://redirect.github.com/softprops/action-gh-release/issues/786">#786</a>
and does not
claim a reproducible release-creation fix.</p>
<h2>What's Changed</h2>
<h3>Exciting New Features 🎉</h3>
<ul>
<li>feat: improve release error reporting and test coverage by <a
href="https://github.com/chenrui333"><code>@​chenrui333</code></a> in <a
href="https://redirect.github.com/softprops/action-gh-release/pull/813">softprops/action-gh-release#813</a></li>
</ul>
<h3>Bug fixes 🐛</h3>
<ul>
<li>fix: publish existing draft releases as prereleases by <a
href="https://github.com/godfengliang"><code>@​godfengliang</code></a>
in <a
href="https://redirect.github.com/softprops/action-gh-release/pull/801">softprops/action-gh-release#801</a></li>
<li>fix: upload small checksum assets reliably by <a
href="https://github.com/chenrui333"><code>@​chenrui333</code></a> in <a
href="https://redirect.github.com/softprops/action-gh-release/pull/815">softprops/action-gh-release#815</a></li>
<li>fix: replace existing release assets on Gitea by <a
href="https://github.com/chenrui333"><code>@​chenrui333</code></a> in <a
href="https://redirect.github.com/softprops/action-gh-release/pull/816">softprops/action-gh-release#816</a></li>
<li>fix: clarify release creation 404 errors by <a
href="https://github.com/chenrui333"><code>@​chenrui333</code></a> in <a
href="https://redirect.github.com/softprops/action-gh-release/pull/817">softprops/action-gh-release#817</a></li>
</ul>
<h3>Other Changes 🔄</h3>
<ul>
<li>chore(deps): upgrade TypeScript to 7 by <a
href="https://github.com/chenrui333"><code>@​chenrui333</code></a> in <a
href="https://redirect.github.com/softprops/action-gh-release/pull/812">softprops/action-gh-release#812</a></li>
<li>chore(deps): remove unused TypeScript tooling by <a
href="https://github.com/chenrui333"><code>@​chenrui333</code></a> in <a
href="https://redirect.github.com/softprops/action-gh-release/pull/814">softprops/action-gh-release#814</a></li>
<li>dependency, Node 24 pin, and CI maintenance merged since
<code>3.0.1</code></li>
</ul>
<h2>3.0.1</h2>
<ul>
<li>maintenance release with updated dependencies</li>
</ul>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="efb35369e0"><code>efb3536</code></a>
release 3.0.3 (<a
href="https://redirect.github.com/softprops/action-gh-release/issues/840">#840</a>)</li>
<li><a
href="6441963a75"><code>6441963</code></a>
chore(deps): bump the npm group with 2 updates (<a
href="https://redirect.github.com/softprops/action-gh-release/issues/839">#839</a>)</li>
<li><a
href="e5ee6bc58a"><code>e5ee6bc</code></a>
chore(deps): bump esbuild from 0.28.1 to 0.28.2 in the npm group (<a
href="https://redirect.github.com/softprops/action-gh-release/issues/837">#837</a>)</li>
<li><a
href="d1e66170d3"><code>d1e6617</code></a>
chore(deps): bump undici from 6.27.0 to 6.28.0 (<a
href="https://redirect.github.com/softprops/action-gh-release/issues/831">#831</a>)</li>
<li><a
href="64037519ba"><code>6403751</code></a>
chore(deps): bump the npm group with 2 updates (<a
href="https://redirect.github.com/softprops/action-gh-release/issues/835">#835</a>)</li>
<li><a
href="7c7184b687"><code>7c7184b</code></a>
chore(deps): bump postcss from 8.5.19 to 8.5.25 (<a
href="https://redirect.github.com/softprops/action-gh-release/issues/833">#833</a>)</li>
<li><a
href="0f3f0d2943"><code>0f3f0d2</code></a>
chore(deps): bump brace-expansion from 5.0.8 to 5.0.9 (<a
href="https://redirect.github.com/softprops/action-gh-release/issues/832">#832</a>)</li>
<li><a
href="77fb938f2f"><code>77fb938</code></a>
chore(deps): bump prettier from 3.9.5 to 3.9.6 in the npm group (<a
href="https://redirect.github.com/softprops/action-gh-release/issues/830">#830</a>)</li>
<li><a
href="5a6f51711c"><code>5a6f517</code></a>
chore(deps): bump brace-expansion from 5.0.7 to 5.0.8 (<a
href="https://redirect.github.com/softprops/action-gh-release/issues/828">#828</a>)</li>
<li><a
href="a3c91c98f8"><code>a3c91c9</code></a>
chore(deps): bump the github-actions group with 2 updates (<a
href="https://redirect.github.com/softprops/action-gh-release/issues/825">#825</a>)</li>
<li>Additional commits viewable in <a
href="3d0d9888cb...efb35369e0">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=softprops/action-gh-release&package-manager=github_actions&previous-version=3.0.2&new-version=3.0.3)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>
2026-09-01 10:11:55 -07:00
Lukas
d4a5ff58b6 macOS: fix window cascading 2026-09-01 16:56:28 +02:00
ghostty-vouch[bot]
20abdb50a6 Update VOUCHED list (#14101)
Triggered by [discussion
comment](https://github.com/ghostty-org/ghostty/discussions/14100#discussioncomment-18229353)
from @jcollie.

Vouch: @jzillmann

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-09-01 06:55:46 +00:00
dependabot[bot]
38c984e676 build(deps): bump softprops/action-gh-release from 3.0.2 to 3.0.3
Bumps [softprops/action-gh-release](https://github.com/softprops/action-gh-release) from 3.0.2 to 3.0.3.
- [Release notes](https://github.com/softprops/action-gh-release/releases)
- [Changelog](https://github.com/softprops/action-gh-release/blob/master/CHANGELOG.md)
- [Commits](3d0d9888cb...efb35369e0)

---
updated-dependencies:
- dependency-name: softprops/action-gh-release
  dependency-version: 3.0.3
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-09-01 00:20:45 +00:00
kat
81681158b1 Add Serbian translation (#13842)
## Summary
- Adds Serbian translations for both Cyrillic (`sr`) and Latin
(`sr@latin`) scripts, registered in `src/os/i18n_locales.zig` and
`CODEOWNERS`.
- `po/sr@latin.po` is generated from `po/sr.po` with `msgfilter
recode-sr-latin` and should not be translated by hand.
- Replaces the closed #13030; strings are rebased onto current `main`.

Cc @slowdub for a review.

EDIT: AI disclosure: I used Cursor (Grok 4.6) for mechanical repo work
only, not for writing the Serbian translations. The agent fetched
ghostty-org/ghostty, branched from current main, ran msgmerge on
po/sr.po against the template, generated po/sr@latin.po with msgfilter
recode-sr-latin, registered sr / sr@latin in src/os/i18n_locales.zig and
CODEOWNERS, rebased my three commits onto later main, pushed the branch,
and opened this PR (I had intended to open the PR myself, s***** thing
ignored my instructions). I translated and reviewed sr.po and the Latin
file is a recode of that catalog, not a separate translation since
Serbian Cyrillic can be perfectly transcoded to the Latin script via
[recode-sr-latin](https://linux.die.net/man/1/recode-sr-latin).
2026-08-31 21:23:47 +00:00
Mitchell Hashimoto
4b51f521d4 libghostty: add terminal search API (#14097)
This exposes the terminal search API through libghostty C and Zig APIs.

This was previously available through the Zig APIs but forced our
threading model. I've now extracted the full terminal search state to a
new `terminal.search.TerminalSearch` structure so threading isn't
forced. The C API is completely new.

## Example (C)

```c
GhosttySearch search;
ghostty_search_new(NULL, &search, terminal);

GhosttyString needle = { (const uint8_t *)"error", 5 };
ghostty_search_set(search, GHOSTTY_SEARCH_OPT_NEEDLE, &needle);
ghostty_search_run(search);

// Find bar chrome: "k of n"
size_t total, idx;
ghostty_search_get(search, GHOSTTY_SEARCH_DATA_TOTAL_MATCHES, &total);

// Enter: select the next match (wraps, scrolls the viewport if needed)
ghostty_search_set(search, GHOSTTY_SEARCH_OPT_SELECT_NEXT, NULL);
ghostty_search_get(search, GHOSTTY_SEARCH_DATA_SELECTED_INDEX, &idx);

ghostty_search_free(search);
```
2026-08-31 14:23:38 -07:00
Mitchell Hashimoto
76d9fcefef libghostty: set the search needle via ghostty_search_set, drop GhosttySearchOptions 2026-08-31 14:08:07 -07:00