Commit Graph

21 Commits (libvt-kitty)

Author SHA1 Message Date
Mitchell Hashimoto 4c4e83784c
macos: new tab applescript command should not activate application
Related to #11457
2026-03-13 08:49:22 -07:00
Mitchell Hashimoto 233fb12081
macos: add AppleScript front window and focused terminal properties
This adds two new propeties to make it easy to get the frontmost (main)
window and the focused terminal within a tab. We already had a property
to get the selected tab of a tab group.
2026-03-08 20:00:21 -07:00
Mitchell Hashimoto ed9a6cb648
macos: implement the quit command 2026-03-07 07:29:40 -08:00
Mitchell Hashimoto 210b01ad60
macos: use direct parameters for object-targeting commands
Change split, focus, close, activate window, select tab, close tab, and
close window commands to accept their target object as a direct parameter
instead of a named parameter. This produces natural AppleScript syntax:

  activate window (window 1)
  close tab (tab 1 of window 1)
  split (terminal 1) direction right

instead of the awkward redundant form:

  activate window window (window 1)
  close tab tab (tab 1 of window 1)
  split terminal (terminal 1) direction right

The implementation moves command logic from NSScriptCommand subclasses
into responds-to handler methods on ScriptTerminal, ScriptWindow, and
ScriptTab, which is the standard Cocoa Scripting pattern for commands
whose direct parameter is an application class.
2026-03-07 07:23:59 -08:00
Mitchell Hashimoto 038ebef16c
address some PR feedback 2026-03-07 07:07:10 -08:00
Mitchell Hashimoto 259a41d503
macos: rename surface config working directory to not be ambiguous 2026-03-06 15:16:03 -08:00
Mitchell Hashimoto 221a1639af
swiftlint 2026-03-06 15:07:04 -08:00
Mitchell Hashimoto 25fa58143e
macos: add macos-applescript config 2026-03-06 15:04:20 -08:00
Mitchell Hashimoto 28b4e2495d
macos: Add AppleScript commands for window and tab control
Add scripting dictionary commands for activating windows, selecting tabs,
closing tabs, and closing windows.

Implement the corresponding Cocoa AppleScript command handlers and expose
minimal ScriptWindow/ScriptTab helpers needed to resolve live targets.

Verified by building Ghostty and running osascript commands against the
absolute Debug app path to exercise all four new commands.
2026-03-06 14:35:31 -08:00
Mitchell Hashimoto d271c8ccaa
macos: add new tab command 2026-03-06 12:55:43 -08:00
Mitchell Hashimoto 4d5de702f2
macos: allow split command surface configuration 2026-03-06 12:35:01 -08:00
Mitchell Hashimoto a3adeb0166
macos: use value-style AppleScript surface configuration records
Add a `surface configuration` record type to the scripting dictionary,
implement `new surface configuration` (with optional copy-from), and allow
`new window` to accept `with configuration`.
2026-03-06 12:16:40 -08:00
Mitchell Hashimoto 959c2f51ac
macos: add AppleScript new window command
Add a `new window` command to the scripting dictionary and wire it to
`NSApplication` so AppleScript can create Ghostty windows.

The command returns a scripting `window` object for the created window,
with a fallback to a direct wrapper when AppKit window ordering has not
yet refreshed in the current run loop.
2026-03-06 08:38:51 -08:00
Mitchell Hashimoto 122d0ecdfd
macos: expose name (title) on window, tab, and terminal via AppleScript
Add a `name` property (code `pnam`, cocoa key `title`) to the window, tab,
and terminal classes in the scripting definition. This follows the standard
Cocoa scripting convention where `name`/`pnam` maps to the `title` KVC key,
matching what Apple does in CocoaStandard.sdef for NSWindow.

Also fixes the pre-existing terminal `title` property which used a custom
four-char code (`Gttl`) that AppleScript could not resolve directly — only
via `properties of terminal`. All three classes now use the standard `pnam`
code so `name of window 1`, `name of tab 1 of window 1`, and
`name of terminal 1` all work correctly.
2026-03-06 08:13:49 -08:00
Mitchell Hashimoto e514035519
macos: add terminals element to window and tab AppleScript classes
Expose terminal surfaces as elements on both ScriptWindow and ScriptTab,
allowing AppleScript to enumerate terminals scoped to a specific window
or tab (e.g. `terminals of window 1`, `terminals of tab 1 of window 1`).

Changes:
- Add `<element type="terminal">` to window and tab classes in Ghostty.sdef
- Add `terminals` computed property and `valueInTerminalsWithUniqueID:`
  lookup to ScriptWindow (returns all surfaces across all tabs)
- Add `terminals` computed property and `valueInTerminalsWithUniqueID:`
  lookup to ScriptTab (returns surfaces within that tab)
2026-03-06 08:06:52 -08:00
Mitchell Hashimoto 341d8bdf75
macos: AppleScript windows/tabs
Add ScriptWindow and ScriptTab classes to expose window/tab hierarchy
to AppleScript, along with the corresponding sdef definitions.
2026-03-06 07:59:58 -08:00
Mitchell Hashimoto fd5ad1f574
macos: add AppleScript commands for text input, key, and mouse events
Add five new AppleScript commands to Ghostty.sdef mirroring the existing
App Intents for terminal input:

- `input text`: send text to a terminal as if pasted
- `send key`: simulate a keyboard event with optional action and modifiers
- `send mouse button`: send a mouse button press/release event
- `send mouse position`: send a mouse cursor position event
- `send mouse scroll`: send a scroll event with precision and momentum

A shared `input action` enumeration (press/release) is used by both key
and mouse button commands. Modifier keys are passed as a comma-separated
string parameter (shift, control, option, command).
2026-03-05 21:17:34 -08:00
Mitchell Hashimoto 1742aeda50
macos: add focus and close AppleScript commands for terminals
Add two new AppleScript commands to the scripting dictionary:

- `focus terminal <terminal>` — focuses the given terminal and brings
  its window to the front.
- `close terminal <terminal>` — closes the given terminal without a
  confirmation prompt.

Each command is implemented as an NSScriptCommand subclass following
the same pattern as the existing split command.
2026-03-05 20:59:03 -08:00
Mitchell Hashimoto ef669eeae7
macos: add AppleScript `split` command
Add a new `split` command to the AppleScript scripting dictionary that
splits a terminal in a given direction (right, left, down, up) and
returns the newly created terminal.

The command is exposed as:
  split terminal <terminal> direction <direction>

Also adds a `fourCharCode` String extension for converting four-character
ASCII strings to their FourCharCode (UInt32) representation.
2026-03-05 20:54:34 -08:00
Mitchell Hashimoto 52c0709d88
macos: add ability for agents to run debug app 2026-03-05 20:30:31 -08:00
Mitchell Hashimoto c90a782e59
macos: implement basic read-only applescript stuff 2026-03-05 20:10:01 -08:00